A private, running environment for every branch.
Your pipeline builds the image. SnapEnvs runs it as a private preview with its own databases, then removes it when its lifetime ends.
node ci/snapenvs.mjs deploy --wait
Your pipeline builds and pushes the image. This step submits its digest and waits.
{
"environmentId": "5c1d2e8a-0b7f-4e36-9a41-d2f0c6b7e913",
"state": "RUNNING",
Observed from the running containers, never assumed.
"generation": 1,
"previewUrl": "https://brave-otter-7k2d.preview.example.com"
A private address for this branch. Reviewers get in by single-use invitation.
}
What every environment gets
- Your pipeline
- GitHub Actions or GitLab CI builds the image. A release is accepted from the pipeline's own OIDC identity or an expiring project token.
- Its own add-ons
- PostgreSQL, MySQL or MongoDB with a dedicated volume. Redis or Valkey. RabbitMQ or Kafka. Isolated per environment.
- Private review
- Reviewers get in through single-use invitations that expire after an hour and can be revoked at once.
- A full lifecycle
- Deploy a new revision, sleep, wake, extend or destroy. Every environment has a lifetime and is removed when it ends.
- Evidence on failure
- A failed deploy is checked against its own logs, state and events, and every finding cites what it read. Nothing is changed for you.