Timing bridge
CLIA single-file Node script that relays an RMonitor feed from the timing PC at your circuit into Outlap's live board. No install, no dependencies.
The Outlap Timing Bridge connects to your timing system’s RMonitor output on the local network and forwards it to the stream endpoint. Laps, running order and flags appear on the event board as they happen.
It’s one file with no dependencies. It needs Node 18 or newer on the timing PC, or on any machine on the same network as it.
Set it up
-
Turn on RMonitor output in your timing software.
Where to find it depends on the system. See Orbits, Trackside / X2 or AxWare. The default port is
50000. -
Create an API key.
In Outlap, open Race Control → Timing → Connect timing. The key needs the
timing:writescope; keys created in the app have it. See Create an API key. -
Run the bridge.
Race Control fills in this command for you:
node bridge.mjs --event <eventId> --key <outlapApiKey> --host 127.0.0.1 --port 50000 --vendor orbits -
Check the board.
Within a few seconds the Live feed panel in Race Control turns green and laps start arriving on the event’s Timing tab.
Options
| Flag | Meaning |
|---|---|
--event | Outlap event ID, or set OUTLAP_EVENT_ID. Required. |
--key | Outlap API key, or set OUTLAP_API_KEY. Required. |
--host, --port | The timing system’s TCP address. Default 127.0.0.1:50000. |
--vendor | orbits, trackside, axware or rmonitor. Default rmonitor. |
--session | Attach laps to a specific Outlap session ID. |
--label | Friendly name shown in Race Control, such as “Race Control PC”. Defaults to host:port. |
--interval | Upload interval in milliseconds. Default 1000. |
--file | Read from a captured file instead of TCP. Tails the file for new lines unless --replay is set. |
--replay | With --file, send the file once, line by line, then stop. Use --speed <ms> to set the delay per line (default 5). |
--api | Override the API base URL, or set OUTLAP_API. |
Prefer environment variables for secrets so the key doesn’t appear in your shell history or process list:
export OUTLAP_API_KEY=olap_xxxxxxxx
export OUTLAP_EVENT_ID=6c0e0000-0000-4000-8000-000000000000
node bridge.mjs --host 192.168.1.20 --vendor trackside --label "Race Control PC"
How it behaves
- Reconnects automatically. If the timing system drops the connection, the bridge retries with exponential backoff, from 1 second up to 30.
- Never loses a batch to a Wi-Fi blip. Failed uploads are put back in the queue and retried. The backlog is capped at 20,000 lines.
- Batches. Up to 2,000 lines per upload, once a second by default.
- No duplicates. The server ignores redelivered packets, so retries are safe.
- Heartbeat. Every 30 seconds it reports
liveto/feed/status, orstaleif more than 5,000 lines are waiting to be sent. On shutdown (Ctrl+C) it flushes the queue and reportsstopped.
Driver matching
Laps are matched to Outlap drivers by transponder first, then car number, using the transponder list on the event’s Paddock tab. Drivers who saved their transponder and race number in their garage are already filled in; add hire units on the day. Unmatched laps are still recorded against the transponder or car number, so you can assign them afterwards in Race Control.
Run it as a service
For a whole race weekend, keep the bridge alive across reboots. On Windows, NSSM can wrap the command as a service; on Linux or macOS a systemd unit or launchd job does the same. Because the bridge reconnects on its own, you only need to restart it if the process exits.
Troubleshooting
See Troubleshooting for stale feeds, ECONNREFUSED, and laps that don’t match drivers.