Skip to main content
The devhelm.yml file defines your entire monitoring configuration. Deploy it with devhelm deploy -f devhelm.yml.

Minimal example

Top-level structure

The file accepts version, defaults, moved, and ten resource sections. All section keys are camelCase. Every section is optional — include only what you need (but the file must contain at least one resource section):
The schema is strict: unknown top-level keys (and unknown keys inside any resource) are rejected at validate time.

version

The schema version. Currently "1" is the only supported value. The CLI warns on unrecognized versions but does not reject them. A config consisting of only version (no resource sections) is rejected with “Config has no resource definitions”.

defaults

Set default values that apply to all monitors unless overridden:
Defaults are applied with shallow per-field merge: if a monitor sets a field, the monitor value wins. Nested objects like incidentPolicy are replaced entirely, not deep-merged. A default incidentPolicy must be complete — triggerRules, confirmation, and recovery are all required whenever the block is present.

Resource sections

Each section is detailed on its own page:

Cross-references

Resources reference each other by name (or slug), not by ID. The CLI resolves names to IDs at deploy time:

Environment variable interpolation

Use ${VAR} syntax to inject environment variables into any string value:
With a default fallback:
Environment variables are resolved after YAML parsing, inside string values only — values containing YAML metacharacters can never alter document structure. If a required variable is missing (or set to the empty string), the CLI exits with an error listing all unresolved variables. Use $$ for a literal $, and ${VAR:-} to explicitly allow an empty value.
Because interpolation happens inside string values, ${VAR} only works in string fields (URLs, tokens, names). Numeric fields like frequencySeconds cannot be interpolated — frequencySeconds: ${FREQ:-60} fails validation with “Expected number, received string”. Vary numeric fields across environments with separate files instead.
Environment variable interpolation (${VAR}) is different from vault secrets. Variables are resolved from the shell environment at deploy time. Vault secrets are stored in DevHelm and referenced by key in auth blocks.

Multi-file configs

Pass multiple files with -f:
Or point to a directory (all *.yml and *.yaml files are loaded in sorted order):
Sections from all files are concatenated. Duplicate names within a resource type are a validation error (“names must be unique within each resource type”) — files must define disjoint resources; there is no override/last-wins merging. The defaults block is the one exception: later files’ defaults.monitors fields shallow-merge over earlier ones.

Full example

Next steps

Monitors in YAML

All monitor types, assertions, and incident policies.

Deploy workflow

Validate, plan, and deploy lifecycle.