Releases: Sapd/HeadsetControl
Release list
4.0.0
HeadsetControl 4.0.0 is a major release. It is the first stable release built on the complete rewrite of HeadsetControl from C to modern C++20, and it bundles all device and feature work accumulated since 3.1.0 — 20+ new headsets, new capabilities, and a large batch of battery/chatmix fixes.
Note for existing users: the command-line interface is unchanged — your existing commands and scripts keep working. The major version bump reflects the internal rewrite and the new public library API, not CLI breakage.
Highlights — the C++20 rewrite
HeadsetControl has been rewritten from the ground up in modern C++20:
- Type-safe error handling with
Result<T>— every device operation returns a rich result (level,status, errorcode+message) instead of ambiguous return codes. - New high-level library API — HeadsetControl is now usable as a library, not just a CLI:
- C++:
#include <headsetcontrol.hpp>(headsetcontrol::discover(),headset.getBattery(), …) - C / FFI:
#include <headsetcontrol_c.h>for bindings (Python, Rust, …) - Static (
headsetcontrol_lib) and optional shared (-DBUILD_SHARED_LIBRARY=ON, versioned with SOVERSION) targets.
- C++:
- Protocol templates (
HIDPPDevice,SteelSeriesDevice,CorsairDevice) that cut per-device code by 60–80%. - Data-driven feature system — a single capability-descriptor table and a handler registry replace the old giant switch statements, with automatic parameter validation and help-text generation.
- Comprehensive test suite — unit, mock-device, and integration tests, plus a virtual test device implementing every capability.
- Reorganized project layout —
src/*.c→lib/(core library) +cli/(command-line) +tests/; C++ headers use.hpp.
Breaking changes
- Requires a C++20 compiler (GCC 13+, Clang 16+, Apple Clang 15+, MSVC 2019 16.10+).
- Source layout reorganized into
lib/,cli/,tests/; headers renamed.h→.hpp. - New library targets and install layout (public headers under
lib/).
Full technical detail is in the release notes below and in docs/ADDING_A_DEVICE.md / docs/LIBRARY_USAGE.md.
New device support
- Audeze — Maxwell 2 (PlayStation/PC and Xbox variants)
- Corsair — Virtuoso XT, Virtuoso Max Wireless, HS80 Max, Wireless V2 family
- HyperX — Cloud III Wired (2026), Cloud II Wireless (incl. Kingston variant)
- Lenovo — Wireless VoIP Headset
- Logitech — ASTRO A50 Gen 5, G522 LIGHTSPEED, G PRO X2 LIGHTSPEED (Centurion protocol + new variant), G431 product ID
- Plantronics / Poly — Voyager 8200 UC (via BT600 dongle)
- Sony — INZONE H5 (WH-G500), INZONE Buds (WF-G700N)
- SteelSeries — Arctis Nova 3P Wireless, Arctis Nova 3X Wireless, Arctis Nova 7 (Gen 2), Arctis Nova 7X / 7P (Gen 2 + additional PIDs, Diablo edition, WoW 20th Anniversary edition), Arctis Buds
New features
- Noise filter capability (Audeze Maxwell).
- Parametric equalizer capability (SteelSeries Arctis Nova 3P), plus equalizer presets and microphone-volume support for that family.
- USB vendor/product name retrieval for connected devices.
- Per-capability platform specification (devices can declare Linux/macOS/Windows support).
equalizer_presets_countdecoupled from the preset list.- Packaging & installers: Windows NSIS installer, Linux AppImage /
.deb/.rpm, and portable binaries for all platforms, produced by the continuous-build pipeline with SHA-256 checksums.
Fixes
- Treat out-of-range battery voltage as unavailable rather than reporting a bogus level.
- Fix Arctis Nova 7 battery-level misreporting and correct the HID interface used for Nova 3P/3X battery queries.
- Use absolute battery reporting for SteelSeries Gen 2 devices.
- Fix inverted ChatMix mapping on SteelSeries Arctis 7 / Pro.
- Fix battery reporting on several Logitech devices and on HyperX Cloud II Wireless.
- Limit the Logitech PRO X2 legacy battery fallback to genuinely unsupported features.
- Fix
-oquerying each info capability twice; correct G Pro X2 sidetone-level mapping.
For developers
- Adding a device is now a small header-only class — see
docs/ADDING_A_DEVICE.md. - Using HeadsetControl as a library (C++, C, Python, Rust examples) — see
docs/LIBRARY_USAGE.md.
Release artifacts are signed — each download has a matching .asc detached GPG signature (key git@sapd.eu, fingerprint 77BE B7E2 32CF 1E51 5477 7D4D D586 6C58 9401 97BF). Verify with gpg --verify <file>.asc <file>.
What's Changed
- Fix rapid battery request issue on Audeze Maxwell by @ModoloDev in #412
- fix(steelseries_arctis_nova_7): add missing product ID by @ChadAPSheridan in #419
- Feat: Add support for SteelSeries Arctis Nova 3P Wireless by @marcg03 in #417
- Added OS X 3rd party tool by @ChrisLauinger77 in #420
- feat: Decouple equalizer_presets_count from equalizer_presets by @bwachtendorf in #423
- Upgrade clang-format to version 18 and improve version consistency by @Sapd in #428
- docs: Add headset-battery-indicator GUI link to README by @ruflas in #430
- Fix Battery on various Logitech devs by @Sapd in #434
- Add aarol/headset-battery-indicator to README by @aarol in #435
- Fix Hyperx Cloud II Wireless battery status by @Joaaoc in #436
- Add suport for SteelSeries Arctis Nova 3X Wireless by @jb-boin in #438
- add support for SteelSeries Arctis Nova 7x Wireless Gen 2 by @alyraffauf in #440
- C++ Rewrite by @Sapd in #443
- Update CI to use lukka/run-cmake@v10 with CMakePresets and add MSVC s… by @Sapd in #453
- edited third party softwares by @floraaubry in #445
- Packages by @Sapd in #454
- Organize Releases and add Windows Installer by @Sapd in #455
- Add top level project guard by @billtran1632001 in #456
- Add additional Steelseries Arctis Nova 7X v2 id by @Crashdummyy in #461
- Clang format PR CI fix by @Sapd in #465
- Replace -? for capabilities by @Sapd in #466
- CI: Fix PATH error of installer by @Sapd in #467
- Fix equalizer presets output in JSON, YAML, and ENV formats by @Sapd in #468
- Separate Nova 7P into its own device class without sidetone/chatmix by @Sapd in #469
- Fix cpp-linter 403 errors and apply code formatting by @Sapd in #470
- Nova 7 Diablo by @handy142 in #473
- Steelseries Gen2 uses absolute battery by @Sapd in #457
- Fix inverted ChatMix level for SteelSeries Arctis 7/Pro (#475) by @Sapd in #480
- Add support for Arctis Nova 7X (PIDs 0x22a4, 0x22a5) by @nisodex in #484
- changed interface id from 0 to 4 for Arctis Nova 3P Wireless by @mrkrook2012 in #483
- Add new device: Corsair wireless v2 by @Frank-py in #492
- Adds support for a new G PRO X2 variant by @ChrisLauinger77 in #478
- Add support for retrieving USB vendor and product names by @ChrisLauinger77 in #494
- Add new device: Lenovo Wireless VoIP Headset by @danielstuart14 in #497
- fix 499 - correct HID interface for Arctis Nova 3P/3X Wireless battery query by @asdfasdf-ohfot in #500
- Add new PID for Arctis Nova 7x v2, Nova 7P v2 by @aarol in #496
- Add support for Audeze Maxwell 2 PlayStation version by @jjantti22 in #502
- Update sidetone level mapping for Logitech G Pro X2 Lightspeed by @ChrisLauinger77 in #503
- Add support for Logitech G522 Lightspeed by @iowi479 in #501
- Add support for Sony INZONE Buds (WF-G700N) by @Sniqi in #505
- Updates QontrolPanel entries in README by @ChrisLauinger77 in #509
- Adding G431 product id by @LJ5O in #508
- Fix Arctis Nova 7 battery level misreporting. by @ashirkov-c-arlo in #507
- Logitech G PRO X 2 LIGHTSPEED Centurion protocol by @ChrisLauinger77 in #512
- Added full support for Audeze Maxwell 2 PS/PC version by @MonsterBagels in #506
- Fix HID++ battery voltage out-of-range handling by @eriosgamer in #516
- feat(device): add HyperX Cloud II Wireless (Kingston) by @Phelete in #519
- add HyperX Cloud III Wired 2026 by @MattGalan in #525
- Add Corsair Virtuoso Max Wireless support by @gr...
Continuous Build
Continuous Build
Latest automated build from master branch.
Downloads
Windows
- headsetcontrol-windows-x86_64-setup.exe - Installer (recommended)
- headsetcontrol-windows-x86_64.exe - Portable
Linux
- headsetcontrol-x86_64.AppImage - AppImage (universal)
- headsetcontrol_4.0.0-16-g9ab5031_amd64.deb - Debian/Ubuntu
- headsetcontrol-4.0.0_16_g9ab5031-1.x86_64.rpm - Fedora/RHEL
- headsetcontrol-linux-x86_64.zip - Portable
macOS
- headsetcontrol-macos-arm64.zip - Portable
Checksums (SHA256)
94da242166dd263447f7a34172985e13de07d30b38cba14381fac18864a7f8fa headsetcontrol-4.0.0_16_g9ab5031-1.x86_64.rpm
bae53aeae8b06ad0ec505bbc560c446c925cead4c4b6a0eac5f671089da446af headsetcontrol-linux-x86_64.zip
7f11dd78ee2a8e406291a5940f9f1c97302109989fe9cf5f9e035227ea78975b headsetcontrol-macos-arm64.zip
cf56be6ae6dafb79abf2f7df6c2395702e8a1f6a373ad68bb2d9abb558ae50fa headsetcontrol-x86_64.AppImage
a88781e899562a1b99fa661909cbf336ec59aed8e48aef5c40a09dbe8d378ad1 headsetcontrol_4.0.0-16-g9ab5031_amd64.deb
Built from 9ab5031
3.1.0
What's Changed
- Rename asprintf to _asprintf to avoid unused-result warnings by @Leixb in #337
- Add NixOS install instructions by @Leixb in #338
- Fix by @Sapd in #349
- Add Hyper X Cloud 3 Wired by @Sapd in #348
- Fix: Add ID for Arctis Nova 7X revision by @rpbaptist in #352
- Added capabilities for Artic Nova 7 mirophone(tested and working) and… by @nicola02nb in #356
- Added json output of equalizer information of the device by @nicola02nb in #358
- Feat: Add support for SteelSeries Arctis Nova 5 by @hrzlgnm in #361
- Add Arctis Nova 5 EQ Presets and Equalizer settings support by @hrzlgnm in #362
- Added third party software to README.md by @nicola02nb in #366
- Added Nova 5X as a SteelSeries Arctis Nova 5 by @IceMoonMagic in #364
- Added HeadsetControl-Qt third party project to readme by @Odizinne in #367
- Rolled back code for artics nova 7 battery (it was more accurate) by @nicola02nb in #368
- Updated third party software by @nicola02nb in #369
- Add device Steelseries Arctis 7P by @alexbangert in #371
- Added --repeat option for --dev arguments by @nicola02nb in #376
- Add new G733 hardware ID by @tom-ricci in #378
- Artics nova basestation by @nicola02nb in #379
- Add CI workflow to publish a continuous release by @nicola02nb in #380
- Fix build workflow: update zip command to include all matching artifacts by @nicola02nb in #384
- Update GitHub Actions to use upload-artifact@v4 by @nicola02nb in #394
- Add openSUSE prerequisites by @YellowApple in #387
- Multiple device support by @nicola02nb in #382
- Multiple device fix by @nicola02nb in #397
- Fix various spelling issues by @hrzlgnm in #400
- Add support for Audeze Maxwell by @ModoloDev in #401
- Fix for linux continuous release by @nicola02nb in #403
- Missing line terminator by @Sapd in #404
New Contributors
- @Leixb made their first contribution in #337
- @rpbaptist made their first contribution in #352
- @nicola02nb made their first contribution in #356
- @hrzlgnm made their first contribution in #361
- @IceMoonMagic made their first contribution in #364
- @Odizinne made their first contribution in #367
- @alexbangert made their first contribution in #371
- @tom-ricci made their first contribution in #378
- @YellowApple made their first contribution in #387
- @ModoloDev made their first contribution in #401
Full Changelog: 3.0.0...3.1.0
3.0.0
Implemented an output feature for third party API.
For example: headsetcontrol --output json
See here for full docs of the API.
Short output (-c) is now deprecated.
What's Changed
- Adds Device ID for SteelSeries Arctis Pro GameDAC by @AGuyWhoLikesTetris in #300
- Fix HyperX Cloud Alpha by @InfiniteLoopGameDev in #305
- Add Steelseries Arctis Nova Pro Wireless support by @Anden in #306
- Add support for Steelseries Arctis Nova 7 Diablo IV edition by @yurusov in #310
- Add support for Logitech G Pro X 2 by @darkymtp in #316
- Add Arctis Nova 3 support by @AnErrupTion in #319
- Introduce internal equalizer baseline and band limit by @AnErrupTion in #320
- Closes issue #322 | Add option to check if headset is connected by @AinoSpring in #323
- Support for 0x0a56(Corsair Void Elite USB RGB) by @catdotjs in #307
- Implement JSON/YAML/ENV output by @Sapd in #333
- Help text (
-h) reworked and dynamically adjusts depending on device - Battery can now also report during charging (but it might be imprecise)
- HeadsetControl will now also display version information
New Contributors
- @AGuyWhoLikesTetris made their first contribution in #300
- @Anden made their first contribution in #306
- @yurusov made their first contribution in #310
- @darkymtp made their first contribution in #316
- @AnErrupTion made their first contribution in #319
- @AinoSpring made their first contribution in #323
- @catdotjs made their first contribution in #307
Full Changelog: 2.7.0...3.0.0
2.7.0
Summary
- Add
--follow [secs]parameter for monitoring - A Windows binary is now built for every PR/Push, check GitHub actions/artefacts
- A lot of fixes, devices and device features (see below)
What's Changed
- Also dont install udev files on FreeBSD by @Alexander88207 in #223
- Moving battery calculation for lipo discharge into utility.c by @jaypikay in #227
- Adding support for Arctis 7p+ Playstation by @johannagnarsson in #228
- Update steelseries_arctis_9.c by @Karpovich-alex in #229
- Initial support for Logitech G535 by @loque in #234
- Add inactive_timeout for g533 by @matthewturk in #237
- Add a monitor mode by @hadess in #230
- adds support for SteelSeries Arctis Nova 7 by @mbackermann in #233
- fix chatmix option removed by #230 by @str0g in #247
- hexdump method to speed runtime protocol debugging by @str0g in #246
- fix steelseries arctis nova 7 support by @str0g in #248
- feat: add arctis 7+ chatmix by @Michsior14 in #251
- feat: add custom equalizer to arctis 7+ and nova 7 by @Michsior14 in #254
- feat: add corsair void elite premium rgb by @joaovitorzv in #255
- Add missing ID for corsair void pro usb. by @antoineB in #256
- Updated README.md to match supported G Pro features. by @jaypikay in #257
- s9 only supports a single report, first byte must be set to 0x0 by @rscottyy in #260
- oversight: whilst output is on a single report (0x0), input is on separate reports. by @rscottyy in #261
- Add Support for Arctis 7X+ (Xbox) by @vorbeiei in #263
- Add Corsair VOID RGB USB 3 by @rwjack in #264
- Improve Logitech G535 support by @Moonlight-Angel in #266
- Update README.md by @ChrisLauinger77 in #276
- Add HyperX Cloud Alpha Wireless Support by @InfiniteLoopGameDev in #284
- Fix a small typo (buy --> but) by @Alexander88207 in #288
- Mac ignore interfaceid by @Sapd in #290
- Update steelseries_arctis_7_plus.c by @GeniviAMmaintainer in #272
- Add new ID Logitech G733 by @ricarmon in #280
- Fix spline function by @Sapd in #291
- Windows artifact, bots, readme improvements by @Sapd in #292
New Contributors
- @Alexander88207 made their first contribution in #223
- @johannagnarsson made their first contribution in #228
- @Karpovich-alex made their first contribution in #229
- @loque made their first contribution in #234
- @matthewturk made their first contribution in #237
- @mbackermann made their first contribution in #233
- @str0g made their first contribution in #247
- @joaovitorzv made their first contribution in #255
- @antoineB made their first contribution in #256
- @rscottyy made their first contribution in #260
- @vorbeiei made their first contribution in #263
- @rwjack made their first contribution in #264
- @Moonlight-Angel made their first contribution in #266
- @ChrisLauinger77 made their first contribution in #276
- @InfiniteLoopGameDev made their first contribution in #284
- @GeniviAMmaintainer made their first contribution in #272
- @ricarmon made their first contribution in #280
Full Changelog: 2.6.1...2.7.0
2.6.1
What's Changed
- Create issue templates by @Sapd in #191
- Added timeout parameter for reading, default is 5s by @Sapd in #195
- PRO X Wireless Headset by @jaypikay in #197
- Arctis 1 Wireless - fixed inactive time functionality and added Windows Support by @alisadah in #196
- Added windows support for Logitech G533 by @ThomasMarangoni in #208
- feat: add steelseries arctis 7 plus (2021) support by @Michsior14 in #209
- feat: support equalizer presets for arctis 7+ by @Michsior14 in #210
- docs: add equalizer presets info to readme by @Michsior14 in #212
- initial support for hyperx cloud flight wireless by @hede5562 in #211
- Add Arctis 7X support by @blades in #220
New Contributors
- @jaypikay made their first contribution in #197
- @alisadah made their first contribution in #196
- @ThomasMarangoni made their first contribution in #208
- @Michsior14 made their first contribution in #209
- @hede5562 made their first contribution in #211
- @blades made their first contribution in #220
Full Changelog: 2.6...2.6.1
2.6: Dev Menu and full Windows Support
Summary
- Added developer menu:
./headsetcontrol --dev- E.g. list all connected HID devices:
./headsetcontrol --dev -- --list
- E.g. list all connected HID devices:
- Support for different Usage/UsagePage/InterfaceIDS per feature/device instead of per device
- This enables full Windows Support
- UsageIDs for several devices still need to be added
What's Changed
- cmake improvements for distros by @iv-m in #181
- Support different Interface/Usage/UsagePage-IDs per headset by @Sapd in #188
Full Changelog: 2.5...2.6
2.5
Summary
- Windows binary now statically linked
- Added support for more devices
- udev location fixed
What's Changed
- Improve README: Add Fedora commands by @vscsilva in #155
- SteelSeries Arctis 1 Wireless battery status support by @iv-m in #156
- Add support for Logitech G433 (Sidetone) by @Athemis in #161
- Add support for SteelSeries Arctis Pro Wireless by @csmith in #162
- Be more verbose about the -m option by @XPhyro in #171
- Fix chat-mix comment by @XPhyro in #176
- Mention voice prompts and rotate to mute in readme by @simonbaird in #175
- Add support for Logitech Zone 750 by @simonbaird in #174
- Added Roccat Elo 7.1 USB by @JackLeEmmerdeur in #172
- Fix install path of udev rules on linux by @ianliu in #179
- Windows: Link statically by @Sapd in #180
New Contributors
- @vscsilva made their first contribution in #155
- @iv-m made their first contribution in #156
- @Athemis made their first contribution in #161
- @csmith made their first contribution in #162
- @XPhyro made their first contribution in #171
- @simonbaird made their first contribution in #175
- @JackLeEmmerdeur made their first contribution in #172
- @ianliu made their first contribution in #179
Full Changelog: 2.4...2.5
2.4
Windows support
- Experimental Windows support
- CI
- New corsair void product ids
- Renamed executable to lower-case
- G533 battery status
- G935 support
- G933 support