Turning them on
- Console
- slipway.yaml
Open the project’s Settings → Previews and choose a generation mode.
A preview spawns when a PR opens, or when a draft flips to ready, against a repo and branch
one of your projects tracks. Each new commit redeploys the changed service. The PR gets a
status comment with the links, and the commit gets a check that turns green when the
preview is healthy.
Skipping a preview
Add[skip preview] to the PR title, or the slipway-preview-skip label. This works in
every mode.
Skipping only prevents creation. It never destroys a preview that already exists. A PR that
was skipped, or opened while the mode is manual, gets its preview later if you add the
trigger label or title tag.
Bot-authored PRs from Dependabot and Renovate never spawn previews, so dependency bumps do
not burn compute.
Two tiers
The project-level setting wins. Per-service settings are consulted only while it isoff.
What a preview contains
A project preview is a full copy by default: every enabled service in the project, databases included, deployed together into an isolated namespace. Disks seed from the default snapshot when one is set, so a preview’s database starts with real data rather than empty. See Disks. Where a full copy is too heavy, use service previews instead — or keep project previews on and choose per service what they replicate.Choosing what replicates
Settings → Previews → Replication lists every service with a per-service choice:
Pointing previews at a live service saves the compute and startup time of replicating
something PRs rarely change — a heavyweight database, a shared search index, a slow-to-warm
model server.
Three things to know:
- The PR’s own services always deploy. A preview exists to run the PR’s code, so services from the repo the PR targets replicate regardless of this setting.
- A live database is the production database. Code running in the preview reads and writes real data. Prefer replication (with a seeded snapshot) for anything a PR might migrate or mutate destructively, and use preview values to point elsewhere when needed.
- The choice applies at spawn. Changing it affects previews created from then on; running previews keep the shape they were born with.
URLs
Every public service in a preview gets its own hashed hostname, shaped likemyproject-web-3f2a1b9c.<your-zone>. The hash is stable for the life of the PR, so the
link in the PR comment keeps working across pushes.
Preview responses carry X-Robots-Tag: noindex, so crawlers never index them.
Environment
Preview containers get extra variables so an app can tell it is running in a preview, which is useful for disabling email, pointing at sandbox APIs or tagging telemetry.IS_PULL_REQUEST is always set, so code can branch on it without guarding against it being
absent.
Preview values
Previews inherit the project’s variables and secrets. For anything that must not point at production, set a preview value in Settings → Previews. Previews resolve it instead of the production value, and production is untouched. A service can also carry preview-onlyenv, cpu and memory in the spec:
slipway.yaml
Lifecycle
You can destroy a preview by hand from the Previews tab. Pushes do not resurrect it, but
recreating it from the tab or reopening the PR does.