OCD builds immutable images from Git and deploys them to your servers.
Install the CLI directly from the latest GitHub release, then run the guided bootstrap:
curl -fsSL https://github.com/0-AI-UG/open-cli-deployment/releases/latest/download/install.sh | sh
ocd bootstrapThe wizard can connect an operator-owned Docker host or provision a managed Hetzner server. It resolves the panel image to an immutable digest, verifies SSH/provider access, deploys the panel, and opens browser setup. Provider credentials remain outside configuration:
OCD_PROVISIONER_TOKEN=... ocd bootstrap --provider=hetzner --domain=panel.example.comCreate any printed DNS record, then create the administrator account and
passkey in the browser. Bootstrap waits for that setup, starts CLI login, and
runs the readiness check automatically. 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.