Skip to content

EffortlessMetrics/OpenRacing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

645 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenRacing

CI Coverage codecov Documentation License: MIT OR Apache-2.0 Platform: Windows Platform: Linux Platform: macOS Rust

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.

Architecture and goals

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

Hardware coverage

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 ⚠️ Partial FFB
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 ⚠️ Partial
PXN 0x11FF V10, V12, V12 Lite ⚠️ Partial
FlashFire 0x2F24 900R, ES900R ⚠️ Partial
Generic HID button box 0x1209 Arduino DIY, BangButtons, SimRacingInputs Input only

Telemetry coverage

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

Quick Start

Prerequisites

  • 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)

Building from source

# 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/cli

Linux: udev rules

sudo cp packaging/linux/99-racing-wheel-suite.rules /etc/udev/rules.d/
sudo udevadm control --reload-rules
sudo udevadm trigger

Note: Packaged installers (MSI, deb, rpm) are not published yet.

Basic Usage

# 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

Documentation

Project Structure

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

Help validate

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

Contributing

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

License

This project is dual-licensed under either:

You may choose either license for your use.

Support

  • Issues: Report bugs and request features via GitHub Issues
  • Discussions: Join community discussions at GitHub Discussions
  • Documentation: Comprehensive documentation available in the docs/ directory

Acknowledgments

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

About

Rust 1kHz force-feedback + telemetry stack for sim racing wheels. Safety-first. Cross-platform. Plugins + UI + CLI.

Topics

Resources

License

Unknown, MIT licenses found

Licenses found

Unknown
LICENSE-APACHE
MIT
LICENSE-MIT

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors