High-performance telemetry capture framework for PC games on Windows
GameTelemetry provides a simple, extensible API for capturing real-time game data from memory-mapped files, replay files, and network streams. Built for developers who need reliable, low-overhead telemetry collection with minimal code.
Quick Start
using GameTelemetry.Core; using GameTelemetry.Games.ACC; // Capture Assetto Corsa Competizione telemetry await using var session = new GameSession() .AddSource(ACCSources.CreatePhysicsSource()) .OnData<ACCPhysics>(data => Console.WriteLine($"Speed: {data.SpeedKmh} km/h")); await session.StartAsync();
That's it. Session data is automatically recorded to ./sessions/ with LZ4 compression.
Features
- ๐ Minimal overhead - <1% CPU impact at 100Hz capture rates
- ๐ฎ Multi-source support - Memory-mapped files, file watchers, network streams
- ๐พ Efficient storage - Binary format with LZ4 compression (~15MB per hour)
- โก Real-time callbacks - Process data as it arrives
- ๐ Extensible - Add new games in minutes
- ๐ก๏ธ Crash-resistant - Graceful handling of incomplete sessions
Supported Games
Out of the box:
| Game | Replay/Demo files | Realtime data | Tested |
|---|---|---|---|
| Age of Empires IV | โ | โ | โณ |
| Assetto Corsa Competizione | โ | โ Physics, Graphics, Telemetry | โณ |
| Brawlhalla | โ | โ | โ |
| F1 25/24/23/22 | โ | โ | โ |
| Rocket League | โ | โ | โ |
| Rainbow Six Siege | โ | โ | โ |
| Counter-Strike 2 | โ | โ | โ |
| DOTA 2 | โ | โ | โณ |
| Fortnite | โ | โ | โณ |
| League of Legends | โ | โ | โณ |
| Overwatch 2 | โ | โ | โณ |
| PUBG | โ | โ | โณ |
| Starcraft 2 | โ | โ | โณ |
| Tekken 8 | โ | โ | โณ |
| Trackmania | โ | โ | โ |
| iRacing | โ IBT, Replay, OLAP/BLAP | โณ Telemetry and Session info | โณ |
| Valorant | โ | โ | โ |
| War Thunder | โ | โ State, Indicators | โณ |
Installation
# Clone repository git clone https://github.com/yourusername/GameTelemetry.git # Add project as a reference to your existing solution
NuGet packages coming soon.
Architecture Overview
โโโโโโโโโโโโโโโ
โ GameSession โ โ Fluent API entry point
โโโโโโโโฌโโโโโโโ
โ
โโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ ITelemetrySource<T> โ โ Data sources
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ โข MemoryMappedFileSource<T> โ Read from game memory
โ โข FileWatcherSource โ Monitor replay folders
โ โข NetworkSource (future) โ UDP/TCP streams
โโโโโฌโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโผโโโโโโโโโโโ
โ SessionWriterโ โ Binary output with LZ4
โโโโโโโโโโโโโโโโ
Core principles:
- Sources produce typed data streams via
IAsyncEnumerable<T> - Optional per-source output with pluggable writers
- Real-time callbacks for live processing
- Zero-reflection hot path (generics only)
Usage Examples
Capture with auto-generated filename
// Reads realtime physics from Assetto Corsa Competizione await using var session = new GameSession() .AddSource(ACCSources.CreatePhysicsSource()); await session.StartAsync(); // โ Saves to ./sessions/accphysics_20260125_120000.dat
Multiple sources with custom paths
await using var session = new GameSession() .AddSource(ACCSources.CreatePhysicsSource(), opt => opt .OutputTo("./my_race/physics.dat")) .AddSource(ACCSources.CreateGraphicsSource(), opt => opt .OutputTo("./my_race/graphics.dat")); await session.StartAsync();
Real-time processing only (no file output)
await using var session = new GameSession() .AddSource(new TrackmaniaMemoryMappedSource(), opt => opt .RealtimeOnly()) .OnData<TrackmaniaDataV3>(frame => { Console.WriteLine($"Speed: {frame.Speed} km/h"); }); await session.StartAsync();
HTTP polling (War Thunder)
// Capture War Thunder telemetry from HTTP API at 60Hz await using var session = new GameSession() .AddSource(WarThunderSources.CreateStateSource(hz: 60)) .OnData<StateData>(data => Console.WriteLine($"Speed: {data.IndicatedAirspeed} km/h, Alt: {data.Altitude}m")); await session.StartAsync();
Multiple endpoints with different polling rates
// High frequency state + low frequency indicators await using var session = new GameSession() .AddSource(WarThunderSources.CreateStateSource(hz: 60)) // 60Hz .AddSource(WarThunderSources.CreateIndicatorsSource(hz: 10)) // 10Hz .OnData<StateData>(data => Console.WriteLine($"[State] Speed: {data.IndicatedAirspeed}")) .OnData<IndicatorsData>(data => Console.WriteLine($"[Indicators] Oil: {data.OilTemp}ยฐC")); await session.StartAsync();
Read and analyze sessions
await foreach (var (timestamp, data) in SessionReader.ReadAsync<ACCPhysics>("session.dat")) { Console.WriteLine($"{timestamp}: {data.SpeedKmh} km/h"); }
Testing Without Games
Don't have the game installed? No problem! We provide Mockoon environments for testing integrations without running the actual game.
War Thunder Mock API
Test the War Thunder integration using Mockoon:
# Install Mockoon CLI npm install -g @mockoon/cli # Start the mock server cd mockoon mockoon-cli start --data war-thunder-environment.json
Or use the Mockoon Desktop App and import mockoon/war-thunder-environment.json.
The mock API provides:
- โ
Both
/stateand/indicatorsendpoints onlocalhost:8111 - โ Realistic dynamic data using Faker.js templates
- โ Multiple response scenarios (flying, ground, not in match)
- โ Handles 60Hz polling without issues
See mockoon/QUICKSTART.md for detailed instructions.
Performance
Typical metrics (ACC physics at 100Hz):
- CPU overhead: <1%
- Memory: ~50MB
- File size: ~15MB per hour (compressed)
- Frame loss: 0% with default settings
Project Structure
GameTelemetry/
โโโ GameTelemetry.Core/ # Framework
โ โโโ ITelemetrySource.cs
โ โโโ GameSession.cs
โ โโโ BinarySessionWriter.cs
โ โโโ SessionReader.cs
โโโ GameTelemetry.Games.ACC/ # ACC integration
โโโ GameTelemetry.Games.RocketLeague/
โโโ GameTelemetry.TestApp/ # Demo application
โโโ docs/ # Documentation
Contributing
We welcome contributions! See CONTRIBUTING.md for:
- Code style guidelines
- PR process
- Adding new game integrations
- Performance optimization tips
License
MIT License - see LICENSE
Roadmap
- Network source (UDP/TCP) for F1 games, Counter-Strike game state etc.
- NuGet packages
- More game integrations (iRacing, F1, BeamNG)
- Session merging/splitting
- Cloud upload integrations (S3, Azure Blob)
- Real-time dashboard web UI
Documentation
- Architecture Overview - Internal design and performance characteristics
- Creating Game Integrations - Guide for adding new games
- Glossary - Technical terms and concepts
- War Thunder Integration - HTTP telemetry API details
Credits
Built with:
Questions? Open an issue or start a discussion.