orgo.ai/v1 document, written in YAML or JSON. This page is the field-by-field reference. The canonical machine-readable contract is the JSON Schema at GET /api/template-schema. Point your editor at it for autocomplete and inline validation.
Two forms
Templates accept a canonical form and a shorter sugar form. Both normalize to the same document and the samedigest.
Sugar → canonical
A canonical block always wins: if a document sets both
hardware.cpu and top-level cpu, the hardware value is used and the sugar key is ignored. ram and disk accept 4gb, 4g, or a bare 4; a sub-gigabyte size such as 512mb resolves to 0, which is the same as omitting it.
Top-level fields
Every field except
api_version and template is optional, so the smallest valid template is a name, a version, and the API version.
template
Identity and provenance.name and version are required.
hardware
The computer’s resource shape. Every field is optional; omit one and the platform default applies. A Create computer request overrides these at launch.vars and interpolation
vars are compile-time strings, interpolated across the document before build.
${var.X}resolves fromvars.${env.X}resolves from a literalenvvalue (not secret-backed ones).$${var.X}escapes to a literal${var.X}.- An unknown reference is a validation error with the exact field path.
env
Environment variables written to the computer. Keys must beUPPER_SNAKE_CASE. Each value is a literal string, or a {secret: <name>} reference resolved from the launching user’s vault at create time. A value cannot be both.
{secret: …} reference to a name you never declared under secrets is a validation error (unknown_reference). See Secrets for the full secret-injection model.
build
Package and command steps run once when baking the golden snapshot, before app installs. This is where dependencies get pre-installed so launches are instant.files
Files materialized into the computer. Each entry sets exactly one offrom or inline. Setting both, or neither, is a validation error.
apps
An app bundles an install step with the long-running services, health checks, and ports it needs. Services are managed by supervisord, so they start at boot and respawn on crash.name is required and must be unique kebab-case. requires lists other app names this one depends on, and data lists persistent data paths, validated the same way as files[].to.
services
health
A polled liveness check. Afterretries consecutive failures, on_fail runs. This is the per-app watchdog. type is required; the other fields are optional.
every defaults to 30s, timeout to 5s, and retries to 3. All durations are Go duration strings (30s, 2m, 1h). on_fail is one of restart_service:<name>, restart_vm, alert, or none.
ports
terminal
Pre-staged tmux sessions, created detached at first boot. Orgo’s browser terminal attaches to them by name.name is required and must be unique.
Sessions are not auto-restarted. For a process that must respawn, use an app service instead.
hooks
Shell that runs at lifecycle points. Each runs withset -e; the default timeout is 10 minutes per hook.
telemetry
egress_policy
Per-computer network filtering, enforced on the host. Bothmode and rules are required when the block is present.
*.github.com also covers subdomains. The VNC and Desktop API paths are always reachable. Omit the block entirely for no filtering.
streaming
Outbound RTMP(S) streams of the desktop.name, url, and key are required; url must start with rtmp:// or rtmps://.
streaming is parsed and validated today; the runtime streamer is rolling out. Track status in the JSON Schema.Next steps
Secrets
The full secret-injection model.
Triggers
Sources, actions, and dedup.
Examples
Annotated real templates.
Publish API
Ship a template over HTTP.