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