An open-source plugin for MX Bikes, GP Bikes, and Kart Racing Pro with customizable on-screen displays, immersion features, social tools, and streaming/broadcasting overlays.
Default HUD layout. All elements are fully customizable - see Tips & Tricks for setup ideas.
Quick Start
- Download the installer above, run it, and follow the on-screen steps. Windows may show several “unknown publisher” warnings - why & how to proceed.
- Launch the game and load a track
- Move the mouse to bring up the pointer, then right-click and drag to reposition elements
- Press Tilde (~) or click the settings button to toggle elements, adjust opacity, and more
See Installation for detailed setup instructions, or Configuration to fine-tune everything.
Requirements:
mxbmrp3-Setup.exemxbmrp3.zippluginsC:\Program Files\[Game]\) > open pluginsplugins\ folder:
mxbmrp3.dlo for MX Bikesmxbmrp3_gpb.dlo for GP Bikesmxbmrp3_krp.dlo for Kart Racing Promxbmrp3_data\ folder to the plugins\ folderDo NOT delete the existing game files (proxy64.dlo, proxy_udp64.dlo, xinput64.dli, or telemetry64.dlo for GP Bikes) - these are native game files, not old plugin versions.
Your directory should look like this after installation (files vary slightly by game):
[Game]/
│ mxbikes.exe / gpbikes.exe / kart.exe
│ ...
│
└───plugins/
├── mxbmrp3_data/ ← Add this folder (from release)
│ ├── fonts/ ← Font files (.fnt)
│ ├── textures/ ← Texture files (.tga)
│ ├── icons/ ← Icon files (.tga)
│ └── web/ ← Web overlay files (HTML/CSS/JS)
├── mxbmrp3.dlo ← Add this (MX Bikes only)
├── mxbmrp3_gpb.dlo ← Add this (GP Bikes only)
├── mxbmrp3_krp.dlo ← Add this (Kart Racing Pro only)
├── proxy_udp64.dlo ← Keep (native game file)
├── proxy64.dlo ← Keep (native game file)
├── xinput64.dli ← Keep (native game file)
└── telemetry64.dlo ← Keep (GP Bikes only)
Launch the game and load into a track. A few elements are enabled by default, so the HUD shows up right away - from there, open the settings menu to configure everything (see Configuration). If nothing appears, see Troubleshooting.
Keyboard and controller hotkeys can be customized in Settings > Hotkeys. By default, only the settings menu hotkey is configured:
The plugin is active in-game only - it does nothing in the main menus, so all configuration happens on track.
Use the settings menu (Tilde or the settings button in the top-right) to configure all HUDs and widgets. Hover over any setting to see its description - all controls have in-game tooltips explaining their function.
With Auto-Save on (the default), changes are saved automatically when you leave the track, so configuring HUDs never causes a stutter. You can also save at any time with the Save button at the bottom of the settings menu, which lights up whenever you have unsaved changes.
The settings menu provides global settings that apply to all profiles, followed by per-element tabs for the individual HUDs and widgets:
| Icon | Tab | Description |
|---|---|---|
| General | Profiles, preferences, web overlay, presence integrations, usage analytics (see privacy) | |
| Appearance | Display units/format, fonts, color theme, and HUD placement (grid snap, clamp) | |
| Hotkeys | Keyboard and controller bindings | |
| Riders | Track specific riders with custom colors and icons | |
| Rumble | Controller vibration feedback effects | |
| Helmet | First-person helmet overlay configuration | |
| Director | Auto-director for spectating and replays - automatically follows the most interesting rider | |
| Updates | Check for new versions and install updates in-game |
Plus a tab for each individual HUD and Widget, for per-element visibility, scale, opacity, and options.
Four separate profiles store complete HUD layout configurations:
Auto-switch (disabled by default) automatically changes profiles based on session type.
HUDs are the larger data displays - each gets its own settings tab with options like column/row toggles, gap modes, and textures. Widgets are simpler, single-purpose readouts (one number, gauge, or dial) with just position, scale, and opacity; rather than a tab each, they’re all configured together under the shared Widgets tab.
| Icon | HUD | Description |
|---|---|---|
| Standings | Live race positions with gaps, status, and tracked rider indicators | |
| Map | Top-down track map with rider positions (click to spectate) | |
| Radar | Proximity radar with approach alerts and distance arrows | |
| Lap Log | Historical lap times with PB indicators | |
| Ideal Lap | Best sector times and theoretical ideal lap | |
| Charts | Session-progression charts: position, race trace, gap to leader, pace | |
| Telemetry | Throttle, brake, suspension graphs | |
| Records | Online lap records (CBR or MXB-Ranked) with personal bests (MX Bikes only) | |
| Friends | Steam friends in-game: their server/track and who’s joined your session | |
| Pitboard | Pitboard-style lap information display | |
| Session | Session info (type, track, format, server, weather) | |
| Timing | Split and lap times with gap comparisons | |
| Gap Bar | Visual gap-to-PB bar with position markers | |
| Notices | Race status notices (wrong way, blue flag, PB alerts, last lap, finished) | |
| Event Log | Timestamped feed of race events (laps, penalties, finishes, pit activity) | |
| FMX | Freestyle trick detection with scoring and chain combos (MX Bikes and GP Bikes only) | |
| Stats | Riding stats with columns for last lap, session, and all-time totals | |
| Performance | FPS and plugin CPU usage |
| Widget | Description |
|---|---|
| Position | Race position |
| Lap | Current lap number |
| Time | Session time/countdown |
| Clock | Real-time clock |
| Gear | Current gear |
| Speed | Current speed |
| Bars | Vertical telemetry bars (throttle, brake, suspension, etc.) |
| Lean | Bike lean angle with arc gauge |
| G-Force | Lateral/longitudinal G-force gauge with peak marker |
| Fuel | Fuel calculator with consumption tracking |
| Speedo | Analog speedometer |
| Tacho | Analog tachometer |
| Compass | Heading dial (classic needle or modern rotating card) |
| Gamepad | Controller visualization |
| Tyre Temp | Front and rear tyre temperatures (GP Bikes only) |
| ECU | Engine map, traction control, engine braking and anti-wheeling (GP Bikes only) |
The plugin includes a built-in HTTP server that streams live race data to a browser-based overlay. It’s designed for use as an OBS Browser Source, but works just as well opened directly in a browser.
http://localhost:8080 (default port - use the port shown in step 1 if changed)The overlay includes a built-in settings panel for configuring display options:
Colors and fonts sync automatically from your in-game settings. To customize the overlay’s HTML, CSS, or JS, see Modding > Web Overlay Files.
The Records HUD fetches online lap records from CBR or MXB-Ranked. Enable “Auto-fetch” in Settings > Records to automatically load records when you enter a track. Records also work while spectating.
Bind the Segment Add and Segment Remove hotkeys (Settings > Hotkeys, unbound by default) to drop timing points on the track as you ride. Drop two and the Timing HUD times the section between them - live, with a delta to your best for it - so you can drill a single corner or rhythm section without completing a full lap. Remove the points to return to normal split/lap timing.
Enable the Director (Settings > Director, or click its camera-icon status button) and it automatically cuts the spectate camera to the most interesting rider or battle, broadcast-style, so you don’t have to switch riders by hand. It works while spectating live and in replays - a great way to re-watch or record a session and let it direct the action for you. It’s off by default (so it never overrides your manual camera unasked), and it also drives the Web Overlay’s battle panel.
Left-click on any rider on the Map HUD or Standings HUD to switch the spectate camera to that rider.
Enable the Session HUD (Settings > Session) to show the server name, track, and session format on screen for your viewers. The Pitboard and Gamepad widgets also work well on stream - both have fully customizable textures, and the Gamepad widget shows your live controller inputs. Pair with Discord Rich Presence (Settings > General) to show your current session and track in your Discord profile. For a broadcast-style overlay, see Web Overlay.
Set Settings > Appearance > HUD Display to Companion (or Both) to open a standalone window you can drag and maximize on a second monitor. Each HUD keeps its own on/off state and position there (drag or toggle it while your mouse is over that window), so you can run a minimal in-game layout and a full dashboard on the second screen at once. It needs no browser or OBS - for a streamable browser source instead, see Web Overlay.
Enable Steam Friends (Settings > General) to broadcast your session to friends and populate the Friends HUD: which of your Steam friends are in-game, the server and track they’re on, and who’s joined your session.
Many additional options are available by editing the INI file directly. The file is well-commented and organized by HUD section. Each HUD section also supports per-element color and font overrides. Colors use ABGR hex values; fonts use the font filename (without .fnt) of any file in the fonts/ folder. For example:
[StandingsHud]
classicLayout=1 ; remove number plates and brand color strips
[SpeedWidget]
color_primary=0xff00ff00 ; green text (ABGR format)
font_title=RobotoMono-Bold ; Roboto Mono Bold font
Use the Color Override Picker to convert RGB colors to ABGR format. See Advanced Settings for how to edit and hot-reload the INI file.
Turn down the map’s Detail, slim or disable its Track outline, and hide HUDs you don’t use. Beyond that, take stock of your plugins folder: every installed plugin does work on every frame whether you use it or not, and some cost far more than others. Removing plugins you don’t need is often the biggest FPS win of all.
By default the plugin does its work during the game’s frame. Set pluginThread=1 in the [Advanced] section of the INI file to move the plugin’s HUD building and event handling onto a separate thread, so a heavy HUD rebuild can’t cost you frames. It’s off by default and experimental - try it if you’re chasing the smoothest possible frame times. Toggle it live with the Reload Config hotkey.
The next three are game settings, not plugin settings - listed here because they pair well with the plugin’s HUDs:
Create an empty file called pitboard.cfg in [Game]\misc\hud\ (create the directories if needed). This removes the default 2D pitboard while keeping the small 3D pitboard in the game world. Delete the file to restore it.
Enable it under Simulation > “Show Rider Stand”. To customize the icon or its position, extract rider.cfg and riderstand.tga from misc.pkz\misc\helpers\ to [Game]\misc\helpers\ and edit them there.
Toggle it under Simulation > “Show HUD”. Disable it if you’d rather use the plugin’s GearWidget instead. To customize the graphics or position, extract gear.tga, hud.cfg, LCD.fnt, and switch.tga from misc.pkz\misc\hud\ to [Game]\misc\hud\ and edit them there.
All plugin settings are stored in mxbmrp3_settings.ini in your user data folder.
In-game vs INI-only settings:
INI structure:
[HudName] - Base/default settings for a HUD[HudName:Practice], [HudName:Qualify], [HudName:Race], [HudName:Spectate] - Profile-specific overrides (only values that differ from base)Editing the INI file:
With the game closed (recommended):
mxbmrp3_settings.iniHot reload (for rapid iteration):
If Auto-Save is enabled, your in-game state is written back when you leave the track, overwriting any manual edits you made to the INI during that session - so disable Auto-Save first for hot reload.
To customize MXBMRP3, place your files in Documents\PiBoSo\[Game]\mxbmrp3\. This is separate from the plugin install folder ([Game]\plugins\mxbmrp3_data\), so your customizations are preserved across plugin updates. Do not edit the bundled files in [Game]\plugins\mxbmrp3_data\ directly - they will be overwritten on update (with the exception noted for custom.css below).
Add custom fonts, textures, and icons by placing them in the appropriate subfolder:
mxbmrp3/
├── fonts/ ← Custom .fnt files
├── textures/ ← Custom .tga textures
├── icons/ ← Custom .tga icons
└── web/
└── logos/ ← Sponsor/logo PNGs for the web overlay slideshow
On game startup, the plugin syncs these files to the plugin’s data directory ([Game]\plugins\mxbmrp3_data\). User files with the same name as bundled assets will override them. Restart the game after adding or modifying assets.
Textures use the naming convention {element_name}_{number}.tga (e.g., pitboard_hud_2.tga). Drop them into the textures\ subfolder and they’re auto-discovered and selectable via the Texture control in each HUD’s settings.
Gamepad - The Gamepad widget ships with Xbox and PlayStation layouts. To customize them, copy gamepad_widget_1.tga (Xbox) or gamepad_widget_2.tga (PlayStation) from [Game]\plugins\mxbmrp3_data\textures\ to the textures\ subfolder and edit them. Source design files (PSD) are available in assets/.
Helmet - The helmet overlay uses two textures: helmet_upper_1.tga (visor rim/top) and helmet_lower_1.tga (chin bar). Author at screen resolution with transparent visor openings and ~10% bleed on all sides (extra opaque border beyond the visible area) so tilt and vibration don’t expose hard edges.
Fonts (.fnt files) are auto-discovered and assignable to categories (Title, Normal, Strong, Marker, Small) in Settings > Appearance. To generate fonts, use the fontgen utility provided by PiBoSo. See this forum post for details. An example configuration is provided in fontgen.cfg.
Icons (.tga files) placed in the icons\ subfolder are discovered alphabetically and available for tracked rider customization in Settings > Riders.
The overlay files are plain HTML, CSS, and JS. To customize them, place modified files in Documents\PiBoSo\[Game]\mxbmrp3\web\ - user files override the bundled versions on startup and are preserved across updates.
style.css - The :root block holds the theme tokens: colors, fonts, sizes, spacing, and animation timings. Colors and fonts sync from the game (to override those in custom.css, add !important); sizes, spacing, and animations can be set directly.custom.css - Optional file you create yourself for style overrides. Copy the bundled custom-sample.css to custom.css to start - it’s a commented reference with ready-made recipes (light theme, compact, no-motion, fonts). Loaded after style.css, so its rules take precedence. Use it for small theme tweaks instead of forking the full stylesheet. Tip: append ?demo to the overlay URL to preview your theme against a synthetic race without launching the game.index.html - Overlay structureoverlay-config.js - The CONFIG block at the top defines defaults for all settings. These are overridden by the settings panel (stored in localStorage).| File | Description |
|---|---|
mxbmrp3_settings.ini |
All HUD settings (positions, visibility, options) |
mxbmrp3_tracked_riders.json |
Tracked riders with colors and icons |
mxbmrp3_rumble_profiles.json |
Per-bike rumble effect profiles |
mxbmrp3_stats.json |
Unified stats, personal bests, and odometer data |
mxbmrp3_analytics.json |
Anonymous random install ID for usage analytics (see Privacy) |
The installer isn’t code-signed yet, so Windows may show one or more “unknown publisher” / “not commonly downloaded” warnings. These are reputation warnings about the unsigned installer and its low download count, not a malware detection. Depending on your browser you may see up to three, in this order:
... next to the file, then Keep > Show more > Keep anyway (Chrome is similar).plugins\ folder under Program Files.Installing manually from the ZIP archive avoids most of these, since there’s no installer to run. If you’d like to check the download anyway, you can scan it on VirusTotal.
The long-term fix is a code-signing certificate (a paid yearly cost, and one of the things donations would go toward). Until that’s in place, the steps above are all that’s needed.
mxbmrp3_data\ are in the correct plugins\ folder. Games have two directories - the game installation (contains the game .exe) and user data (Documents\PiBoSo\[Game]\). Plugins go in the game installation, not Documents.mxbmrp3.dlo (MX Bikes), mxbmrp3_gpb.dlo (GP Bikes), or mxbmrp3_krp.dlo (Kart Racing Pro)plugins\ folder next to the game .exe you actually launch. If not, run the installer again and select the correct path, or install manually.mxbmrp3_data\ folder is in the plugins\ folder alongside the DLO file (see directory structure)mxbmrp3_data\ folder contains fonts, textures, and icons required for renderingmxbmrp3.dlo (MX Bikes), mxbmrp3_gpb.dlo (GP Bikes), or mxbmrp3_krp.dlo (Kart Racing Pro) should exist in your plugins folder. Other plugins’ DLO files are fine.xinput64.dli from the plugins folder, controller input may stop workingmxbmrp3.dlo as the faulting module, see Feedback & IssuesThe plugin sends a small anonymous usage ping per game launch, so the developer can gauge how many people actively use it. It is on by default and you can opt out anytime in Settings > General > Integrations (the “Analytics” toggle). Turning it off sends one final anonymous opt-out ping, then nothing more.
What it sends:
| Data | Details |
|---|---|
| Install ID | A random UUID made on your machine (stored in mxbmrp3_analytics.json), not tied to your name, account, hardware, or IP. Delete the file to reset it. |
| Version & game | The plugin version and game, and whether this launch is a fresh install or an upgrade |
| Enabled features | HUDs, widgets, web overlay, Discord, Steam, rumble, update channel, and so on, as anonymous on/off flags |
| Environment | Operating system and version/build (e.g. Windows 11 22631, or Wine/Proton on Linux), language, and whether it’s the Steam or standalone build |
| Usage counters | How many times this install has launched, and how many days since it was first installed |
| Session length | How long a play session lasted (start to clean exit), so the developer can gauge typical usage |
| Crashes | If the game crashed last session: which module faulted and where, the error code and access type (read/write/execute), the plugin and game versions at the time, and a short backtrace of the faulting call stack (the top several module-and-offset frames, so a plugin fault can be told apart from a bystander to a game or driver crash) - enough to group similar crashes, but never the memory dump or its contents. Reported on the next launch |
| Link clicks | Which in-plugin link you click (docs, community, or support/donate) - nothing else |
What it does not send: no names, no in-game/online activity, no telemetry, no lap times, no server or rider data, and no crash dump or log (those stay on your machine) - nothing identifying. The pings are fire-and-forget and never affect performance.
Analytics are processed by two open-source services: Aptabase handles the detailed events above, and GoatCounter receives a single per-launch hit as an aggregate headcount. Both are covered by the one Analytics toggle.
When analytics is on, the plugin may also fetch a small config file from this repository that can only ever reduce what’s sent, never add to it. Turning the Analytics toggle off stops this too.
Bug reports, feature requests, and questions are all welcome. Open an issue on GitHub or leave a comment on MXB-Mods.
A short description of what you were doing when the issue happened (track, session type, bike, and any reproduction steps) helps a lot.
For crashes, please attach both files from Documents\PiBoSo\[Game]\mxbmrp3\crashes\ - the plugin writes them automatically whenever it catches an unhandled fault. (The plugin catches any crash in the game, so these are usually faults in the game itself, not plugin bugs.)
Before reporting, check Known MX Bikes Crashes — it lists game-engine crashes the plugin’s crash handler has caught, with Event Viewer fault offsets you can match against yours. If your crash is listed, it’s a known game bug with no plugin fix possible.
mxbmrp3_crash_<timestamp>_<pid>.dmp - the minidump (state at the moment of crash)mxbmrp3_crash_<timestamp>_<pid>.log - a snapshot of the plugin log captured at crash timeGrab the matching pair (same timestamp/pid) for the crash you want to report.
If you used the installer, remove the plugin like any other Windows app: open Settings > Apps > Installed apps (or Control Panel > Programs and Features), find MXBMRP3, and choose Uninstall. You can also run mxbmrp3_uninstall.exe directly from any game’s plugins\ folder. The uninstaller lets you pick which games to remove from, then deletes the plugin DLO, the mxbmrp3_data\ folder, and the registry entry.
If you installed from the ZIP, delete the files you added from each game’s plugins\ folder:
mxbmrp3.dlo, mxbmrp3_gpb.dlo, or mxbmrp3_krp.dlo)mxbmrp3_data\ folderLeave the native game files in place (proxy64.dlo, proxy_udp64.dlo, xinput64.dli, and telemetry64.dlo for GP Bikes). These are native game files, not part of the plugin.
Both methods leave your settings, profiles, and stats untouched, so an upgrade or reinstall keeps them. To remove them as well, delete the per-game folder:
Documents\PiBoSo\[Game]\mxbmrp3\
Built with C++17, Visual Studio 2022, the PiBoSo Plugin API, and Claude Code.
DEVELOPMENT.md - building (Windows shipping build + Linux cross-build) and running the test suitesTESTING.md - the layered test suite (unit / integration / specialized) and how to add a testARCHITECTURE.md - full technical documentation with diagramsCLAUDE.md - quick-start context for developers and AI assistantsQuick start: clone, open mxbmrp3.sln in Visual Studio 2022 (x64), and build. The full configuration table, the Linux cross-build, and the unit/integration tests are documented in DEVELOPMENT.md.
Licensed under the MIT License. See THIRD_PARTY_LICENSES.md for bundled asset attributions.
Thanks to everyone in the MX Bikes community who tested, reported bugs, and shared ideas.
MXBMRP3 is free and open-source, and will stay that way. If it’s added something to your time in the game and you’d like to chip in toward continued development, you can do so here:
No perks, no priority, no expectations. Just appreciated.