OpenLogi

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.6.27

Released August 14, 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 11, 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 11, 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 6, 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 11, 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 11, 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 11, 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 10, 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-gui into 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.app as a nested login-item helper under OpenLogi.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@latest has 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@latest Homebrew 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 3, 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 2, 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 2, 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 June 1, 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 / GestureTarget collapse into it, and the CLI diag commands 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 31, 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++ (0x1b04 raw‑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.

On this page