Personal Stream Deck plugins built with the Elgato Stream Deck SDK.
Displays the wireless mouse battery level on a Stream Deck key. Supports:
- Corsair mice via iCUE (uses the Corsair iCUE SDK)
- Logitech G502 Lightspeed (and compatible) via direct HID++ communication over the LIGHTSPEED USB receiver
Press the key to cycle between Corsair and Logitech device sources. The icon changes colour based on charge level (good / fair / poor), and the percentage is shown as the key title.
- Node.js v20
- Stream Deck software v6.9 or later
- The
streamdeckCLI (installed via@elgato/cli)
cd batterystatus
npm installRebuilds on every file change and automatically restarts the plugin in Stream Deck:
npm run watchnpm run buildThe compiled plugin is output to com.ash-matheson.batterystatus.sdPlugin/bin/plugin.js.
npm run lint| Package | Purpose |
|---|---|
@elgato/streamdeck |
Stream Deck plugin SDK — WebSocket communication, action lifecycle, settings |
cue-sdk |
Node.js bindings for the Corsair iCUE SDK |
koffi |
FFI library used to call CorsairReadDeviceProperty directly from the iCUE DLL |
node-hid |
Raw HID access for Logitech HID++ communication over the LIGHTSPEED receiver |
rollup |
Bundler — produces the single plugin.js file required by the SDK |
typescript |
Language |
- Fork the repository and create a branch from
main. - Install dependencies (
npm installinside the plugin directory). - Make your changes in
src/. Runnpm run watchto test live against Stream Deck. - Ensure
npm run lintpasses with zero warnings before opening a PR. - Open a pull request with a clear description of what was changed and why.
batterystatus/
├── src/
│ ├── actions/
│ │ └── battery-status.ts # Stream Deck action (poll loop, icon/title updates)
│ ├── corsair.ts # iCUE SDK integration
│ ├── logitech.ts # HID++ battery reader for Logitech receivers
│ └── plugin.ts # Entry point — registers actions and connects to Stream Deck
├── com.ash-matheson.batterystatus.sdPlugin/
│ ├── bin/ # Compiled output (do not edit by hand)
│ ├── imgs/ # Plugin and action icons
│ ├── ui/ # Property Inspector HTML pages
│ └── manifest.json # Plugin metadata and action declarations
└── package.json