Advanced Process Manager
for Linux

Supervise any process in any language — Node.js, Python, Go, Rust, Ruby, PHP, or anything else that runs on Linux. Proxy HTTP/WS/TCP/UDP, rate-limit, and monitor everything from a single static binary.

Linux  ·  Any language  ·  Zero config to start

terminal
$ apm run node server.js \ -instances 4 -watch "*.js" \ -server http://0.0.0.0:3000 Starting daemon Worker node started (4 instances) $ apm list NAME INST STATUS CPU MEM UPTIME node 4/4 running 1.2% 48MB 2m 14s $ apm gui GUI started at http://127.0.0.1:6789
NEW in v2.0

Workers can finally talk to each other.

APM now ships with built-in inter-worker IPC — message channels and persistent bidirectional streams, routed through the daemon, across any language. No sockets to configure, no broker to run, no ports to open. A Node.js WebSocket worker can hand a live console stream to a Python background job; a PHP request can query a Go service and get the first reply back in milliseconds.

Channels Fire-and-forget broadcast & request/reply with first-reply-wins and configurable timeout.
Streams Persistent bidirectional pipes with mediated star routing. Multi-peer attach, auto-cleanup on crash.
Cross-language Identical API across Node.js, Python, PHP, Perl, and Lua connectors. Zero extra dependencies.

One binary, full stack

No config files required to get started. Everything you need is built in.

Process Supervision
Start, stop, restart, and run multiple parallel instances. Automatic crash recovery with configurable restart delays and limits.
Reverse Proxy
Built-in HTTP, WebSocket, and TCP proxy. Round-robin load balancing across instances. Session migration on rolling restarts.
Vanguard Firewall
IP allowlists/blocklists, path banning, and per-IP rate limiting with token bucket. Auto-ban with configurable TTL. CDN IP lists included.
File Watcher
Monitor source files with regex patterns and auto-restart workers on change. Per-worker ignore patterns and debounce delay.
Live GUI
Web dashboard at localhost:6789 with real-time CPU, memory, connection stats, and per-instance LED event indicators.
StatsD Metrics coming soon
Export worker metrics over UDP to Datadog, InfluxDB, Graphite, or any StatsD-compatible receiver. Per-worker configuration.
Built-in TLS
First-class TLS for all server types — HTTP, WebSocket, TCP. Bring your own certs. Mutual TLS (mTLS) support with CA verification.
Rolling Restarts
Restart instances one at a time with zero downtime. Configurable delay between instance cycles. Session state preserved across restarts.
Inter-Worker IPC new
Message channels and persistent bidirectional streams between workers, across any language — Node.js, Python, PHP, Perl, Lua. Routed through the daemon. No sockets, no broker.

Any language. Any runtime. One manager.

APM doesn't care what stack you use. If it compiles, interprets, or just runs on Linux — APM can start it, supervise it, proxy it, and restart it when it crashes. No plugins. No adapters. No wrapper scripts.

Node.js Python Go Rust Ruby PHP Java Elixir C / C++ Bash Deno Bun + anything else

If your app runs on Linux and talks to stdout — APM has you covered.

Up and running in seconds

1 — Install

One line. Detects your arch, downloads the right binary, asks for sudo only when it needs to copy itself to /usr/sbin/apm.

$ curl -fsSL https://processmanager.dev/install.sh | bash
wget alternative
$ wget -qO- https://processmanager.dev/install.sh | bash

Prefer to inspect first? Download manually →

2 — Start a process

# Simple start
$ apm run node server.js

# With proxy + multi-instance
$ apm run node server.js \
    -instances 4 \
    -server http://0.0.0.0:3000

3 — Config file

# /etc/apm/apm.conf
worker {
    name       myapp;
    exec       node;
    params     server.js;
    instances  4;
    restart    true;
    watch      *.js;
    server     http://0.0.0.0:3000;
}

4 — Load & manage

$ apm load /etc/apm/apm.conf
$ apm list
$ apm restart myapp
$ apm reload /etc/apm/apm.conf
$ apm monitor
$ apm gui
$ apm stop myapp

Get APM v2.0.3

Linux static binaries — copy, chmod +x, run. All releases →

Windows Defender false positive — Microsoft Defender may flag APM binaries as Wacatac.B!ml. This is a known false positive: its ML heuristic misfires on statically compiled Go binaries and UPX-compressed executables. It has been reported to Microsoft for review. All other major antivirus engines report these files as clean — see the VirusTotal links below for full scan results.
Linux
x86_64 / amd64
apm-v2.0.3-x64 standard 8.0 MB
MD5: 29b49c9c3325e9ad61c3a310d94e2ee9 VirusTotal ↗
apm-v2.0.3-x64-upx UPX 2.5 MB
MD5: 74ed5eb21437a74c643700c05779db0b VirusTotal ↗
Linux
ARM64 / aarch64
apm-v2.0.3-arm64 standard 7.5 MB
MD5: 11f31864038e5c417496f1327ea356fa VirusTotal ↗
apm-v2.0.3-arm64-upx UPX 2.2 MB
MD5: 7b3faaa6dfe93dc8e2bbba03bc81dc7a VirusTotal ↗
Linux
ARMv7 / armhf
apm-v2.0.3-armhf standard 7.9 MB
MD5: 4ebe3dfc8aec32ff1e1eef398bab8515 VirusTotal ↗
apm-v2.0.3-armhf-upx UPX 2.2 MB
MD5: 57b89b67123fcb85d30625232b1668bd VirusTotal ↗
Questions & Feature Requests
Join the Discord to ask questions, report issues, or suggest new features. Responses may take a little while — this is a one-person project and I can't be online all day, but I do read everything.
Join Discord
As seen on