OpenLogi

更新日志

OpenLogi 每个版本的发布记录,自动从项目的 GitHub Releases 生成。

OpenLogi 每个版本的发布记录,自动从项目的 GitHub Releases 生成。更新内容均以英文撰写。

v0.8.19

发布于 2026年10月29日 · 在 GitHub 上查看 ↗

What's Changed

  • fix(desktop): mark the selected pill with the accent border by @AprilNEA in #2047
  • fix(overlay): keep the Windows Actions Ring from taking the foreground by @AprilNEA in #2053
  • fix(agent): recover mouse capture across Bluetooth and Bolt switches by @hornej in #1746
  • fix(agent): keep the macOS relaunch successor out of the agent's process group by @AprilNEA in #2063
  • fix(macos): keep held modifiers on re-posted media keys by @4ni1ak in #2056
  • docs(linux): document the openlogi AUR package by @4ni1ak in #2052
  • fix(cli): read 0x1001 battery voltage in diag battery by @yuzi-co in #2049
  • fix(linux): retry Hyprland desktop switches with the Lua dispatcher by @4ni1ak in #2059
  • fix(linux): stabilize actions ring placement during GNOME animations by @x-n2o in #2037
  • fix(desktop): replace a sub-floor smartshift threshold before saving it by @AprilNEA in #2081
  • fix(hook): follow WM_CLASS rewrites on the focused X11 window by @AprilNEA in #2080
  • perf(hook): read the power epoch only while a callback is entered by @AprilNEA in #2097
  • fix(linux): require read/write access to /dev/uinput in the input access probe by @AprilNEA in #2098
  • fix(agent): apply the macOS menu-bar toggle without a restart by @4ni1ak in #2099
  • feat(core): accept Insert and keycap abbreviations in shortcuts by @AprilNEA in #2087
  • fix(gui): size the camera preview with the interface scale by @4ni1ak in #2058
  • fix(gui): restore native keyboard controls when clearing bindings by @safonin in #2036
  • docs: say what scroll resolution does while smooth wheel is on by @semmelrinde in #2093
  • test(cli): add mx master 3 and mx mechanical mini bluetooth fixtures by @semmelrinde in #2082
  • fix(cli): request Input Monitoring before direct fixture capture by @semmelrinde in #2084
  • perf(agent): block the button worker until a command or long-press deadline by @semmelrinde in #2094
  • fix(agent): re-arm capture after a session task panics by @Levgenij in #1902
  • fix(gui): read the camera controls off the UI thread by @4ni1ak in #2104
  • feat(gui): offer open application or folder in the keyboard key panel by @4ni1ak in #2103
  • fix(windows): suppress console flash from RunShellCommand by @MxMartin in #1361
  • feat(gui): offer run shell command in the mouse button picker by @AprilNEA in #2124
  • fix(gui): ignore a stale asset origin when placing mouse hotspots by @jeffersongonzaga in #1577
  • fix(overlay): run the overlay without AccessKit so closed windows are freed by @semmelrinde in #2115
  • fix(desktop): size the device details labels in rem like the configuration card by @semmelrinde in #2114
  • fix(i18n): translate the German leftovers and fix the Scroll Lock toast by @semmelrinde in #2111
  • fix(device,agent): let capture report a dead channel to inventory by @semmelrinde in #2112
  • docs: point the feature form's pre-flight link at the README features by @AprilNEA in #2132
  • feat(core): accept Print Screen in shortcuts by @AprilNEA in #2128
  • feat(desktop): record a custom shortcut from a key press by @AprilNEA in #2138
  • fix(device,agent): change the diverted keyboard keys in place on app switch by @AprilNEA in #2144
  • fix(inject): switch spaces on a mirrored display set by @AprilNEA in #2148
  • chore: release v0.8.19 by @aprilnea[bot] in #2057

New Contributors

  • @x-n2o made their first contribution in #2037
  • @semmelrinde made their first contribution in #2093
  • @Levgenij made their first contribution in #1902
  • @MxMartin made their first contribution in #1361
  • @jeffersongonzaga made their first contribution in #1577

Full Changelog: v0.8.18...v0.8.19

v0.8.18

发布于 2026年10月25日 · 在 GitHub 上查看 ↗

What's Changed

  • ci(release): drop the Codex release-notes job and use GitHub's generated notes by @AprilNEA in #1999
  • fix(release): name Sparkle deltas so Sparkle applies them by @AprilNEA in #2002
  • feat(agent): drive the mock agent from a stdin control console by @AprilNEA in #2003
  • feat(xtask,ci): compose update channel files from per-release records by @AprilNEA in #2000
  • feat(release): build a beta at its own version by @AprilNEA in #2004
  • fix(device): bound Bolt receiver identity reads by @AprilNEA in #2009
  • feat(release): cut betas from a workflow and tell the tap about them by @AprilNEA in #2005
  • docs(agents): beta tags come only from prerelease.yml by @AprilNEA in #2001
  • fix(deps): update Tokio for AsyncFd soundness advisory by @AprilNEA in #2019
  • feat(hidpp): add capability-bound force sensing buttons by @AprilNEA in #2016
  • feat: add a press force setting for the MX Master 4 Haptic Sense Panel by @HimaAramona in #2021
  • feat(gui): add guarded disable-keys controls by @safonin in #993
  • fix(i18n): translate the disable-keys strings in 22 locales by @AprilNEA in #2024
  • fix(agent): re-apply volatile settings after replacing a dead channel by @c1m-Chenym in #1997
  • fix(overlay): draw the Windows Actions Ring without a window frame by @MoonZhe in #1913
  • fix(windows): post the layout's scan code with keys a layout can move by @AprilNEA in #2028
  • fix(cli): route backlight operations through the agent by @safonin in #2031
  • fix(i18n): translate the receiver chooser, old-pairing cleanup, and update channel in Czech by @Imbecile6197 in #2034
  • feat(desktop): add a keyboard backlight duration timer by @ASparkOfFire in #1879
  • fix(assets): follow the 0.1 asset release line instead of pinning 0.1.0 by @AprilNEA in #2039
  • feat(assets): ask the jsDelivr data API for the newest asset release by @AprilNEA in #2040
  • chore: release v0.8.18 by @aprilnea[bot] in #2007

New Contributors

  • @HimaAramona made their first contribution in #2021
  • @MoonZhe made their first contribution in #1913
  • @ASparkOfFire made their first contribution in #1879

Full Changelog: v0.8.17...v0.8.18

v0.8.17

发布于 2026年10月22日 · 在 GitHub 上查看 ↗

What's Changed

  • refactor(core): move the update feed layout into openlogi-core by @AprilNEA in #1976
  • feat(xtask): read the release channel and build version from the tag by @AprilNEA in #1978
  • chore(infra): move the flake, CLAUDE.md and clippy.toml out of the repo root by @AprilNEA in #1984
  • fix(linux): stop counting our own pass-through mouse in the input access probe by @4ni1ak in #1971
  • fix(hid): read whole Bolt slot names, from 0x0005 or both codename chunks by @4ni1ak in #1962
  • fix(macos): carry integer wheel ticks on synthetic line scroll events by @4ni1ak in #1969
  • ci(release): keep a beta release off the stable side effects by @AprilNEA in #1981
  • feat(desktop): let users follow the beta update channel by @AprilNEA in #1980
  • fix(macos): switch Spaces through the user's shortcut so the Dock animates by @Rothschildiuk in #1847
  • fix(release): load only the Codex fields 1Password holds and surface why notes fall back by @AprilNEA in #1987
  • fix(hook): log both windows when the pointer gate rejects a keyboard action by @4ni1ak in #1966
  • fix(device): stop a cached probe from hiding a dead direct channel by @c1m-Chenym in #1979
  • fix(hid): keep long-only HID++ collections long-only on Windows by @4ni1ak in #1983
  • feat(device): recognize the Logitech G600 as a standalone mouse by @4ni1ak in #1961
  • fix(gui): preserve long-press actions when editing a button action by @marktsai333 in #1876
  • docs: record the virtual HID keyboard in the changelog, crate map and signing guide by @AprilNEA in #1988
  • feat(agent): report whether the virtual HID keyboard carries keys by @AprilNEA in #1991
  • chore: release v0.8.17 by @aprilnea[bot] in #1977

New Contributors

  • @marktsai333 made their first contribution in #1876

Full Changelog: v0.8.16...v0.8.17

v0.8.16

发布于 2026年10月21日 · 在 GitHub 上查看 ↗

macOS: shortcut keys now go through a virtual HID keyboard

When a button sends a keyboard shortcut, OpenLogi now presses the keys on a virtual keyboard named "OpenLogi Virtual Keyboard" instead of posting software key events. macOS handles these keys the way it handles keys from a USB keyboard. This is for shortcuts that work from a real keyboard but did not work from OpenLogi (#1653, #744). Apple granted OpenLogi the restricted HID virtual-device entitlement for this, and the signed OpenLogi Agent carries it (#1918, #1929).

  • You do not need to grant a new permission. The agent's signing identity did not change, so your Accessibility and Input Monitoring grants keep working.
  • If macOS does not let OpenLogi create the virtual keyboard, OpenLogi types the keys the old way.
  • Only the signed release builds have it. Builds from source and dev builds still use the old way.
  • To check that it is active, run ioreg -r -c IOHIDUserDevice | grep "OpenLogi Virtual Keyboard" while OpenLogi runs.
  • If a shortcut now behaves differently than in 0.8.15, please open an issue.

What's Changed

  • chore: track rust 1.99 as the stable floor by @AprilNEA in #1877
  • feat(inject): type synthesized macOS keys through a virtual HID keyboard by @AprilNEA in #1918
  • fix(agent): relaunch when Input Monitoring is granted after launch by @AprilNEA in #1919
  • fix(deps): bump rustls-webpki and webpki roots for emSign advisories by @AprilNEA in #1924
  • feat(inject,gui): slide desktop switches like a three-finger swipe by @AprilNEA in #1921
  • feat(macos,gui): say when Secure Input pauses key remapping by @AprilNEA in #1926
  • test(inject): check that the host's choice decides the next desktop switch by @AprilNEA in #1928
  • feat(xtask,ci): sign the macOS agent with its HID virtual-device profile by @AprilNEA in #1929
  • feat(core,agent,gui): pointer speed and precision mode for 0x2205 mice by @AprilNEA in #1922
  • feat(release): ship Sparkle delta updates by @AprilNEA in #1925
  • fix(device,agent): move linked devices after a keyboard that switches by itself by @AprilNEA in #1920
  • fix(desktop): show Pointer tab for mice and trackballs with software scroll inversion by @spartak8310 in #1880
  • feat(hidpp,device,agent): precision mode on mice with adjustable DPI by @AprilNEA in #1932
  • fix(hidpp): keep unmodelled backlight option bits on write by @AprilNEA in #1933
  • fix(device): restore thumb-wheel reporting as found and harden its capture by @AprilNEA in #1935
  • fix(hidpp,device): write all 0x8070 zones safely and gate v1 functions by @AprilNEA in #1936
  • fix(hidpp): gate the illumination effective maximum in its wrapper by @AprilNEA in #1937
  • fix(hidpp): bound 0x2111 torque and refuse a short capabilities reply by @AprilNEA in #1939
  • feat(pointer): light the DPI LED in precision mode by @AprilNEA in #1934
  • fix(hidpp,device): re-read settings on a 0x4521 disabled-key report by @AprilNEA in #1940
  • fix(hidpp,device,cli): keep getFwInfo transport bytes 9-15 raw by @AprilNEA in #1945
  • fix(gui): save a DPI only after the device confirms it by @AprilNEA in #1943
  • fix(hidpp,device): reconcile DPI after a sensor calibration broadcast by @AprilNEA in #1947
  • fix(agent): hand the haptic enable back after Actions Ring sessions by @AprilNEA in #1942
  • fix(device): drop short 0x2121 movements and re-read SmartShift on a ratchet switch by @AprilNEA in #1944
  • fix(hidpp): decode unified battery status bytes 3-5 by feature version by @AprilNEA in #1941
  • fix(hidpp,device): publish 0x1b04 reporting changes made by other clients by @AprilNEA in #1946
  • fix(device): read the 0x1000 battery capability before mapping levels by @AprilNEA in #1938
  • fix(hidpp,device): read the 0x2201 default DPI only from feature version 1 by @AprilNEA in #1952
  • fix(gui): choose the receiver before pairing a device by @hornej in #1614
  • fix(hidpp): publish the 0x8071 nv-effect sync event as raw bytes by @AprilNEA in #1951
  • chore: release v0.8.16 by @aprilnea[bot] in #1923

New Contributors

  • @spartak8310 made their first contribution in #1880
  • @hornej made their first contribution in #1614

Full Changelog: v0.8.15...v0.8.16

v0.8.15

发布于 2026年10月20日 · 在 GitHub 上查看 ↗

What's Changed

  • feat(device): hold Back or Forward to scroll sideways with the main wheel (0x1b04 raw wheel) by @AprilNEA in #1828
  • test(gui): draw dialogs at rest before clicking their buttons by @AprilNEA in #1832
  • feat(desktop): offer hold-to-scroll-sideways for Back and Forward by @AprilNEA in #1835
  • feat(device): smooth a mouse's main wheel by diverting it (0x2121) by @AprilNEA in #1837
  • feat(desktop): add a per-device smooth wheel switch to the Scrolling card by @AprilNEA in #1839
  • feat(device): reach Litra lights over HID++ 0x1990 with read-back by @AprilNEA in #1841
  • fix(gui): show the Actions Ring tab for keyboards with a Keys panel by @4ni1ak in #1844
  • fix(gui): retain observed connection icons for offline devices by @i0ntempest in #1830
  • fix(cli): drop a paired device with no identity from fixture capture by @4ni1ak in #1861
  • fix(gui): recognize the MX Ergo precision-mode button slot by @4ni1ak in #1855
  • fix(agent): log thumb-wheel continuous-scroll dispatch by @4ni1ak in #1852
  • fix(i18n): translate the hold-modifiers and tap-key actions in Czech by @Imbecile6197 in #1850
  • feat(gui): add a Next / Previous Desktop thumb-wheel preset by @Rothschildiuk in #1848
  • fix(agent): write a light only when a reload changes its settings by @AprilNEA in #1865
  • feat(agent): keep a change made on a Litra as its setting and publish it by @AprilNEA in #1866
  • feat(gui): add device default option for keyboard bindings by @clifinger in #702
  • fix(linux): report input access as denied when the event node is unreadable by @AalmanSadath in #787
  • fix(gui): embed the Sleep action's moon glyph by @AalmanSadath in #790
  • feat(gui): add a Reset to defaults button to the F-key binding panel by @4ni1ak in #1255
  • fix(gui): enlarge About panel logo by @4ni1ak in #1364
  • fix(hid): open HID++ channels concurrently, not one node at a time by @4ni1ak in #1443
  • feat(gui): add Power User actions to the Action Ring editor by @4ni1ak in #1445
  • fix(inject): give the Windows Screenshot action its own Win+PrtScn chord by @AprilNEA in #1867
  • fix(linux): keep "pen" out of the uinput device names by @AprilNEA in #1868
  • fix(linux): grab a mouse again after it reconnects or appears late by @AprilNEA in #1869
  • feat(desktop): save a change made on a Litra as its setting by @AprilNEA in #1870
  • fix(hook): fall back to a recent device attribution on macOS by @andybateman in #805
  • fix(hid): suppress duplicate Bolt pairing slots by @xcouturecc in #963
  • fix(gui): allow clearing function-key bindings by @xcouturecc in #962
  • feat(gui): show the receiver slot on each device card by @garysassano in #1802
  • fix(gui): fold leftover receiver pairings into one device card by @garysassano in #1801
  • fix(hid): capture the M720 Triathlon's multiplatform gesture button by @kurtlieber in #1613
  • fix(i18n): route hardcoded GUI labels through the catalog by @eibidia in #1331
  • fix(macos): preserve fractional wheel distance by @li-shch in #1154
  • feat(linux): route window-manager native actions through KWin D-Bus on KDE by @werwolf2303 in #1087
  • feat(linux): support Hyprland native remaps by @shawnyeager in #1152
  • fix(agent): include MiddleClick in the macOS HID++ gesture ownership by @tims2002 in #1380
  • test(inject): cover the macOS Lock Screen chord by @AprilNEA in #1885
  • feat(overlay): show keyboard backlight level by @nathan-fontenele in #1695
  • ci(macos): lint the macOS cfg with clippy by @AprilNEA in #1883
  • chore: drop stale lint suppressions and reject module-wide #![allow] by @AprilNEA in #1884
  • feat(core,gui): allow middle click gesture mode by @PedroDiogo in #1738
  • feat(hidpp): add scrolling force control for smartshift enhanced mice by @pedrohgmacedo in #1636
  • fix(core,agent): chain swipes within one gesture-button hold by @sarat03 in #1652
  • feat(linux): ship a Flatpak bundle with each release by @AalmanSadath in #767
  • ci: sweep stale #[allow] on Linux, Windows, and macOS weekly by @AprilNEA in #1887
  • feat(overlay): show a notice when a device's battery runs low by @AprilNEA in #1891
  • feat(overlay): show an indicator when a keyboard turns a lock key on or off by @AprilNEA in #1898
  • fix(device): drop a lock-state read that answers after a reconnection by @AprilNEA in #1899
  • fix(overlay): draw one Actions Ring per display on Wayland by @AprilNEA in #1906
  • feat(core,gui): share per-app profiles across platforms with [apps] aliases by @AprilNEA in #1907
  • chore: release v0.8.15 by @aprilnea[bot] in #1831

New Contributors

  • @i0ntempest made their first contribution in #1830
  • @Rothschildiuk made their first contribution in #1848
  • @andybateman made their first contribution in #805
  • @xcouturecc made their first contribution in #963
  • @garysassano made their first contribution in #1802
  • @kurtlieber made their first contribution in #1613
  • @li-shch made their first contribution in #1154
  • @werwolf2303 made their first contribution in #1087
  • @shawnyeager made their first contribution in #1152
  • @tims2002 made their first contribution in #1380
  • @PedroDiogo made their first contribution in #1738
  • @pedrohgmacedo made their first contribution in #1636
  • @sarat03 made their first contribution in #1652

Full Changelog: v0.8.14...v0.8.15

v0.8.14

发布于 2026年10月15日 · 在 GitHub 上查看 ↗

What's Changed

  • fix(gui): prefer the Buttons panel over Keys when kind resolution is wrong by @4ni1ak in #1702
  • docs(readme): add Spanish translation by @eibidia in #1314
  • fix(gui): let the theme card name shrink so the badge fits by @4ni1ak in #1435
  • fix(hook): carry the mouse's vendor/product ID onto its uinput mirror by @4ni1ak in #1453
  • fix(cli): let macOS prompt for Input Monitoring before diag opens a device by @4ni1ak in #1256
  • fix(gui): draw the client-side titlebar only where the compositor declines one by @4ni1ak in #945
  • fix(inject): distinguish Linux Capture Region from Screenshot by @4ni1ak in #1433
  • fix(hook): preserve low-res wheel events during Linux pass-through by @nathan-fontenele in #1693
  • fix(i18n): use Spain's Spanish terms in the es catalog by @eibidia in #1326
  • docs(i18n): add Portuguese README translation by @obrenoalvim in #1371
  • fix(windows): enable HID++ side-button gestures by @c1m-Chenym in #1635
  • fix(agent): emit scroll input queued across a smoothing toggle instead of dropping it by @isleofgreg in #1721
  • fix(agent): honor an overflow cancel from a generation the scroll worker has not seen by @isleofgreg in #1720
  • feat(device): Detect Logitech G735 headset dongle by @xvilo in #1040
  • fix(i18n): translate the custom-action input error in Czech by @Imbecile6197 in #1728
  • fix(overlay): set the macOS activation policy before gpui_platform starts by @4ni1ak in #1692
  • fix(hid): capture alternate gesture controls by @4dux in #1561
  • feat(camera): expose pan, tilt, gain and backlight compensation by @yuzi-co in #1020
  • feat(gui): add precise camera control entry by @vinayaksodar in #1047
  • fix(device): omit raw-xy flags when diverting or restoring keyboard controls by @henius98 in #1726
  • fix(inject): send hi-res wheel events for Linux scroll actions (by @RisenID) by @Fede2782 in #1719
  • fix(assets): resolve variants for depots whose manifests key on depot name or stem by @felipecadal in #1295
  • fix(gui): render camera depots that ship no hotspot metadata by @MattijsE in #1265
  • fix(inject): give App Expose/Mission Control/Show Desktop/Launchpad a GNOME implementation by @4ni1ak in #1446
  • fix(gui): open the config folder from the fail-closed config screen by @yuzi-co in #942
  • fix(gui): give MenuRow-based list rows an accessible name by @4ni1ak in #1448
  • fix(camera): collapse a Brio's IR node into one Linux camera entry by @4ni1ak in #1234
  • docs: add Turkish README translation by @4ni1ak in #1734
  • feat(hook): reverse the wheel in software for devices without 0x2121 by @4ni1ak in #847
  • feat(gui): add custom-shortcut Tap/Hold recorder to the button picker by @fahadjibransheikh in #1396
  • fix(agent): reapply volatile settings on device reconnection and retry disagreeing DPI writes by @isleofgreg in #1270
  • fix(overlay): properly position and scale Actions Ring on Windows mixed-DPI displays by @c1m-Chenym in #1745
  • fix(camera): pass the pan/tilt payload by value by @SMRehan in #1740
  • feat(core): add an action that holds modifiers and taps the key once by @Rick0525 in #1161
  • feat(gui): update macOS through Sparkle by @AprilNEA in #1744
  • docs(ipc): move PROTOCOL_VERSION once per release by @AprilNEA in #1760
  • fix(hidpp): write 0x1990 non-linear level tables whole by @AprilNEA in #1765
  • fix(hidpp): read the 0x4530 platform with function 0 by @AprilNEA in #1766
  • fix(hidpp): write each 0x0007 name chunk at its own offset by @AprilNEA in #1767
  • fix(hidpp): preserve device state OpenLogi does not own on writes by @AprilNEA in #1753
  • fix(device): encode 0x8080 tail frames and 0x8070 fixed colour per device by @AprilNEA in #1758
  • fix(device): write SmartShift torque and DPI only as the device advertises by @AprilNEA in #1759
  • fix(device): give the Litra Beam its own brightness range by @AprilNEA in #1763
  • fix(device): stop misreading 0x1000 and 0x1001 battery states by @AprilNEA in #1768
  • fix(device): stop committing 0x8080 frames the keyboard rejected by @AprilNEA in #1764
  • fix(device): own RGB software control for the agent session by @AprilNEA in #1769
  • fix(hidpp): require the 0x8081 zone echo before reporting a write by @AprilNEA in #1771
  • fix(hidpp): refuse short 0x1990 info and level replies by @AprilNEA in #1772
  • fix(device): confirm the haptic repair from the device's reply by @AprilNEA in #1773
  • fix(device): confirm SmartShift writes from the device's reply by @AprilNEA in #1775
  • fix(agent-core): close the RGB release races left by #1769 by @AprilNEA in #1770
  • fix(hidpp): require the sensor echo in DPI replies by @AprilNEA in #1776
  • fix(device): end a thumb-wheel roll whose Stop never arrives by @AprilNEA in #1777
  • docs(hidpp): say that a None remap keeps the current mapping by @AprilNEA in #1778
  • fix(hidpp): hold 0x8060 and 0x8061 rates to what the features define by @AprilNEA in #1779
  • fix(hidpp): decode every 0x2121 capability flag and the horizontal delta by @AprilNEA in #1780
  • fix(hidpp): decode 0x1c00 empty actions and status, and 0x4531 OS bits by @AprilNEA in #1781
  • fix(hidpp): keep 0x0003 firmware entity types without a name by @AprilNEA in #1783
  • fix(hidpp): refuse a short 0x40A3 reply instead of zero-filling it by @AprilNEA in #1782
  • fix(hidpp): treat a Bolt protocol byte in 0x41 as an encrypted link by @AprilNEA in #1784
  • fix(device): reconcile inventory on 0x1000/0x1001 battery broadcasts by @AprilNEA in #1787
  • fix(device): wait for the Unifying lock to open before searching by @AprilNEA in #1785
  • fix(device): report no percentage for a 0x1004 battery without a gauge by @AprilNEA in #1788
  • fix(hidpp): check the echoed index in 0x8070/0x8071 info and 0x0007 name reads by @AprilNEA in #1789
  • fix(hidpp): read a non-BCD 0x0003 firmware version as binary by @AprilNEA in #1790
  • fix(device): re-read settings the device changes itself by @AprilNEA in #1791
  • fix(device): drive Fn-lock on keyboards that only have 0x40a0 by @AprilNEA in #1792
  • fix(device): play only the haptic waveforms the device advertises by @AprilNEA in #1796
  • feat(camera): name webcams that report no USB product string by @DonovanMontoya in #1793
  • chore(deps): bump rustls to 0.23.46 by @AprilNEA in #1805
  • feat(device): keep multi-platform keyboards on the host OS layout by @AprilNEA in #1806
  • feat(device): adjust the report rate of mice with 0x8060 or 0x8061 by @AprilNEA in #1808
  • feat(device): set keyboard backlight automatic brightness, level and battery saving by @AprilNEA in #1811
  • feat(desktop): control the keyboard backlight from the Device tab by @AprilNEA in #1812
  • fix(device): refuse haptic plays while 0x19b0 reports a non-zero status by @AprilNEA in #1817
  • fix(linux): settle the uinput action device before its first emit by @4ni1ak in #1810
  • fix(device): don't let a stuck Empty host-slot status refuse a real pairing by @4ni1ak in #1813
  • fix(agent): divert a keyboard key explicitly bound to Action::None by @4ni1ak in #1819
  • fix(device): discard the stale first raw-XY report of every gesture hold by @DonovanMontoya in #1786
  • fix(scroll): post phaseless continuous scroll events on macOS by @isleofgreg in #1157
  • fix(gui): gate debug diagnostics imports in release builds by @gitsacha in #1815
  • fix(agent): anchor the recovery-scan timer to scan start, not scan end by @4ni1ak in #1809
  • fix(agent): queue HID requests before response timeout by @sh3ll3x3c in #936
  • fix(linux): open the Actions Ring at the cursor on Wayland by @AalmanSadath in #1004
  • fix(agent): hand off capture across receiver routes by @justinechang39 in #1198
  • Horizontal Scroll Reversed #1120 by @romanr in #1140
  • feat(device): read Easy-Switch host names and OS, and rename hosts (0x1815) by @AprilNEA in #1824
  • fix(overlay): configure accessory policy after GPUI initialization by @gitsacha in #1814
  • fix(hook): keep software scroll inversion applied when the agent intercepts the wheel by @4ni1ak in #1749
  • feat(desktop): show Easy-Switch hosts on the Device tab and rename them by @AprilNEA in #1825
  • fix(hook): keep the pixel delta when inverting a macOS wheel event by @AprilNEA in #1827
  • chore: release v0.8.14 by @aprilnea[bot] in #1718

New Contributors

  • @nathan-fontenele made their first contribution in #1693
  • @obrenoalvim made their first contribution in #1371
  • @c1m-Chenym made their first contribution in #1635
  • @xvilo made their first contribution in #1040
  • @4dux made their first contribution in #1561
  • @vinayaksodar made their first contribution in #1047
  • @henius98 made their first contribution in #1726
  • @Fede2782 made their first contribution in #1719
  • @felipecadal made their first contribution in #1295
  • @MattijsE made their first contribution in #1265
  • @fahadjibransheikh made their first contribution in #1396
  • @SMRehan made their first contribution in #1740
  • @Rick0525 made their first contribution in #1161
  • @DonovanMontoya made their first contribution in #1793
  • @gitsacha made their first contribution in #1815
  • @justinechang39 made their first contribution in #1198
  • @romanr made their first contribution in #1140

Full Changelog: v0.8.13...v0.8.14

v0.8.13

发布于 2026年10月9日 · 在 GitHub 上查看 ↗

What's Changed

  • fix(linux): add a Spanish comment to the desktop entry by @eibidia in #1468
  • fix(agent): let a thumb-wheel swipe fire Volume Up/Down more than once by @4ni1ak in #1455
  • feat(hid): recognise Powerplay receiver 046d:c53a by @FelipeIzui in #1267
  • feat(hid): add G733 battery and power-state support by @d-tatianin in #1601
  • fix(i18n): improve Turkish catalog wording by @volkanncicek in #1415
  • docs(core): clarify persisted device identifier scope by @yuzi-co in #670
  • fix(macos): respect the selected Apple developer directory by @4ni1ak in #1457
  • fix(gui): restore the config-error folder action by @4ni1ak in #1458
  • fix(core): resolve connection transport from live routes by @4ni1ak in #1367
  • feat(gui): add custom actions to the mouse picker by @4ni1ak in #1452
  • fix(gui): show friendly names for Windows app profiles by @4ni1ak in #1463
  • feat(hidpp): implement pointer motion scaling by @Chernicharo in #1347
  • fix(inject): restore macos 27 space swipes by @4ni1ak in #1703
  • fix(hook): identify unbundled macos applications by @4ni1ak in #1469
  • chore: release v0.8.13 by @aprilnea[bot] in #1716

New Contributors

  • @FelipeIzui made their first contribution in #1267
  • @d-tatianin made their first contribution in #1601
  • @volkanncicek made their first contribution in #1415

Full Changelog: v0.8.12...v0.8.13

v0.8.12

发布于 2026年10月9日 · 在 GitHub 上查看 ↗

What's Changed

  • test(agent): cover a BLE mouse that wakes as a new node by @kohjunhao in #1649
  • fix(gui): seed the DPI editor from config while the live read is pending by @4ni1ak in #1628
  • fix(hid): recognize Lightspeed receiver 046d:c541 by @hamfield-eu in #1679
  • fix(gui): truncate the function-row key callout's name instead of overflowing by @4ni1ak in #1691
  • fix(gui): wrap the device-enabled caption so the switch stays in the card by @Imbecile6197 in #1670
  • feat(fixture): add an MX Ergo Unifying fixture by @Chernicharo in #1374
  • fix(gui): set text color on mouse pairing passkey click icons by @ZOZiBoi in #1640
  • fix(hidpp): tell another protocol's reports apart from malformed HID++ by @Chernicharo in #1373
  • fix(macos): log the candidate displays when Space state has no match by @4ni1ak in #1694
  • fix(agent): phase horizontal thumb-wheel scroll when smoothing is off by @nredd in #1689
  • feat(i18n): add Czech locale by @Imbecile6197 in #1669
  • fix(core): write config through symlinks instead of replacing them by @FunJim in #1642
  • fix(hook): keep the short budget for tap teardown after a probe break by @TheMedpreneur in #1600
  • fix(i18n): name the real update-check host in the consent dialog by @4ni1ak in #1629
  • fix(agent): restore ring toggle and publish expired sessions by @isleofgreg in #1665
  • fix(gui): scale configuration labels with interface text by @4ni1ak in #1627
  • fix(agent): fall back to focus when the pointer target is unidentified by @kohjunhao in #1648
  • fix(gui): anchor scrollbar overlays in action ring editor and app picker by @lynicis in #1360
  • fix(i18n): track the locale catalogs as build inputs by @zmingxie in #1327
  • fix(gui): wrap the About page's link row instead of clipping it by @crnst8 in #885
  • fix(cli): replace the stale receiver note with a Linux udev hint by @Chernicharo in #1348
  • fix(gui): show wheel controls without adjustable dpi by @minatoaquaMK2 in #1369
  • fix(gui): recognize MX Ergo's DPI slot name for the mouse diagram by @armandodollia in #1391
  • fix(macos): write the scroll point delta last so pixel precision survives by @isleofgreg in #1156
  • chore: release v0.8.12 by @aprilnea[bot] in #1646

New Contributors

  • @hamfield-eu made their first contribution in #1679
  • @Imbecile6197 made their first contribution in #1670
  • @Chernicharo made their first contribution in #1374
  • @ZOZiBoi made their first contribution in #1640
  • @nredd made their first contribution in #1689
  • @FunJim made their first contribution in #1642
  • @TheMedpreneur made their first contribution in #1600
  • @lynicis made their first contribution in #1360
  • @zmingxie made their first contribution in #1327
  • @crnst8 made their first contribution in #885
  • @minatoaquaMK2 made their first contribution in #1369
  • @armandodollia made their first contribution in #1391

Full Changelog: v0.8.11...v0.8.12

v0.8.11

发布于 2026年10月2日 · 在 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

发布于 2026年9月30日 · 在 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

  • @guslipkin made their first contribution in #948
  • @hyspacex made their first contribution in #1282

Full Changelog: v0.8.9...v0.8.10

v0.8.9

发布于 2026年9月27日 · 在 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

发布于 2026年9月25日 · 在 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

发布于 2026年9月23日 · 在 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

发布于 2026年9月19日 · 在 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

发布于 2026年9月16日 · 在 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

发布于 2026年9月15日 · 在 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

发布于 2026年8月30日 · 在 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

发布于 2026年8月30日 · 在 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

发布于 2026年8月26日 · 在 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

发布于 2026年8月25日 · 在 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

发布于 2026年8月23日 · 在 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

发布于 2026年8月23日 · 在 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

发布于 2026年8月21日 · 在 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

发布于 2026年8月20日 · 在 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

发布于 2026年8月20日 · 在 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

发布于 2026年8月15日 · 在 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

发布于 2026年8月15日 · 在 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

发布于 2026年8月13日 · 在 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

发布于 2026年8月10日 · 在 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

发布于 2026年8月10日 · 在 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

发布于 2026年8月10日 · 在 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

发布于 2026年8月3日 · 在 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

发布于 2026年7月21日 · 在 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

发布于 2026年7月19日 · 在 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

发布于 2026年7月18日 · 在 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

发布于 2026年7月5日 · 在 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

发布于 2026年6月29日 · 在 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

发布于 2026年6月27日 · 在 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

发布于 2026年6月22日 · 在 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

发布于 2026年6月21日 · 在 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

发布于 2026年6月15日 · 在 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

发布于 2026年6月15日 · 在 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

发布于 2026年6月13日 · 在 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

发布于 2026年6月13日 · 在 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

发布于 2026年6月12日 · 在 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

发布于 2026年6月10日 · 在 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

发布于 2026年6月10日 · 在 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

发布于 2026年6月10日 · 在 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

发布于 2026年6月9日 · 在 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

发布于 2026年6月8日 · 在 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

发布于 2026年6月8日 · 在 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

发布于 2026年6月8日 · 在 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

发布于 2026年6月6日 · 在 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

发布于 2026年6月5日 · 在 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

发布于 2026年6月5日 · 在 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

发布于 2026年6月5日 · 在 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

发布于 2026年6月3日 · 在 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

发布于 2026年6月2日 · 在 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

发布于 2026年6月1日 · 在 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

发布于 2026年6月1日 · 在 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

发布于 2026年6月1日 · 在 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

发布于 2026年6月1日 · 在 GitHub 上查看 ↗

Added
  • (updater) use static R2 manifest (#43)

v0.3.0

发布于 2026年6月1日 · 在 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

发布于 2026年5月31日 · 在 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

发布于 2026年5月31日 · 在 GitHub 上查看 ↗

Other
  • update workflow actions for Node 24
  • (release-plz) fail loudly when a release silently stalls

v0.1.3

发布于 2026年5月31日 · 在 GitHub 上查看 ↗

暂无发布说明。

v0.1.2

发布于 2026年5月31日 · 在 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

发布于 2026年5月30日 · 在 GitHub 上查看 ↗

Other
  • (release-plz) write a single root changelog, not one per crate
  • (release-plz) load CARGO_REGISTRY_TOKEN from 1Password

v0.1.0

发布于 2026年5月30日 · 在 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

发布于 2026年5月30日 · 在 GitHub 上查看 ↗

暂无发布说明。

本页目录

v0.8.19What's ChangedNew Contributorsv0.8.18What's ChangedNew Contributorsv0.8.17What's ChangedNew Contributorsv0.8.16macOS: shortcut keys now go through a virtual HID keyboardWhat's ChangedNew Contributorsv0.8.15What's ChangedNew Contributorsv0.8.14What's ChangedNew Contributorsv0.8.13What's ChangedNew Contributorsv0.8.12What's ChangedNew Contributorsv0.8.11What's Changedv0.8.10What's ChangedNew Contributorsv0.8.9What's ChangedNew Contributorsv0.8.8What's ChangedNew Contributorsv0.8.7What's Changedv0.8.6What's Changedv0.8.5What's Changedv0.8.4What's ChangedNew Contributorsv0.8.3What's Changedv0.8.2What's ChangedNew Contributorsv0.8.1What's Changedv0.8.0HighlightsWhat's ChangedNew Contributorsv0.7.10What's Changedv0.7.7What's ChangedNew Contributorsv0.7.4What's Changedv0.7.3What's Changedv0.7.2What's ChangedNew Contributorsv0.7.1What's ChangedNew Contributorsv0.7.0What's Changedv0.6.27What's ChangedNew Contributorsv0.6.26What's Changedv0.6.25What's ChangedNew Contributorsv0.6.24What's ChangedNew Contributorsv0.6.23What's ChangedNew Contributorsv0.6.22What's Changedv0.6.21What's ChangedNew Contributorsv0.6.20What's ChangedNew Contributorsv0.6.19What's Changedv0.6.18What's ChangedNew Contributorsv0.6.17What's Changedv0.6.16What's Changedv0.6.15What's Changedv0.6.14What's Changedv0.6.13What's ChangedNew Contributorsv0.6.12What's Changedv0.6.11What's Changedv0.6.7What's ChangedNew Contributorsv0.6.6What's Changedv0.6.5What's Changedv0.6.4What's ChangedNew Contributorsv0.6.3What's Changedv0.6.2What's Changedv0.6.1What's ChangedNew Contributorsv0.6.0HighlightsWhat's newmacOS packaging and startupFixes and hardeningUpgrade notesIncluded PRsv0.5.3What's Changedv0.5.2What's ChangedNew Contributorsv0.5.1What's Changedv0.5.0What's Changedv0.4.1What's Changedv0.4.0What's ChangedNew Contributorsv0.3.4What's Changedv0.3.3What's Changedv0.3.2What's Changedv0.3.1Addedv0.3.0AddedFixedKnown issuev0.2.0✨ HighlightsWired & Bluetooth-direct devices are now first-classmacOS menu-bar appGesture buttonIn-app updates (opt-in, off by default)Packaging & distributionUI polish🔧 Under the hoodv0.1.4Otherv0.1.3v0.1.2Addedv0.1.1Otherv0.1.0RemappingActionsDevices (HID++ over a Bolt receiver)InterfacePackagingKnown limitationsv0.0.1