docker compose up -d
Checksums verified, secrets generated, daemon + Traefik up.
$ curl -fsSL .../install.sh | sh -s -- --docker
[+] Dashboard: http://localhost:8080 → wizard
Every branch comes alive.
Push → live preview. Idle → scales to zero, RAM back.
$ curl -fsSL https://raw.githubusercontent.com/sazardev/oxid/main/install.sh | sh -s -- --docker
git push origin feature-login
Building image (cache hit: 85%) ...
https://feature-login.local.dev
oxid pause feature-login
paused — RAM returned
curl feature-login.local.dev
woken in 340ms — serving
// install — 60 seconds
No YAML novels, no secret juggling. Secrets generate themselves, the wizard does the rest.
docker compose up -dChecksums verified, secrets generated, daemon + Traefik up.
$ curl -fsSL .../install.sh | sh -s -- --docker
[+] Dashboard: http://localhost:8080 → wizard
Five steps, all also scriptable via CLI:
That's the whole interface from here on.
$ git push origin feature-carrito
[>] Building (cache hit: 85%) ...
[+] https://feature-carrito.local.dev
Traefik mode: stable subdomains + wake-on-request. Direct-publish: a host port each, no DNS. Install guide · Env vars
// why
Pay a cloud platform for staging instances asleep 90% of the time, or drown your own server in containers nobody remembers to stop.
Push → deployed → routed. Idle 30 min → paused in memory. Next visit → awake in milliseconds. Vercel-style URLs, calculator-sized bill.
// what it offers
There's a Dockerfile? Oxid knows what to do. oxid.toml for more control.
Idle branches pause in memory. First request wakes them like nothing happened.
One shared Postgres, one shared Redis. Dozens of branches, no cluster sprawl.
No external database. Every deploy and secret access lands in an embedded SQLite log.
CLI, TUI, dashboard, desktop app — same daemon, pick whichever fits the moment.
One static binary, tiny footprint, unsafe forbidden workspace-wide.
// the golden path
One command. Secrets generate themselves, printed once.
Token → infra bootstrap → register by Git URL. First deploy kicks off for you.
That's the whole interface from then on. Auto-routed at branch.your-domain.
Idle → paused, RAM back. Next visit → awake in milliseconds.
The push button, plus an undo.
oxid up <branch>oxid rollback [--to <sha>]oxid pause / wakeoxid down · rm-projectWhat's live, what it's doing, what happened.
oxid status --sort --filteroxid logs -f — live streamoxid audit --since --kindoxid ps · queueScoped variables, lifetimes, many daemons.
oxid env set K=V --scope branchoxid configure --pause-after 30moxid context add staging --api ...oxid env list / deleteDay-2 care, built in from day one.
oxid doctoroxid backup / restoreoxid rotate-key · tokenoxid infra setup
Every command speaks --json with distinct exit codes for CI pipelines, and
your shell gets tab completion via oxid completions zsh.
// status
Oxid already runs end to end in production: one-command Docker install, webhooks, secret injection, scale-to-zero, zero-downtime redeploys. CLI and dashboard cover the full lifecycle today. TUI and desktop app are next — the ROADMAP tracks exactly what's real versus what's ahead.
Full lifecycle from one binary: deploy, rollback, logs -f, scoped secrets, backup/restore, contexts, --json everywhere.
Keyboard-driven, branch tree, live logs.
Embedded in the binary, brutalist by design.
Tauri tray app for one-click access to preview URLs.
Oxid is fully open source under a no-strings 0BSD license. If the idea resonates, starring the repo helps it reach more people, and issues tagged for contribution are the fastest way in.