Skip to main content

Manifest reference

Every valid field of apphaven.yaml, on one page. For worked examples and explanations, see The manifest and the Configuration pages; anything not listed here is rejected by validation.

Top level

FieldTypeRequiredDescription
versionintnoManifest schema version. Currently 1 (the default).
servicesmap of name → serviceyesAt least one service.
volumesmap of name → volumenoVolumes. Required only if a service references one.

Service and volume names must match ^[a-zA-Z0-9][a-zA-Z0-9_\-]{0,63}$: 1–64 characters of letters, digits, _, and -, starting with a letter or digit. Use lowercase names.

services.<name>

Every service has a type, which decides its other fields:

FieldTypeRequiredDescription
typestringyescontainer or postgres.
depends_onlist of {service, condition}noStart ordering. Valid on every type.

type: container

Container services

FieldTypeRequiredDescription
imagestringconditionalRequired unless build is set. Any pullable image reference. With build, names the build result.
buildobjectconditionalBuild from source; see build. A container service declares image or build.
portslist of intnoPorts the service listens on, each 1–65535.
envmap<string, string>noEnvironment variables. Values may use references.
volumeslist of {name, mount_path}noVolume mounts; see mounts.
healthcheckobjectnoSee healthcheck.

build

FieldTypeRequiredDescription
dockerfilestringnoPath to the Dockerfile, relative to context. Default Dockerfile.
contextstringnoBuild context directory, relative to the repo root. Default ..
argsmap<string, string>noDocker build args. Values may use references.

Service volume mounts

FieldTypeRequiredDescription
nameidentifieryesA key of the top-level volumes map.
mount_pathstringyesAbsolute, canonical path inside the container: no .., . segments, trailing /, or //.

healthcheck

FieldTypeRequiredDescription
testlist of stringyes["CMD", ...] or ["CMD-SHELL", "<shell command>"]. Runs inside the container.
intervaldurationnoTime between checks. Default 10s. 1s5m.
timeoutdurationnoPer-check timeout. Default 3s. 1s5m.
retriesintnoFailures before unhealthy. Default 3. 120.
start_perioddurationnoGrace period before failures count. Default 0s. Up to 5m.

A duration is a positive whole number followed by s or m, e.g. 10s, 5m; start_period also accepts 0s.

type: postgres

Database

FieldTypeRequiredDescription
versionstringnoPostgreSQL major version. Supported: "17". Default "17".

version is the only field you set. image, ports, env, volumes, and healthcheck are managed by the platform and not accepted on a postgres service; storage comes from the deployment's storage budget. Up to four postgres services per app.

depends_on

Start order

FieldTypeRequiredDescription
serviceidentifieryesAnother service in this manifest. The dependency graph must be acyclic.
conditionstringnostarted (default) or healthy. healthy requires the target to have a healthcheck (managed databases have one built in).

volumes.<name>

Volumes

FieldTypeRequiredDescription
typestringyesephemeral or persistent.

Storage comes from the deployment's storage budget; there is no per-volume size.

Values in env

Connection references

env values and build.args are plain strings, and may contain references that are resolved when your app starts:

SyntaxMeaning
${service.<name>.<field>}A connection detail of a postgres service in this manifest. Fields: url, host, port, user, password, database.
$${Escapes a literal ${.