Deploy to any VPS from your terminal.

Neo SSHes into your server, installs Docker and Caddy, deploys your apps with auto-SSL — all without an agent or control plane.

Install Neo →

How neo deploy works

From your project to a live server in one command.

Neo reads your local config, builds the image, transfers it over SSH, and swaps traffic with zero downtime.

Your Laptop

  • Read config
    • docker-compose.yml
    • .env · .neo.yml
  • Build image
    • Docker build from Dockerfile
  • SSH

Your VPS

  • Load image
    • docker load
    • + health check

Live!

Caddy routes traffic auto-SSL via Let's Encrypt.

Features

Local to production. One tool, full lifecycle.

neo dev for local, neo deploy for staging & production. One CLI for the full lifecycle.

Auto-generate config

Run neo config generate and Neo scans your docker-compose.yml — detecting app, sidecars, workers, env vars, and volumes. Zero manual config.

Local development

neo dev wraps docker compose with Neo's env loading. Same config from dev to production. Falls back to Dockerfile if no compose file.

Instant HTTPS

neo domain --temp assigns a sslip.io domain with auto-SSL. No DNS needed. Or bring your own cert with --cert and --key.

Zero-downtime deploys

Blue-green deployment starts the new container, waits for health checks, then swaps traffic. Old version keeps running until the switch.

Workers & sidecars

Declare background workers and sidecar services in .neo.yml. They deploy alongside your app with shared volumes and env vars.

Config sync

neo sync writes server state back to .neo.yml. Domain changes, env vars, HTTPS toggles — all captured and version-controlled.

Multi-server & environments

Manage multiple servers. Deploy to staging or production with --to staging. Each environment gets its own domain, env vars, and SSL config.

Env & secrets management

Auto-reads docker-compose.yml and .env files. Set, import, or update env vars with neo env — container restarts automatically.

Persistent volumes

Declare volumes in .neo.yml to persist databases, uploads, and storage across redeploys. Data survives every update.

Pricing

Free. Full-featured. No catch.

Every feature, every command, on the free plan. Neo+ just removes the server limit.

$0

Free, forever.

Neo+

For solo developers who need unlimited servers — no caps, ever.

❤️50% off — launch price

$49 to start

  • Unlimited servers — no cap, ever
  • 2 device activations
  • Everything in the free plan
  • Priority support

Team 10 seats

One license, 10 developers — perfect for small teams shipping together.

50% off — launch price

$149 to start $299 · renews $99/yr

🙏 Every Neo+ purchase helps keep Neo free for everyone.

FAQ

Frequently asked questions

Does Neo install an agent on my server?

No. Neo runs entirely on your local machine and connects to your server over SSH. Nothing is installed beyond Docker and Caddy, which are the runtime for your apps.

I already use docker-compose. How do I switch?

Run neo config generate in your project directory. Neo scans your docker-compose.yml and auto-generates .neo.yml — detecting your app service, database sidecars, workers, env vars, and volumes. Then neo deploy . to ship it.

Which cloud providers are supported?

Any provider that gives you a VPS with SSH access — DigitalOcean, Hetzner, Linode, Vultr, AWS EC2, GCP, Azure. Neo deploys to a single VM. It is not a cluster orchestrator and does not manage multi-node setups like Kubernetes or Docker Swarm.

Can I use Neo for local development?

Yes. neo dev wraps docker compose up with Neo's env loading from .neo.yml. Same config from local dev to production.

How does SSL/HTTPS work?

Three options: neo domain --temp gives you instant HTTPS via sslip.io (no DNS needed). neo domain app example.com uses Let's Encrypt auto-SSL (after DNS is pointed). --cert and --key flags let you bring your own certificate.

Can I run background workers (queues, schedulers)?

Yes. Add a workers section to your .neo.yml and Neo deploys them as separate containers using the same image, env vars, and volumes as your main app.

What about databases?

Neo can run databases in Docker via shared services or sidecars — fine for small projects. For production with real users, we recommend managed databases and connecting via neo env set DATABASE_URL=....

How do I keep .neo.yml in sync with server changes?

neo sync <app> reads the current server state and writes it back to .neo.yml. Domain changes, env vars, HTTPS toggles — all captured.