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

prebuilt binaries for Linux / Windows · builds from source on macOS · npm version

~/rpi-deploy-site
$ 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)

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.

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.

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)