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.
$ zero deploy ghcr.io/shipzero/demo:latest
✓ Deploying ghcr.io/shipzero/demo:latest
✓ Pulling image done
✓ Detected port: 3000
✓ Starting container done
✓ Health check passed
🚀 Your app is live: https://demo.example.com
Write a Dockerfile. Configure nginx. Set up Certbot. Write deploy scripts. Debug firewall rules. Pray nothing breaks.
Or just type zero deploy.
| Command to deploy | 0 Config files | 0 Downtime | $0 Platform fees |
|---|
Features
See it in action.
Every feature is a single command. No config files, no web UI, no YAML.
$ zero deploy ghcr.io/shipzero/demo:latest
✓ Deploying ghcr.io/shipzero/demo:latest
✓ Pulling image done
✓ Detected port: 3000
✓ Starting container done
✓ Health check passed
🚀 Your app is live: https://demo.example.com
$ zero deploy demo --preview pr-21
✓ Deploying ghcr.io/shipzero/demo:pr-21
✓ Pulling image done
✓ Starting container done
✓ Health check passed
✓ Preview is live: https://preview-pr-21.demo.example.com
$ zero rollback demo
✓ Deploying ghcr.io/shipzero/demo:v1.2.0
✓ Pulling image done
✓ Starting container done
✓ Health check passed
🚀 Your app is live: https://demo.example.com
$ zero metrics demo
demo
cpu ██████░░░░░░░░░░░░░░ 28.3%
memory ████████████░░░░░░░░ 312 MB / 512 MB (60.9%)
net ↓ 1.2 MB/s
net ↑ 340 KB/s
$ zero webhook url demo
URL: https://example.com/webhooks/demo
Secret: a1b2c3d4e5f6...
Configure both in GitHub/Docker Hub.
Push an image → zero deploys it.
$ zero deploy \
--compose docker-compose.yml \
--service web --name mystack
✓ Deploying compose
✓ Pulling images done
✓ Starting services done
✓ Health check passed
🚀 Your app is live: https://mystack.example.com
Deploy anything
Give it a Docker image. zero detects the port, assigns a domain, provisions HTTPS, and routes traffic. One command, nothing to configure.
Automatic HTTPS via Let's Encrypt. HTTP redirects. Zero-downtime — health-checked before traffic switches.
Preview environments
Add --preview pr-21 and get a temporary deployment with its own subdomain. Share the link, review, merge. Previews expire automatically.
Every PR gets a live URL. No infrastructure changes needed.
Instant rollback
Something wrong? One command. The previous image is started, health-checked, and traffic is swapped. If the health check fails, nothing changes.
No downtime. No manual intervention. No second-guessing.
Live metrics
CPU, memory, and network stats streamed to your terminal in real time. No Grafana dashboard to set up. No Datadog bill to worry about.
Works for apps and previews. Stream server logs with zero logs --server.
Webhook auto-deploy
Push to your container registry and zero deploys it automatically. HMAC-SHA256 verified. Non-matching tags create preview deployments.
A single signed POST triggers a deploy. Works with GitHub Actions, Docker Hub, or any CI system.
Docker Compose
Multi-container apps with one command. Upload your Compose file, specify the entry service, and zero handles the rest — pulling, starting, health-checking, routing.
How it works
Every deploy. Same four steps.
Predictable, atomic, safe. If anything fails, traffic stays on the previous version.
01
Pull
Image pulled from the registry with stored credentials
02
Start
New container on an ephemeral port. Old one keeps serving.
03
Health check
TCP or HTTP check. Fails? New container is discarded.
04
Swap
Route updated atomically. Old container removed. Done.
Quickstart
Five minutes. Not five hours.
A Linux VPS and a domain. That's the entire requirements list.
01
Set up the server
On your VPS
$ curl -fsSL https://shipzero.sh/install.sh \| sudo bash
02
Install the CLI
On your machine
$ curl -fsSL https://shipzero.sh/cli/install.sh \| bash
03
Connect via SSH
On your machine
$ zero login root@example.com
04
Deploy
On your machine
$ zero deploy ghcr.io/shipzero/demo:latest
✓ Your app is live: https://demo.example.com
Why zero
Platform DX. Self-hosting price.
You own the server. zero handles everything else.
| The old way | PaaS |
|---|---|
| Setup | Minutes |
| HTTPS | Automatic |
| Previews | Yes |
| Lock-in | Yes |
| Any image | Limited |
| Config | Required |
| Cost | $$$ |
| The hard way | DIY |
|---|---|
| Setup | Hours |
| HTTPS | Manual |
| Previews | Build it |
| Lock-in | No |
| Any image | Yes |
| Config | Lots |
| Cost | $ |
| The right way | zero |
|---|---|
| Setup | Minutes |
| HTTPS | Automatic |
| Previews | One flag |
| Lock-in | None |
| Any image | Yes |
| Config | None |
| Cost | Free + your VPS |
zero is a single-server deployment engine.
One server, any number of apps. If you need multi-node orchestration, team RBAC, or a web dashboard — zero is not the right tool. And that's by design.
Your server. Your rules.
Install zero and ship your first app in minutes. Open source and MIT licensed.
$ curl -fsSL https://shipzero.sh/install.sh \| sudo bash