Changelog
Every OpenLogi release, pulled from the project's GitHub Releases.
Every OpenLogi release, generated from the project's GitHub Releases. Release notes are written in English.
v0.8.11
Released October 2, 2026 · View on GitHub ↗
What's Changed
- fix(macos): press Back and Forward as the frontmost app's menu item by @AprilNEA in #1622
- chore(nix): update flake.lock by @aprilnea[bot] in #1217
- fix(agent): recognize an overlay tenant by any image we ever shipped by @AprilNEA in #871
- feat(linux): add verified release installer by @AprilNEA in #1109
- ci(nix): only run Nix CI on flake and packaging changes by @davidbudnick in #1250
- fix(macos): confirm desktop switches with private space APIs by @AprilNEA in #1586
- fix(macos): drive the device-I/O gate from powerd instead of workspace notifications by @AprilNEA in #1323
- fix(core): match Actions Ring layouts with the per-app selector by @AprilNEA in #643
- chore: release v0.8.11 by @aprilnea[bot] in #1637
- fix: clear the lints rustc 1.99 raises on untouched code by @AprilNEA in #1638
- chore: release v0.8.11 by @AprilNEA in #1643
- chore: release v0.8.11 by @AprilNEA in #1644
Full Changelog: v0.8.10...v0.8.11
v0.8.10
Released September 30, 2026 · View on GitHub ↗
What's Changed
- feat(keyboard): key controls by HID++ control ID, fix Keys tab and Fn-lock by @AprilNEA in #1604
- fix(macos): keep the hook from hearing the keys OpenLogi posts by @AprilNEA in #1618
- fix(gui): unpair a forgotten receiver device so it stays deleted by @AprilNEA in #1617
- fix(macos): press shortcut keys where the active layout types them by @guslipkin in #948
- feat(core): add a Super modifier and make Win/Meta name it by @sungyongcho in #1387
- fix(agent): re-arm a crash respawn instead of going dormant by @AprilNEA in #1619
- fix(hook): give the macOS tap's capability probes their own watchdog budget by @hyspacex in #1282
- fix(hook): give the callback watchdog the same watched-time rule by @AprilNEA in #1624
- chore: release v0.8.10 by @aprilnea[bot] in #1616
New Contributors
Full Changelog: v0.8.9...v0.8.10
v0.8.9
Released September 27, 2026 · View on GitHub ↗
What's Changed
- fix(gui): swap the thumb-wheel volume preset labels onto the pairing they describe by @4ni1ak in #1436
- fix(hook): stop the GNOME frontmost observer leaking a socket per renewal by @sungyongcho in #1418
- fix(gui): rebuild the agent's launchd registration when its job is gone by @raphaeljostan in #1303
- fix(hook): hit-test the window under the pointer through AppKit by @pseudoseed in #1568
- chore: release v0.8.9 by @aprilnea[bot] in #1599
New Contributors
- @sungyongcho made their first contribution in #1418
- @raphaeljostan made their first contribution in #1303
Full Changelog: v0.8.8...v0.8.9
v0.8.8
Released September 25, 2026 · View on GitHub ↗
What's Changed
- feat(hid): recognise Nano receiver 046d:c534 (MK270, MK295) by @4ni1ak in #1456
- fix(agent): divert a single-bound gesture button by @pseudoseed in #1569
- fix(gui): restore per-app profile removal and add reset controls by @AprilNEA in #1580
- fix(gui): prefer firmware codename over catalog name for M650 variants by @4ni1ak in #1366
- refactor(gui): simplify variant name correction ownership by @AprilNEA in #1585
- chore: release v0.8.8 by @aprilnea[bot] in #1573
New Contributors
- @pseudoseed made their first contribution in #1569
Full Changelog: v0.8.7...v0.8.8
v0.8.7
Released September 23, 2026 · View on GitHub ↗
What's Changed
- feat(agent): follow pointer for mouse button profiles by default by @AprilNEA in #1566
- chore: release v0.8.7 by @aprilnea[bot] in #1567
Full Changelog: v0.8.6...v0.8.7
v0.8.6
Released September 19, 2026 · View on GitHub ↗
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
Full Changelog: v0.8.5...v0.8.6
v0.8.5
Released September 16, 2026 · View on GitHub ↗
What's Changed
- fix(gui): resolve depot metadata named only by the manifest by @4ni1ak in #836
- docs(gui): adopt upstream gpui kit skills by @AprilNEA in #1400
- fix(linux): keep the generated systemd unit out of the user's tier by @AalmanSadath in #796
- fix(hidpp): stop HID++ replies landing on the wrong request by @isleofgreg in #1286
- feat(gui): enable supported button gestures by @juan-apa in #1167
- fix(gui): restore stacked card layout under gpui-kit 0.6 by @AprilNEA in #1408
- chore: release v0.8.5 by @aprilnea[bot] in #1399
Full Changelog: v0.8.4...v0.8.5
v0.8.4
Released September 15, 2026 · View on GitHub ↗
What's Changed
- feat(i18n): migrate catalogs to semantic TOML keys by @AprilNEA in #1169
- perf(i18n): avoid copying borrowed translations by @AprilNEA in #1184
- fix(i18n): polish supported locale copy by @AprilNEA in #1180
- fix(i18n): localize DPI steps and correct count labels by @AprilNEA in #1292
- fix(i18n): polish Brazilian Portuguese profile and settings copy by @uricholiveira in #1276
- fix(i18n): refine French asset and control descriptions by @didlawowo in #1278
- fix(hid): keep pairing phase after device selection by @AprilNEA in #1181
- refactor(gui): model camera preview lifecycle states by @AprilNEA in #1182
- refactor(agent): consolidate capture manager slots by @AprilNEA in #1183
- docs(linux): fix the Debian install command and the bug form's platform note by @AalmanSadath in #791
- docs: add Russian README translation by @MonteNegroX in #1039
- Fix typo in installation guide by @mikevankuik in #1189
- fix(i18n): correct mistranslations in the Spanish catalog by @eibidia in #1315
- feat(i18n): Updated French README.md file by @DimitriDR in #1271
- fix: add Debian runtime dependencies by @MauricioSilv in #1249
- fix(hook): normalize Windows cursor position to DIP scale by @fly530 in #1246
- fix(agent): restore diverted HID++ controls on a clean shutdown by @4ni1ak in #1106
- refactor(hook): type windows cursor dpi normalization by @AprilNEA in #1318
- fix(linux): declare F13-F20 in uinput key capabilities by @costantinoai in #1224
- fix(core): stop seeding Back/Forward with a divertable default by @litityum in #1225
- fix(agent): fence queued pairing discovery after selection by @AprilNEA in #1320
- fix(agent): avoid capture recovery deadline busy loops by @AprilNEA in #1321
- test(gui): cover camera preview lifecycle by @AprilNEA in #1322
- fix(gui): place Windows actions ring correctly across mixed-DPI monitors by @AprilNEA in #1319
- fix(gui): stop linking SMAppServiceErrorDomain so macOS 13 and 14 can launch by @AprilNEA in #1324
- feat(hid): add hardware-aware mock device record and replay by @AprilNEA in #1165
- test(agent): cover native and browser side-button profiles by @AprilNEA in #1325
- fix(macos): bind Safari navigation to press-time process by @foleykyle01 in #1082
- fix(camera): surface startup failures and retry preview by @yuzi-co in #1069
- chore(gui): upgrade to gpui kit 0.6.1 and published pre adapters by @AprilNEA in #1338
- feat(hid): add rgb-effects lighting and receiver routing by @LuisUrrutia in #351
- fix(gui): keep update consent buttons visible by @AprilNEA in #1398
- fix(linux): preserve gesture capture across receiver probes by @yvvlee in #1043
- chore: release v0.8.4 by @aprilnea[bot] in #1179
New Contributors
- @uricholiveira made their first contribution in #1276
- @didlawowo made their first contribution in #1278
- @AalmanSadath made their first contribution in #791
- @MonteNegroX made their first contribution in #1039
- @mikevankuik made their first contribution in #1189
- @eibidia made their first contribution in #1315
- @DimitriDR made their first contribution in #1271
- @MauricioSilv made their first contribution in #1249
- @fly530 made their first contribution in #1246
- @costantinoai made their first contribution in #1224
- @litityum made their first contribution in #1225
- @foleykyle01 made their first contribution in #1082
- @LuisUrrutia made their first contribution in #351
- @yvvlee made their first contribution in #1043
Full Changelog: v0.8.3...v0.8.4
v0.8.3
Released August 30, 2026 · View on GitHub ↗
What's Changed
- fix(ci): align agent guidance with current contracts by @AprilNEA in #1139
- fix: make Actions Ring selectable in action pickers by @the-long-ride in #958
- fix(ci): repair focused i18n gate and agent guidance by @AprilNEA in #1138
- chore: release v0.8.3 by @aprilnea[bot] in #1163
Full Changelog: v0.8.2...v0.8.3
v0.8.2
Released August 30, 2026 · View on GitHub ↗
What's Changed
- fix(camera): read WhiteBalance, not ColorEnable, on Windows by @yuzi-co in #662
- refactor(hid): name the divert intents instead of passing flag bools by @AprilNEA in #1071
- refactor(linux): make the hidraw probe outcome an explicit enum by @AprilNEA in #1073
- feat(macos): let launchd own the agent lifecycle via SMAppService by @AprilNEA in #1031
- docs: character stand-in icon rule + crate-homed agent guides by @AprilNEA in #1026
- Map SLOT_NAME_DPI_BUTTON to DpiToggle and add verification tests by @ediaz2 in #703
- fix(agent): harden capture sessions, arming, and observe staleness by @AprilNEA in #1077
- refactor(hid): fold the one-shot retry state into a OneShotScan type by @AprilNEA in #1070
- refactor(gui): name the scrolling card's facts instead of a five-tuple by @AprilNEA in #1072
- feat(agent): localize the menu-bar tray by @AprilNEA in #1038
- refactor: make the audited implicit state machines typed by @AprilNEA in #1080
- fix: resolve remaining state-machine audit findings by @AprilNEA in #1083
- feat(gui): add per-app Actions Ring editor by @AprilNEA in #1085
- feat(i18n): add Belarusian (be) locale by @aliaksandr-trush in #912
- fix(macos): capture side-button gestures over HID++ by @juan-apa in #722
- perf(agent): replace capture polling with events by @AprilNEA in #1136
- perf(agent): replace lifecycle polling with native events by @AprilNEA in #1137
- fix(macos): prevent HID activity from promoting DarkWake by @AprilNEA in #1142
- fix(hid): normalize thumbwheel direction per device by @AprilNEA in #1158
- chore: release v0.8.2 by @aprilnea[bot] in #1056
New Contributors
- @ediaz2 made their first contribution in #703
- @aliaksandr-trush made their first contribution in #912
- @juan-apa made their first contribution in #722
Full Changelog: v0.8.1...v0.8.2
v0.8.1
Released August 26, 2026 · View on GitHub ↗
What's Changed
- ci: upgrade GitHub Actions by @AprilNEA in #996
- refactor(gui): draw the character stand-in icons as real icons by @AprilNEA in #1022
- perf(release): accelerate macOS packaging by @AprilNEA in #1023
- fix(gui): survive and complete the live language switch by @AprilNEA in #1033
- fix(gui): keep Back and Forward labels together by @AprilNEA in #1030
- chore: release v0.8.1 by @aprilnea[bot] in #1025
Full Changelog: v0.8.0...v0.8.1
v0.8.0
Released August 25, 2026 · View on GitHub ↗
Highlights
- One device, however you connect it. The same mouse now keeps one device card and one set of settings across receiver and USB connections. Existing configurations migrate automatically and are backed up before the first save. (#876)
- A redesigned device workspace makes larger setups easier to manage. A responsive grid, compact cards, clearer battery status, custom device names, scalable interface presets, and a dedicated action menu make devices faster to scan and configure.
- Per-app profiles are now editable in the GUI. Pick an installed application from the new catalog, see which profile is active, and customize its button bindings without editing TOML. (#976)
- Scrolling is smoother and more configurable. Built-in smooth scrolling, vertical sensitivity controls, preserved fractional motion, rebindable wheel tilt, and fixes for diverted high-resolution wheels deliver more consistent scrolling across main and thumb wheels. (#902, #925, #992)
- Buttons can now distinguish a tap from a hold. TOML bindings can assign independent short- and long-press actions with a 500 ms threshold, while held shortcuts remain active until the button is released. (#961)
What's Changed
- chore(gui): bump gpui-component to da4f9369 by @AprilNEA in #655
- refactor(hid): centralize device identities by @AprilNEA in #831
- docs(agents): scale local gate to affected packages by @AprilNEA in #696
- feat(core,gui): make the main wheel's tilt rebindable (MX anywhere 2s,...) by @6lv1-blr in #902
- fix(linux): install the app icon at every indexed hicolor size by @4ni1ak in #837
- fix(gui): recognize mx ergo wheel tilt metadata by @AprilNEA in #905
- ci: automate typo checks and consolidate configs by @AprilNEA in #906
- refactor(gui): convert app state to entity events by @AprilNEA in #904
- fix(mouse): compose thumb-wheel preset labels from translated action names by @NatsUIJM in #910
- fix(linux): restore glibc 2.35 package baseline by @AprilNEA in #911
- fix(gui): restore full-phrase thumb-wheel preset labels by @AprilNEA in #913
- refactor(gui): componentize free-function builders by @AprilNEA in #914
- fix(macos): honor XDG state dir in permission diagnostics by @AprilNEA in #915
- fix(hid): improve Unifying receiver discovery reliability by @v14 in #853
- feat(gui): add per-app profiles and redesign device workspace by @AprilNEA in #907
- fix(macos): use reliable async-hid report writes by @sh3ll3x3c in #889
- fix(hid): preserve usage pairs in native handle cache by @sh3ll3x3c in #882
- fix: show Windows MSI completion and failure state by @mvanhorn in #819
- feat(gui): make custom controls keyboard-operable by @AprilNEA in #916
- style(gui): refine profile toolbar layout by @AprilNEA in #921
- refactor(gui): clean up render paths and element ids by @AprilNEA in #926
- fix(hidpp): read Unifying link encryption from bit 5, not the software-present bit by @AprilNEA in #924
- refactor(gui): tighten typed rendering and async ownership by @AprilNEA in #931
- refactor(gui): move device reads onto swr by @AprilNEA in #929
- feat(gui): add scalable interface presets by @AprilNEA in #934
- feat(agent): unify button Down/Up/Cancel lifecycle by @AprilNEA in #933
- feat(i18n): add Turkish (tr) interface locale by @4ni1ak in #835
- feat(gui): add switchable device gallery views by @AprilNEA in #927
- refactor(gui): improve shared component quality by @AprilNEA in #966
- feat(agent): hold shortcut output until button release by @AprilNEA in #960
- fix(thumbwheel): scale remapped vertical scrolling by @hsearcy in #925
- refactor(gui): structure app state by domain by @AprilNEA in #974
- feat(gui): add installed application catalog picker by @AprilNEA in #976
- feat(gui): add polished battery indicator by @AprilNEA in #983
- feat(scroll): preserve precise scroll distances by @AprilNEA in #973
- ci: replace target caches with sccache by @AprilNEA in #984
- feat(scroll): add finite smooth scroll runtime by @AprilNEA in #975
- feat(scroll): smooth diverted thumbwheel input by @AprilNEA in #977
- feat(gui): polish the app catalog picker and device cards by @AprilNEA in #986
- feat(scroll): add vertical scroll sensitivity by @AprilNEA in #978
- feat(scroll): expose smooth scrolling setting by @AprilNEA in #979
- refactor(gui): strengthen typed render boundaries by @AprilNEA in #981
- fix(core,gui,agent): key device settings by identity, not by transport by @yuzi-co in #876
- feat(agent): dispatch independent long-press actions by @AprilNEA in #961
- refactor(agent): complete thumbwheel state machine by @AprilNEA in #968
- fix(hid): preserve diverted wheel reporting by @AprilNEA in #992
- chore: release v0.8.0 by @aprilnea[bot] in #991
New Contributors
- @6lv1-blr made their first contribution in #902
- @4ni1ak made their first contribution in #837
- @NatsUIJM made their first contribution in #910
- @sh3ll3x3c made their first contribution in #889
- @hsearcy made their first contribution in #925
Full Changelog: v0.7.10...v0.8.0
v0.7.10
Released August 23, 2026 · View on GitHub ↗
What's Changed
- fix(gui): check the open helper's exit status when launching the agent by @AprilNEA in #820
- fix(nix): provide git to the sandboxed test phase by @AprilNEA in #833
- feat(ipc): surface HID open failures in agent status by @AprilNEA in #822
- fix(agent): follow the picked app icon in the menu bar by @AprilNEA in #846
- feat(cli): read the running agent's inventory in openlogi list by @AprilNEA in #823
- fix(thumbwheel): stop the tap firing App Exposé, and scroll by the wheel's native amount by @AprilNEA in #857
- chore: release v0.7.8 by @aprilnea[bot] in #834
- fix(gui): stop discarding correctly rebuilt device records by @AprilNEA in #868
- fix(overlay,agent): stop the anonymous overlay tenant from wedging the Actions Ring by @AprilNEA in #848
- refactor(gui): put the asset tier on an swr cache by @AprilNEA in #869
- chore: release v0.7.9 by @aprilnea[bot] in #870
- chore: release v0.7.10 by @AprilNEA in #874
Full Changelog: v0.7.7...v0.7.10
v0.7.7
Released August 23, 2026 · View on GitHub ↗
v0.7.5 and v0.7.6 were tagged but never published — their macOS packaging failed before a single artifact was uploaded, so no release exists for either. Everything both of them contained ships here, and the changes below cover everything since v0.7.4.
What's Changed
- docs(ci): map every CI job to a local command by @davidbudnick in #732
- feat(i18n): add Ukrainian (uk) locale by @dima-karpenko in #715
- ci(shell): gate every shell script with shellcheck and shfmt by @AprilNEA in #745
- docs(core): correct the model_ids transport ordering, and fix the MX Keys mock by @yuzi-co in #668
- refactor(xtask): move ci-local.sh and write-changelog.sh into xtask by @AprilNEA in #746
- refactor(xtask): split bundle.rs along what it actually does by @AprilNEA in #753
- feat(cli): report feature flags and firmware entities in diag features by @yuzi-co in #690
- refactor(cli): render diagnostics with display adapters by @AprilNEA in #758
- refactor: stream display-only formatting by @AprilNEA in #768
- feat(camera): add anti-flicker and low-light controls by @awesamarth in #793
- refactor(hid): split the HID++ device layer from the host backend by @AprilNEA in #772
- chore: cut manifest comments that describe instead of constrain by @AprilNEA in #809
- fix(hook): stop trusting AXIsProcessTrusted as a revocation signal by @AprilNEA in #801
- fix(hook): keep macOS tap lifecycle instance-owned by @AprilNEA in #808
- feat(gui): pick the app icon in Settings by @AprilNEA in #812
- build(macos): name the helper bundles after their display names by @AprilNEA in #814
- docs(agents): add a macOS permissions task skill by @AprilNEA in #813
- fix(agent): shut down when the app is uninstalled by @AprilNEA in #810
- fix(ipc,agent,desktop): surface Input Monitoring via agent status and fix registry bincode by @rekcilyssup in #760
- fix(hid): take async-hid 0.5.3 so a denied HID open stops leaking by @AprilNEA in #804
- fix(hid): park the Windows HID read on a permanently dead handle by @yuzi-co in #779
- chore: release v0.7.5 by @aprilnea[bot] in #750
- fix(release): use changelog as release PR body by @AprilNEA in #821
- refactor(agent): split the binary watcher from how it relaunches by @AprilNEA in #816
- refactor(agent-core): give the polling watchers one loop by @AprilNEA in #818
- feat(hid): recognise Lightspeed receiver 046d:c54d (PRO X SUPERLIGHT 2 DEX) by @v14 in #811
- chore: release v0.7.6 by @aprilnea[bot] in #824
- fix(agent): make macOS permission failures diagnosable by @AprilNEA in #817
- fix(ci): build both macOS legs with an Icon Composer-capable Xcode by @AprilNEA in #815
- chore: release v0.7.7 by @aprilnea[bot] in #830
New Contributors
- @dima-karpenko made their first contribution in #715
- @awesamarth made their first contribution in #793
- @rekcilyssup made their first contribution in #760
- @v14 made their first contribution in #811
Full Changelog: v0.7.4...v0.7.7
v0.7.4
Released August 21, 2026 · View on GitHub ↗
What's Changed
- feat(hid): support G602 nano receiver by @Stanley5249 in #684
- chore(infra): prune the tree's lint suppressions and make the survivors expect by @AprilNEA in #720
- fix(hid): surface the 0xc539 dongle as a Lightspeed receiver, not Unifying by @yuzi-co in #665
- chore: release v0.7.4 by @aprilnea[bot] in #728
Full Changelog: v0.7.3...v0.7.4
v0.7.3
Released August 20, 2026 · View on GitHub ↗
What's Changed
- chore: release v0.7.3 by @aprilnea[bot] in #725
Full Changelog: v0.7.2...v0.7.3
v0.7.2
Released August 20, 2026 · View on GitHub ↗
What's Changed
- fix(agent): reapply volatile settings after Windows resume by @davidbudnick in #639
- build(nix): make Linux packaging first-class by @AprilNEA in #632
- chore(infra): add CODEOWNERS by @AprilNEA in #646
- fix: bind the Actions Ring overlay to one agent run by @AprilNEA in #645
- chore: converge the repository top level by @AprilNEA in #647
- refactor(gui): split the GPUI side into app, ui, and overlay crates by @AprilNEA in #672
- refactor(ipc): replace the GUI's poll loop with a level-triggered state channel by @AprilNEA in #675
- build(windows): ship the openlogi CLI in the zip and MSI by @yuzi-co in #659
- build(infra): drop dependency debuginfo in dev builds by @AprilNEA in #695
- refactor(core): extract openlogi-permissions and give shared constants one definition by @AprilNEA in #697
- fix(gui): use the GPUI executor timer, not tokio::time::interval, for camera scans by @charliecai01 in #686
- fix(overlay): prevent GPUI from exiting on window close by @clifinger in #700
- fix(agent): relaunch after granting Input Monitoring by @AprilNEA in #713
- chore: release v0.7.2 by @aprilnea[bot] in #642
New Contributors
- @yuzi-co made their first contribution in #659
- @charliecai01 made their first contribution in #686
- @clifinger made their first contribution in #700
Full Changelog: v0.7.1...v0.7.2
v0.7.1
Released August 15, 2026 · View on GitHub ↗
What's Changed
- fix(hid): never switch a device to a host slot it is not paired on by @AprilNEA in #631
- fix(assets): trust the OS certificate store, not bundled Mozilla roots by @davidbudnick in #634
- feat(gui): add a reversed Volume preset for the thumb wheel by @tonysurfly in #608
- ci(release): embed the updater key in Windows release builds by @davidbudnick in #633
- fix(infra): stop ignoring the committed Amp orb lifecycle scripts by @davidbudnick in #637
- chore(gui): bump gpui-updater to v0.0.7 for the OS-trust-store fix by @davidbudnick in #636
- fix(agent): request Input Monitoring access at startup on macOS by @tonysurfly in #607
- chore: release v0.7.1 by @aprilnea[bot] in #638
New Contributors
- @tonysurfly made their first contribution in #608
Full Changelog: v0.7.0...v0.7.1
v0.7.0
Released August 15, 2026 · View on GitHub ↗
What's Changed
- fix(xtask): stamp and verify the macOS bundle identity per channel by @AprilNEA in #593
- refactor(macos): read TCC permissions through typed objc2 bindings by @AprilNEA in #595
- fix(hid): four defects from the Actions Ring review by @AprilNEA in #596
- fix(hid): never cache a haptic feature for a retired channel by @AprilNEA in #597
- fix(agent): bound the Actions Ring haptic worker to the session it serves by @AprilNEA in #598
- fix: keep the ring session alive as long as the ring is clickable by @AprilNEA in #599
- build(nix): build dependencies once with crane, and stop gating source-only PRs on it by @AprilNEA in #600
- ci(nix): run the Linux build weekly, and revert crane by @AprilNEA in #603
- chore(lints): adopt the shared clippy lint set, and fix what it surfaced by @AprilNEA in #609
- refactor(core,inject): collapse inject backends onto a platform-neutral Effect IR by @AprilNEA in #610
- refactor(agent): collapse hardware.rs's duplicated write skeletons into DeviceOp by @AprilNEA in #612
- refactor(gui): fold AppState's per-device side tables and dpi/smartshift twins by @AprilNEA in #613
- refactor(core): move pure HID++ wire types into openlogi-core, drop openlogi-hid from the GUI by @AprilNEA in #611
- chore(agent): drop three dead hardware.rs entry points by @AprilNEA in #616
- refactor(ipc): extract the IPC contract into a leaf crate so the GUI stops building the HID stack by @AprilNEA in #617
- fix(release): put openlogi-camera in the workspace version group by @AprilNEA in #618
- refactor(camera): fold per-control UVC attributes into one spec table by @AprilNEA in #622
- refactor(core): drive Action label/category/icon/catalog from one table by @AprilNEA in #623
- chore(deps): bump tarpc to 0.38 and drop the vendored patch by @AprilNEA in #624
- refactor(hidpp): replace the per-feature boilerplate with a generic and a derive macro by @AprilNEA in #625
- docs(ci): add rustdoc to the local gate and cover the derive crate by @AprilNEA in #626
- chore(hidpp): inherit the workspace lint table by @AprilNEA in #627
- refactor(hidpp): test the receiver decoders, split channel.rs, finish the hard-fork cleanup by @AprilNEA in #628
- fix(hid): drive the DPI and lighting features whose predecessors we hardcoded by @AprilNEA in #629
- fix(config): harden schema and persistence by @AprilNEA in #604
- chore: release v0.7.0 by @aprilnea[bot] in #594
Full Changelog: v0.6.27...v0.7.0
v0.6.27
Released August 13, 2026 · View on GitHub ↗
What's Changed
- fix(ui): prevent middle and thumb wheel popover flicker by @the-long-ride in #559
- fix(hook): release macOS tap after accessibility revocation by @yuki-yano in #578
- feat(hid,hidpp): read battery over BatteryVoltage (0x1001) by @bobaoapae in #575
- feat(hid): recognise Lightspeed receiver 046d:c547 (G915, G502 X) by @bobaoapae in #574
- feat: capture the MX Master 4 haptic panel as a first-class control by @tagawa0525 in #565
- fix(macos): prevent corrupted small app icons by @LJAYi in #570
- fix(hid): widen the Bolt per-slot probe budget for high-latency USB paths by @tagawa0525 in #562
- feat(gui): back navigation via the mouse's back button and Alt+Left by @tagawa0525 in #563
- Revive the Nix flake for Linux, without the cargoHash churn that led to #262 by @tagawa0525 in #491
- feat(hid): persist the immutable probe cache across restarts by @tagawa0525 in #564
- feat(gui): add capability-driven actions ring by @jericho0521 in #528
- feat(core): support stable Windows app selectors by @markus41 in #572
- ci(nix): cache store paths with magic-nix-cache by @davidbudnick in #580
- feat: per-slot custom labels for the Actions Ring by @isleofgreg in #584
- fix(gui): redraw the Actions Ring on hover changes by @isleofgreg in #585
- feat(agent): add a hardware-free mock agent for GUI development by @AprilNEA in #568
- refactor: per-button gesture mode, replacing the one-owner lock by @tagawa0525 in #566
- fix(agent): implement the Actions Ring IPC surface in the mock agent by @isleofgreg in #587
- fix: Actions Ring haptic reliability — coalescing, feature cache, firmware arming, deadlock guards by @isleofgreg in #590
- feat(agent): pressing the ring trigger again dismisses the Actions Ring by @isleofgreg in #592
- fix(hid): detect and recover dead-delivery HID channels by @isleofgreg in #589
- feat(gui): dismiss the Actions Ring on a click outside it by @isleofgreg in #591
- fix(gui): open the Actions Ring on the display containing the cursor by @isleofgreg in #588
- chore: release v0.6.27 by @aprilnea[bot] in #579
New Contributors
- @bobaoapae made their first contribution in #575
- @LJAYi made their first contribution in #570
- @jericho0521 made their first contribution in #528
- @markus41 made their first contribution in #572
- @isleofgreg made their first contribution in #584
Full Changelog: v0.6.26...v0.6.27
v0.6.26
Released August 10, 2026 · View on GitHub ↗
What's Changed
- fix(macos): add camera hardened-runtime entitlement by @davidbudnick in #557
- chore: release v0.6.26 by @aprilnea[bot] in #558
Full Changelog: v0.6.25...v0.6.26
v0.6.25
Released August 10, 2026 · View on GitHub ↗
What's Changed
- ci(release): keep release job on a branch by @davidbudnick in #543
- fix(gui,assets): fit the Keys tab to legacy keyboard assets (G513) by @davidbudnick in #544
- fix(hidpp): retry lost feature-table reads during enumeration by @kohjunhao in #469
- feat: add MX Master 2S (3S) thumb wheel bindings by @the-long-ride in #525
- feat(hid): recognise Lightspeed nano receivers (G-series, e.g. G305) by @kiwimaker in #388
- fix(i18n): skip Crowdin English fill-in and restore locale parity by @davidbudnick in #551
- feat: per-device capture — every online device gets its own session, bindings, and settings by @tagawa0525 in #419
- fix(ci): merge Crowdin downloads into locale catalogs by @davidbudnick in #553
- fix(gui,camera,xtask): make Camera permission grantable on macOS by @davidbudnick in #550
- fix(hook): capture keyboard events on Windows by @davidbudnick in #548
- fix(i18n): add camera permission locale keys by @davidbudnick in #554
- chore: release v0.6.25 by @aprilnea[bot] in #545
New Contributors
- @kohjunhao made their first contribution in #469
- @the-long-ride made their first contribution in #525
- @kiwimaker made their first contribution in #388
Full Changelog: v0.6.24...v0.6.25
v0.6.24
Released August 10, 2026 · View on GitHub ↗
What's Changed
- fix(i18n): complete Crowdin synchronization by @AprilNEA in #508
- fix(agent): reuse inventory channels for input capture by @safonin in #522
- ci(release): pin tags and fill changelog by @davidbudnick in #533
- Back and Forward mouse buttons now work in Safari and Chrome by @b0x42 in #363
- fix(agent): route hardware operations through inventory channels by @safonin in #532
- feat(battery): support legacy 0x1000 BatteryStatus and its charging quirk by @laofun in #312
- feat(backlight): support HID++ 0x1982 by @kirgene in #470
- feat(camera): add Logitech webcam support by @davidbudnick in #531
- Feat/linked host switching by @LCozatl in #479
- fix(hook): never wedge system pointer input by @davidbudnick in #534
- feat(hook): Wayland frontmost-window backends (wlroots + GNOME Shell) by @recchia in #191
- feat: keyboard F-row key remapping and fn-lock over HID++ by @Sankew in #395
- feat(hid): add standalone Litra light support by @tiaringhio in #513
- feat: add function key remapper by @MichaelDanCurtis in #344
- ci(i18n): fix Crowdin translation branch push by @davidbudnick in #535
- docs: harden agent local-gate and push rules by @davidbudnick in #536
- feat(hid): recognize Lightspeed receiver (046d:c539) as Unifying-compatible by @Abnersouza7 in #510
- ci(i18n): Crowdin sync for non-English only by @davidbudnick in #538
- ci(i18n): seed Crowdin per language before download by @davidbudnick in #540
- fix(agent): reapply volatile settings after macOS resume by @LuciusChen in #506
- fix(linux): grant uaccess on Logitech input event nodes by @Xabierland in #530
- fix(agent): rearm control capture after device reconnect by @Phecda in #450
- fix(hidpp): keep events when a field carries an unknown enum value by @bugprone in #432
- refactor: split hub modules to cut merge conflicts by @davidbudnick in #542
- fix(agent): prefer online device for input capture by @Phecda in #453
- fix(agent-core): retry volatile DPI re-apply on cold boot by @iamshakibali in #449
- chore: release v0.6.24 by @aprilnea[bot] in #509
New Contributors
- @safonin made their first contribution in #522
- @b0x42 made their first contribution in #363
- @kirgene made their first contribution in #470
- @LCozatl made their first contribution in #479
- @Sankew made their first contribution in #395
- @tiaringhio made their first contribution in #513
- @MichaelDanCurtis made their first contribution in #344
- @Abnersouza7 made their first contribution in #510
- @LuciusChen made their first contribution in #506
- @Xabierland made their first contribution in #530
- @bugprone made their first contribution in #432
- @iamshakibali made their first contribution in #449
Full Changelog: v0.6.23...v0.6.24
v0.6.23
Released August 3, 2026 · View on GitHub ↗
What's Changed
- ci(build): run PR installer builds only with needs: build label by @AprilNEA in #443
- fix(hid): declare Win32_System_IO feature for windows-sys WriteFile by @Stanley5249 in #458
- fix(windows): resolve the update check and fix the unreadable Update-failed badge by @davidbudnick in #437
- chore(deps): bump quinn-proto from 0.11.14 to 0.11.16 by @dependabot[bot] in #476
- fix: allow local dev without devenv by @davidbudnick in #486
- fix(deps): drop vulnerable opentelemetry_sdk by @davidbudnick in #487
- fix(gui): refresh the macOS device menu when inventory changes by @Phecda in #456
- fix(gui): reject transient direct device identities by @Phecda in #451
- ci: speed up pipelines with shared rust-cache by @davidbudnick in #488
- fix(hook): report Windows pointer motion by differencing the cursor point by @Stanley5249 in #473
- fix(tray): stop the Windows tray launching the CLI instead of the GUI by @Stanley5249 in #460
- fix(hid): stop intermittent SmartShift InvalidArgument by @davidbudnick in #489
- fix(hook): grab only relative pointer devices, never touchpads or pointing sticks by @kesleyfort in #401
- fix: divert thumbwheel for rotation rebinds even without single-tap capability by @tagawa0525 in #415
- chore: release v0.6.23 by @aprilnea[bot] in #442
- feat(gui): polish device and pointer visuals by @AprilNEA in #495
- refactor(gui): use semantic pointer controls by @AprilNEA in #496
- feat(windows): enable in-app MSI updates via gpui-updater v0.0.6 by @davidbudnick in #504
- fix(hid,gui): stop the device list flapping on transient probe failures by @davidbudnick in #490
- feat(gui): show SmartShift write feedback by @AprilNEA in #498
- fix(i18n): localize offline and pairing states by @AprilNEA in #499
- fix(gui): expose device controls to accessibility by @AprilNEA in #500
- feat(gui): clarify pairing failures and offline editing by @AprilNEA in #501
- fix(gui): keep selected gallery device in view by @AprilNEA in #502
- fix(gui): improve card contrast and depth by @AprilNEA in #507
- ci(i18n): harden Crowdin translation sync by @davidbudnick in #505
New Contributors
- @Stanley5249 made their first contribution in #458
- @dependabot[bot] made their first contribution in #476
- @Phecda made their first contribution in #456
- @tagawa0525 made their first contribution in #415
Full Changelog: v0.6.22...v0.6.23
v0.6.22
Released July 21, 2026 · View on GitHub ↗
What's Changed
- fix(gui): keep the post-sync asset repaint until the inventory is Ready by @AprilNEA in #427
- feat(hidpp): add level-gated wire tracing for HID++ requests by @AprilNEA in #439
- refactor(gui): introduce a design-token layer and unify chrome by @AprilNEA in #440
- fix(hid): probe Bolt slots concurrently so slow devices finish enumerating by @AprilNEA in #438
- refactor(gui): introduce a HIG-based typography scale by @AprilNEA in #441
- chore: release v0.6.22 by @aprilnea[bot] in #425
Full Changelog: v0.6.21...v0.6.22
v0.6.21
Released July 19, 2026 · View on GitHub ↗
What's Changed
- feat(packaging): add Arch Linux release packages by @cserby in #265
- fix: hotplug-driven inventory and phantom device-card suppression by @davidbudnick in #346
- I18n(gui): Update pl localize by @mariuszkrzaczkowski in #372
- fix(hid): bound the Bolt per-slot probe so one hung device can't drop the whole receiver (#218) by @buliwyf42 in #251
- fix(hid): persist wheel resolution across reconnects by @yuki-yano in #416
- fix: make one-shot enumerate() retry transport-agnostic so Unifying partial drains recover by @mvanhorn in #287
- test(core): add hires_wheel to the inventory equality test helper by @AprilNEA in #417
- fix(unifying): enable wireless notifications so paired devices enumerate by @laofun in #309
- fix(gui): draw a client-side titlebar on Linux for window controls by @stefan-siebert in #338
- docs: sync READMEs with current platform support by @AprilNEA in #418
- ci(release): build installers on PRs via a reusable build.yml by @AprilNEA in #423
- Windows follow-ups: app icon, working update checks, settings fixes, docs by @davidbudnick in #358
- feat(assets): race Cloudflare and npm mirrors by @AprilNEA in #424
- chore: release v0.6.21 by @aprilnea[bot] in #414
New Contributors
- @mariuszkrzaczkowski made their first contribution in #372
- @yuki-yano made their first contribution in #416
Full Changelog: v0.6.20...v0.6.21
v0.6.20
Released July 18, 2026 · View on GitHub ↗
What's Changed
- fix(smartshift): stop runaway free-spin scroll and SmartShift control snap-back by @AprilNEA in #333
- docs: add agent guides (AGENTS.md, CLAUDE.md, path-scoped rules) by @AprilNEA in #379
- fix(gui): avoid RefCell panic when applying theme on OS appearance change by @stefan-siebert in #337
- docs: fold completed FIXDRY audit into a decision log by @AprilNEA in #352
- ci: add cargo-deny (advisories, licenses, bans, sources) by @AprilNEA in #353
- fix(gui): bump gpui/gpui-component pins past the Wayland startup activation rework by @kesleyfort in #400
- fix: embed and sign the openlogi CLI in the macOS app bundle by @mvanhorn in #362
- chore: raise MSRV to 1.96, drop fs4, consolidate workspace deps by @AprilNEA in #407
- test: characterize the hidpp v20 matcher and cover the CLI by @AprilNEA in #406
- refactor(core): split config.rs into settings and device submodules by @AprilNEA in #408
- refactor(gui): split app.rs and drop the stale dead_code allow by @AprilNEA in #409
- refactor(inject): split inject.rs into per-platform modules by @AprilNEA in #410
- refactor: adopt newly stabilized std APIs across the workspace by @AprilNEA in #411
- fix(hook): break the macOS run loop on a stop flag, not CFRunLoopStop alone by @AprilNEA in #263
- refactor: land the standards-audit findings in batches by @AprilNEA in #381
- feat: CGEvent tap diagnostics — conflict detection + live event monitor by @AprilNEA in #276
- chore: release v0.6.20 by @aprilnea[bot] in #378
New Contributors
- @stefan-siebert made their first contribution in #337
- @kesleyfort made their first contribution in #400
Full Changelog: v0.6.19...v0.6.20
v0.6.19
Released July 5, 2026 · View on GitHub ↗
What's Changed
- feat(windows): bundle the background agent and add a tray icon (#347) by @davidbudnick in #350
- chore: release v0.6.19 by @aprilnea[bot] in #332
Full Changelog: v0.6.18...v0.6.19
v0.6.18
Released June 29, 2026 · View on GitHub ↗
What's Changed
- fix: set app_id on GUI windows so GNOME Wayland matches the .desktop icon and decorations by @mvanhorn in #320
- Clarify MX Master 4 gesture control semantics by @AprilNEA in #325
- Complete typed HID++ feature wrappers by @AprilNEA in #326
- fix(hidpp): correct UnifiedBattery (0x1004) charging status codes by @PeronGH in #330
- feat(gui): consolidate Settings and add theme switching by @AprilNEA in #331
- chore: release v0.6.18 by @aprilnea[bot] in #324
New Contributors
- @PeronGH made their first contribution in #330
Full Changelog: v0.6.17...v0.6.18
v0.6.17
Released June 27, 2026 · View on GitHub ↗
What's Changed
- feat: add Capture Region to Clipboard button action by @mvanhorn in #296
- feat(gui): show connection-type icon on device cards by @laofun in #310
- chore: release v0.6.17 by @aprilnea[bot] in #311
Full Changelog: v0.6.16...v0.6.17
v0.6.16
Released June 22, 2026 · View on GitHub ↗
What's Changed
- fix(hidpp): prune abandoned event receivers by @AprilNEA in #297
- fix(pairing): keep session pause balanced by @AprilNEA in #298
- fix(hidpp): guard message listener lifetimes by @AprilNEA in #299
- feat(ipc): poll agent snapshots by @AprilNEA in #300
- refactor(agent): arbitrate receiver access with leases by @AprilNEA in #302
- refactor(ipc): acknowledge pairing commands by @AprilNEA in #304
- chore: release v0.6.16 by @aprilnea[bot] in #301
Full Changelog: v0.6.15...v0.6.16
v0.6.15
Released June 21, 2026 · View on GitHub ↗
What's Changed
- fix(release): re-register PSGallery before Windows Artifact Signing by @AprilNEA in #264
- i18n: localize the About window update section + Crowdin sync by @AprilNEA in #275
- fix(gui): fit keyboard image and render glow live by @davidbudnick in #283
- feat(scroll): per-device inverted scrolling by @AprilNEA in #294
- chore: release v0.6.15 by @aprilnea[bot] in #273
Full Changelog: v0.6.14...v0.6.15
v0.6.14
Released June 15, 2026 · View on GitHub ↗
What's Changed
- refactor(core): extract the OS input-injection layer into openlogi-inject by @AprilNEA in #240
- fix(hid): solid keyboard colour via 0x8070 effect by @davidbudnick in #205
- chore(nix): remove the self-hosted flake package by @AprilNEA in #262
- chore: release v0.6.14 by @aprilnea[bot] in #261
Full Changelog: v0.6.13...v0.6.14
v0.6.13
Released June 15, 2026 · View on GitHub ↗
What's Changed
- fix(agent): respawn the capture session after a setup failure by @tfohlmeister in #225
- chore: release v0.6.12 by @aprilnea[bot] in #250
- fix(hid): retry the one-shot enumerate() through a transient probe miss (#218) by @buliwyf42 in #237
- fix(assets): verify a downloaded asset before it reaches the cache by @AprilNEA in #243
- refactor(hook,hid): document the Windows FFI unsafe blocks by @AprilNEA in #242
- fix(gui): localize the DPI panel's status strings by @AprilNEA in #241
- refactor(hidpp): dedup the feature layer (registry data-macro + FeatureEndpoint) by @AprilNEA in #238
- fix(gui): launch the agent helper via LaunchServices for a stable TCC identity by @davidbudnick in #207
- refactor(gui): fold duplicated DPI/SmartShift code into shared abstractions by @AprilNEA in #239
- fix(gui): give the bundled agent the OpenLogi app icon by @AprilNEA in #260
- chore: release v0.6.13 by @aprilnea[bot] in #259
New Contributors
- @tfohlmeister made their first contribution in #225
- @buliwyf42 made their first contribution in #237
Full Changelog: v0.6.12...v0.6.13
v0.6.12
Released June 13, 2026 · View on GitHub ↗
What's Changed
- fix(agent): persist DPI/SmartShift per device and reapply volatile settings on reconnect by @AprilNEA in #223
- fix(gui): keep asleep devices and their panels in the device list by @AprilNEA in #224
- fix(updater): bump gpui-updater to v0.0.5 (relaunch as GUI, not in Terminal) by @AprilNEA in #249
- chore: release v0.6.12 by @aprilnea[bot] in #246
Full Changelog: v0.6.11...v0.6.12
v0.6.11
Released June 13, 2026 · View on GitHub ↗
What's Changed
- fix(hid): replay a node's last inventory through transient probe failures by @AprilNEA in #222
- fix(release): install the GUI's x11/wayland deps so Linux packaging links by @AprilNEA in #244
- chore: release v0.6.11 by @aprilnea[bot] in #236
Full Changelog: v0.6.10...v0.6.11
v0.6.7
Released June 12, 2026 · View on GitHub ↗
What's Changed
- feat(release): Windows arm64 build + static CRT by @AprilNEA in #208
- fix: stop flashing the permission gate and empty state at startup by @AprilNEA in #212
- feat(release): per-arch MSI installers + drop the GUI qualifier from Windows jobs by @AprilNEA in #211
- fix: don't flash the empty-state screen while the agent is still scanning by @AprilNEA in #213
- fix(ipc): harden the agent-GUI link end to end (review follow-ups for #212/#213) by @AprilNEA in #215
- Fix macOS volume and media key posting by @jonstuebe in #184
- fix(release): derive macOS bundle versions from the workspace by @AprilNEA in #217
- chore: release v0.6.7 by @aprilnea[bot] in #210
New Contributors
- @jonstuebe made their first contribution in #184
Full Changelog: v0.6.6...v0.6.7
v0.6.6
Released June 10, 2026 · View on GitHub ↗
What's Changed
- ci: fix SignTool timestamp URL and add a signing dry-run workflow by @AprilNEA in #202
- fix(hidpp): bound device-controlled name lengths in Bolt parsing by @AprilNEA in #200
- fix(assets): keep sync writes inside the cache root and verified by @AprilNEA in #201
- feat(windows): ship the signed GUI as the Windows release artifact by @AprilNEA in #204
- chore: release v0.6.6 by @aprilnea[bot] in #203
Full Changelog: v0.6.5...v0.6.6
v0.6.5
Released June 10, 2026 · View on GitHub ↗
What's Changed
- ci(release): harden the Windows signing and publish pipeline by @AprilNEA in #198
- style: collapse nested ifs flagged by current stable clippy by @AprilNEA in #197
- chore: release v0.6.5 by @aprilnea[bot] in #199
Full Changelog: v0.6.4...v0.6.5
v0.6.4
Released June 10, 2026 · View on GitHub ↗
What's Changed
- fix(gui): stop sensitivity Default label clipping by @davidbudnick in #186
- Minor: glow keyboard card in lighting colour by @davidbudnick in #185
- feat(openlogi-gui): expand UI to 19 fully-translated locales by @davidbudnick in #24
- refactor: unify device-kind precedence docs + drop the redundant caps carry-forward by @AprilNEA in #194
- fix(hid): refresh the volatile battery every tick without the feature-table walk by @AprilNEA in #193
- feat(windows): port the headless agent to Windows by @AprilNEA in #167
- [codex] Update time to fix RustSec advisory by @Nicolas0315 in #128
- ci(release): sign Windows CLI build with Azure Artifact Signing by @AprilNEA in #196
- chore: release v0.6.4 by @aprilnea[bot] in #190
New Contributors
- @Nicolas0315 made their first contribution in #128
Full Changelog: v0.6.3...v0.6.4
v0.6.3
Released June 9, 2026 · View on GitHub ↗
What's Changed
- feat: unified Binding model + gesture-button menu (gesture uplift Phase A) by @AprilNEA in #187
- feat: gesture buttons on Middle/Back/Forward via the OS hook (Phase B) by @AprilNEA in #188
- chore: release v0.6.3 by @aprilnea[bot] in #183
Full Changelog: v0.6.2...v0.6.3
v0.6.2
Released June 8, 2026 · View on GitHub ↗
What's Changed
- chore: release v0.6.1 by @aprilnea[bot] in #175
- Integrate Crowdin localization workflow by @AprilNEA in #174
- ci: switch release notes generation to Codex by @AprilNEA in #177
- feat(tray): route menu actions to GUI via openlogi:// URL scheme by @AprilNEA in #176
- chore: release v0.6.2 by @aprilnea[bot] in #178
Full Changelog: v0.6.1...v0.6.2
v0.6.1
Released June 8, 2026 · View on GitHub ↗
What's Changed
- docs: Linux device permissions (udev rule for Bolt + Bluetooth-direct) by @recchia in #149
- Fix Cmd+W window close handling by @AprilNEA in #168
- fix(cli): diag selects a device that exposes the feature under test by @recchia in #150
- Fix auxiliary window actions by @AprilNEA in #170
- ci: generate release notes with Amp by @AprilNEA in #171
- chore: release v0.6.1 by @aprilnea[bot] in #169
New Contributors
- @recchia made their first contribution in #149
Full Changelog: v0.6.0...v0.6.1
v0.6.0
Released June 8, 2026 · View on GitHub ↗
Highlights
OpenLogi 0.6.0 splits the app into a headless, always-on agent daemon and an on-demand GUI configuration editor. This makes remapping and device I/O keep running after the GUI window is closed, while the GUI becomes a normal app that opens only when you need to change settings.
What's new
- Added
openlogi-agent, a headless daemon that owns HID++ device I/O, the CGEventTap hook, foreground-app tracking, pairing, and the menu-bar status item. - Reworked
openlogi-guiinto an on-demand configuration app that talks to the agent over IPC instead of running device I/O itself. - Added a tarpc-based agent IPC protocol for inventory/status polling, DPI, lighting, SmartShift, config reloads, Accessibility prompts, and pairing.
- Moved device pairing into the agent so receiver pairing no longer competes with the live gesture/capture session from another process.
- The GUI can auto-launch the embedded agent helper when the IPC socket is unavailable.
macOS packaging and startup
- The packaged app now embeds
OpenLogiAgent.appas a nested login-item helper underOpenLogi.app/Contents/Library/LoginItems/. - Launch-at-login is now handled by the agent instead of the GUI.
- The menu-bar item is hosted by the agent, so remapping and tray access can stay alive independently of the GUI window.
- Release signing now signs the nested agent helper inside-out before signing the outer app, helping the agent keep a stable Accessibility/TCC identity across updates.
- Homebrew tap update dispatch for
openlogi@latesthas been re-enabled.
Fixes and hardening
- Fixed an agent single-instance race that could start two agents and install duplicate hooks.
- Fixed Accessibility prompting so macOS authorizes the agent binary, not the GUI.
- Fixed transient inventory errors wiping live runtime state or resetting DPI-cycle state.
- Fixed agent recovery when the GUI sees a dead or quit agent.
- Fixed LaunchAgent plist escaping and made tray Quit stay quit after a clean exit.
- Preserved typed device errors across IPC so unsupported DPI/SmartShift features latch correctly instead of retrying forever.
- Kept the agent and GUI device ordering consistent so the default selected device matches in both processes.
- Confirmed SmartShift writes with a re-read so rejected writes self-correct in the UI.
- Honored the Show-in-menu-bar preference at agent startup.
- Added IPC protocol handshake checks and pairing-session race fixes from review.
Upgrade notes
- On first launch after upgrading, macOS may ask you to grant Accessibility permission to
OpenLogiAgent. This is expected: the agent is now the process that owns the input hook. - If remapping does not work after upgrading, check System Settings → Privacy & Security → Accessibility and ensure the agent/helper is allowed, then restart OpenLogi.
Included PRs
- #165 — Split into a headless agent daemon + on-demand GUI
- #161 — Dispatch
openlogi@latestHomebrew tap updates - #164 — Release v0.6.0
Full changelog: v0.5.3...v0.6.0
v0.5.3
Released June 6, 2026 · View on GitHub ↗
What's Changed
- fix: gate device config panels on HID++ capabilities (closes #127) by @AprilNEA in #147
- chore: release v0.5.3 by @aprilnea[bot] in #157
Full Changelog: v0.5.2...v0.5.3
v0.5.2
Released June 5, 2026 · View on GitHub ↗
What's Changed
- fix(gui): retry asset sync on failure with backoff instead of latching once by @AprilNEA in #140
- refactor: replace hand-rolled code with std/num_enum equivalents by @AprilNEA in #141
- feat: enable Thumb Wheel Up/Down mapping, "Do Nothing" action, and native scroll sensitivity by @Miguel-sdj in #125
- feat(hook): implement Linux evdev+uinput mouse hook by @cserby in #119
- feat(core): implement Action::execute on Linux via uinput by @cserby in #120
- feat: SmartShift 0x2110 support (MX Master 2S) + diag smartshift --sensitivity by @laofun in #77
- feat(hook): implement frontmost_bundle_id on Linux via X11 by @cserby in #122
- feat(i18n): add italian language by @elax46 in #63
- feat(core): LockScreen and media actions via D-Bus on Linux by @cserby in #124
- ci: run clippy on Windows instead of bare cargo check by @AprilNEA in #146
- chore: release v0.5.2 by @aprilnea[bot] in #139
New Contributors
- @Miguel-sdj made their first contribution in #125
- @cserby made their first contribution in #119
- @laofun made their first contribution in #77
- @elax46 made their first contribution in #63
Full Changelog: v0.5.1...v0.5.2
v0.5.1
Released June 5, 2026 · View on GitHub ↗
What's Changed
- ci(release-plz): drop the unneeded stale-branch prune step by @AprilNEA in #135
- fix(assets): match devices against every model id a depot lists by @AprilNEA in #137
- feat(gui): SmartShift settings panel (wheel mode, sensitivity, permanent ratchet) by @AprilNEA in #138
- chore: release v0.5.1 by @aprilnea[bot] in #136
Full Changelog: v0.5.0...v0.5.1
v0.5.0
Released June 5, 2026 · View on GitHub ↗
What's Changed
- feat: add wired G-series keyboard RGB control by @davidbudnick in #29
- fix(release-plz): restore unified-versioning config by @AprilNEA in #110
- fix(gui): stop idle CPU drain from the connected status dot by @davidbudnick in #97
- chore(release-plz): disable cargo-semver-checks by @AprilNEA in #113
- docs: add ja/de/fr/ko READMEs and fix the relocated zh-CN one by @AprilNEA in #112
- feat(gui): swap in the new app icon by @AprilNEA in #129
- docs: use the new app icon as the README logo by @AprilNEA in #132
- Migrate macOS ObjC FFI to objc2, fixing the menu-bar leak (#99) by @AprilNEA in #131
- feat(updater): signed auto-update with fail-closed verification by @AprilNEA in #130
- chore: release v0.5.0 by @aprilnea[bot] in #111
Full Changelog: v0.4.1...v0.5.0
v0.4.1
Released June 3, 2026 · View on GitHub ↗
What's Changed
- chore: add GitHub issue form templates by @AprilNEA in #102
- ci(release): disable homebrew-tap dispatch (openlogi moved to homebrew-cask) by @AprilNEA in #105
- feat(nix): add nixpkgs package + flake; commit the prebuilt app icon by @AprilNEA in #106
- feat(gui): add device gallery navigation by @AprilNEA in #107
- chore: release v0.4.1 by @aprilnea[bot] in #91
Full Changelog: v0.4.0...v0.4.1
v0.4.0
Released June 2, 2026 · View on GitHub ↗
What's Changed
- feat(i18n): add zh-TW (Traditional Chinese, Taiwan) locale by @PeterDaveHello in #57
- feat(assets): accept both depot filename schemas in the GUI resolver by @AprilNEA in #76
- fix(gui): keep Settings Language description on one line by @davidbudnick in #72
- Polish empty state UI and improve user hints for UX/usability by @markosnarinian in #88
- feat(core): add macos desktop switch actions by @LouisDISPA in #67
- chore: release v0.4.0 by @aprilnea[bot] in #75
New Contributors
- @PeterDaveHello made their first contribution in #57
- @markosnarinian made their first contribution in #88
- @LouisDISPA made their first contribution in #67
Full Changelog: v0.3.4...v0.4.0
v0.3.4
Released June 1, 2026 · View on GitHub ↗
What's Changed
- chore(release): stop publishing the redundant generic -macos.dmg by @AprilNEA in #58
- refactor(xtask): move macOS packaging tasks by @AprilNEA in #47
- Vendor hidpp fork; BLE-direct + startup robustness; Settings permissions by @AprilNEA in #45
- chore: release v0.3.4 by @aprilnea[bot] in #59
Full Changelog: v0.3.3...v0.3.4
v0.3.3
Released June 1, 2026 · View on GitHub ↗
What's Changed
- chore: release v0.3.3 by @aprilnea[bot] in #56
Full Changelog: v0.3.2...v0.3.3
v0.3.2
Released June 1, 2026 · View on GitHub ↗
What's Changed
- fix(release): let softprops own the draft-first GitHub Release by @AprilNEA in #55
- chore: release v0.3.2 by @aprilnea[bot] in #49
Full Changelog: v0.3.1...v0.3.2
v0.3.1
Released June 1, 2026 · View on GitHub ↗
Added
- (updater) use static R2 manifest (#43)
v0.3.0
Released June 1, 2026 · View on GitHub ↗
Added
- (openlogi-gui) add Russian localization and language select (#38)
Fixed
- (gui) stabilize device tab ordering (#37)
Known issue
The macOS DMG assets for this release are unavailable. The release workflow published v0.3.0 before uploading the generated assets, and GitHub marked the release immutable, so the DMG and checksum files cannot be attached afterward. This is a release packaging issue, not an application code issue; the workflow has been changed to keep future releases as drafts until all assets are uploaded.
v0.2.0
Released May 31, 2026 · View on GitHub ↗
OpenLogi 0.2.0 rolls up everything since 0.1.0: directly-attached (wired & Bluetooth) mice are now first-class, plus a macOS menu-bar app, in-app updates, and DMG / Intel distribution. macOS only for now — Linux and Windows are on the roadmap.
✨ Highlights
Wired & Bluetooth-direct devices are now first-class
Every control path used to assume a mouse hanging off a Logi Bolt receiver. Devices connected by USB cable or Bluetooth-direct (no receiver) are now fully supported — DPI, SmartShift, and button / gesture capture all route to them over HID++. Bluetooth devices are no longer read-only, and wired mice with no battery (e.g. a corded G502) are no longer dropped. (#5)
macOS menu-bar app
- OpenLogi now runs as a menu-bar (tray) accessory — click the 🖱️ icon for live device status and quick Open / Quit. (#4)
- Dynamic activation policy: opening a window brings back the Dock icon and app menu; closing the last window drops back to tray-only. (#7)
- Start-minimized autostart — a login-launched instance comes up in the tray with no window. (#7)
- A "Show in menu bar" setting, and ⌘W now closes the focused window (Settings / About too, not just the main one).
Gesture button
- The gesture button is now a mappable hotspot in the mouse diagram, with a hold-time gate so a quick tap registers as a click and a deliberate hold as a swipe. (#4)
In-app updates (opt-in, off by default)
- Check for Updates with a first-run prompt, an on-launch check, a clickable version, and live download progress — powered by
gpui-updater.
Packaging & distribution
- Ships as a DMG installer with a hosted background image.
- CI now also builds Intel (x86_64) macOS binaries alongside Apple Silicon.
UI polish
- Demo device cards replaced with a proper empty state, the app logo embedded as a runtime asset, and Settings language-picker layout fixes.
🔧 Under the hood
- HID++ device addressing unified behind a single
DeviceRoute— Bolt\{receiver, slot\}vs.Direct \{vid, pid\}resolved in one place;DpiTarget/GestureTargetcollapse into it, and the CLIdiagcommands work on direct devices too. (#5) - macOS status-item wrapper extracted and the menu bar gated to macOS. (#6)
- Release / CI hardening: a single root changelog, 1Password-sourced tokens, DMG build inside the devenv, and a real-Xcode Metal env for GUI builds.
Full changelog: v0.1.0...v0.2.0
v0.1.4
Released May 31, 2026 · View on GitHub ↗
Other
- update workflow actions for Node 24
- (release-plz) fail loudly when a release silently stalls
v0.1.3
Released May 31, 2026 · View on GitHub ↗
No release notes.
v0.1.2
Released May 31, 2026 · View on GitHub ↗
Added
- Check for Updates in the About window, backed by the gpui-updater crate
- One opt-in update check on launch, with a first-run prompt to enable it
- Live download progress, and a clickable version that links to its GitHub release
v0.1.1
Released May 30, 2026 · View on GitHub ↗
Other
- (release-plz) write a single root changelog, not one per crate
- (release-plz) load CARGO_REGISTRY_TOKEN from 1Password
v0.1.0
Released May 30, 2026 · View on GitHub ↗
⚠️ Only the MX Master 4 has been tested on real hardware so far. Other Logitech devices expose different HID++ controls and are unverified — please report what works and what doesn't.
OpenLogi 0.1.0 — A native, local-first alternative to Logitech Options+, written in Rust.
Remapping
- Remap the Back / Forward / Middle buttons (via a CGEventTap hook) to any action.
- Capture the MX gesture button over HID++ (
0x1b04raw‑XY): directional swipes (up / down / left / right) fire mid‑swipe, plus a no‑swipe click — bound independently per direction. - Capture the DPI / ModeShift button and the thumb wheel (
0x2150) over HID++.
Actions
- Keyboard shortcuts, mouse clicks, scrolling, media keys, tab navigation.
- DPI cycle / presets and SmartShift toggle, written to the device over HID++ (reusing the open capture channel for low latency).
- Window & space actions — Mission Control, App Exposé, Show Desktop, Launchpad — triggered directly through the Dock.
Devices (HID++ over a Bolt receiver)
- Receiver + paired‑device enumeration, live inventory, and on‑demand device renders.
- DPI (
0x2201) and SmartShift (0x2111) read / write. - Device pairing (add / remove) — work in progress.
Interface
- Interactive mouse model with clickable hotspots and leader‑line labels.
- Flat‑menu binding picker with a cascading gesture submenu.
- Localized: English · 简体中文 · 繁體中文 · 日本語.
- Settings and About windows; follows the OS light / dark appearance.
- Guided macOS Accessibility‑permission onboarding.
Packaging
- Signed + notarized
.app/ DMG, a Homebrew tap, and an app icon.
Known limitations
- Verified only on the MX Master 4.
- Launchpad was removed in macOS 26, so that action is a no‑op there.
- Thumb‑wheel scroll re‑synthesis may need per‑device tuning.
- Device pairing is still being built out.
v0.0.1
Released May 30, 2026 · View on GitHub ↗
No release notes.