OCD builds immutable images from Git and deploys them to your servers.
For an operator-owned Docker host, copy example.connected-panel.json, add
its pinned SSH details, then run:
bun run bootstrap path/to/connected-panel.jsonNo cloud API is required. Optional managed provisioning is available by
copying example.panel.json and running:
OCD_PROVISIONER_TOKEN=... bun run bootstrap panel.jsonCreate the printed DNS record, then open the panel and create your admin
account. Omit domain to use a generated nip.io address instead.
Apps use .ocd-deploy.json; stacks use ocd-stack.json.
ocd login https://panel.example.com
ocd registry login registry.example.com/team --username=registry-user
ocd source login git.example.com --username=git-user # private Git only
ocd doctor
ocd deploy .ocd-deploy.json
ocd deploy stack ocd-stack.jsonocd logs my-app --tail=200
ocd ssh my-app -i
ocd cp my-app:/tmp/export.tar.gz ./export.tar.gzbun install
bun run dev
bun run test
bun run build:cliDocumentation · Contributing · MIT License
Runtime variables are explicit in each app manifest:
{
"environment": "production",
"env": {
"NODE_ENV": "production",
"DATABASE_URL": { "from": "environment.DATABASE_URL" }
}
}Create stored values with ocd envs set or ocd envs generate before deploying.
Deployment resolves references without modifying the environment. Stack members
can reference apps.database.outputs.URL; these references infer startup order.
Only mapped user variables are injected, alongside platform and storage variables.