APM v2.11.0

Linux static binaries compiled 2026-10-08. Copy, chmod +x, run. Zero dependencies.

← All releases

Upgrading an existing install? — Since v2.8 a worker with no user line in a root-owned path refuses to start instead of silently running as root, and the CLI needs root or membership of group apm. Run sudo apm healconf after installing: it checks your config and every include, explains each setting this version reads differently, and fixes it with a backup beside the file (--check only reports; --yes applies every safe fix). apm upgrade runs the check for you.
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.11.0-x64 standard 9.0 MB
SHA-256: 0ea427271ddd3a30d652d08ff38ac68e756fac8d64579809b841be37bd10ddab VirusTotal (pending)
apm-v2.11.0-x64-upx UPX 2.8 MB
SHA-256: 03ef25aa73f31110cdc0d5a735663b3ac6e071037aad034134845b095bcaee17 VirusTotal (pending)
Linux
ARM64 / aarch64
apm-v2.11.0-arm64 standard 8.4 MB
SHA-256: 82cbbe3db313349c006121da78f08e3c39596d66e2b25bbe25fb019994eefb5c VirusTotal (pending)
apm-v2.11.0-arm64-upx UPX 2.4 MB
SHA-256: c14115674fcbf3e3639a1befd996c251f24ee21e3f798af6d1742cd26b04c0bd VirusTotal (pending)
Linux
ARMv7 / armhf
apm-v2.11.0-armhf standard 8.8 MB
SHA-256: 5483f8b1f3b673efcc21fbf6cf2718de0c818b4294fa5fe8b3b3bba92e88a4fb VirusTotal (pending)
apm-v2.11.0-armhf-upx UPX 2.4 MB
SHA-256: f09ccbee4aae5d370fa0f75165f8fa17b00219e4df737e4921832366c8d4823d VirusTotal (pending)
This release is signed. metadata.json (the SHA-256 of every file above), install.sh and each connector carry an ed25519 signature beside them as <file>.sig. The public key is compiled into every APM binary since v2.10: apm upgrade refuses anything that does not verify, and apm verify <file> <file>.sig checks a download by hand. Key fingerprint (SHA-256 of the public key): f6af819d1b56bcc075a009f5051bb3a4bcf5d0cd962b513d763898a8ca09527f
-----BEGIN PUBLIC KEY-----
MCowBQYDK2VwAyEAJaQi2HxEjH2ncrimkjGwyyj1XYYwfqTtSPuNT2VIiy8=
-----END PUBLIC KEY-----
To check with OpenSSL: openssl pkeyutl -verify -pubin -inkey apm.pub -rawin -in metadata.json -sigfile <(base64 -d metadata.json.sig)

v2.11.0 — the front door, the GUI and the child pipe

Review batch 4, the last of the October review. The proxy learns which peers to believe about the client IP (trusted_proxies, real_ip_header) and reads forwarded lists from the right; ban_path can no longer be walked around with //, /./, a trailing slash, an encoded letter or a bad escape in the query; a flood of fresh IPs no longer refuses clients with a full rate table. The web GUI always asks for a password (a generated one is in the daemon log and apm gui when none is set), sessions expire, logins back off, and the two root config files merge per key instead of one replacing the other. apm stop no longer deadlocks on a child that IPCs during shutdown, a stray frame byte in log output no longer swallows the log, a stalled child answers 503 instead of holding every request. Local IPC streams are isolated per worker. The connectors move to v3.3.0: large bodies in milliseconds instead of seconds, ordered WebSocket handlers in Node, numeric _status everywhere. The config parser accepts a BOM, a bare key; and diamond includes; saveconf quotes what it writes and keeps dashboard { }; healconf flags a single-value key set twice.

Upgrade notes: set trusted_proxies on listeners behind a proxy; if you rely on the GUI without a password, read the generated one from the daemon log or sudo apm gui, or set gui_password. Details in the timestamped notes beside this file.