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.
proposalslistnoConfiguration recommendations, imported only from the production branch.
authobjectnoPublic-path suggestions for the app's access settings.

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. 1s–5m.
timeoutdurationnoPer-check timeout. Default 3s. 1s–5m.
retriesintnoFailures before unhealthy. Default 3. 1–20.
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.

auth.public_paths​

→ Public paths

Paths your repository asks to be reachable without an AppHaven login. This block is a suggestion and nothing more. It has no effect on what is served. Each entry appears in the app's Proposals section from the production branch and stays inactive until an administrator approves it and the branch next deploys. Prefer the general proposals section with explicit stable IDs for new recommendations.

auth:
public_paths:
- path: /api/*
reason: Partner REST API, authenticated by our own API keys
- path: /healthz
reason: Uptime probe
FieldTypeRequiredDescription
pathstringyesAn exact path (/healthz, or / for the root path only) or a prefix ending in /* (/api/*). Up to 128 characters.
reasonstringyesWhy the path needs to be open. Shown to the administrator deciding whether to add it.

A path starts with / and uses letters, digits, ., _, ~, -, and /. The only wildcard is a single trailing /*. Up to 10 entries; an eleventh is a validation error.

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 ${.

proposals​

Optional list of configuration recommendations. Each item requires id (1–64 lowercase letters, digits, underscores or hyphens, starting with a letter), type, typed value, and reason (1–1000 characters). At most 50 entries including compatibility public-path suggestions. IDs must be unique. The supported types, value schemas, examples, limits and decision lifecycle are in Change proposals.

Only the configured production branch is imported. Unknown operations and malformed recommendations are authoring/import errors, but do not block an otherwise valid workload deployment. Workload fields still receive strict deployment validation. Accepted settings live in the console; editing or removing a recommendation never changes them automatically.