Deployment options
The relay is a lightweight Node.js server. It only routes WebSocket traffic and serves the dashboard — no heavy compute needed.
The relay URL has two uses
- Dashboard — open in a browser:
http://localhost:4000(local) orhttp://192.168.x.x:4000(team on same LAN) - Agent connection — when the relay is on a separate Mac:
tapflow agent start --relay ws://192.168.x.x:4000. The agent→relay path stays on the LAN. The scheme isws://, orwss://when the relay hastlsconfigured and serves HTTPS. Remote agents authenticate with anagent-scope token (Remote relay authentication).
Deployment scenarios
Keep agents and the relay on the same wired LAN
The agent streams video frames to the relay continuously, so the two must share a LAN. Different floors or VLANs in one building are fine — internal routing keeps latency low — but placing an agent across the internet raises RTT and drops frames. Wired Ethernet is recommended; Wi-Fi works but can stutter on a Mac (AWDL), so see Stream lag or stuttering if playback hitches.
Local (single Mac)
Run the relay and agent on the same Mac at once.
tapflow startTeam (separate relay server)
Run the relay on a dedicated Mac; run the agent on each Mac with a simulator.
On the relay Mac:
tapflow relay startOn each agent Mac:
tapflow agent start --relay ws://192.168.x.x:4000 --token tflw_pat_xxxxxxxxThe relay runs on a different machine than the agents, so an agent-scope token is required. See Remote relay authentication for how to create one.
Internal access (same network)
The simplest way for teammates on the same office network to reach the dashboard.
npm install -g tapflow
tapflow startA single relay auto-generates its JWT_SECRET, so there's nothing to set here. To pin a fixed key, see JWT_SECRET.
Teammates connect to http://MACHINE_LOCAL_IP:4000 in their browser. The port matches local.port in tapflow.config.json (default 4000).
Moved sections
Sections that used to be on this page now live on these pages.