Skip to main content
slipway.yaml describes the services your project runs and the databases they need.

Where the spec comes from

slipway resolves one spec per repository, in this order: A committed slipway.yaml wins unless you pin a Compose file, and a stored spec applies only when no committed file resolves at the spec path. Your repository stays the source of truth. slipway never writes a spec back to it and reads the file fresh on every push. The only thing you manage in the console is the secret and variable values your spec references.
For a monorepo, set a per-service spec path such as services/api/slipway.yaml and slipway resolves the spec from there. See Monorepos.

A minimal spec

slipway.yaml
One service, built from the Dockerfile at the repository root, served on port 3000 at its own hostname, live once /healthz returns 2xx.

A fuller one

slipway.yaml

Top-level fields

Everything else lives inside a service block. See Services.

autoDeploy

slipway.yaml
The committed file wins over the console toggle whenever it says something, and the change is recorded on the deploy that carried it, so a setting that appears to have reverted has a visible cause in the event log. Omit the field and the console toggle keeps whatever you set there.

previews

slipway.yaml
automatic spawns a preview for every qualifying PR, manual waits for the slipway-preview label or a [slipway preview] title tag, and off is the default. Like autoDeploy, the file wins over the console setting whenever it says something. Previews are a plan capability, so on a plan without them the setting is skipped rather than failing your push. See PR previews.

Validation

slipway checks your spec in two places. At parse time, on every push and whenever you add a repo to a project. This catches missing required fields, invalid service names, a service with both image and build fields or neither, two services claiming the same public hostname, and unknown keys. A typo such as enviroment: fails immediately with its line number, and nothing is built. At deploy time, once a deploy starts. Unverified custom domains, bad ${service.*} references, a managed database whose password secret is missing, and build, image-pull or health-check failures mark the deployment failed with the reason in the event log. Other missing ${secret.*} / ${var.*} references warn in the deploy log and leave the referencing key unset instead of failing — see Secrets and variables. See Troubleshooting for the errors you are most likely to hit.

Moving from the older shape

Earlier specs keyed services by name and nested build fields under build:. That shape no longer parses.
Top-level volumes: and predeploy: are gone as well. A service gets its own disk, and the migrations hook is preDeploy on the service that owns it. The parser names the replacement for each retired spelling, so a stale file reports what to write instead.

What slipway leaves out

Stability

The spec is version: 1. New fields are additive and optional, so a working slipway.yaml keeps working. A breaking change would land as version: 2.

Services

Every field of a service block.

Databases

Postgres, Redis, MySQL and ClickHouse in four lines.

Secrets and variables

Substitution syntax and where the values live.

Field index

Every field, one row each.