
“pm2, but Rust” — predictable, observable, and boringly reliable. Cross‑platform by design: Linux, macOS, and Windows.
Linux · macOS · Windows
Zero‑downtime reloads
Graceful signals, socket handoff on POSIX, and blue/green strategies so your endpoints stay hot during deploys.
First‑class observability
Structured logs, Prometheus metrics, and optional OpenTelemetry traces — no sidecars required.
Secure by default
Local‑first control plane over IPC. No network exposure unless you enable the HTTP API explicitly.
See full feature list here.
Ferrox consists of two cooperating binaries: a user‑facing CLI and a background daemon. The CLI talks to the daemon over OS‑native IPC.
CLI
Daemon
Linux
systemd user units, signals (TERM/HUP), cgroups, and socket activation via sd_listen_fds.
macOS
Launchd agents, POSIX signals, and socket handoff through descriptor inheritance.
Windows
Installed as a Windows Service (SCM). Process groups via Job Objects; IPC with named pipes.
Learn more about how Ferrox works.
Install, run, and configure in minutes.
CLI
# dev install
cargo install ferrox-cli ferrox-daemon
# initialize a project
echo "console.log('hello')" > app.js
ferrox init
# run four instances
ferrox start web -- cmd="node app.js" --instances=4 --watch
# zero-downtime reload
ferrox reload webConfig
version = 1
[defaults]
restart = "always"
backoff = { min_ms = 500, max_ms = 30000, factor = 2.0, jitter = true }
log_format = "json"
[apps.web]
cmd = "node server.js"
instances = 4
watch = ["src"]
healthcheck = { http = "http://127.0.0.1:3000/health", interval_ms = 2000 }
[apps.worker]
cmd = "./target/release/worker"
instances = 2
restart = "on-failure"One command to try it locally. Export to systemd when you're ready.
cargo install ferrox-cli ferrox-daemon