Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

JIB — Jack In the Box

Device host & configuration suite for StreamDock and Stream Deck hardware.

JIB renders live data on StreamDock and Stream Deck LCD button boxes. 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.


Architecture

JIB.Configurator.exe (WinUI 3) ───┐
│ TCP (port 16550, 4-byte length-prefix JSON)
JIB.Service.exe (Windows host) ───┘
├── Plugins: SimHub, OBS, HTTP, Camera, 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
  • StreamDockNative — C++ native layer for USB communication

Plugins are loaded from Plugins/ by the host. The SimHub plugin is the one exception: it runs inside SimHub.exe and streams telemetry to the host over TCP (port 16555, line-delimited JSON). The Configurator communicates with the host over TCP; there is no shared DLL between them.


Installation

Prerequisites

  • Visual C++ Redistributable x64 2015–2022 (vc_redist.x64.exe)
  • Optional: vJoy driver for virtual joystick support

Manual mode (recommended)

  1. Download the latest ZIP from GitHub Releases and extract it anywhere.
  2. Start the host: run Host\JIB.Service.exe (console mode on TCP port 16550; press Ctrl+C to stop).
  3. OpenConfigurator\JIB.Configurator.exe and connect to localhost:16550.

Windows service (optional, not recommended during alpha)

While JIB is still in alpha, prefer running the host in standalone / console mode. Installing it as a Windows service makes updates, logs, resets, and live diagnostics harder.

Run .\install-service.ps1 from an elevated PowerShell to install the host as a Windows service in C:\Program Files\JIB\ (automatic start, firewall rule, Start Menu shortcut). Use .\update-service.ps1 to update an existing installation.

SimHub telemetry (optional)

To add racing telemetry, copy the contents of Plugins\External\SimHub\ into your SimHub installation folder and restart SimHub.

Do not run the Configurator as Administrator, or drag-and-drop from Explorer into it may be blocked.


Features

Live telemetry display

Real-time telemetry rendered as JPEG frames on device LCD keys — SimHub racing data, system metrics, media levels, and more. 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 SimHub 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.

Physical controls & dispatch

Every hardware button, knob turn/press, touch zone, and swipe gesture can be mapped to:

CategoryExamples
KeyboardAny key or hotkey combination
MouseClick, double-click, scroll, move
MediaPlay/Pause, next/previous, volume, per-app audio
vJoyVirtual joystick buttons (128) and axes (8)
SystemShutdown, restart, sleep, lock, brightness, monitor off
HTTP / WebhookGET/POST/PUT/PATCH/DELETE to any URL
OBS StudioStream, record, scenes, sources, virtual camera
SimHub Control MapperCustom roles defined in SimHub
InternalTouch page navigation

Touch pages & swipe navigation

Touchscreen devices (N4, N4 Pro) support multiple main pages, each with its own touch pages and folders. Swipe left/right gestures can be mapped to navigation or other actions. A "home" page anchors the default view. Full CRUD from the Configurator.

LED & brightness control

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

Profiles & workspaces

  • 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

Plugin system

JIB loads plugins from Plugins/ at startup. Ten 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

Built-in plugins

Keyboard

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.

Mouse

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

vJoy

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.

Media

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 Monitor

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 Commands

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.

OBS Studio

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.

HTTP / Webhook

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.

Camera

Display a camera feed on device buttons. The source is configured per button — a local webcam or a network stream (MJPEG/RTSP). Zero external dependencies, streamed through the host rendering pipeline.

SimHub

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. Requires the SimHub plugin copied into your SimHub installation (see Installation).


How mapping works

Every rendered control has two parts:

  1. a display — what the control shows (a telemetry gauge, camera feed, or system metric);
  2. mappings — event triggers that run actions when the control is used.

1. Assign a display

Drag a display source from the palette onto a control — a system metric, a camera feed, SimHub telemetry, a static image, and so on.

2. Add events and actions

Each control exposes event slots — Press, Long press, Increment, Decrement, Swipe left, Swipe right. Drop actions into an event slot: keyboard, mouse, OBS, HTTP, media, system, or navigation actions.

3. Pick a dispatch mode

ModeBehaviourUse for
Press / ReleaseHeld signal with distinct press and release eventsKeyboard shortcuts, vJoy button hold, push-to-talk
PulseOnlyInstant one-shot triggerPage navigation, mute, system commands
AutoPlugin-recommended default (fallback depends on MappingTargetKind)General use

4. Assign to a hardware control

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.

Hardware control types

ControlSupported on
Button press / releaseAll LCD key devices
Knob turn left / rightN3, N4, N4 Pro, M3, K1 Pro
Knob pressN4, N4 Pro, K1 Pro
Touch zone tapN4, N4 Pro (touchscreen surfaces)
Swipe left / rightN4, N4 Pro (touchscreen surfaces)
Auxiliary buttonN3, N1, M18 (non-LCD buttons)

Hardware compatibility

JIB maintains a hardware catalog with VID:PID identification for 15 device families across 30+ branded models.

BrandModelStatusFamilyDetails
MiraBoxN3Full supportSDN33×2 keys · 3 knobs · 3 aux buttons · native brightness
AjazzAKP03 / AKP03E / AKP03RFull supportSDN3
SoomfonStream Controller SEFull supportSDN3
Mars GamingMSD-TWOFull supportSDN3
TreasLinN3Full supportSDN3
RedragonSkyrider SS-551Full supportSDN3
MiraBox293 V2 / V3Full supportSD2935×3 keys
MiraBox293SFull supportSD293S5×3 keys · 3 screens · key GIF
FHOOU293SFull supportSD293SRebrand of MiraBox 293S (VID:PID 5548:6670)
AjazzAKP153 / AKP153E / AKP153RFull supportSD293S
Mars GamingMSD-ONEFull supportSD293S293S rebrand (VID:PID 0B00:1000 / 0B00:1005)
MaddogGK150KFull supportSD293S
RisemodeVision 01Full supportSD293S
TMICEStream ControllerFull supportSD293S
SoomfonXF-CN001Full supportSD293S
MiraBoxN4 / N4 EFull supportSDN45×2 keys · 1 touchscreen · 4 knobs · touch/swipe · native brightness
AjazzAKP05EFull supportSDN4Non-Pro family
MiraBoxN4 Pro / N4 Pro EFull supportSDN4 Pro5×2 keys · 1 touchscreen · 4 knobs · per-key LED · knob LED rings · native brightness
AjazzAKP05E PROFull supportSDN4 ProPro family · knob LED rings · vibration
MiraBoxN1Partial supportSDN15×3 keys · 3 screens · 1 knob · 2 aux buttons
VSDN1Partial supportSDN1Hardware validation in progress
MiraBoxM18 / M18EPartial supportSDM185×3 keys · 3 aux buttons · key + BG GIF
MiraBoxM3Full supportSDM35×3 keys · 3 knobs · key + BG GIF
MiraBoxXL / XLEExperimentalSDXL8×4 keys · key + BG GIF · pending end-to-end validation
MiraBoxK1 Pro / K1 Pro EUExperimentalK1Pro3×2 keys · 3 knobs · key GIF · pending end-to-end validation
ElgatoStream Deck ClassicExperimentalSDClassic5×3 keys · pending end-to-end validation
ElgatoStream Deck XLExperimentalSDDXL8×4 keys · pending end-to-end validation
ElgatoStream Deck NeoExperimentalSDNeo8 keys · 1 touchscreen · touch/swipe · pending end-to-end validation
ElgatoStream Deck +ExperimentalSDPlus8 keys · 1 touchscreen · 4 knobs · touch/swipe · pending end-to-end validation
ElgatoStream Deck + XLExperimentalSDPlusXL36 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

Configurator overview

The JIB Configurator is a WinUI 3 desktop application for visual editing.

Screens

ScreenPurpose
InfosConnection and runtime overview, active host, discovered hosts
DevicesHardware inventory and host-owned per-device settings (rotation, startup, palette, transport policy)
ControlsVisual layout editor — scenes, pages, touch pages, display sources and mapping assignment
PluginsPlugin management — health, telemetry, settings, enable/disable
DatasBrowse user-visible data published by plugins
SettingsHost runtime tuning — render quality, FPS, brightness, screensaver, network access
HostsHost discovery, identity, node administration, database
TransportsLive transport monitoring
DevHardware bring-up and VID/PID compatibility
DebugDiagnostics — render route, pressure, USB probe, box validation
LogsRuntime log viewer
AboutProject information, version, links
OptionsLocal Configurator preferences (theme, close-to-tray)

Composite save model

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

SDK (for plugin developers)

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 DeviceHostPluginServices with full access to RuntimeProviderChangeTracker, transports, and host services

Key SDK concepts:

  • IDeviceHostPlugin / DeviceHostPluginBase — base plugin contract
  • RuntimeProviderChangeTracker — 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/.

About

Jack In the BOX

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

JIB — Jack In the Box

Device host & configuration suite for StreamDock and Stream Deck hardware.

JIB renders live data on StreamDock and Stream Deck LCD button boxes. 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.


Architecture

JIB.Configurator.exe (WinUI 3) ───┐
│ TCP (port 16550, 4-byte length-prefix JSON)
JIB.Service.exe (Windows host) ───┘
├── Plugins: SimHub, OBS, HTTP, Camera, 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
  • StreamDockNative — C++ native layer for USB communication

Plugins are loaded from Plugins/ by the host. The SimHub plugin is the one exception: it runs inside SimHub.exe and streams telemetry to the host over TCP (port 16555, line-delimited JSON). The Configurator communicates with the host over TCP; there is no shared DLL between them.


Installation

Prerequisites

  • Visual C++ Redistributable x64 2015–2022 (vc_redist.x64.exe)
  • Optional: vJoy driver for virtual joystick support

Manual mode (recommended)

  1. Download the latest ZIP from GitHub Releases and extract it anywhere.
  2. Start the host: run Host\JIB.Service.exe (console mode on TCP port 16550; press Ctrl+C to stop).
  3. OpenConfigurator\JIB.Configurator.exe and connect to localhost:16550.

Windows service (optional, not recommended during alpha)

While JIB is still in alpha, prefer running the host in standalone / console mode. Installing it as a Windows service makes updates, logs, resets, and live diagnostics harder.

Run .\install-service.ps1 from an elevated PowerShell to install the host as a Windows service in C:\Program Files\JIB\ (automatic start, firewall rule, Start Menu shortcut). Use .\update-service.ps1 to update an existing installation.

SimHub telemetry (optional)

To add racing telemetry, copy the contents of Plugins\External\SimHub\ into your SimHub installation folder and restart SimHub.

Do not run the Configurator as Administrator, or drag-and-drop from Explorer into it may be blocked.


Features

Live telemetry display

Real-time telemetry rendered as JPEG frames on device LCD keys — SimHub racing data, system metrics, media levels, and more. 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 SimHub 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.

Physical controls & dispatch

Every hardware button, knob turn/press, touch zone, and swipe gesture can be mapped to:

CategoryExamples
KeyboardAny key or hotkey combination
MouseClick, double-click, scroll, move
MediaPlay/Pause, next/previous, volume, per-app audio
vJoyVirtual joystick buttons (128) and axes (8)
SystemShutdown, restart, sleep, lock, brightness, monitor off
HTTP / WebhookGET/POST/PUT/PATCH/DELETE to any URL
OBS StudioStream, record, scenes, sources, virtual camera
SimHub Control MapperCustom roles defined in SimHub
InternalTouch page navigation

Touch pages & swipe navigation

Touchscreen devices (N4, N4 Pro) support multiple main pages, each with its own touch pages and folders. Swipe left/right gestures can be mapped to navigation or other actions. A "home" page anchors the default view. Full CRUD from the Configurator.

LED & brightness control

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

Profiles & workspaces

  • 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

Plugin system

JIB loads plugins from Plugins/ at startup. Ten 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

Built-in plugins

Keyboard

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.

Mouse

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

vJoy

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.

Media

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 Monitor

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 Commands

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.

OBS Studio

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.

HTTP / Webhook

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.

Camera

Display a camera feed on device buttons. The source is configured per button — a local webcam or a network stream (MJPEG/RTSP). Zero external dependencies, streamed through the host rendering pipeline.

SimHub

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. Requires the SimHub plugin copied into your SimHub installation (see Installation).


How mapping works

Every rendered control has two parts:

  1. a display — what the control shows (a telemetry gauge, camera feed, or system metric);
  2. mappings — event triggers that run actions when the control is used.

1. Assign a display

Drag a display source from the palette onto a control — a system metric, a camera feed, SimHub telemetry, a static image, and so on.

2. Add events and actions

Each control exposes event slots — Press, Long press, Increment, Decrement, Swipe left, Swipe right. Drop actions into an event slot: keyboard, mouse, OBS, HTTP, media, system, or navigation actions.

3. Pick a dispatch mode

ModeBehaviourUse for
Press / ReleaseHeld signal with distinct press and release eventsKeyboard shortcuts, vJoy button hold, push-to-talk
PulseOnlyInstant one-shot triggerPage navigation, mute, system commands
AutoPlugin-recommended default (fallback depends on MappingTargetKind)General use

4. Assign to a hardware control

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.

Hardware control types

ControlSupported on
Button press / releaseAll LCD key devices
Knob turn left / rightN3, N4, N4 Pro, M3, K1 Pro
Knob pressN4, N4 Pro, K1 Pro
Touch zone tapN4, N4 Pro (touchscreen surfaces)
Swipe left / rightN4, N4 Pro (touchscreen surfaces)
Auxiliary buttonN3, N1, M18 (non-LCD buttons)

Hardware compatibility

JIB maintains a hardware catalog with VID:PID identification for 15 device families across 30+ branded models.

BrandModelStatusFamilyDetails
MiraBoxN3Full supportSDN33×2 keys · 3 knobs · 3 aux buttons · native brightness
AjazzAKP03 / AKP03E / AKP03RFull supportSDN3
SoomfonStream Controller SEFull supportSDN3
Mars GamingMSD-TWOFull supportSDN3
TreasLinN3Full supportSDN3
RedragonSkyrider SS-551Full supportSDN3
MiraBox293 V2 / V3Full supportSD2935×3 keys
MiraBox293SFull supportSD293S5×3 keys · 3 screens · key GIF
FHOOU293SFull supportSD293SRebrand of MiraBox 293S (VID:PID 5548:6670)
AjazzAKP153 / AKP153E / AKP153RFull supportSD293S
Mars GamingMSD-ONEFull supportSD293S293S rebrand (VID:PID 0B00:1000 / 0B00:1005)
MaddogGK150KFull supportSD293S
RisemodeVision 01Full supportSD293S
TMICEStream ControllerFull supportSD293S
SoomfonXF-CN001Full supportSD293S
MiraBoxN4 / N4 EFull supportSDN45×2 keys · 1 touchscreen · 4 knobs · touch/swipe · native brightness
AjazzAKP05EFull supportSDN4Non-Pro family
MiraBoxN4 Pro / N4 Pro EFull supportSDN4 Pro5×2 keys · 1 touchscreen · 4 knobs · per-key LED · knob LED rings · native brightness
AjazzAKP05E PROFull supportSDN4 ProPro family · knob LED rings · vibration
MiraBoxN1Partial supportSDN15×3 keys · 3 screens · 1 knob · 2 aux buttons
VSDN1Partial supportSDN1Hardware validation in progress
MiraBoxM18 / M18EPartial supportSDM185×3 keys · 3 aux buttons · key + BG GIF
MiraBoxM3Full supportSDM35×3 keys · 3 knobs · key + BG GIF
MiraBoxXL / XLEExperimentalSDXL8×4 keys · key + BG GIF · pending end-to-end validation
MiraBoxK1 Pro / K1 Pro EUExperimentalK1Pro3×2 keys · 3 knobs · key GIF · pending end-to-end validation
ElgatoStream Deck ClassicExperimentalSDClassic5×3 keys · pending end-to-end validation
ElgatoStream Deck XLExperimentalSDDXL8×4 keys · pending end-to-end validation
ElgatoStream Deck NeoExperimentalSDNeo8 keys · 1 touchscreen · touch/swipe · pending end-to-end validation
ElgatoStream Deck +ExperimentalSDPlus8 keys · 1 touchscreen · 4 knobs · touch/swipe · pending end-to-end validation
ElgatoStream Deck + XLExperimentalSDPlusXL36 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

Configurator overview

The JIB Configurator is a WinUI 3 desktop application for visual editing.

Screens

ScreenPurpose
InfosConnection and runtime overview, active host, discovered hosts
DevicesHardware inventory and host-owned per-device settings (rotation, startup, palette, transport policy)
ControlsVisual layout editor — scenes, pages, touch pages, display sources and mapping assignment
PluginsPlugin management — health, telemetry, settings, enable/disable
DatasBrowse user-visible data published by plugins
SettingsHost runtime tuning — render quality, FPS, brightness, screensaver, network access
HostsHost discovery, identity, node administration, database
TransportsLive transport monitoring
DevHardware bring-up and VID/PID compatibility
DebugDiagnostics — render route, pressure, USB probe, box validation
LogsRuntime log viewer
AboutProject information, version, links
OptionsLocal Configurator preferences (theme, close-to-tray)

Composite save model

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

SDK (for plugin developers)

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 DeviceHostPluginServices with full access to RuntimeProviderChangeTracker, transports, and host services

Key SDK concepts:

  • IDeviceHostPlugin / DeviceHostPluginBase — base plugin contract
  • RuntimeProviderChangeTracker — 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/.

About

Jack In the BOX

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

JIB — Jack In the Box

Device host & configuration suite for StreamDock and Stream Deck hardware.

JIB renders live data on StreamDock and Stream Deck LCD button boxes. 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.


Architecture

JIB.Configurator.exe (WinUI 3) ───┐
│ TCP (port 16550, 4-byte length-prefix JSON)
JIB.Service.exe (Windows host) ───┘
├── Plugins: SimHub, OBS, HTTP, Camera, 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
  • StreamDockNative — C++ native layer for USB communication

Plugins are loaded from Plugins/ by the host. The SimHub plugin is the one exception: it runs inside SimHub.exe and streams telemetry to the host over TCP (port 16555, line-delimited JSON). The Configurator communicates with the host over TCP; there is no shared DLL between them.


Installation

Prerequisites

  • Visual C++ Redistributable x64 2015–2022 (vc_redist.x64.exe)
  • Optional: vJoy driver for virtual joystick support

Manual mode (recommended)

  1. Download the latest ZIP from GitHub Releases and extract it anywhere.
  2. Start the host: run Host\JIB.Service.exe (console mode on TCP port 16550; press Ctrl+C to stop).
  3. OpenConfigurator\JIB.Configurator.exe and connect to localhost:16550.

Windows service (optional, not recommended during alpha)

While JIB is still in alpha, prefer running the host in standalone / console mode. Installing it as a Windows service makes updates, logs, resets, and live diagnostics harder.

Run .\install-service.ps1 from an elevated PowerShell to install the host as a Windows service in C:\Program Files\JIB\ (automatic start, firewall rule, Start Menu shortcut). Use .\update-service.ps1 to update an existing installation.

SimHub telemetry (optional)

To add racing telemetry, copy the contents of Plugins\External\SimHub\ into your SimHub installation folder and restart SimHub.

Do not run the Configurator as Administrator, or drag-and-drop from Explorer into it may be blocked.


Features

Live telemetry display

Real-time telemetry rendered as JPEG frames on device LCD keys — SimHub racing data, system metrics, media levels, and more. 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 SimHub 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.

Physical controls & dispatch

Every hardware button, knob turn/press, touch zone, and swipe gesture can be mapped to:

CategoryExamples
KeyboardAny key or hotkey combination
MouseClick, double-click, scroll, move
MediaPlay/Pause, next/previous, volume, per-app audio
vJoyVirtual joystick buttons (128) and axes (8)
SystemShutdown, restart, sleep, lock, brightness, monitor off
HTTP / WebhookGET/POST/PUT/PATCH/DELETE to any URL
OBS StudioStream, record, scenes, sources, virtual camera
SimHub Control MapperCustom roles defined in SimHub
InternalTouch page navigation

Touch pages & swipe navigation

Touchscreen devices (N4, N4 Pro) support multiple main pages, each with its own touch pages and folders. Swipe left/right gestures can be mapped to navigation or other actions. A "home" page anchors the default view. Full CRUD from the Configurator.

LED & brightness control

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

Profiles & workspaces

  • 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

Plugin system

JIB loads plugins from Plugins/ at startup. Ten 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

Built-in plugins

Keyboard

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.

Mouse

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

vJoy

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.

Media

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 Monitor

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 Commands

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.

OBS Studio

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.

HTTP / Webhook

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.

Camera

Display a camera feed on device buttons. The source is configured per button — a local webcam or a network stream (MJPEG/RTSP). Zero external dependencies, streamed through the host rendering pipeline.

SimHub

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. Requires the SimHub plugin copied into your SimHub installation (see Installation).


How mapping works

Every rendered control has two parts:

  1. a display — what the control shows (a telemetry gauge, camera feed, or system metric);
  2. mappings — event triggers that run actions when the control is used.

1. Assign a display

Drag a display source from the palette onto a control — a system metric, a camera feed, SimHub telemetry, a static image, and so on.

2. Add events and actions

Each control exposes event slots — Press, Long press, Increment, Decrement, Swipe left, Swipe right. Drop actions into an event slot: keyboard, mouse, OBS, HTTP, media, system, or navigation actions.

3. Pick a dispatch mode

ModeBehaviourUse for
Press / ReleaseHeld signal with distinct press and release eventsKeyboard shortcuts, vJoy button hold, push-to-talk
PulseOnlyInstant one-shot triggerPage navigation, mute, system commands
AutoPlugin-recommended default (fallback depends on MappingTargetKind)General use

4. Assign to a hardware control

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.

Hardware control types

ControlSupported on
Button press / releaseAll LCD key devices
Knob turn left / rightN3, N4, N4 Pro, M3, K1 Pro
Knob pressN4, N4 Pro, K1 Pro
Touch zone tapN4, N4 Pro (touchscreen surfaces)
Swipe left / rightN4, N4 Pro (touchscreen surfaces)
Auxiliary buttonN3, N1, M18 (non-LCD buttons)

Hardware compatibility

JIB maintains a hardware catalog with VID:PID identification for 15 device families across 30+ branded models.

BrandModelStatusFamilyDetails
MiraBoxN3Full supportSDN33×2 keys · 3 knobs · 3 aux buttons · native brightness
AjazzAKP03 / AKP03E / AKP03RFull supportSDN3
SoomfonStream Controller SEFull supportSDN3
Mars GamingMSD-TWOFull supportSDN3
TreasLinN3Full supportSDN3
RedragonSkyrider SS-551Full supportSDN3
MiraBox293 V2 / V3Full supportSD2935×3 keys
MiraBox293SFull supportSD293S5×3 keys · 3 screens · key GIF
FHOOU293SFull supportSD293SRebrand of MiraBox 293S (VID:PID 5548:6670)
AjazzAKP153 / AKP153E / AKP153RFull supportSD293S
Mars GamingMSD-ONEFull supportSD293S293S rebrand (VID:PID 0B00:1000 / 0B00:1005)
MaddogGK150KFull supportSD293S
RisemodeVision 01Full supportSD293S
TMICEStream ControllerFull supportSD293S
SoomfonXF-CN001Full supportSD293S
MiraBoxN4 / N4 EFull supportSDN45×2 keys · 1 touchscreen · 4 knobs · touch/swipe · native brightness
AjazzAKP05EFull supportSDN4Non-Pro family
MiraBoxN4 Pro / N4 Pro EFull supportSDN4 Pro5×2 keys · 1 touchscreen · 4 knobs · per-key LED · knob LED rings · native brightness
AjazzAKP05E PROFull supportSDN4 ProPro family · knob LED rings · vibration
MiraBoxN1Partial supportSDN15×3 keys · 3 screens · 1 knob · 2 aux buttons
VSDN1Partial supportSDN1Hardware validation in progress
MiraBoxM18 / M18EPartial supportSDM185×3 keys · 3 aux buttons · key + BG GIF
MiraBoxM3Full supportSDM35×3 keys · 3 knobs · key + BG GIF
MiraBoxXL / XLEExperimentalSDXL8×4 keys · key + BG GIF · pending end-to-end validation
MiraBoxK1 Pro / K1 Pro EUExperimentalK1Pro3×2 keys · 3 knobs · key GIF · pending end-to-end validation
ElgatoStream Deck ClassicExperimentalSDClassic5×3 keys · pending end-to-end validation
ElgatoStream Deck XLExperimentalSDDXL8×4 keys · pending end-to-end validation
ElgatoStream Deck NeoExperimentalSDNeo8 keys · 1 touchscreen · touch/swipe · pending end-to-end validation
ElgatoStream Deck +ExperimentalSDPlus8 keys · 1 touchscreen · 4 knobs · touch/swipe · pending end-to-end validation
ElgatoStream Deck + XLExperimentalSDPlusXL36 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

Configurator overview

The JIB Configurator is a WinUI 3 desktop application for visual editing.

Screens

ScreenPurpose
InfosConnection and runtime overview, active host, discovered hosts
DevicesHardware inventory and host-owned per-device settings (rotation, startup, palette, transport policy)
ControlsVisual layout editor — scenes, pages, touch pages, display sources and mapping assignment
PluginsPlugin management — health, telemetry, settings, enable/disable
DatasBrowse user-visible data published by plugins
SettingsHost runtime tuning — render quality, FPS, brightness, screensaver, network access
HostsHost discovery, identity, node administration, database
TransportsLive transport monitoring
DevHardware bring-up and VID/PID compatibility
DebugDiagnostics — render route, pressure, USB probe, box validation
LogsRuntime log viewer
AboutProject information, version, links
OptionsLocal Configurator preferences (theme, close-to-tray)

Composite save model

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

SDK (for plugin developers)

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 DeviceHostPluginServices with full access to RuntimeProviderChangeTracker, transports, and host services

Key SDK concepts:

  • IDeviceHostPlugin / DeviceHostPluginBase — base plugin contract
  • RuntimeProviderChangeTracker — 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/.

About

Jack In the BOX

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

JIB — Jack In the Box

Device host & configuration suite for StreamDock and Stream Deck hardware.

JIB renders live data on StreamDock and Stream Deck LCD button boxes. 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.


Architecture

JIB.Configurator.exe (WinUI 3) ───┐
│ TCP (port 16550, 4-byte length-prefix JSON)
JIB.Service.exe (Windows host) ───┘
├── Plugins: SimHub, OBS, HTTP, Camera, 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
  • StreamDockNative — C++ native layer for USB communication

Plugins are loaded from Plugins/ by the host. The SimHub plugin is the one exception: it runs inside SimHub.exe and streams telemetry to the host over TCP (port 16555, line-delimited JSON). The Configurator communicates with the host over TCP; there is no shared DLL between them.


Installation

Prerequisites

  • Visual C++ Redistributable x64 2015–2022 (vc_redist.x64.exe)
  • Optional: vJoy driver for virtual joystick support

Manual mode (recommended)

  1. Download the latest ZIP from GitHub Releases and extract it anywhere.
  2. Start the host: run Host\JIB.Service.exe (console mode on TCP port 16550; press Ctrl+C to stop).
  3. OpenConfigurator\JIB.Configurator.exe and connect to localhost:16550.

Windows service (optional, not recommended during alpha)

While JIB is still in alpha, prefer running the host in standalone / console mode. Installing it as a Windows service makes updates, logs, resets, and live diagnostics harder.

Run .\install-service.ps1 from an elevated PowerShell to install the host as a Windows service in C:\Program Files\JIB\ (automatic start, firewall rule, Start Menu shortcut). Use .\update-service.ps1 to update an existing installation.

SimHub telemetry (optional)

To add racing telemetry, copy the contents of Plugins\External\SimHub\ into your SimHub installation folder and restart SimHub.

Do not run the Configurator as Administrator, or drag-and-drop from Explorer into it may be blocked.


Features

Live telemetry display

Real-time telemetry rendered as JPEG frames on device LCD keys — SimHub racing data, system metrics, media levels, and more. 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 SimHub 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.

Physical controls & dispatch

Every hardware button, knob turn/press, touch zone, and swipe gesture can be mapped to:

CategoryExamples
KeyboardAny key or hotkey combination
MouseClick, double-click, scroll, move
MediaPlay/Pause, next/previous, volume, per-app audio
vJoyVirtual joystick buttons (128) and axes (8)
SystemShutdown, restart, sleep, lock, brightness, monitor off
HTTP / WebhookGET/POST/PUT/PATCH/DELETE to any URL
OBS StudioStream, record, scenes, sources, virtual camera
SimHub Control MapperCustom roles defined in SimHub
InternalTouch page navigation

Touch pages & swipe navigation

Touchscreen devices (N4, N4 Pro) support multiple main pages, each with its own touch pages and folders. Swipe left/right gestures can be mapped to navigation or other actions. A "home" page anchors the default view. Full CRUD from the Configurator.

LED & brightness control

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

Profiles & workspaces

  • 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

Plugin system

JIB loads plugins from Plugins/ at startup. Ten 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

Built-in plugins

Keyboard

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.

Mouse

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

vJoy

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.

Media

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 Monitor

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 Commands

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.

OBS Studio

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.

HTTP / Webhook

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.

Camera

Display a camera feed on device buttons. The source is configured per button — a local webcam or a network stream (MJPEG/RTSP). Zero external dependencies, streamed through the host rendering pipeline.

SimHub

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. Requires the SimHub plugin copied into your SimHub installation (see Installation).


How mapping works

Every rendered control has two parts:

  1. a display — what the control shows (a telemetry gauge, camera feed, or system metric);
  2. mappings — event triggers that run actions when the control is used.

1. Assign a display

Drag a display source from the palette onto a control — a system metric, a camera feed, SimHub telemetry, a static image, and so on.

2. Add events and actions

Each control exposes event slots — Press, Long press, Increment, Decrement, Swipe left, Swipe right. Drop actions into an event slot: keyboard, mouse, OBS, HTTP, media, system, or navigation actions.

3. Pick a dispatch mode

ModeBehaviourUse for
Press / ReleaseHeld signal with distinct press and release eventsKeyboard shortcuts, vJoy button hold, push-to-talk
PulseOnlyInstant one-shot triggerPage navigation, mute, system commands
AutoPlugin-recommended default (fallback depends on MappingTargetKind)General use

4. Assign to a hardware control

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.

Hardware control types

ControlSupported on
Button press / releaseAll LCD key devices
Knob turn left / rightN3, N4, N4 Pro, M3, K1 Pro
Knob pressN4, N4 Pro, K1 Pro
Touch zone tapN4, N4 Pro (touchscreen surfaces)
Swipe left / rightN4, N4 Pro (touchscreen surfaces)
Auxiliary buttonN3, N1, M18 (non-LCD buttons)

Hardware compatibility

JIB maintains a hardware catalog with VID:PID identification for 15 device families across 30+ branded models.

BrandModelStatusFamilyDetails
MiraBoxN3Full supportSDN33×2 keys · 3 knobs · 3 aux buttons · native brightness
AjazzAKP03 / AKP03E / AKP03RFull supportSDN3
SoomfonStream Controller SEFull supportSDN3
Mars GamingMSD-TWOFull supportSDN3
TreasLinN3Full supportSDN3
RedragonSkyrider SS-551Full supportSDN3
MiraBox293 V2 / V3Full supportSD2935×3 keys
MiraBox293SFull supportSD293S5×3 keys · 3 screens · key GIF
FHOOU293SFull supportSD293SRebrand of MiraBox 293S (VID:PID 5548:6670)
AjazzAKP153 / AKP153E / AKP153RFull supportSD293S
Mars GamingMSD-ONEFull supportSD293S293S rebrand (VID:PID 0B00:1000 / 0B00:1005)
MaddogGK150KFull supportSD293S
RisemodeVision 01Full supportSD293S
TMICEStream ControllerFull supportSD293S
SoomfonXF-CN001Full supportSD293S
MiraBoxN4 / N4 EFull supportSDN45×2 keys · 1 touchscreen · 4 knobs · touch/swipe · native brightness
AjazzAKP05EFull supportSDN4Non-Pro family
MiraBoxN4 Pro / N4 Pro EFull supportSDN4 Pro5×2 keys · 1 touchscreen · 4 knobs · per-key LED · knob LED rings · native brightness
AjazzAKP05E PROFull supportSDN4 ProPro family · knob LED rings · vibration
MiraBoxN1Partial supportSDN15×3 keys · 3 screens · 1 knob · 2 aux buttons
VSDN1Partial supportSDN1Hardware validation in progress
MiraBoxM18 / M18EPartial supportSDM185×3 keys · 3 aux buttons · key + BG GIF
MiraBoxM3Full supportSDM35×3 keys · 3 knobs · key + BG GIF
MiraBoxXL / XLEExperimentalSDXL8×4 keys · key + BG GIF · pending end-to-end validation
MiraBoxK1 Pro / K1 Pro EUExperimentalK1Pro3×2 keys · 3 knobs · key GIF · pending end-to-end validation
ElgatoStream Deck ClassicExperimentalSDClassic5×3 keys · pending end-to-end validation
ElgatoStream Deck XLExperimentalSDDXL8×4 keys · pending end-to-end validation
ElgatoStream Deck NeoExperimentalSDNeo8 keys · 1 touchscreen · touch/swipe · pending end-to-end validation
ElgatoStream Deck +ExperimentalSDPlus8 keys · 1 touchscreen · 4 knobs · touch/swipe · pending end-to-end validation
ElgatoStream Deck + XLExperimentalSDPlusXL36 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

Configurator overview

The JIB Configurator is a WinUI 3 desktop application for visual editing.

Screens

ScreenPurpose
InfosConnection and runtime overview, active host, discovered hosts
DevicesHardware inventory and host-owned per-device settings (rotation, startup, palette, transport policy)
ControlsVisual layout editor — scenes, pages, touch pages, display sources and mapping assignment
PluginsPlugin management — health, telemetry, settings, enable/disable
DatasBrowse user-visible data published by plugins
SettingsHost runtime tuning — render quality, FPS, brightness, screensaver, network access
HostsHost discovery, identity, node administration, database
TransportsLive transport monitoring
DevHardware bring-up and VID/PID compatibility
DebugDiagnostics — render route, pressure, USB probe, box validation
LogsRuntime log viewer
AboutProject information, version, links
OptionsLocal Configurator preferences (theme, close-to-tray)

Composite save model

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

SDK (for plugin developers)

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 DeviceHostPluginServices with full access to RuntimeProviderChangeTracker, transports, and host services

Key SDK concepts:

  • IDeviceHostPlugin / DeviceHostPluginBase — base plugin contract
  • RuntimeProviderChangeTracker — 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/.

About

Jack In the BOX

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

JIB — Jack In the Box

Device host & configuration suite for StreamDock and Stream Deck hardware.

JIB renders live data on StreamDock and Stream Deck LCD button boxes. 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.


Architecture

JIB.Configurator.exe (WinUI 3) ───┐
│ TCP (port 16550, 4-byte length-prefix JSON)
JIB.Service.exe (Windows host) ───┘
├── Plugins: SimHub, OBS, HTTP, Camera, 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
  • StreamDockNative — C++ native layer for USB communication

Plugins are loaded from Plugins/ by the host. The SimHub plugin is the one exception: it runs inside SimHub.exe and streams telemetry to the host over TCP (port 16555, line-delimited JSON). The Configurator communicates with the host over TCP; there is no shared DLL between them.


Installation

Prerequisites

  • Visual C++ Redistributable x64 2015–2022 (vc_redist.x64.exe)
  • Optional: vJoy driver for virtual joystick support

Manual mode (recommended)

  1. Download the latest ZIP from GitHub Releases and extract it anywhere.
  2. Start the host: run Host\JIB.Service.exe (console mode on TCP port 16550; press Ctrl+C to stop).
  3. OpenConfigurator\JIB.Configurator.exe and connect to localhost:16550.

Windows service (optional, not recommended during alpha)

While JIB is still in alpha, prefer running the host in standalone / console mode. Installing it as a Windows service makes updates, logs, resets, and live diagnostics harder.

Run .\install-service.ps1 from an elevated PowerShell to install the host as a Windows service in C:\Program Files\JIB\ (automatic start, firewall rule, Start Menu shortcut). Use .\update-service.ps1 to update an existing installation.

SimHub telemetry (optional)

To add racing telemetry, copy the contents of Plugins\External\SimHub\ into your SimHub installation folder and restart SimHub.

Do not run the Configurator as Administrator, or drag-and-drop from Explorer into it may be blocked.


Features

Live telemetry display

Real-time telemetry rendered as JPEG frames on device LCD keys — SimHub racing data, system metrics, media levels, and more. 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 SimHub 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.

Physical controls & dispatch

Every hardware button, knob turn/press, touch zone, and swipe gesture can be mapped to:

CategoryExamples
KeyboardAny key or hotkey combination
MouseClick, double-click, scroll, move
MediaPlay/Pause, next/previous, volume, per-app audio
vJoyVirtual joystick buttons (128) and axes (8)
SystemShutdown, restart, sleep, lock, brightness, monitor off
HTTP / WebhookGET/POST/PUT/PATCH/DELETE to any URL
OBS StudioStream, record, scenes, sources, virtual camera
SimHub Control MapperCustom roles defined in SimHub
InternalTouch page navigation

Touch pages & swipe navigation

Touchscreen devices (N4, N4 Pro) support multiple main pages, each with its own touch pages and folders. Swipe left/right gestures can be mapped to navigation or other actions. A "home" page anchors the default view. Full CRUD from the Configurator.

LED & brightness control

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

Profiles & workspaces

  • 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

Plugin system

JIB loads plugins from Plugins/ at startup. Ten 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

Built-in plugins

Keyboard

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.

Mouse

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

vJoy

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.

Media

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 Monitor

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 Commands

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.

OBS Studio

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.

HTTP / Webhook

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.

Camera

Display a camera feed on device buttons. The source is configured per button — a local webcam or a network stream (MJPEG/RTSP). Zero external dependencies, streamed through the host rendering pipeline.

SimHub

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. Requires the SimHub plugin copied into your SimHub installation (see Installation).


How mapping works

Every rendered control has two parts:

  1. a display — what the control shows (a telemetry gauge, camera feed, or system metric);
  2. mappings — event triggers that run actions when the control is used.

1. Assign a display

Drag a display source from the palette onto a control — a system metric, a camera feed, SimHub telemetry, a static image, and so on.

2. Add events and actions

Each control exposes event slots — Press, Long press, Increment, Decrement, Swipe left, Swipe right. Drop actions into an event slot: keyboard, mouse, OBS, HTTP, media, system, or navigation actions.

3. Pick a dispatch mode

ModeBehaviourUse for
Press / ReleaseHeld signal with distinct press and release eventsKeyboard shortcuts, vJoy button hold, push-to-talk
PulseOnlyInstant one-shot triggerPage navigation, mute, system commands
AutoPlugin-recommended default (fallback depends on MappingTargetKind)General use

4. Assign to a hardware control

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.

Hardware control types

ControlSupported on
Button press / releaseAll LCD key devices
Knob turn left / rightN3, N4, N4 Pro, M3, K1 Pro
Knob pressN4, N4 Pro, K1 Pro
Touch zone tapN4, N4 Pro (touchscreen surfaces)
Swipe left / rightN4, N4 Pro (touchscreen surfaces)
Auxiliary buttonN3, N1, M18 (non-LCD buttons)

Hardware compatibility

JIB maintains a hardware catalog with VID:PID identification for 15 device families across 30+ branded models.

BrandModelStatusFamilyDetails
MiraBoxN3Full supportSDN33×2 keys · 3 knobs · 3 aux buttons · native brightness
AjazzAKP03 / AKP03E / AKP03RFull supportSDN3
SoomfonStream Controller SEFull supportSDN3
Mars GamingMSD-TWOFull supportSDN3
TreasLinN3Full supportSDN3
RedragonSkyrider SS-551Full supportSDN3
MiraBox293 V2 / V3Full supportSD2935×3 keys
MiraBox293SFull supportSD293S5×3 keys · 3 screens · key GIF
FHOOU293SFull supportSD293SRebrand of MiraBox 293S (VID:PID 5548:6670)
AjazzAKP153 / AKP153E / AKP153RFull supportSD293S
Mars GamingMSD-ONEFull supportSD293S293S rebrand (VID:PID 0B00:1000 / 0B00:1005)
MaddogGK150KFull supportSD293S
RisemodeVision 01Full supportSD293S
TMICEStream ControllerFull supportSD293S
SoomfonXF-CN001Full supportSD293S
MiraBoxN4 / N4 EFull supportSDN45×2 keys · 1 touchscreen · 4 knobs · touch/swipe · native brightness
AjazzAKP05EFull supportSDN4Non-Pro family
MiraBoxN4 Pro / N4 Pro EFull supportSDN4 Pro5×2 keys · 1 touchscreen · 4 knobs · per-key LED · knob LED rings · native brightness
AjazzAKP05E PROFull supportSDN4 ProPro family · knob LED rings · vibration
MiraBoxN1Partial supportSDN15×3 keys · 3 screens · 1 knob · 2 aux buttons
VSDN1Partial supportSDN1Hardware validation in progress
MiraBoxM18 / M18EPartial supportSDM185×3 keys · 3 aux buttons · key + BG GIF
MiraBoxM3Full supportSDM35×3 keys · 3 knobs · key + BG GIF
MiraBoxXL / XLEExperimentalSDXL8×4 keys · key + BG GIF · pending end-to-end validation
MiraBoxK1 Pro / K1 Pro EUExperimentalK1Pro3×2 keys · 3 knobs · key GIF · pending end-to-end validation
ElgatoStream Deck ClassicExperimentalSDClassic5×3 keys · pending end-to-end validation
ElgatoStream Deck XLExperimentalSDDXL8×4 keys · pending end-to-end validation
ElgatoStream Deck NeoExperimentalSDNeo8 keys · 1 touchscreen · touch/swipe · pending end-to-end validation
ElgatoStream Deck +ExperimentalSDPlus8 keys · 1 touchscreen · 4 knobs · touch/swipe · pending end-to-end validation
ElgatoStream Deck + XLExperimentalSDPlusXL36 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

Configurator overview

The JIB Configurator is a WinUI 3 desktop application for visual editing.

Screens

ScreenPurpose
InfosConnection and runtime overview, active host, discovered hosts
DevicesHardware inventory and host-owned per-device settings (rotation, startup, palette, transport policy)
ControlsVisual layout editor — scenes, pages, touch pages, display sources and mapping assignment
PluginsPlugin management — health, telemetry, settings, enable/disable
DatasBrowse user-visible data published by plugins
SettingsHost runtime tuning — render quality, FPS, brightness, screensaver, network access
HostsHost discovery, identity, node administration, database
TransportsLive transport monitoring
DevHardware bring-up and VID/PID compatibility
DebugDiagnostics — render route, pressure, USB probe, box validation
LogsRuntime log viewer
AboutProject information, version, links
OptionsLocal Configurator preferences (theme, close-to-tray)

Composite save model

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

SDK (for plugin developers)

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 DeviceHostPluginServices with full access to RuntimeProviderChangeTracker, transports, and host services

Key SDK concepts:

  • IDeviceHostPlugin / DeviceHostPluginBase — base plugin contract
  • RuntimeProviderChangeTracker — 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/.

About

Jack In the BOX

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

JIB — Jack In the Box

Device host & configuration suite for StreamDock and Stream Deck hardware.

JIB renders live data on StreamDock and Stream Deck LCD button boxes. 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.


Architecture

JIB.Configurator.exe (WinUI 3) ───┐
│ TCP (port 16550, 4-byte length-prefix JSON)
JIB.Service.exe (Windows host) ───┘
├── Plugins: SimHub, OBS, HTTP, Camera, 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
  • StreamDockNative — C++ native layer for USB communication

Plugins are loaded from Plugins/ by the host. The SimHub plugin is the one exception: it runs inside SimHub.exe and streams telemetry to the host over TCP (port 16555, line-delimited JSON). The Configurator communicates with the host over TCP; there is no shared DLL between them.


Installation

Prerequisites

  • Visual C++ Redistributable x64 2015–2022 (vc_redist.x64.exe)
  • Optional: vJoy driver for virtual joystick support

Manual mode (recommended)

  1. Download the latest ZIP from GitHub Releases and extract it anywhere.
  2. Start the host: run Host\JIB.Service.exe (console mode on TCP port 16550; press Ctrl+C to stop).
  3. OpenConfigurator\JIB.Configurator.exe and connect to localhost:16550.

Windows service (optional, not recommended during alpha)

While JIB is still in alpha, prefer running the host in standalone / console mode. Installing it as a Windows service makes updates, logs, resets, and live diagnostics harder.

Run .\install-service.ps1 from an elevated PowerShell to install the host as a Windows service in C:\Program Files\JIB\ (automatic start, firewall rule, Start Menu shortcut). Use .\update-service.ps1 to update an existing installation.

SimHub telemetry (optional)

To add racing telemetry, copy the contents of Plugins\External\SimHub\ into your SimHub installation folder and restart SimHub.

Do not run the Configurator as Administrator, or drag-and-drop from Explorer into it may be blocked.


Features

Live telemetry display

Real-time telemetry rendered as JPEG frames on device LCD keys — SimHub racing data, system metrics, media levels, and more. 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 SimHub 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.

Physical controls & dispatch

Every hardware button, knob turn/press, touch zone, and swipe gesture can be mapped to:

CategoryExamples
KeyboardAny key or hotkey combination
MouseClick, double-click, scroll, move
MediaPlay/Pause, next/previous, volume, per-app audio
vJoyVirtual joystick buttons (128) and axes (8)
SystemShutdown, restart, sleep, lock, brightness, monitor off
HTTP / WebhookGET/POST/PUT/PATCH/DELETE to any URL
OBS StudioStream, record, scenes, sources, virtual camera
SimHub Control MapperCustom roles defined in SimHub
InternalTouch page navigation

Touch pages & swipe navigation

Touchscreen devices (N4, N4 Pro) support multiple main pages, each with its own touch pages and folders. Swipe left/right gestures can be mapped to navigation or other actions. A "home" page anchors the default view. Full CRUD from the Configurator.

LED & brightness control

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

Profiles & workspaces

  • 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

Plugin system

JIB loads plugins from Plugins/ at startup. Ten 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

Built-in plugins

Keyboard

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.

Mouse

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

vJoy

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.

Media

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 Monitor

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 Commands

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.

OBS Studio

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.

HTTP / Webhook

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.

Camera

Display a camera feed on device buttons. The source is configured per button — a local webcam or a network stream (MJPEG/RTSP). Zero external dependencies, streamed through the host rendering pipeline.

SimHub

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. Requires the SimHub plugin copied into your SimHub installation (see Installation).


How mapping works

Every rendered control has two parts:

  1. a display — what the control shows (a telemetry gauge, camera feed, or system metric);
  2. mappings — event triggers that run actions when the control is used.

1. Assign a display

Drag a display source from the palette onto a control — a system metric, a camera feed, SimHub telemetry, a static image, and so on.

2. Add events and actions

Each control exposes event slots — Press, Long press, Increment, Decrement, Swipe left, Swipe right. Drop actions into an event slot: keyboard, mouse, OBS, HTTP, media, system, or navigation actions.

3. Pick a dispatch mode

ModeBehaviourUse for
Press / ReleaseHeld signal with distinct press and release eventsKeyboard shortcuts, vJoy button hold, push-to-talk
PulseOnlyInstant one-shot triggerPage navigation, mute, system commands
AutoPlugin-recommended default (fallback depends on MappingTargetKind)General use

4. Assign to a hardware control

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.

Hardware control types

ControlSupported on
Button press / releaseAll LCD key devices
Knob turn left / rightN3, N4, N4 Pro, M3, K1 Pro
Knob pressN4, N4 Pro, K1 Pro
Touch zone tapN4, N4 Pro (touchscreen surfaces)
Swipe left / rightN4, N4 Pro (touchscreen surfaces)
Auxiliary buttonN3, N1, M18 (non-LCD buttons)

Hardware compatibility

JIB maintains a hardware catalog with VID:PID identification for 15 device families across 30+ branded models.

BrandModelStatusFamilyDetails
MiraBoxN3Full supportSDN33×2 keys · 3 knobs · 3 aux buttons · native brightness
AjazzAKP03 / AKP03E / AKP03RFull supportSDN3
SoomfonStream Controller SEFull supportSDN3
Mars GamingMSD-TWOFull supportSDN3
TreasLinN3Full supportSDN3
RedragonSkyrider SS-551Full supportSDN3
MiraBox293 V2 / V3Full supportSD2935×3 keys
MiraBox293SFull supportSD293S5×3 keys · 3 screens · key GIF
FHOOU293SFull supportSD293SRebrand of MiraBox 293S (VID:PID 5548:6670)
AjazzAKP153 / AKP153E / AKP153RFull supportSD293S
Mars GamingMSD-ONEFull supportSD293S293S rebrand (VID:PID 0B00:1000 / 0B00:1005)
MaddogGK150KFull supportSD293S
RisemodeVision 01Full supportSD293S
TMICEStream ControllerFull supportSD293S
SoomfonXF-CN001Full supportSD293S
MiraBoxN4 / N4 EFull supportSDN45×2 keys · 1 touchscreen · 4 knobs · touch/swipe · native brightness
AjazzAKP05EFull supportSDN4Non-Pro family
MiraBoxN4 Pro / N4 Pro EFull supportSDN4 Pro5×2 keys · 1 touchscreen · 4 knobs · per-key LED · knob LED rings · native brightness
AjazzAKP05E PROFull supportSDN4 ProPro family · knob LED rings · vibration
MiraBoxN1Partial supportSDN15×3 keys · 3 screens · 1 knob · 2 aux buttons
VSDN1Partial supportSDN1Hardware validation in progress
MiraBoxM18 / M18EPartial supportSDM185×3 keys · 3 aux buttons · key + BG GIF
MiraBoxM3Full supportSDM35×3 keys · 3 knobs · key + BG GIF
MiraBoxXL / XLEExperimentalSDXL8×4 keys · key + BG GIF · pending end-to-end validation
MiraBoxK1 Pro / K1 Pro EUExperimentalK1Pro3×2 keys · 3 knobs · key GIF · pending end-to-end validation
ElgatoStream Deck ClassicExperimentalSDClassic5×3 keys · pending end-to-end validation
ElgatoStream Deck XLExperimentalSDDXL8×4 keys · pending end-to-end validation
ElgatoStream Deck NeoExperimentalSDNeo8 keys · 1 touchscreen · touch/swipe · pending end-to-end validation
ElgatoStream Deck +ExperimentalSDPlus8 keys · 1 touchscreen · 4 knobs · touch/swipe · pending end-to-end validation
ElgatoStream Deck + XLExperimentalSDPlusXL36 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

Configurator overview

The JIB Configurator is a WinUI 3 desktop application for visual editing.

Screens

ScreenPurpose
InfosConnection and runtime overview, active host, discovered hosts
DevicesHardware inventory and host-owned per-device settings (rotation, startup, palette, transport policy)
ControlsVisual layout editor — scenes, pages, touch pages, display sources and mapping assignment
PluginsPlugin management — health, telemetry, settings, enable/disable
DatasBrowse user-visible data published by plugins
SettingsHost runtime tuning — render quality, FPS, brightness, screensaver, network access
HostsHost discovery, identity, node administration, database
TransportsLive transport monitoring
DevHardware bring-up and VID/PID compatibility
DebugDiagnostics — render route, pressure, USB probe, box validation
LogsRuntime log viewer
AboutProject information, version, links
OptionsLocal Configurator preferences (theme, close-to-tray)

Composite save model

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

SDK (for plugin developers)

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 DeviceHostPluginServices with full access to RuntimeProviderChangeTracker, transports, and host services

Key SDK concepts:

  • IDeviceHostPlugin / DeviceHostPluginBase — base plugin contract
  • RuntimeProviderChangeTracker — 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/.

About

Jack In the BOX

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

JIB — Jack In the Box

Device host & configuration suite for StreamDock and Stream Deck hardware.

JIB renders live data on StreamDock and Stream Deck LCD button boxes. 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.


Architecture

JIB.Configurator.exe (WinUI 3) ───┐
│ TCP (port 16550, 4-byte length-prefix JSON)
JIB.Service.exe (Windows host) ───┘
├── Plugins: SimHub, OBS, HTTP, Camera, 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
  • StreamDockNative — C++ native layer for USB communication

Plugins are loaded from Plugins/ by the host. The SimHub plugin is the one exception: it runs inside SimHub.exe and streams telemetry to the host over TCP (port 16555, line-delimited JSON). The Configurator communicates with the host over TCP; there is no shared DLL between them.


Installation

Prerequisites

  • Visual C++ Redistributable x64 2015–2022 (vc_redist.x64.exe)
  • Optional: vJoy driver for virtual joystick support

Manual mode (recommended)

  1. Download the latest ZIP from GitHub Releases and extract it anywhere.
  2. Start the host: run Host\JIB.Service.exe (console mode on TCP port 16550; press Ctrl+C to stop).
  3. OpenConfigurator\JIB.Configurator.exe and connect to localhost:16550.

Windows service (optional, not recommended during alpha)

While JIB is still in alpha, prefer running the host in standalone / console mode. Installing it as a Windows service makes updates, logs, resets, and live diagnostics harder.

Run .\install-service.ps1 from an elevated PowerShell to install the host as a Windows service in C:\Program Files\JIB\ (automatic start, firewall rule, Start Menu shortcut). Use .\update-service.ps1 to update an existing installation.

SimHub telemetry (optional)

To add racing telemetry, copy the contents of Plugins\External\SimHub\ into your SimHub installation folder and restart SimHub.

Do not run the Configurator as Administrator, or drag-and-drop from Explorer into it may be blocked.


Features

Live telemetry display

Real-time telemetry rendered as JPEG frames on device LCD keys — SimHub racing data, system metrics, media levels, and more. 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 SimHub 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.

Physical controls & dispatch

Every hardware button, knob turn/press, touch zone, and swipe gesture can be mapped to:

CategoryExamples
KeyboardAny key or hotkey combination
MouseClick, double-click, scroll, move
MediaPlay/Pause, next/previous, volume, per-app audio
vJoyVirtual joystick buttons (128) and axes (8)
SystemShutdown, restart, sleep, lock, brightness, monitor off
HTTP / WebhookGET/POST/PUT/PATCH/DELETE to any URL
OBS StudioStream, record, scenes, sources, virtual camera
SimHub Control MapperCustom roles defined in SimHub
InternalTouch page navigation

Touch pages & swipe navigation

Touchscreen devices (N4, N4 Pro) support multiple main pages, each with its own touch pages and folders. Swipe left/right gestures can be mapped to navigation or other actions. A "home" page anchors the default view. Full CRUD from the Configurator.

LED & brightness control

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

Profiles & workspaces

  • 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

Plugin system

JIB loads plugins from Plugins/ at startup. Ten 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

Built-in plugins

Keyboard

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.

Mouse

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

vJoy

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.

Media

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 Monitor

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 Commands

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.

OBS Studio

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.

HTTP / Webhook

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.

Camera

Display a camera feed on device buttons. The source is configured per button — a local webcam or a network stream (MJPEG/RTSP). Zero external dependencies, streamed through the host rendering pipeline.

SimHub

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. Requires the SimHub plugin copied into your SimHub installation (see Installation).


How mapping works

Every rendered control has two parts:

  1. a display — what the control shows (a telemetry gauge, camera feed, or system metric);
  2. mappings — event triggers that run actions when the control is used.

1. Assign a display

Drag a display source from the palette onto a control — a system metric, a camera feed, SimHub telemetry, a static image, and so on.

2. Add events and actions

Each control exposes event slots — Press, Long press, Increment, Decrement, Swipe left, Swipe right. Drop actions into an event slot: keyboard, mouse, OBS, HTTP, media, system, or navigation actions.

3. Pick a dispatch mode

ModeBehaviourUse for
Press / ReleaseHeld signal with distinct press and release eventsKeyboard shortcuts, vJoy button hold, push-to-talk
PulseOnlyInstant one-shot triggerPage navigation, mute, system commands
AutoPlugin-recommended default (fallback depends on MappingTargetKind)General use

4. Assign to a hardware control

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.

Hardware control types

ControlSupported on
Button press / releaseAll LCD key devices
Knob turn left / rightN3, N4, N4 Pro, M3, K1 Pro
Knob pressN4, N4 Pro, K1 Pro
Touch zone tapN4, N4 Pro (touchscreen surfaces)
Swipe left / rightN4, N4 Pro (touchscreen surfaces)
Auxiliary buttonN3, N1, M18 (non-LCD buttons)

Hardware compatibility

JIB maintains a hardware catalog with VID:PID identification for 15 device families across 30+ branded models.

BrandModelStatusFamilyDetails
MiraBoxN3Full supportSDN33×2 keys · 3 knobs · 3 aux buttons · native brightness
AjazzAKP03 / AKP03E / AKP03RFull supportSDN3
SoomfonStream Controller SEFull supportSDN3
Mars GamingMSD-TWOFull supportSDN3
TreasLinN3Full supportSDN3
RedragonSkyrider SS-551Full supportSDN3
MiraBox293 V2 / V3Full supportSD2935×3 keys
MiraBox293SFull supportSD293S5×3 keys · 3 screens · key GIF
FHOOU293SFull supportSD293SRebrand of MiraBox 293S (VID:PID 5548:6670)
AjazzAKP153 / AKP153E / AKP153RFull supportSD293S
Mars GamingMSD-ONEFull supportSD293S293S rebrand (VID:PID 0B00:1000 / 0B00:1005)
MaddogGK150KFull supportSD293S
RisemodeVision 01Full supportSD293S
TMICEStream ControllerFull supportSD293S
SoomfonXF-CN001Full supportSD293S
MiraBoxN4 / N4 EFull supportSDN45×2 keys · 1 touchscreen · 4 knobs · touch/swipe · native brightness
AjazzAKP05EFull supportSDN4Non-Pro family
MiraBoxN4 Pro / N4 Pro EFull supportSDN4 Pro5×2 keys · 1 touchscreen · 4 knobs · per-key LED · knob LED rings · native brightness
AjazzAKP05E PROFull supportSDN4 ProPro family · knob LED rings · vibration
MiraBoxN1Partial supportSDN15×3 keys · 3 screens · 1 knob · 2 aux buttons
VSDN1Partial supportSDN1Hardware validation in progress
MiraBoxM18 / M18EPartial supportSDM185×3 keys · 3 aux buttons · key + BG GIF
MiraBoxM3Full supportSDM35×3 keys · 3 knobs · key + BG GIF
MiraBoxXL / XLEExperimentalSDXL8×4 keys · key + BG GIF · pending end-to-end validation
MiraBoxK1 Pro / K1 Pro EUExperimentalK1Pro3×2 keys · 3 knobs · key GIF · pending end-to-end validation
ElgatoStream Deck ClassicExperimentalSDClassic5×3 keys · pending end-to-end validation
ElgatoStream Deck XLExperimentalSDDXL8×4 keys · pending end-to-end validation
ElgatoStream Deck NeoExperimentalSDNeo8 keys · 1 touchscreen · touch/swipe · pending end-to-end validation
ElgatoStream Deck +ExperimentalSDPlus8 keys · 1 touchscreen · 4 knobs · touch/swipe · pending end-to-end validation
ElgatoStream Deck + XLExperimentalSDPlusXL36 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

Configurator overview

The JIB Configurator is a WinUI 3 desktop application for visual editing.

Screens

ScreenPurpose
InfosConnection and runtime overview, active host, discovered hosts
DevicesHardware inventory and host-owned per-device settings (rotation, startup, palette, transport policy)
ControlsVisual layout editor — scenes, pages, touch pages, display sources and mapping assignment
PluginsPlugin management — health, telemetry, settings, enable/disable
DatasBrowse user-visible data published by plugins
SettingsHost runtime tuning — render quality, FPS, brightness, screensaver, network access
HostsHost discovery, identity, node administration, database
TransportsLive transport monitoring
DevHardware bring-up and VID/PID compatibility
DebugDiagnostics — render route, pressure, USB probe, box validation
LogsRuntime log viewer
AboutProject information, version, links
OptionsLocal Configurator preferences (theme, close-to-tray)

Composite save model

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

SDK (for plugin developers)

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 DeviceHostPluginServices with full access to RuntimeProviderChangeTracker, transports, and host services

Key SDK concepts:

  • IDeviceHostPlugin / DeviceHostPluginBase — base plugin contract
  • RuntimeProviderChangeTracker — 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/.

About

Jack In the BOX

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

JIB — Jack In the Box

Device host & configuration suite for StreamDock and Stream Deck hardware.

JIB renders live data on StreamDock and Stream Deck LCD button boxes. 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.


Architecture

JIB.Configurator.exe (WinUI 3) ───┐
│ TCP (port 16550, 4-byte length-prefix JSON)
JIB.Service.exe (Windows host) ───┘
├── Plugins: SimHub, OBS, HTTP, Camera, 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
  • StreamDockNative — C++ native layer for USB communication

Plugins are loaded from Plugins/ by the host. The SimHub plugin is the one exception: it runs inside SimHub.exe and streams telemetry to the host over TCP (port 16555, line-delimited JSON). The Configurator communicates with the host over TCP; there is no shared DLL between them.


Installation

Prerequisites

  • Visual C++ Redistributable x64 2015–2022 (vc_redist.x64.exe)
  • Optional: vJoy driver for virtual joystick support

Manual mode (recommended)

  1. Download the latest ZIP from GitHub Releases and extract it anywhere.
  2. Start the host: run Host\JIB.Service.exe (console mode on TCP port 16550; press Ctrl+C to stop).
  3. OpenConfigurator\JIB.Configurator.exe and connect to localhost:16550.

Windows service (optional, not recommended during alpha)

While JIB is still in alpha, prefer running the host in standalone / console mode. Installing it as a Windows service makes updates, logs, resets, and live diagnostics harder.

Run .\install-service.ps1 from an elevated PowerShell to install the host as a Windows service in C:\Program Files\JIB\ (automatic start, firewall rule, Start Menu shortcut). Use .\update-service.ps1 to update an existing installation.

SimHub telemetry (optional)

To add racing telemetry, copy the contents of Plugins\External\SimHub\ into your SimHub installation folder and restart SimHub.

Do not run the Configurator as Administrator, or drag-and-drop from Explorer into it may be blocked.


Features

Live telemetry display

Real-time telemetry rendered as JPEG frames on device LCD keys — SimHub racing data, system metrics, media levels, and more. 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 SimHub 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.

Physical controls & dispatch

Every hardware button, knob turn/press, touch zone, and swipe gesture can be mapped to:

CategoryExamples
KeyboardAny key or hotkey combination
MouseClick, double-click, scroll, move
MediaPlay/Pause, next/previous, volume, per-app audio
vJoyVirtual joystick buttons (128) and axes (8)
SystemShutdown, restart, sleep, lock, brightness, monitor off
HTTP / WebhookGET/POST/PUT/PATCH/DELETE to any URL
OBS StudioStream, record, scenes, sources, virtual camera
SimHub Control MapperCustom roles defined in SimHub
InternalTouch page navigation

Touch pages & swipe navigation

Touchscreen devices (N4, N4 Pro) support multiple main pages, each with its own touch pages and folders. Swipe left/right gestures can be mapped to navigation or other actions. A "home" page anchors the default view. Full CRUD from the Configurator.

LED & brightness control

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

Profiles & workspaces

  • 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

Plugin system

JIB loads plugins from Plugins/ at startup. Ten 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

Built-in plugins

Keyboard

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.

Mouse

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

vJoy

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.

Media

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 Monitor

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 Commands

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.

OBS Studio

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.

HTTP / Webhook

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.

Camera

Display a camera feed on device buttons. The source is configured per button — a local webcam or a network stream (MJPEG/RTSP). Zero external dependencies, streamed through the host rendering pipeline.

SimHub

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. Requires the SimHub plugin copied into your SimHub installation (see Installation).


How mapping works

Every rendered control has two parts:

  1. a display — what the control shows (a telemetry gauge, camera feed, or system metric);
  2. mappings — event triggers that run actions when the control is used.

1. Assign a display

Drag a display source from the palette onto a control — a system metric, a camera feed, SimHub telemetry, a static image, and so on.

2. Add events and actions

Each control exposes event slots — Press, Long press, Increment, Decrement, Swipe left, Swipe right. Drop actions into an event slot: keyboard, mouse, OBS, HTTP, media, system, or navigation actions.

3. Pick a dispatch mode

ModeBehaviourUse for
Press / ReleaseHeld signal with distinct press and release eventsKeyboard shortcuts, vJoy button hold, push-to-talk
PulseOnlyInstant one-shot triggerPage navigation, mute, system commands
AutoPlugin-recommended default (fallback depends on MappingTargetKind)General use

4. Assign to a hardware control

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.

Hardware control types

ControlSupported on
Button press / releaseAll LCD key devices
Knob turn left / rightN3, N4, N4 Pro, M3, K1 Pro
Knob pressN4, N4 Pro, K1 Pro
Touch zone tapN4, N4 Pro (touchscreen surfaces)
Swipe left / rightN4, N4 Pro (touchscreen surfaces)
Auxiliary buttonN3, N1, M18 (non-LCD buttons)

Hardware compatibility

JIB maintains a hardware catalog with VID:PID identification for 15 device families across 30+ branded models.

BrandModelStatusFamilyDetails
MiraBoxN3Full supportSDN33×2 keys · 3 knobs · 3 aux buttons · native brightness
AjazzAKP03 / AKP03E / AKP03RFull supportSDN3
SoomfonStream Controller SEFull supportSDN3
Mars GamingMSD-TWOFull supportSDN3
TreasLinN3Full supportSDN3
RedragonSkyrider SS-551Full supportSDN3
MiraBox293 V2 / V3Full supportSD2935×3 keys
MiraBox293SFull supportSD293S5×3 keys · 3 screens · key GIF
FHOOU293SFull supportSD293SRebrand of MiraBox 293S (VID:PID 5548:6670)
AjazzAKP153 / AKP153E / AKP153RFull supportSD293S
Mars GamingMSD-ONEFull supportSD293S293S rebrand (VID:PID 0B00:1000 / 0B00:1005)
MaddogGK150KFull supportSD293S
RisemodeVision 01Full supportSD293S
TMICEStream ControllerFull supportSD293S
SoomfonXF-CN001Full supportSD293S
MiraBoxN4 / N4 EFull supportSDN45×2 keys · 1 touchscreen · 4 knobs · touch/swipe · native brightness
AjazzAKP05EFull supportSDN4Non-Pro family
MiraBoxN4 Pro / N4 Pro EFull supportSDN4 Pro5×2 keys · 1 touchscreen · 4 knobs · per-key LED · knob LED rings · native brightness
AjazzAKP05E PROFull supportSDN4 ProPro family · knob LED rings · vibration
MiraBoxN1Partial supportSDN15×3 keys · 3 screens · 1 knob · 2 aux buttons
VSDN1Partial supportSDN1Hardware validation in progress
MiraBoxM18 / M18EPartial supportSDM185×3 keys · 3 aux buttons · key + BG GIF
MiraBoxM3Full supportSDM35×3 keys · 3 knobs · key + BG GIF
MiraBoxXL / XLEExperimentalSDXL8×4 keys · key + BG GIF · pending end-to-end validation
MiraBoxK1 Pro / K1 Pro EUExperimentalK1Pro3×2 keys · 3 knobs · key GIF · pending end-to-end validation
ElgatoStream Deck ClassicExperimentalSDClassic5×3 keys · pending end-to-end validation
ElgatoStream Deck XLExperimentalSDDXL8×4 keys · pending end-to-end validation
ElgatoStream Deck NeoExperimentalSDNeo8 keys · 1 touchscreen · touch/swipe · pending end-to-end validation
ElgatoStream Deck +ExperimentalSDPlus8 keys · 1 touchscreen · 4 knobs · touch/swipe · pending end-to-end validation
ElgatoStream Deck + XLExperimentalSDPlusXL36 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

Configurator overview

The JIB Configurator is a WinUI 3 desktop application for visual editing.

Screens

ScreenPurpose
InfosConnection and runtime overview, active host, discovered hosts
DevicesHardware inventory and host-owned per-device settings (rotation, startup, palette, transport policy)
ControlsVisual layout editor — scenes, pages, touch pages, display sources and mapping assignment
PluginsPlugin management — health, telemetry, settings, enable/disable
DatasBrowse user-visible data published by plugins
SettingsHost runtime tuning — render quality, FPS, brightness, screensaver, network access
HostsHost discovery, identity, node administration, database
TransportsLive transport monitoring
DevHardware bring-up and VID/PID compatibility
DebugDiagnostics — render route, pressure, USB probe, box validation
LogsRuntime log viewer
AboutProject information, version, links
OptionsLocal Configurator preferences (theme, close-to-tray)

Composite save model

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

SDK (for plugin developers)

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 DeviceHostPluginServices with full access to RuntimeProviderChangeTracker, transports, and host services

Key SDK concepts:

  • IDeviceHostPlugin / DeviceHostPluginBase — base plugin contract
  • RuntimeProviderChangeTracker — 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/.

About

Jack In the BOX

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors