Important
Project status: pre-validation
This repository is built from protocol research, public documentation, kernel drivers, vendor tools, and community captures. It has not been end-to-end validated on real hardware or simulators. Hardware and game tables below represent research coverage and intended targets, not confirmed compatibility.
OpenRacing is a Rust-based force-feedback and telemetry stack for sim-racing wheels, pedals, and related hardware. It targets real-time processing at 1kHz with deterministic latency and safety interlocks.
The items below describe the current architecture and design targets. They are not a blanket claim of validated compatibility across every listed device, protocol, or game.
- Real-time Force Feedback at 1kHz - Deterministic processing pipeline with sub-millisecond latency for authentic racing feel
- Multi-Game Integration - Telemetry adapters for 61 simulators including iRacing, ACC, AMS2, rFactor 2, Forza, BeamNG.drive, Gran Turismo 7, Euro Truck Simulator 2, EA WRC, F1 25, and more
- Safety-Critical Design - Comprehensive fault injection testing, FMEA analysis, hardware watchdog integration, and 30,461+ tests
- Plugin Architecture - Extensible plugin system supporting both WASM and native plugins for custom DSP, telemetry, and LED effects
- Cross-Platform Support - Runs on Windows 10+ and Linux kernel 4.0+; macOS compiles but device I/O is not yet implemented
- Zero-Allocation Real-Time Path - Memory-safe real-time processing without heap allocations
- Comprehensive Diagnostics - Black box recording, replay analysis, and support bundle generation
- Profile Management - JSON-based force feedback profiles with schema validation and backward compatibility
OpenRacing contains research-backed VID/PID and protocol coverage for 150+ devices across 28 vendors. These entries are sourced from kernel drivers, community hardware databases, and manufacturer documentation — they are not yet validated on real hardware. See Device Support Matrix for per-device sourcing status.
| Vendor | VID | Models | FFB |
|---|---|---|---|
| Logitech | 0x046D |
G27, G29, G923, G Pro | ✅ HID PIDFF + TrueForce |
| Fanatec | 0x0EB7 |
CSL DD, GT DD Pro, Podium DD1/DD2, CSW v2.5 | ✅ Custom HID |
| Thrustmaster | 0x044F |
T150/Pro, TMX, T300RS/GT, TX, T500RS, T248/X, T-GT/II, TS-PC, TS-XW, T818 | ✅ HID PIDFF |
| Moza Racing | 0x346E |
R3, R5 V1/V2, R9 V1/V2, R12 V1/V2, R16, R21 | ✅ Serial/HID PIDFF |
| Simagic | 0x3670 / 0x0483 |
Alpha, Alpha Mini/Ultimate, M10, EVO/Sport/Pro | ✅ Custom HID |
| Simucube 2 | 0x16D0 |
Sport (17 Nm), Pro (25 Nm), Ultimate (32 Nm) | ✅ HID PIDFF |
| VRS DirectForce Pro | 0x0483 |
DirectForce Pro V1/V2 (20/25 Nm) | ✅ HID PIDFF |
| Heusinkveld | 0x04D8 |
Sprint, Ultimate+, Pro pedals | Input only |
| Asetek SimSports | 0x2433 |
Forte (18 Nm), Invicta (27 Nm), La Prima (12 Nm) | ✅ HID PIDFF |
| OpenFFBoard | 0x1209 |
All production firmware variants | ✅ HID PIDFF |
| FFBeast | 0x045B |
Joystick, rudder, wheel builds | ✅ HID PIDFF |
| Granite Devices | 0x1D50 |
IONI / Simucube 1, IONI Premium, ARGON | ✅ SimpleMotion V2 |
| SimXperience AccuForce | 0x1FC9 |
AccuForce Pro V1/V2 | ✅ HID PIDFF |
| Cammus | 0x3416 |
C5, C12, CP5/LC100 pedals | ✅ HID PIDFF |
| Leo Bodnar | 0x1DD2 |
Wheel Interface, FFB Joystick, Pedals, LC Pedals | |
| Cube Controls | 0x0483 |
GT Pro, Formula CSX-3 (provisional) | Input only |
| MMOS | 0xF055 |
FFB Controller | ✅ HID PIDFF |
| SHH Shifter | 0x16C0 |
SHH Newt, SHH Lite | Input only |
| Oddor | 0x1021 |
Wheelbases, pedals, handbrakes | |
| PXN | 0x11FF |
V10, V12, V12 Lite | |
| FlashFire | 0x2F24 |
900R, ES900R | |
| Generic HID button box | 0x1209 |
Arduino DIY, BangButtons, SimRacingInputs | Input only |
OpenRacing includes telemetry adapter scaffolding for 61 racing games and simulators. These represent researched or implemented adapters, not end-to-end validated game paths. See Game Support Matrix for per-adapter status.
| Game | Method | Port/Key |
|---|---|---|
| iRacing | Shared memory | IRSDKMemMapFileName |
| Assetto Corsa | OutGauge UDP | 9996 |
| AC Competizione (ACC) / ACC 2 | Shared memory | — |
| AC EVO / AC Rally | Shared memory | — |
| Automobilista 2 / AMS1 | Shared memory + UDP | 5606 |
| Project CARS 2 / Project CARS 3 | Shared memory + UDP | 5606 |
| rFactor 2 / rFactor 1 | Shared memory | — |
| RaceRoom Experience | R3E shared memory | $R3E |
| Forza Motorsport / Horizon 4 / Horizon 5 | Sled/CarDash UDP | 5300 |
| BeamNG.drive | LFS OutGauge UDP | 4444 |
| Gran Turismo 7 / GT Sport | PlayStation UDP | — |
| Le Mans Ultimate | Shared memory | — |
| Euro Truck Simulator 2 / ATS | Shared memory | — |
| EA WRC / WRC Generations | Codemasters UDP | — |
| DiRT Rally 2.0 / DiRT 3 / DiRT 4 / DiRT 5 | Codemasters UDP | — |
| F1 25 | Native UDP (format 2025) | 20777 |
| F1 24 / F1 23 | Codemasters bridge | 20777 |
| F1 Manager | Codemasters UDP | — |
| GRID Autosport / GRID 2019 / GRID Legends | Codemasters UDP | — |
| Wreckfest | Custom UDP | — |
| KartKraft | Custom UDP | — |
| Rennsport | Custom UDP | — |
| Richard Burns Rally | Plugin API | — |
| Live for Speed | OutGauge/InSim | 30000 |
| MudRunner / SnowRunner | Custom telemetry | — |
| MotoGP 23/24 / RIDE 5 | Codemasters-style UDP | — |
| Dakar Desert Rally | Codemasters UDP | — |
| NASCAR (Papyrus) / NASCAR 21 | Custom UDP | — |
| FlatOut UC/4 | Custom UDP | — |
| Trackmania | Plugin telemetry | — |
| Gran Turismo Sport | PlayStation UDP | — |
| Race Driver: GRID | Codemasters UDP | — |
| V-Rally 4 / Sébastien Loeb Rally EVO | Codemasters-style UDP | — |
| WRC 9 / WRC 10 / WTCR | Kylotonn UDP | — |
| Gravel / DiRT Showdown | Codemasters UDP | — |
| Game Stock Car / GTR2 / Race 07 | rFactor-style shared memory | — |
| ACC 2 | Shared memory | — |
| SimHub (bridge) | JSON UDP | 5555 |
- Rust nightly - Install from rustup.rs (see
rust-toolchain.toml) - Cargo - Included with Rust installation
- Platform-specific requirements:
- Windows: Windows 10 or later, Visual C++ Redistributable
- Linux: Kernel 4.0+, udev rules for device access
- macOS: macOS 10.15 or later (compiles; device I/O not yet implemented)
# Clone the repository
git clone https://github.com/EffortlessMetrics/OpenRacing.git
cd OpenRacing
# Build the project
cargo build --release
# Install the CLI tool
cargo install --path crates/clisudo cp packaging/linux/99-racing-wheel-suite.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm triggerNote: Packaged installers (MSI, deb, rpm) are not published yet.
# List connected devices
wheelctl device list
# Check system health
wheelctl health
# Apply a force feedback profile
wheelctl profile apply <device-id> path/to/profile.json
# View device status
wheelctl device status <device-id>
# Run diagnostics
wheelctl diag test- API Documentation - Generated rustdoc for all public interfaces
- Development Guide - Setting up the development environment and contributing
- System Integration - Integrating OpenRacing with racing games and hardware
- Architecture Decision Records - Design decisions and technical rationale
- Power Management Guide - Power management and device configuration
- Anticheat Compatibility - Compatibility notes for various anticheat systems
- Project Status - What is researched, implemented, and validated
OpenRacing is organized as a Cargo workspace with 85 crates following the Single Responsibility Principle:
| Category | Crates | Description |
|---|---|---|
| Core | engine, schemas, service |
RT force feedback engine, shared schemas, background service |
| CLI & UI | cli, ui |
Command-line tool and safety displays |
| Plugins | plugins |
WASM + native plugin runtime |
| Device Protocols | hid-*-protocol (×17) |
Per-vendor HID protocol microcrates (Moza, Simagic, Fanatec, Thrustmaster, etc.) |
| Protocol Primitives | hbp, moza-wheelbase-report, ks, input-maps |
Pure parsers/encoders: I/O-free, allocation-free, deterministic |
| Game Telemetry | telemetry-* (×21) |
Per-game telemetry adapters + shared infrastructure |
| IPC & Transport | ipc, openracing-ipc |
gRPC + Unix socket transport layer |
| Compatibility | compat |
Legacy API migration helpers |
| Testing | integration-tests |
End-to-end, performance gate, and soak tests |
If you can test OpenRacing on real hardware, please open an issue with:
- Device make/model and firmware version
- OS and version
- Simulator/game title and version
- Connection mode (USB / HID / serial / wireless)
- Logs and reproduction steps
We welcome contributions! Please see DEVELOPMENT.md for detailed guidelines on:
- Setting up your development environment
- Running tests and benchmarks
- Code style and formatting requirements
- Submitting pull requests
This project is dual-licensed under either:
- MIT License - LICENSE-MIT or https://opensource.org/licenses/MIT
- Apache License, Version 2.0 - LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0
You may choose either license for your use.
- Issues: Report bugs and request features via GitHub Issues
- Discussions: Join community discussions at GitHub Discussions
- Documentation: Comprehensive documentation available in the
docs/directory
OpenRacing is built with the following open-source projects:
- Tokio - Asynchronous runtime
- Serde - Serialization framework
- Prost - Protocol Buffers implementation
- Tracing - Instrumentation framework
Repository: https://github.com/EffortlessMetrics/OpenRacing