services:. This page documents every field, grouped by what
it does. For a one-row-each lookup, see the field index.
slipway.yaml
Identity
name
Required. The service name, matching^[a-z][a-z0-9-]{0,30}$.
Siblings reach the service by this name, so it must be unique across the whole project, not
only within one spec. slipway refuses to deploy a service whose name another source
already publishes.
type
Optional. One ofweb, worker, cron or static. If you omit it, the service is a
web service.
The type decides which other fields apply. See Service types.
enabled
Optional. Defaults to true. Setting it tofalse keeps the configuration and tears the
workload down on the next deploy, which is how you park a service without deleting it.
Source
A service either runs an image you already built, or builds from source. Declare one or the other, never both.image
Optional. A pullable image reference such asghcr.io/acme/api:1.2.
Mutually exclusive with every build field. Rejected on type: static, which has no
container.
The reference is resolved and pinned at deploy time, so pushing a new image to the same tag
does not redeploy anything. See Deploy from an image.
rootDir
Optional. The directory the build runs in, relative to the repository root. Defaults to. when the service builds.
dockerfilePath and publish are relative to it.
dockerfilePath
Optional. The Dockerfile to build, relative torootDir.
Mutually exclusive with runtime, because a language runtime generates its own Dockerfile.
Rejected on static.
dockerContext
Optional. Narrows the Docker build context belowrootDir, for when the Dockerfile
needs to see less than the whole directory. Rejected on static.
dockerTarget
Optional. The build stage to stop at, matching^[A-Za-z0-9][A-Za-z0-9_.-]*$. Empty
means the last stage.
Mutually exclusive with runtime. Rejected on static.
buildArgs
Optional. A map of build-time arguments. Values may carry${secret.*}, ${var.*} and ${service.*} references. Resolved values
are passed to the build as arguments and never appear on the build command line.
runtime
Optional. Eitherdocker, meaning build the committed Dockerfile, or a language
runtime: node, python, go, ruby, rust or elixir.
See Language runtimes.
runtimeVersion
Optional. Pins the language version, such as"22" or "3.12". Requires runtime, and
must be one that runtime offers.
If you omit it, slipway uses the runtime’s default, which moves up over time.
buildCommand
Optional. The build step a language runtime or a static site runs after installing dependencies, such asnpm run build.
The service’s env is available to it, and to the dependency install before it. A language
runtime passes every value as a BuildKit secret mounted on those steps, so next build can
inline NEXT_PUBLIC_* values and npm ci can read a registry token, without any of it being
written into the image. Changing a value rebuilds those steps. A committed Dockerfile
receives a value by declaring its name with ARG, or mounts it as a secret; see
how values reach the build.
This is not the start command. Use command for that.
Networking
ports
Optional,type: web only. The ports the container listens on.
slipway.yaml
public: true. A public
port gives the service a hostname at the edge; every other port is reachable by siblings
only.
Rejected on worker, cron and static.
prefix
Optional. The subdomain label the service is served at, matching^[a-z][a-z0-9-]{0,30}$. Defaults to the service name.
Requires a public surface, meaning a public port or a static site. Without one, validation
fails with prefix/domain need a public hostname.
Unique per zone across your organization.
domain
Optional. A zone your organization has claimed and verified. Same requirements asprefix.
prefix and domain sit on the service, not inside a port entry. See
Custom domains.
auth
Optional. Requires visitors to sign in before they reach the service.slipway.yaml
token asks for the shared token generated under the project’s Settings → Access.
members asks the visitor to sign in with GitHub or GitLab and belong to the upstream
account your organization is connected to. Turn on either or both; a visitor gets in
through whichever they can satisfy. Both default to false.
Requires a public port. Rejected on worker, cron and static.
The service’s Auth tab in the console overrides this block for that project, in both
directions. See Access controls.
Configuration
env
Optional. A map of environment variables. Values may carry${secret.*}, ${var.*} and
${service.*} references, resolved at deploy time.
slipway.yaml
env applies to the build only, and anything referenced ends up
inside the built files.
command
Optional. A list overriding the image’s entrypoint.slipway.yaml
args
Optional. A list overriding the image’s arguments. Rejected on static.workDir
Optional. An absolute path used as the working directory. Rejected on static.files
Optional. A list of"<repo-path>:<container-path>" entries, mounting a file from the
repository into the container.
slipway.yaml
.., be absolute,
or start with ~. The target must be absolute. Each file is limited to about 1 MB.
Rejected on static.
dependsOn
Optional. A list of sibling service names this service waits for.slipway.yaml
cron or
static. The dependency graph must be acyclic; a cycle is reported as a → b → a.
It waits for readiness, not for correctness. A database accepting connections before its
migrations have run still counts as ready.
Rejected on cron and static.
preDeploy
Optional. A command run as a one-shot job in the freshly built image, with the service’s resolved environment, before the rollout.slipway.yaml
maxShutdownDelaySeconds
Optional. How long the container gets to exit after receivingSIGTERM, from 1 to 300.
0 means the platform default of 30 seconds.
Use it for a worker that must finish an in-flight task. Rejected on cron and static.
schedule
Required ontype: cron, rejected everywhere else. A five-field cron expression in UTC.
slipway.yaml
@daily.
Each run is a one-off job: it starts from the deployed image (or command), and when it
exits it is gone. You are billed for each run’s own duration. The first run happens at
the first slot after a deploy, never on the deploy itself. To run one immediately, use
Deploy → Run now on the service; it follows the same concurrencyPolicy as a slot.
A run in progress can be stopped from the service’s Scheduled runs list; it is recorded
as cancelled. Deploying a new version stops any run of the previous one, recorded as
cancelled with “replaced by a new deploy”, so a fix never leaves the broken build running.
Missed slots are not caught up: if slipway’s control plane was down across several slots,
only the most recent one runs when it is back. A schedule change takes effect on the next
deploy. These fields can also be edited on the service’s Settings tab.
timeout
Optional,type: cron only. How long one run may take, as a duration such as 30m or
2h. A run still going at the timeout is stopped and recorded as failed. Between 10s and
24h; the default is 1h.
slipway.yaml
concurrencyPolicy
Optional,type: cron only. What happens when a slot (or Run now) comes due while
a previous run is still going:
maxConcurrentRuns
Optional,concurrencyPolicy: allow only. How many runs may be going at once, from 1
to 10; the default is 10. A slot that finds this many running is skipped.
slipway.yaml
Health
healthCheckPath
Optional,type: web only. A path that must return 2xx before the service takes
traffic.
slipway.yaml
/, and the service must declare a port to probe. Mutually exclusive with
healthcheck.
The path is probed on the public port, or the first declared port. Keep it cheap: a check
that itself waits on a database fails the deploy whenever the database is slow.
healthcheck
Optional,web and worker. Full control over three probes.
slipway.yaml
Each also accepts
periodSeconds, timeoutSeconds, failureThreshold, successThreshold
and initialDelaySeconds.
Use a startup probe for a slow boot rather than stretching readiness. Rejected on cron
and static.
Compute
cpu
Optional. A number of cores (1, 0.5) or a millicore string ("500m"). Minimum
100m, in multiples of 50m. Defaults to 500m.
Rejected on static.
memory
Optional.512MB, 1GB, 512Mi or 1Gi. Minimum 128Mi, in multiples of 128Mi.
Defaults to 512Mi.
Decimal suffixes are normalised to binary. Rejected on static.
See CPU and memory.
replicas
Optional,web and worker. A fixed pod count from 0 to 20. Defaults to 1.
Mutually exclusive with scaling, and cannot exceed 1 on a service with a disk.
scaling
Optional,web and worker. Autoscaling between a floor and a ceiling.
slipway.yaml
min is 1 or more, max is at least min and at most 20, and the two targets are 0 to
100. If neither target is set, slipway uses a CPU target of 70.
See Scaling.
autoResize
Optional,web and worker. Grows the allocation under sustained pressure.
slipway.yaml
Storage
disk
Optional,web and worker. Persistent storage for this service.
slipway.yaml
mountPath is absolute and cannot be /. sizeGB is 1 to 1024.
One disk per service, no sharing, and a service with a disk runs a single pod. Rejected on
cron and static. See Disks.
Previews
previews
Optional,web and worker. Overrides applied only inside a
preview.
slipway.yaml
env is merged over the service’s env before resolution. Rejected on cron and static.
Static sites
publish, notFound, redirects and headers apply to type: static only. See
Static sites.
Related
Field index
Every field, one row each.
Examples
Worked specs for common shapes.