Stop configuring.
Start shipping.
Deploy any Docker image to your own server with a single command. Automatic HTTPS, zero-downtime, preview deployments. No config files. No platform fees.
Or just type zero deploy.
# live in ~40 seconds. every time.
# features
Every feature is a command.
No config files, no web UI, no YAML. Pick a command and watch it run.
demo cpu ██████░░░░░░░░░░░░░░ 28.3% memory ████████████░░░░░░░░ 312 MB / 512 MB (60.9%) net ↓ 1.2 MB/s net ↑ 340 KB/s
$ zero --help
The whole CLI fits in your head. Everything else it does, at a glance:
# claude · mcp
Deploy from a conversation.
zero ships an MCP server. Connect it to Claude and your server becomes something you can talk to.
One command registers zero with Claude Code and Claude Desktop. Any MCP-aware client works. List apps, deploy, stream logs, manage env vars, roll back: all from a chat prompt.
Built with guardrails: every state-changing tool requires an explicit confirm parameter, enforced at the schema level. Claude can't deploy, stop, or remove anything by accident.
# how it works
Every deploy. Same four steps.
Predictable, atomic, safe. If anything fails, traffic stays on the previous version.
pull
Image pulled from the registry with stored credentials
start
New container on an ephemeral port. Old one keeps serving.
health check
TCP or HTTP check. Fails? New container is discarded.
swap
Route updated atomically. Old container removed. Done.
# under the hood
No nginx. No certbot. No YAML.
The installer puts two things on your server: Docker and the zero agent. The agent brings its own reverse proxy and TLS.
auth via your SSH key
TLS via Let's Encrypt · webhooks
lives in /opt/zero
demo.example.com · postgres :5432
$ the built-in proxy
- ✓Host-based routing with automatic TLS termination (SNI)
- ✓Certificates provisioned on first deploy, renewed automatically
- ✓WebSocket support with automatic upgrade detection
- ✓Security headers, HTTP→HTTPS redirects, connection limits
$ leaves no trace
Everything zero touches lives in /opt/zero. Config is a single .env file. The install script is public; read it before you run it. And if zero isn't for you, uninstalling is two commands:
# quickstart
Five minutes. Not five hours.
A Linux VPS and a domain. That's the entire requirements list.
# why zero
Platform DX.
Self-hosting price.
You own the server. zero handles everything else.
| the old wayPaaS | the hard wayDIY | the right wayzero | |
|---|---|---|---|
| setup | Minutes | Hours | Minutes |
| https | Automatic | Manual | Automatic |
| previews | Yes | Build it | One flag |
| lock-in | Yes | No | None |
| any image | Limited | Yes | Yes |
| config | Required | Lots | None |
| cost | $$$ | $ | Free + your VPS |
Plain Docker underneath: if you outgrow zero, your containers move with you.
# faq
Fair questions.
What does curl | sudo bash actually install?
/opt/zero. The script asks for your domain and email (for TLS), then starts zero. It's public. Read it at shipzero.sh/install.sh before you run it.Can I run a database?
zero deploy postgres:16 --name db --port 5432 --host-port 5432. Add --volume pgdata:/var/lib/postgresql/data and your data survives every deploy.How many apps fit on one server?
Do I need a domain?
DOMAIN at your server's IP and zero runs in IP-only mode: apps are exposed via host ports, HTTP only. A domain unlocks the good parts: HTTPS, automatic subdomains, and preview deployments.What happens when a deploy goes wrong?
zero rollback swaps back to the previous image.Is there an account or cloud dependency?
How do I upgrade or uninstall?
zero upgrade --all updates CLI and server in one go. Uninstall: stop the agent with docker compose -f /opt/zero/docker-compose.yml down, then rm -rf /opt/zero /var/lib/zero. That's the whole footprint.Your server.
Your rules.
Install zero and ship your first app in minutes. Open source and MIT licensed.