An offline, unified control panel for supported gaming peripherals — mice, keyboards, and more. Talks directly to the hardware over HID — no cloud, no account, no drivers to install.
Current version: 0.5.19
| Layer | Technology |
|---|---|
| Runtime | Electron 33 (main process, HID + IPC) |
| UI | React 18 |
| State | Zustand |
| Styling | Tailwind CSS v4 (@theme tokens + utilities) |
| Build | Vite 6 + TypeScript 5 |
| Hardware | node-hid via per-device drivers |
| Device | Type | Driver |
|---|---|---|
| Razer Viper Mini | Mouse | electron/devices/razer-viper-mini.cjs |
| Razer Cobra | Mouse | electron/devices/razer-cobra.cjs |
| Razer Huntsman Mini | Keyboard | electron/devices/razer-huntsman-mini.cjs |
| Redragon K617 Fizz Pro | Keyboard | electron/devices/redragon-k617.cjs |
| Aula F75 Max | Keyboard | electron/devices/aula-f75-max.cjs |
| Logitech G304 Lightspeed | Mouse | electron/devices/logitech-g304.cjs |
| Logitech G502 X | Mouse | electron/devices/logitech-g502x.cjs |
| Logitech G402 Hyperion Fury | Mouse | electron/devices/logitech-g402.cjs |
| Kreo Chimera V2 | Mouse | electron/devices/kreo-chimera.cjs |
| Redragon K552 Kumara | Keyboard | electron/devices/redragon-k552.cjs |
| Xbox 360 Controller (wired / wireless) | Gamepad | electron/devices/xbox-360.cjs |
More devices — including other peripheral types — can be added through electron/supported-devices.json + a driver module.
- Dashboard — the home page: every connected device as a display card (product artwork, or the live gamepad for controllers), with a one-click "Open" to jump into its Overview.
- Devices — a catalog of every supported peripheral, grouped into Keyboards, Mice, and Controllers, with live connection state and one-click navigation.
- Overview — product artwork on a radial stage with live stats (DPI, polling rate, lighting, firmware).
- Overview (controller) — a live animated controller HUD: the on-screen gamepad mirrors the physical one in real time (sticks, triggers, D-pad, A/B/X/Y, bumpers), exactly like a web gamepad tester. Live left/right stick axes, trigger and button readouts sit alongside the visual.
- Performance (mouse) — single DPI slider (per-model range, e.g. 200–12000 G304 / 100–25600 G502 X) with 400 / 800 / 1600 / 3200 presets, polling-rate selector, and sensor options. Controls are shown only when the device model supports them (e.g. lift-off distance, motion sync).
- Performance (keyboard) — debounce time.
- Lighting — logo lighting (mouse) and RGB effects (keyboard): effect, colour, speed and brightness. Hidden for devices without controllable lighting (e.g. G304 / G502 X / G402).
- Profiles — named onboard profiles (Viper Mini): capture the current DPI / polling / lighting settings, rename or delete them, and apply a profile to the device's onboard memory so it survives a replug.
- Keybinds — planned for a future update (shown in-app as roadmap).
- Settings — app info (version, license), update status with download / restart-to-install, GitHub and website links, and a one-click report-a-bug button.
- Offline saves — settings are written to the device over HID and persisted as profiles; unsupported actions are reported with "awaiting driver support" notes.
Premium dark interface with a cyan accent system, inspired by professional hardware software (Logitech G Hub / Razer Synapse):
- Deep obsidian palette on
#0f1115(--bg-main) with--bg-surfacepanels/sidebar,#20232aelevated containers, and minimal--border-subtlestructure. - Cyan accent (
--accent-primary#00b8fc) reserved for interaction: primary buttons, active toggles, slider fill/thumbs, selected devices and nav — each with a soft glow on active/selected states. - Semantic status colors:
--successgreen (connected),--warningamber (battery),--errorred (errors/delete). - Plus Jakarta Sans for headings, Inter for UI/body text, JetBrains Mono for labels, values and overlines. All fonts are self-hosted for offline operation.
- Device photo on the overview stage; single save bar with a cyan Save changes button.
Requirements: Node.js 18+, npm.
npm install
npm run dev # Vite dev server with an in-browser mock backend
npm run build # production bundle into dist/
npm run typecheck # tsc --noEmitnpm run start # build + launch Electron (real HID via node-hid)
npm run start:nobuildnpm run dist # NSIS installer into release/
npm run dist:dir # unpacked build into release/win-unpacked
npm run release # build + publish installer as a GitHub Release (needs GH_TOKEN)The installer is written to release/Gear-Hub-Setup-<version>.exe. npm run release publishes it (plus latest.yml + .blockmap) as a GitHub Release tagged v<version>, so installed users update in-app automatically.
electron/ Main process, HID layer, device drivers, IPC handlers
src/ React renderer
components/ Sidebar, header, save bar, controls, device visual
pages/ Dashboard, Overview, Performance, Lighting, Keybinds, Profiles, Settings
dev/mock.ts In-browser mock backend used by `npm run dev`
public/ Product images and logo
dist/ Production build output (generated)
release/ Packaged executables (generated)
- In dev mode the mock backend (
src/dev/mock.ts) lets you explore the UI without hardware. - The app only lists devices it controls; other HID devices are ignored in the device picker.
- See
PATCH_NOTES.mdfor the change history.