Multi-engine setups

Several radios, remote Coops

Perch and Coop are deliberately separable: any Perch can watch any Coop it can reach. That one idea covers a lot of setups.

The engine switcher

Perch's header has an engine menu — add a Coop by host or IP and Perch probes the well-known ports (2667 and its fallbacks, plus https:443) to find it, then remembers it. Switch engines and the whole dashboard re-points. Manage the same list via GET/POST /perch/engines, /perch/select, /perch/edit, /perch/remove, /perch/probe?host=….

Common shapes

SetupHow
Second radio on the same deskRun a second Coop; it auto-binds the next port (2667 → 6374 …). Add it as a local engine and flip between radios.
Basement capture box, laptop viewingCoop runs headless on the box (MESH_WEB_HOST=0.0.0.0); your laptop's Perch adds basement-box.local. Set a real apiKey.
Remote site over TailscaleCoop at the remote site; add host.tailnet-name.ts.net as an engine. Tailscale provides the security; this is the pattern for a mountain-top or family-house node.
Public / shared viewerRun the remote Coop with MESH_READONLY=1 — full dashboard, zero transmit, even with the key.

Running Coop headless

# linux box or Pi — single static binary, no dependencies
MESH_WEB_HOST=0.0.0.0 MESH_API_KEY=a-real-secret ./coop

# as a user service that survives reboots (systemd):
systemctl --user enable --now coop.service   # simple unit that execs the binary
loginctl enable-linger $USER

Flags & addresses worth knowing

The multi-radio future — one Perch aggregating several Coops into a single merged view — is the roadmap's favorite child. Today it's one engine at a time, switchable in two clicks.