OpenLogi

AprilNEA·AprilNEA.OpenLogi

A native, local-first desktop app for configuring Logitech HID++ devices.

OpenLogi is an independent, open-source desktop app for Logitech HID++ devices. It supports button remapping, DPI, SmartShift, battery status, and per-application profiles. Configuration is stored locally in plain TOML files, with no account or telemetry.

winget install --id AprilNEA.OpenLogi --exact --source winget

Latest 0.8.6·September 19, 2026

Release Notes

What's Changed

  • refactor(gui): split app_icon around an AppIconExt trait by @AprilNEA in #1422
  • fix(gui): hold a config reload until the agent connects by @AprilNEA in #1416
  • refactor(ipc): own the client handshake once and guard it with ast-grep by @AprilNEA in #1424
  • refactor(core): name the process roles, host profiles, and environment knobs once by @AprilNEA in #1426
  • refactor(ipc,cli): bound the handshake once and give the CLI one agent door by @AprilNEA in #1427
  • refactor(core): build every worker runtime in one place by @AprilNEA in #1428
  • refactor(core): spell the app bundle's layout once by @AprilNEA in #1429
  • docs(infra): add openlogi workflow skills by @AprilNEA in #1409
  • docs(infra): refine agent guidance and diagnostic workflows by @AprilNEA in #1485
  • refactor(cli): give the command modules that carry code a file of their own by @AprilNEA in #1494
  • refactor(hidpp): split the pending-request queue and the mock channel out of channel.rs by @AprilNEA in #1495
  • refactor(hook): split the macOS backend by responsibility by @AprilNEA in #1496
  • refactor(hook): split the Linux backend into the evdev hook and the foreground watcher by @AprilNEA in #1497
  • chore: drop an unused dependency, a dead parameter, and stale docs by @AprilNEA in #1487
  • refactor(gui): let state mutators own their events and views share one relevance filter by @AprilNEA in #1505
  • refactor(gui): give write-on-release sliders one component by @AprilNEA in #1506
  • refactor(ipc): own the observe loop's connection state in one Observer by @AprilNEA in #1507
  • perf(gui): resolve each device's assets once per asset generation by @AprilNEA in #1508
  • refactor(gui): say what the state types are by @AprilNEA in #1509
  • refactor(core): give the key vocabulary one owner by @AprilNEA in #1488
  • refactor(core): give seven copied decisions one owner each by @AprilNEA in #1489
  • refactor(xtask): spell xtask's waits and its bundle builder in the workspace's vocabulary by @AprilNEA in #1490
  • ci(windows): run the tests on Windows by @AprilNEA in #1491
  • refactor(device): drop the capture paths nothing calls and type the session errors by @AprilNEA in #1500
  • refactor(core): split the config module by concern by @AprilNEA in #1511
  • refactor(device): split the inventory and probe modules by responsibility by @AprilNEA in #1512
  • refactor(device): call durations that bound a wait timeouts by @AprilNEA in #1513
  • refactor(device): run gesture and keyboard capture through one session skeleton by @AprilNEA in #1501
  • refactor(device): share one pending-restore token between capture and host switch by @AprilNEA in #1502
  • refactor(agent): run the capture watchers on one harness and name the device-access handles by @AprilNEA in #1503
  • refactor: say what eight identifiers are by @AprilNEA in #1517
  • refactor(camera): suffix the macOS backends like the other platforms' by @AprilNEA in #1518
  • refactor(gui): move the F-key geometry into function_row/key_points.rs by @AprilNEA in #1525
  • refactor(agent): move the device list and re-apply plan into orchestrator/devices.rs by @AprilNEA in #1526
  • refactor(gui): split the AppState tests by what they exercise by @AprilNEA in #1527
  • refactor(inject): run scripts and workflows once, over four platform hooks by @AprilNEA in #1529
  • refactor(core): split the config tests by what they exercise by @AprilNEA in #1530
  • refactor(device): split the inventory and gesture capture tests by what they exercise by @AprilNEA in #1531
  • refactor(agent): split the orchestrator tests by what they exercise by @AprilNEA in #1532
  • refactor(hidpp): split the channel tests by what they exercise by @AprilNEA in #1533
  • refactor(device): move the host-switch session's tests to host_switch/tests.rs by @AprilNEA in #1535
  • refactor(agent): move the button runtime's worker loop into button/worker.rs by @AprilNEA in #1536
  • refactor(inject): break the macOS injector into scroll, browser and SPI modules by @AprilNEA in #1537
  • refactor(gui): move the mouse view's binding labels and tests out of view.rs by @AprilNEA in #1538
  • refactor(gui): move the camera panel's row builders into controls/rows.rs by @AprilNEA in #1539
  • feat(gui): detect and display installation sources by @AprilNEA in #1515
  • docs(gui): mend the desktop crate's intra-doc links by @AprilNEA in #1541
  • chore: release v0.8.6 by @AprilNEA[bot] in #1481

Installer type: wix

x64—55CBF9ED3CB163DECE0F228DC82C4D58BD366A2C6BCF0F7DC9D28B29944F4C70
arm64—912F274F77BEC96710590A163C6C468C288B616B08CD6BE649A180C90A06F009

Details

Homepage
https://github.com/AprilNEA/OpenLogi
License
MIT OR Apache-2.0
Publisher
AprilNEA
Support
https://github.com/AprilNEA/OpenLogi/issues
Copyright
Copyright (c) 2026 AprilNEA
Moniker
openlogi

Tags

button-remappingdesktopdevice-configurationdpihardwarehidhidppkeyboardlocal-firstlogitechmouseopen-sourceperipheralsmartshift

Older versions (4)

0.8.5
x64—172B0B1E9AA2CC6F42FFDC1B7429CD72EBB5B9EAF3D31C8D2D311F41A5E3FEFA
arm64—9F8D8DDB36BE2D651BD896523B4D90B3E9115B6038E20F82FE9F98930AF5E83A
0.8.4
x64—D4BCDED9F540E1D34DAECE16349D48396F07E9A766DCA2E4CEEC61AB8DAFC173
arm64—E04A96EB7A280E1E10C1B67ADAA6CCDA587ECE1AEE0B23C5FE765176534D99D6
0.8.3
x64—9489FC18F2864493601037218D351661EDF18BA2820C44DDAD55001FF7482FD9
arm64—0B9757315AD1343BEA561FEE24CD2689F7157BD462243AE56B19122C5FC33FDD
0.8.1
x64—13BA0DAF780B2F7791099877AA8B780B1A7E6ED24245E3E3F35BFDE0A52158FE
arm64—07C26088262AB9175FB86968F70040B17977005179D8196C57C6EA2641487B27