Skip to content

mvoof/Marble-Trace

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

527 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo

Marble Trace

Open-source iRacing telemetry overlay — beautiful, lightweight, always on top.

Latest release MIT License Contributions welcome Windows only Tauri v2

Marble Trace is actively developed — new widgets, fixes, and features land regularly.
Got a bug, an idea, or just want to share your setup? Join the community on Discord.

Discord


Why Marble Trace?

Most iRacing overlays are either bloated desktop apps or locked behind subscriptions. Marble Trace is different:

  • Zero overhead — a tiny Rust backend reads telemetry directly via the iRacing SDK; the UI is a transparent frameless window that floats above the sim.
  • Fully modular — enable only the widgets you need. Each widget lives in its own transparent window and can be repositioned independently.
  • Open source — MIT licensed. Extend it, theme it, submit a PR.
  • Modern stack — Tauri v2 + React 19 + MobX + Ant Design. Fast and type-safe.

Featured Widgets

  • Speed & RPM — HUD with gear, RPM ring & tire temps
  • Standings — Race table with deltas & multi-class
  • Input Trace — Real-time pedal history or bars
  • Relative — F3-style timing with closing trends
  • Delta HUD — Live delta vs any reference lap with lap flash card
  • Sector Matrix — Per-sector times, delta chips & predicted finish
  • Lap Log — Rolling lap history table with delta column
  • Fuel — Consumption graph & pit-stop math
  • Timer — Session clock & laps-to-go
  • Track Map — SVG map with live positions & sectors
  • Relative Map — 1-D relative track position
  • Proximity Radar — 360° awareness & bumper gaps
  • Radar Bar — Edge indicators for side-by-side
  • Flags (LED/Flat) — Matrix and pill-style indicators
  • G-Meter — Lateral & longitudinal friction circle
  • Chassis — Brake temps & suspension data
  • Weather — Live conditions & dynamic forecast

Widgets

Every widget is independently positioned, resized, and styled — drag it anywhere on screen, scale it to taste, adjust opacity so it never blocks your view. Each one ships with its own set of options: toggle individual data fields, switch layouts, pick colours, set visibility rules. You only see what you actually need, exactly where you want it.

Speed & RPM

Your central driving HUD. A circular RPM ring fills up as you rev — it flashes red when you hit the shift point so you never miss a gear. Shows current gear, speed, and an active pit-limiter indicator. Optionally displays tire and brake temperatures per corner so you know exactly when your rubber is up to temperature or overheating.

Speed widget — high RPM Speed widget — with temps


Input Trace

Watch your throttle, brake, and clutch inputs scroll in real time. The horizontal trace mode shows a rolling history so you can see exactly where you're trail-braking, blipping, or lifting early. Switch to vertical bars for a clean side-by-side view of all three pedals at once. Great for comparing your technique corner by corner.

Input Trace — horizontal Input Trace — vertical bars


Standings

Full race standings table with multi-class support, SOF, qualify deltas, brand & tire info, and a configurable row budget. All columns visible at once or stripped to essentials.

Standings — all columns


Relative

Relative timing sorted by F2Time — player always centred. Closing/gap trend arrows, lap status (lapping/lapped), class stripes.

Relative widget


Track Map

SVG overhead track map with every car's position, class-coloured dots, P1 / YOU labels, class legend, and sector markers — recorded from your own lap data.

Track Map — with sectors


Proximity Radar

Circular radar centred on your car with a 10 m render range, bumper-to-bumper gap labels, sector masks, and spotter cones.

Proximity Radar — surrounded


Radar Bar

Two slim vertical bars at the screen edges — a quick-glance indicator for side-by-side situations.

Radar Bar widget


Chassis

Per-corner brake & tire temperatures with optional inboard suspension data and overheat warnings.

Chassis — brake overheat


Fuel

Lap-by-lap consumption graph, laps remaining, add-fuel suggestion, and tank fill level. Line or bar chart mode.

  • LAPS LEFT: Current driving range in laps based on fuel in the tank.
  • EST. FINISH: Projected fuel balance (surplus or deficit in liters) at the end of the race.
  • PIT WARNING: Appears when you need to refuel, showing exactly how many liters to add (including a +1 lap buffer) to reach the finish.

Fuel full preview Fuel — small view


Delta HUD

Live delta bar that compares your current lap against a configurable reference — your personal best (PB), your personal optimal (PO, best sectors combined), session best (SB), session optimal (SO), or the previous lap in the session (SL). The bar fills green when you are ahead and red when behind. When you cross the finish line a lap flash card appears (top, bottom, left, or right of the widget) showing the completed lap time and its delta. Card display duration is adjustable.

Lap Delta — vertical with sectors Lap Delta — horizontal


Sector Matrix

Grid of sector times for the current lap with color-coded delta chips (green = faster than personal best, red = slower). Header shows live delta and predicted finish time. Reference for the live delta and predicted time is configurable; sector chips always compare vs your personal best.


Lap Log

Rolling history of your completed laps — lap number, lap time, and delta vs personal best for each row. The live row at the top shows the current lap's real-time delta using the configured reference (PB / PO / SB / SO / SL). Historical rows always compare vs personal best.


Timer

Session clock with laps-to-go, estimated total laps, and optional real-time clocks.

Timer — with laps and position


Weather

Wind direction compass, temperature, humidity, and forecast strip for dynamic weather sessions.

Weather — with forecast


Flags (LED & Flat)

LED matrix and flat pill-style flag indicators with green, yellow, red, blue, white, checkered, and meatball flag support.

Flags LED — green flag Flat Flags — multiple flags


Relative Map

Compact 1-D track map showing relative car positions along the lap. Horizontal or vertical.

Linear Map — horizontal


G-Meter

Friction circle visualising lateral and longitudinal G-forces in real time. Three display modes — Trail (fading line history), Fading (decaying envelope), Peak (static max-G envelope) — with three colour modes: Mono, Simple (red brake / green accel / cyan turn), and Advanced (smooth gradient blending). Adjustable scale from 2 G to 5 G.

image


Prerequisites

Tool Version
Node.js 18+
Rust 1.70+
Tauri v2 prerequisites
Windows iRacing SDK is Windows-only

Setup

npm install

Development

npm run tauri:dev

Build

npm run tauri:build:release

Architecture overview

iRacing SDK
    │  (pitwall crate)
    ▼
Rust service (src-tauri/)
    │  app.emit("iracing://telemetry/*")
    ▼
MobX stores (src/store/)
    │  observer()
    ▼
Widget windows  ←──────── Main window (widget list + settings)
(transparent overlays)
  • Telemetry events: iracing://telemetry/car-dynamics, car-inputs, car-status, lap-timing, session, environment, car-idx, plus iracing://session-info and iracing://status
  • Widget drag mode: toggle with F9 (configurable) — green border appears, drag to reposition, position is persisted
  • Unit system: metric / imperial, toggle in Settings, synced across all windows

Screenshots

You can capture the current state of the overlay or main window using the included scripts. Make sure the app is running in dev mode (npm run tauri:dev).

  • Via npm: npm run screenshot (captures overlay by default)
  • Via Batch: scripts\screenshot.bat [overlay|main]
  • Output: Saved to docs/assets/screenshots/overlay/ (git-ignored).

To update permanent documentation assets, move files from overlay/ to widgets/.


Why pitwall?

Marble Trace uses a custom fork of the pitwall crate rather than the upstream version. The iRacing SDK exposes session information (track layout, car list, driver names) as a 512 KB YAML document encoded in Windows-1252 / Latin-1, not UTF-8. In online races it is very common for driver names to contain accented or special characters — "José Müller", "Kimi Räikkönen", and similar. The upstream crate's internal YAML extraction decodes this buffer with a strict UTF-8 parser (std::str::from_utf8). When it hits a byte such as 0xE4 (the ä character) outside a valid UTF-8 sequence, the parser returns an error; because the error is swallowed with .ok(), the entire session document is silently discarded. The result: every driver with a non-ASCII character in their name causes the whole session to return null — no standings, no car list, no track data.

Our fork replaces the strict decoder with a lossy Windows-1252 → UTF-8 conversion so that every byte is always interpreted correctly, driver names are preserved as-is, and the session document is never lost.


Analytics & Privacy

Marble Trace uses Aptabase — an open-source, privacy-first analytics platform. No personal data is collected. The following anonymous events are tracked:

Event When
app_started On every launch — includes primary monitor resolution, scale factor, system locale and DPI

Aptabase automatically captures: OS, app version, country (from IP), and locale. No user IDs, no file paths, no telemetry data from iRacing.


Contributing

Contributions, bug reports, and feature requests are very welcome! Please read CONTRIBUTING.md before opening a PR.


Changelog

See CHANGELOG.md for the full release history.


License

Distributed under the MIT License. © 2026 voof