Isolated by default
Each preview gets a namespace with the restricted Pod Security profile, a quota and a default-deny NetworkPolicy. A namespace is a soft boundary: the security model says what it protects against.

Vesper does not build images: your CI builds one per pull request, and a
PreviewEnvironment points at it. The operator, running in your cluster,
does the rest; vesperctl follows it from your terminal.
On a local kind cluster, once
vesperctl is installed:
kind create cluster --name vesperkubectl apply -f https://github.com/eventide-oss/vesper/releases/download/v0.1.0/install.yamlvesperctl create demo --image nginxinc/nginx-unprivileged:1.27-alpine --port 8080 --ttl 2hvesperctl get demoIsolated by default
Each preview gets a namespace with the restricted Pod Security profile, a quota and a default-deny NetworkPolicy. A namespace is a soft boundary: the security model says what it protects against.
Gone on time
A TTL from 1 minute to 7 days. When it ends, the namespace and everything in it is deleted. No orphans.
Easy to follow
vesperctl get shows the phase, the URL, the expiry, the conditions and
the events. Prometheus metrics included.
Verifiable
Releases ship checksums and build provenance attestations; the image runs as a non-root user and is pinned by digest.
Today you create a preview yourself, and it runs one application. Next, the preview of a pull request opens and closes on its own, and runs the whole stack. These are concepts: the GitHub integration is planned for v0.2, the multi-service previews for v0.3.

