deploy anything to your Pi
Deploy to your Raspberry Pi with one command.
rpi-deploy builds and runs your Docker Compose projects on the Pi — over plain SSH. No registry, no Kubernetes, no YAML pipelines.
$ npm install -g rpi-deploy
$ rpi deploy ░░ ▒▒▒▒ r p i ▓▓▓▓▓▓ deploy · rpi-deploy-site ▓▓▓▓ ██ ▸ agent 0.23.0 (api v1) ▸ deployment 3f9c21a4-8b7e-4c2a-9f1d-2e6a5b0c7d84 started; streaming logs: ✓ fetch (1.4s) fetched 4f2a91c ✓ build (38.2s) ✓ start (2.1s) ✓ health (1.2s) ✓ route (0.6s) ✓ gc (0.3s) ▸ deployed ✓ rpi-deploy-site → https://rpi.iiskelo.com · 1 service (44.9s)
how it works
Two binaries, one SSH connection
your machine
rpi CLI
Run rpi deploy from your project. Works from a laptop or CI.
raspberry pi
rpi agent
A systemd daemon clones your repo, builds the Compose stack, allocates a stable port.
the internet
your app, live
Health-checked and reachable — via Cloudflare Tunnel or your own ingress.
features
Everything a deploy needs, nothing it doesn't
Latest-wins deploy queue
Push twice — the newest deploy wins, the stale one is cancelled.
Encrypted secrets
Env files and secret files (certs, keys) delivered as sealed bundles.
Cloudflare Tunnel ingress
A public hostname for your app without opening a single port.
Health checks
HTTP or TCP probes gate every deploy — broken builds never go live.
Stable port allocation
Each project keeps its host port across deploys. No conflicts.
Survives reboots
Containers come back on their own after a Pi power-cycle (restart: unless-stopped) — and a deliberate rpi stop stays stopped.
Logs, stats, lifecycle
rpi logs -f, rpi stats -w for a live dashboard — CPU / memory / temp cards with mini charts and per-service bars, start/stop/restart — without leaving your shell.
One-off commands
Migrations, backups, invites — declared in rpi.toml, run in the container.
Installs in seconds
Pulls a prebuilt binary for Linux and Windows via npm — no toolchain, no compile step, no Docker on your machine (macOS builds from source).
Client-triggered updates
rpi upgrade brings the Pi's agent up to your CLI's version over SSH — download, SHA-256 verify, atomic swap, restart — no manual SSH session.
Live deploy pipeline
Each stage — fetch, build, start, health, route, gc — collapses to a timed summary as it finishes, with a service count in the final stamp.
Deploy-key preflight
First deploy of a private repo won't fail on a missing key — rpi registers a read-only GitHub deploy key for you, or shows it and waits.
quick start
Zero to deployed in four steps
1 Install the CLI on your machine
$ npm install -g rpi-deploy # prebuilt binary, no toolchain $ rpi --version rpi 0.23.0
2 Set up the Pi
$ sudo rpi agent setup # on the pi $ rpi setup # on your machine ▸ saved profile 'pi' to ~/.config/pi/config.toml
3 Describe your project
# rpi init scaffolds this — excerpt below, full file via ⧉: [project] name = "my-app" [ingress] service = "web" port = 3000
4 Ship it
$ rpi deploy ✓ build (38.2s) ✓ health (1.2s) ▸ deployed ✓ rpi-deploy-site (44.9s)