Skip to content
The Vesper star at the top of its path across the night sky.

Preview environments that set on time.

Vesper gives each pull request its own preview on Kubernetes, a running copy of your application with its own URL, isolated from the others, and deleted when its time to live ends.

The life of a preview in four steps. 1, you ask for a preview: a PreviewEnvironment names an image, a port and a TTL; phase Pending. 2, Vesper runs it, isolated, in a namespace of its own; once the pods run, it is Ready with its URL. 3, its TTL runs out, 24 hours by default, and vesperctl extend buys time; phase Expired. 4, nothing is left: Vesper deletes the namespace and everything in it.

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:

Terminal window
kind create cluster --name vesper
kubectl apply -f https://github.com/eventide-oss/vesper/releases/download/v0.1.0/install.yaml
vesperctl create demo --image nginxinc/nginx-unprivileged:1.27-alpine --port 8080 --ttl 2h
vesperctl get demo

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.

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.

Concept of the comment Vesper will post on a pull request in v0.2: your preview is ready, with its status, a link to visit it, its image and its expiry.

Concept of a multi-service preview in v0.3: a webhook from the pull request reaches Vesper, which creates a namespace where web calls api and api calls a seeded postgres, inside a default-deny NetworkPolicy, comments the status of each component, and deletes the whole stack with the pull request.