- Rust 53.3%
- TypeScript 29%
- Svelte 14%
- CSS 3.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
- L23: gap panel and timing interval count laps between a pair from laps + spline, not the difference of two leader-floored laps_behind - L23: lapped-pair test fixtures now carry lap progress - L32: ACC shm publishes tLapLast only when 0 <= iLastTime < i32::MAX |
||
| .github/workflows | ||
| docs | ||
| scripts | ||
| src | ||
| src-tauri | ||
| tests | ||
| tools | ||
| .gitattributes | ||
| .gitignore | ||
| CLAUDE.md | ||
| companion.html | ||
| LICENSE | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| rust-toolchain.toml | ||
| strategy.html | ||
| svelte.config.js | ||
| TODO.md | ||
| tsconfig.json | ||
| tsconfig.test.json | ||
| viewer.html | ||
| vite.config.ts | ||
| vitest.config.ts | ||
Simtel
Simtel is a free telemetry app for sim racing. It records what the game and your hardware are doing, and shows it in a workbook of live displays modelled on the engineering tools real race teams use.
It runs as a desktop app on Windows and macOS. You can also run it on a second machine, say a laptop next to you, and have it read the recorder over your LAN, so the game PC keeps its frames to itself.
What it reads
| Game | Interface | Version decoded | Layout reference |
|---|---|---|---|
| Assetto Corsa Competizione | shared memory | acpmf_physics / _graphics / _static |
Kunos ACC Shared Memory Documentation v1.8.12 (mirror: PyAccSharedMemory) |
| ACC broadcasting (full grid, standings) | UDP, port 9000 | ksBroadcastingNetwork protocol v4 |
Kunos broadcasting SDK |
| Assetto Corsa EVO | shared memory | shared-memory version 1.x | dSyncro/acevo-shared-memory, cross-checked against Kunos's Steam guide 3707421508 |
| iRacing | shared memory | irsdk header + variable buffers + session YAML | irsdk_defines.h |
| Le Mans Ultimate / rFactor 2 | shared memory | $rFactor2SMMP_Telemetry$, $rFactor2SMMP_Scoring$ |
TheIronWolfModding/rF2SharedMemoryMapPlugin rF2State.h |
| F1 25, and the F1 26 DLC | UDP, port 20777 | packet formats 2025 and 2026 | EA F1 25 Telemetry Output Structures |
| Your wheel and pedals | USB HID | Generic-Desktop axes, read by usage | HID 1.11 §6.2.2 |
A game that publishes nothing for a channel leaves it unset, and Simtel draws it that way rather than as zero. HID is the one source that works in every title, including ones with no telemetry at all, because it reads the hardware instead of asking the game.
Simtel Companion is a second, smaller app. It runs on the game PC and sends every source above to a Simtel on another machine, so a Mac can record a game that only runs on Windows. You pair it once, with the six-digit code Simtel shows under Session ▸ Pair Companion….
Sources run side by side. Plug in a wheel and start a game, and Simtel picks both up without being told.
What you get
Live traces of speed, pedals, steering and the rest; a timing tower with tyre compounds, stints and gaps; a track map it learns from your own laps; a stint and fuel planner; and an analysis page where you pick laps, overlay them and get a corner-by-corner readout of where the time actually went. Every lap is written to a local store, so you can go back through a session afterwards.
Building
You need Node and Rust 1.98.
npm install
npm run app:dev # run Simtel
npm run app:build # build its installer
npm run companion:dev # run Simtel Companion
npm run companion:build # build its installer
Tests are npm test for the frontend and cargo test --workspace from
src-tauri/. The parsing and display logic is all unit-tested and runs on any
platform; shared memory and HID only do anything real on the machine the game
and the hardware are on.
Licence
Apache 2.0. See LICENSE.