No description
  • Rust 53.3%
  • TypeScript 29%
  • Svelte 14%
  • CSS 3.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Maxnflaxl 72fe46c034
Some checks failed
Build / Simtel Companion (push) Has been cancelled
Build / Simtel (push) Has been cancelled
fix: pair lap counts by own progress; drop ACC no-time tLapLast
- 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
2026-09-28 14:30:36 +02:00
.github/workflows feat: restore the About dialog 2026-09-21 12:12:17 +02:00
docs fix: companion link, stream liveness and single-instance guards 2026-09-28 14:23:08 +02:00
scripts docs: trim and correct code comments 2026-09-25 20:28:24 +02:00
src fix: pair lap counts by own progress; drop ACC no-time tLapLast 2026-09-28 14:30:36 +02:00
src-tauri fix: pair lap counts by own progress; drop ACC no-time tLapLast 2026-09-28 14:30:36 +02:00
tests fix: pair lap counts by own progress; drop ACC no-time tLapLast 2026-09-28 14:30:36 +02:00
tools sources: one build_sources() for both apps; the AC EVO page relay is retired 2026-09-20 18:27:02 +02:00
.gitattributes Initial commit 2026-04-23 12:33:27 +02:00
.gitignore companion: a tray app with one window and a three-field config 2026-09-20 18:55:13 +02:00
CLAUDE.md device-layer rewrite + app bug fixes 2026-06-14 01:53:49 +02:00
companion.html companion: a tray app with one window and a three-field config 2026-09-20 18:55:13 +02:00
LICENSE docs: README and Apache 2.0 licence 2026-09-13 02:08:40 +02:00
package-lock.json viewer: freeze the waveform when live is off, and type-check Svelte files 2026-09-13 02:08:39 +02:00
package.json build: name bundles after the revision they were built at 2026-09-21 12:55:29 +02:00
README.md docs: bring the docs back in line with the code 2026-09-21 00:09:09 +02:00
rust-toolchain.toml ci: move the Rust pin to 1.98.1 2026-09-13 10:13:13 +02:00
strategy.html viewer: session presets, and a node editor for strategy in its own window 2026-09-13 02:08:40 +02:00
svelte.config.js viewer: freeze the waveform when live is off, and type-check Svelte files 2026-09-13 02:08:39 +02:00
TODO.md docs: TODO for handling the lap boundary and the lap time separately 2026-09-25 20:28:24 +02:00
tsconfig.json viewer chrome wiring (native menu, action bus, docks, zoom, laps, timeline, status) 2026-09-11 16:33:39 +02:00
tsconfig.test.json test: typecheck the tests, and build grid fixtures from one factory 2026-09-13 02:08:40 +02:00
viewer.html phase 1 recorder/viewer rebuild (ATLAS workbook, ACC source, LAN stream) 2026-09-11 10:36:06 +02:00
vite.config.ts companion: a tray app with one window and a three-field config 2026-09-20 18:55:13 +02:00
vitest.config.ts phase 1 recorder/viewer rebuild (ATLAS workbook, ACC source, LAN stream) 2026-09-11 10:36:06 +02:00

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.