ship
Deploy code to your VPS. Get a URL back.
What it does
Point ship at a directory or binary. It figures out what you're deploying, uploads it, configures HTTPS, and gives you a URL. No containers required. No YAML. No config files.
Built for AI agents. JSON output by default, predictable behavior, and an agent skill so your assistant can deploy code without hand-holding.
Usage
# static site ship ./dist → https://ship-a1b2c3.example.com # with a name ship ./dist --name docs → https://docs.example.com # binary with health check ship ./myapp --name api --health /healthz → https://api.example.com # temporary preview (auto-deletes) ship ./preview --ttl 1h → https://ship-x7y8z9.example.com (expires in 1h) # custom domain ship ./site --domain myapp.com → https://myapp.com
Features
Auto-detection
Static sites, Docker apps, binaries — ship figures it out.
Automatic HTTPS
Caddy handles certificates. You get HTTPS by default.
TTL support
Temporary deploys that clean themselves up.
JSON output
Built for scripts and automation. Parseable by default.
One-time setup
# point ship at your VPS
ship host init user@your-server --domain example.com
That's it. No manual VPS configuration. Init installs everything — Caddy, Docker, systemd services, SSH keys. Just bring a fresh VPS with SSH access (Ubuntu/Debian).
Commands
ship <path>— deployship list— show all deploymentsship status <name>— check a deploymentship logs <name>— view logsship remove <name>— take it down