Project Plateau
Project Plateau: four glass plates, one living valley, and the road back to camp.
翻訳待ち
iRacing telemetry dashboard built with Tauri v2, React and a Python sidecar bridge
翻訳待ち
Loading the full README.
Read the full README ↗Each overlay lives in its own frameless, always-on-top window rather than inside one monolithic dashboard. Lock a window and it becomes click-through and immovable — mouse input passes straight to iRacing — with Ctrl+Shift+L toggling the focused one. Position, size and lock state are persisted per window and restored exactly on the next launch.
Every lap you complete is lined up against your quickest clean lap, metre by metre, and split into corners. Each corner gets the time it cost and the reason — braked 14 m early, coasted off both pedals, over-slowed the apex, back on the throttle late — and the Coach overlay says the one or two that matter, with a "4 of the last 6 laps" when it is a habit rather than a one-off. The corner losses always add up to the lap delta, laps through the pits or with a reset are never compared, and an off-track lap is compared but never becomes your reference. Corners driven in traffic are marked as traffic, not blamed on you. Under that, your lap is also held against the session best — the fastest clean lap anyone in your class has set, timed by the bridge from every car's lap distance — corner by corner, so you can see where the quickest driver out there is finding the time (how much, not why: iRacing publishes nobody's pedals but yours). It all runs locally in the bridge, on the telemetry iRacing already exposes.
On a single monitor the car in your blind spot is a voice, not a picture. The Radar widget is two LED boxes and nothing else — an L at the left of its window and an R at the right, each a square dot matrix in a carbon frame, like the LED letter boxes on a sim rig. When iRacing's own spotter (CarLeftRight) calls a car alongside, that side's letter lights up red, and stays lit while that car still overlaps you even if the spotter drops out; when the side is clear its LEDs sit dark. Size the window to sit either side of your car, or narrow it to bring the boxes together.
When race control flags a car, Standings marks it straight after the driver's name: a black flag for a penalty to serve in the pits, the meatball for a car damaged badly enough that it must pit for repairs, a gauge with its needle down when the driver has been told to slow down after cutting the track, and DQ once they are disqualified. The marks come from iRacing's own per-car flags (CarIdxSessionFlags) and go the moment race control lowers the flag.
Selecting an overlay in the manager shows its entire configuration on one page — Appearance, Visibility, Window — next to a preview that reflects every change as you make it. Edits propagate to an already-open overlay window in real time over a cross-window event bus. There is no apply button because there is nothing to apply.
The bridge multiplexes several channels over a single WebSocket, each in a versioned envelope with its own cadence, so the heavy driver roster never ships at frame rate. Stateful channels replay on connect, so a client joining mid-session renders the current world immediately instead of waiting for the next tick. See Wire protocol.
iRacing and pyirsdk are Windows-only, so the repo ships a mock bridge that synthesizes a full multi-class field. docker compose up --build brings up the mock bridge and the Vite dev server together, and the standings, relative, fuel and coach screens can be built end to end on macOS or Linux. The mock drives the player's car round a synthetic lap of Spa with known mistakes, so the coach has real laps to analyse.
The pure logic on both sides of the socket is covered by fast, isolated tests — no sim, no socket, no DOM — plus an integration test that drives the bridge service with a fake source. The bridge sits at ~97% line coverage behind an 85% gate; the frontend covers the formatters, the tyre-heat scale, the wire parser, the full fuel-and-strategy solver and the coach's tip selection. Every push and PR runs both. See Testing.
Download TelemetryLab-setup.exe and run it. It installs for the current user only — into %LOCALAPPDATA%, with no Administrator prompt and no wizard to click through — and opens the app when it finishes.
That link always resolves to the newest release, because the build publishes a copy of the installer under a name that does not carry the version. The versioned …-setup.exe and a .msi sit beside it on the release page; the .msi is the same application packaged for per-machine or managed deployment, and most people do not need it.
You will see "Windows protected your PC" with the publisher listed as unknown. That is expected and it is not a false alarm: the installer is not code-signed, so SmartScreen has no publisher to attribute it to and blocks it by default. Choose More info → Run anyway.
This is the beginning of the README. Read the rest at the original. Read the full README ↗