SimHub plugin & device host for StreamDock and Stream Deck hardware.
JIB bridges SimHub telemetry with StreamDock and Stream Deck LCD button boxes. Render live data on hardware keys, map physical controls to any action (keyboard, mouse, vJoy, media, system), manage multi-page touch layouts, and control LEDs — all from a native Windows Configurator.
SimHub.exe
└── SimHub.JIB.Plugin.dll ────┐
│ TCP (port 16555, line-delimited JSON)
JIB.Configurator.exe (WinUI 3) ───┤ TCP (port 16550, 4-byte length-prefix JSON)
│
JIB.Service.exe (Windows host) ───┘
├── Plugins: SimHub, OBS, HTTP, Keyboard, Mouse, vJoy, Media, System Monitor, System Commands
├── SkiaSharp rendering (real-time CPU raster → JPEG)
└── StreamDockNative.dll (C++ USB HID + SDK passthrough)
- JIB.Service — background host managing hardware, plugins, rendering, and IPC
- JIB.Configurator — WinUI 3 desktop application for visual editing
- SimHub.JIB.Plugin — lives inside SimHub, streams telemetry to the host
- StreamDockNative — C++ native layer for USB communication
The Configurator and SimHub plugin communicate with the host over TCP. There is no shared DLL between them.
- Download the latest ZIP from GitHub Releases
- Extract the package into your SimHub directory
- Launch
JIB.Service.exeto start the device host (or install as a Windows service) - Open
JIB.Configurator.exe, connect to the host, and start configuring
Real-time SimHub telemetry rendered as JPEG frames on device LCD keys. Supports numeric gauges, bar gauges, text overlays, and state-dependent coloring (normal vs. alert states). Delta hashing avoids re-rendering frames that haven't changed.
Supported telemetry categories: speed, RPM, gear, fuel, water/oil temperatures, turbo pressure, ERS, DRS, ABS, TC, brake bias, headlights, wipers, flags, cruise control, parking brake, retarder, diff lock, navigation, trucking data, and more.
Every hardware button, knob turn/press, touch zone, and swipe gesture can be mapped to:
| Category | Examples |
|---|---|
| SimHub Control Mapper | Custom roles defined in SimHub |
| OBS Studio | Stream, record, scenes, sources, virtual camera |
| HTTP / Webhook | GET/POST/PUT/PATCH/DELETE to any URL |
| Keyboard | Any key or hotkey combination |
| Mouse | Click, double-click, scroll, move |
| vJoy | Virtual joystick buttons (128) and axes (8) |
| Media | Play/Pause, next/previous, volume, per-app audio |
| System | Shutdown, restart, sleep, lock, brightness, monitor off |
| Internal | Touch page navigation |
Touchscreen devices (N4, N4 Pro) support multiple main pages, each containing nested touch pages. Swipe left/right navigates between pages. A "home" page anchors the default view. Full CRUD from the Configurator.
- Global RGB LED color — single color across all device LEDs
- Per-key LED — individual colors per key (N4 Pro)
- Knob LED rings — per-knob RGB control (N4 Pro)
- Panel brightness — LCD screen brightness 0–100 %
- Animated GIF — key GIF and background GIF (device-dependent)
Feature transport (SDK vs. native HID) is resolved per device model, not via a global switch.
- Vehicle profiles with learned telemetry min/max values per car
- Per-profile mapping overrides on top of global workspace
- Composite workspace save/load — atomic save of bindings, subscriptions, render profile, behavior, and layout
JIB loads plugins from Plugins/ at startup. Nine built-in plugins are included. Third-party plugins can be authored against the JIB.Sdk library.
Plugins have:
- Typed settings (TextBox, Toggle, NumberBox, ComboBox, Endpoint)
- Health monitoring (10 s interval, auto-disable after 5 consecutive failures)
- Enable/disable per plugin from the Configurator
[JibPlugin]attribute for display metadata
Live telemetry from any racing simulator. Exposes hundreds of telemetry fields as assignable display functions. Also publishes SimHub Control Mapper roles and event triggers for bidirectional control. Game-aware: rebuilds path mappings automatically when the active simulator changes. Per-vehicle learned value profiles.
Map any StreamDock button to a keyboard key or key combination (modifiers + key). Dispatches Press/Release events to the OS for held actions like push-to-talk or modifier keys.
Left, middle, and right clicks. Double-click. Scroll up/down. Relative cursor movement (delta) and absolute positioning. Configurable sensitivity (1–200 %) and scroll speed (1–20 notches).
Virtual joystick output via the vJoy driver. Auto-discovers configured vJoy devices. Up to 128 buttons and 8 axes (X, Y, Z, RX, RY, RZ, Slider1, Slider2) per device. Press/Release dispatch for held button states, PulseOnly for instant axis actions.
Multimedia transport: Play/Pause, Next Track, Previous Track. Volume Up, Volume Down, Mute. Per-application audio discovery dynamically creates individual volume controls for every active audio application. Master volume level exposed as a renderable gauge (0–100 %).
System resource telemetry gauges: CPU usage, RAM, GPU (usage, VRAM, temperature), network throughput, uptime, battery level. Configurable refresh interval (1–60 s). All metrics exposed as renderable gauges and assignable display functions.
System-level operations dispatched from any button: Shutdown, Restart, Sleep, Hibernate, Lock, Brightness Up/Down, Monitor Off. Also supports per-card program launch — map any button to launch an executable with custom arguments, working directory, and window visibility, configured via the mapping metadata.
Control OBS Studio via WebSocket v5. 8 built-in actions: toggle stream, record toggle/pause/resume, replay buffer toggle/save, virtual camera toggle, screenshot. Dynamic scene switching and source visibility toggling. Live telemetry: stream status (LIVE/OFF), recording status (REC/PAUSE/OFF), and current scene name displayed on buttons with colour-coded gauges. Zero external dependencies — native System.Net.WebSockets client with SHA-256 authentication.
Send HTTP requests on button press. Configure up to 10 endpoints, each with: display name, URL, HTTP method (GET/POST/PUT/PATCH/DELETE), custom JSON headers, and request body. Configurable timeout (1–60 s). Last status code and request duration rendered on the assigned button. Health degrades when the last request failed.
Every hardware control follows the same mapping flow:
Plugin Provider → Assignable Function → Dispatch Mode → Hardware Control
Select a plugin provider (SimHub, OBS, HTTP, Keyboard, Mouse, vJoy, Media, System) and one of its assignable functions — a telemetry gauge, a keyboard key, a SimHub role, an OBS action, a webhook, a media command, or a system action.
| Mode | Behaviour | Use for |
|---|---|---|
| Press / Release | Held signal with distinct press and release events | Keyboard shortcuts, vJoy button hold, push-to-talk |
| PulseOnly | Instant one-shot trigger | Page navigation, mute, system commands |
| Auto | Plugin-recommended default (fallback depends on MappingTargetKind) |
General use |
Bind the mapping to a physical button press/release, knob turn (left/right), knob press, touch zone tap, or swipe gesture (left/right). The Configurator shows a live preview as you edit.
| Control | Supported on |
|---|---|
| Button press / release | All LCD key devices |
| Knob turn left / right | N3, N4, N4 Pro, M3, K1 Pro |
| Knob press | N4, N4 Pro, K1 Pro |
| Touch zone tap | N4, N4 Pro (touchscreen surfaces) |
| Swipe left / right | N4, N4 Pro (touchscreen surfaces) |
| Auxiliary button | N3, N1, M18 (non-LCD buttons) |
JIB maintains a hardware catalog with VID:PID identification for 15 device families across 30+ branded models.
| Brand | Model | Status | Family | Details |
|---|---|---|---|---|
| MiraBox | N3 | Full support | SDN3 | 3×2 keys · 3 knobs · 3 aux buttons · native brightness |
| Ajazz | AKP03 / AKP03E / AKP03R | Full support | SDN3 | |
| Soomfon | Stream Controller SE | Full support | SDN3 | |
| Mars Gaming | MSD-TWO | Full support | SDN3 | |
| TreasLin | N3 | Full support | SDN3 | |
| Redragon | Skyrider SS-551 | Full support | SDN3 | |
| MiraBox | 293 V2 / V3 | Full support | SD293 | 5×3 keys |
| MiraBox | 293S | Full support | SD293S | 5×3 keys · 3 screens · key GIF |
| FHOOU | 293S | Full support | SD293S | Rebrand of MiraBox 293S (VID:PID 5548:6670) |
| Ajazz | AKP153 / AKP153E / AKP153R | Full support | SD293S | |
| Mars Gaming | MSD-ONE | Full support | SD293S | 293S rebrand (VID:PID 0B00:1000 / 0B00:1005) |
| Maddog | GK150K | Full support | SD293S | |
| Risemode | Vision 01 | Full support | SD293S | |
| TMICE | Stream Controller | Full support | SD293S | |
| Soomfon | XF-CN001 | Full support | SD293S | |
| MiraBox | N4 / N4 E | Full support | SDN4 | 5×2 keys · 1 touchscreen · 4 knobs · touch/swipe · native brightness |
| Ajazz | AKP05E | Full support | SDN4 | Non-Pro family |
| MiraBox | N4 Pro / N4 Pro E | Full support | SDN4 Pro | 5×2 keys · 1 touchscreen · 4 knobs · per-key LED · knob LED rings · native brightness |
| Ajazz | AKP05E PRO | Full support | SDN4 Pro | Pro family · knob LED rings · vibration |
| MiraBox | N1 | Partial support | SDN1 | 5×3 keys · 3 screens · 1 knob · 2 aux buttons |
| VSD | N1 | Partial support | SDN1 | Hardware validation in progress |
| MiraBox | M18 / M18E | Partial support | SDM18 | 5×3 keys · 3 aux buttons · key + BG GIF |
| MiraBox | M3 | Full support | SDM3 | 5×3 keys · 3 knobs · key + BG GIF |
| MiraBox | XL / XLE | Experimental | SDXL | 8×4 keys · key + BG GIF · pending end-to-end validation |
| MiraBox | K1 Pro / K1 Pro EU | Experimental | K1Pro | 3×2 keys · 3 knobs · key GIF · pending end-to-end validation |
| Elgato | Stream Deck Classic | Experimental | SDClassic | 5×3 keys · pending end-to-end validation |
| Elgato | Stream Deck XL | Experimental | SDDXL | 8×4 keys · pending end-to-end validation |
| Elgato | Stream Deck Neo | Experimental | SDNeo | 8 keys · 1 touchscreen · touch/swipe · pending end-to-end validation |
| Elgato | Stream Deck + | Experimental | SDPlus | 8 keys · 1 touchscreen · 4 knobs · touch/swipe · pending end-to-end validation |
| Elgato | Stream Deck + XL | Experimental | SDPlusXL | 36 keys · 1 touchscreen · 6 knobs · touch/swipe · pending end-to-end validation |
Status legend:
- Full support — validated in normal use, recommended for end users
- Partial support — usable, features or behaviours still under validation
- Experimental — native driver registered, not yet validated end to end
The JIB Configurator is a WinUI 3 desktop application for visual editing.
| Screen | Purpose |
|---|---|
| Overview | Host status at a glance |
| Devices | Hardware inventory, capabilities, diagnostics per device |
| Controls | Visual button layout editor, touch pages, mapping assignment |
| Plugins | Plugin management — health, settings, enable/disable |
| Settings | Host settings — palette, FPS, brightness, transport policy |
| Hosts | LAN host discovery and connection |
| Transports | TCP transport configuration |
| Logs | Runtime log viewer |
| Debug | Developer diagnostics |
The Configurator uses a global save entry point. Individual editors show their state via colour-coded chips but do not have local save buttons:
- Gray — clean, no pending changes
- Orange — dirty, unsaved changes
- Blue — saving in progress
- Green — saved successfully
- Red — save failed
Third-party plugins can be authored against the JIB.Sdk library. Two authoring modes are available:
- SDK-only — parameterless constructor, portable, suitable for third-party distribution
- Internal host — constructor receives
DeviceHostPluginServiceswith full access toRuntimeProviderChangeTracker, transports, and host services
Key SDK concepts:
IDeviceHostPlugin/DeviceHostPluginBase— base plugin contractRuntimeProviderChangeTracker— push live state updates (catalog changes, control states)[JibPlugin]attribute — display metadata (name, description, version)- Typed settings system — auto-generated UI editors in the Configurator
- Static vs. dynamic catalogs — choose based on whether functions are known at compile time
- Health monitoring — automatic with configurable disable threshold
The IPC protocol is documented in docs/IPC-Protocol.md. Sample plugins are provided in Plugins/Samples/.