# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [0.6.21](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.20...openlogi-core-v0.6.21) - 2026-07-19
### Added
- *(hid)* add native wheel resolution control
### Fixed
- *(hid)* make one-shot enumerate retry transport-agnostic so Unifying partial drains recover ([#287](https://github.com/AprilNEA/OpenLogi/pull/287))
### Other
- *(core)* add hires_wheel to the inventory equality test helper ([#417](https://github.com/AprilNEA/OpenLogi/pull/417))
## [0.6.20](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.19...openlogi-core-v0.6.20) - 2026-07-18
### Fixed
- *(core)* preserve hash-prefixed lighting colors
- *(core,gui,agent,cli)* validate the lighting color once as a typed Rgb
- *(smartshift)* stop runaway free-spin scroll and control snap-back ([#333](https://github.com/AprilNEA/OpenLogi/pull/333))
### Other
- *(core)* document the remaining public items and deny missing_docs
- *(core)* move the swipe-gesture machinery to binding/swipe.rs
- *(core)* persist the config through atomic-write-file
- *(agent,core)* resolve the LaunchAgents path via core paths
- replace assert!(matches!(…)) with std assert_matches
- *(core)* split config.rs into settings and device submodules
- *(core)* drop fs4 in favor of std File::try_lock
## [0.6.19](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.18...openlogi-core-v0.6.19) - 2026-07-04
### Added
- *(windows)* notification-area tray icon for the agent ([#347](https://github.com/AprilNEA/OpenLogi/pull/347))
- *(windows)* bundle and package the background agent ([#347](https://github.com/AprilNEA/OpenLogi/pull/347))
## [0.6.18](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.17...openlogi-core-v0.6.18) - 2026-06-29
### Added
- *(hidpp)* add typed reprog controls support
### Other
- Clarify MX Master 4 gesture control semantics ([#325](https://github.com/AprilNEA/OpenLogi/pull/325))
## [0.6.17](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.16...openlogi-core-v0.6.17) - 2026-06-24
### Added
- add Capture Region to Clipboard button action ([#296](https://github.com/AprilNEA/OpenLogi/pull/296))
## [0.6.16](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.15...openlogi-core-v0.6.16) - 2026-06-22
### Fixed
- *(scroll)* support per-device inversion
### Other
- *(scroll)* require native hidpp inversion
- *(config)* key settings by physical device
- *(infra)* use crates for paths and language matching
## [0.6.15](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.14...openlogi-core-v0.6.15) - 2026-06-21
### Added
- *(scroll)* per-device inverted scrolling ([#126](https://github.com/AprilNEA/OpenLogi/pull/126))
## [0.6.14](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.13...openlogi-core-v0.6.14) - 2026-06-15
### Fixed
- *(hid)* solid keyboard colour via 0x8070 effect ([#205](https://github.com/AprilNEA/OpenLogi/pull/205))
### Other
- *(core)* extract the OS input-injection layer into openlogi-inject ([#240](https://github.com/AprilNEA/OpenLogi/pull/240))
## [0.6.13](https://github.com/AprilNEA/OpenLogi/compare/openlogi-hidpp-v0.6.12...openlogi-hidpp-v0.6.13) - 2026-06-15
### Other
- *(hidpp)* address review — multi-impl macro arm + 4-bit function guard
- *(hidpp)* fold per-feature request framing into FeatureEndpoint
- *(hidpp)* express the feature registry as a data macro
## [0.6.12](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.11...openlogi-core-v0.6.12) - 2026-06-13
### Fixed
- *(gui)* keep asleep devices and their panels in the device list
- *(agent)* persist DPI/SmartShift per device and reapply volatile settings on reconnect
## [0.6.11](https://github.com/AprilNEA/OpenLogi/compare/openlogi-hid-v0.6.10...openlogi-hid-v0.6.11) - 2026-06-13
### Fixed
- *(hid)* replay a node's last inventory through transient probe failures ([#222](https://github.com/AprilNEA/OpenLogi/pull/222))
## [0.6.10](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.9...openlogi-core-v0.6.10) - 2026-06-13
### Added
- *(config)* add auto_download_assets app setting
### Fixed
- *(gui)* keep the diagnostics report truthful across agent restarts ([#230](https://github.com/AprilNEA/OpenLogi/pull/230))
## [0.6.9](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.8...openlogi-core-v0.6.9) - 2026-06-12
### Added
- *(gui)* add a Copy Diagnostics button to the About window ([#206](https://github.com/AprilNEA/OpenLogi/pull/206))
## [0.6.8](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.7...openlogi-core-v0.6.8) - 2026-06-12
### Added
- *(linux)* launch_at_login + input device access permission check ([#172](https://github.com/AprilNEA/OpenLogi/pull/172))
- add mouse button 4 and 5 options ([#96](https://github.com/AprilNEA/OpenLogi/pull/96))
## [0.6.7](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.6...openlogi-core-v0.6.7) - 2026-06-12
### Fixed
- *(core)* post macOS volume and media keys as NX system-defined events ([#184](https://github.com/AprilNEA/OpenLogi/pull/184))
### Other
- *(ipc)* pin the wire format with golden bytes and mark wire types
## [0.6.6](https://github.com/AprilNEA/OpenLogi/compare/openlogi-hidpp-v0.6.5...openlogi-hidpp-v0.6.6) - 2026-06-10
### Fixed
- *(hidpp)* bound device-controlled name lengths in Bolt parsing ([#200](https://github.com/AprilNEA/OpenLogi/pull/200))
## [0.6.5](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.4...openlogi-core-v0.6.5) - 2026-06-10
### Other
- collapse nested ifs flagged by current stable clippy ([#197](https://github.com/AprilNEA/OpenLogi/pull/197))
## [0.6.4](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.3...openlogi-core-v0.6.4) - 2026-06-10
### Added
- *(core)* complete the macOS->Windows CustomShortcut keycode map
- *(windows)* native input + HID++ leaf support
- *(openlogi-gui)* expand UI to 19 fully-translated locales ([#24](https://github.com/AprilNEA/OpenLogi/pull/24))
- *(gui)* glow keyboard card in lighting colour ([#185](https://github.com/AprilNEA/OpenLogi/pull/185))
## [0.6.3](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.6.2...openlogi-core-v0.6.3) - 2026-06-09
### Added
- *(core)* unify button + gesture bindings into one Binding map
### Fixed
- *(core)* harden gesture Binding defaults, migration, and projection
## [0.6.2](https://github.com/AprilNEA/OpenLogi/compare/v0.6.1...v0.6.2) - 2026-06-08
### Added
- *(i18n)* integrate Crowdin localization workflow ([#174](https://github.com/AprilNEA/OpenLogi/pull/174))
### Other
- switch release notes generation to Codex ([#177](https://github.com/AprilNEA/OpenLogi/pull/177))
- add code of conduct
## [0.6.1](https://github.com/AprilNEA/OpenLogi/compare/openlogi-cli-v0.6.0...openlogi-cli-v0.6.1) - 2026-06-08
### Fixed
- *(cli)* diag selects a device that exposes the feature under test ([#150](https://github.com/AprilNEA/OpenLogi/pull/150))
## [0.6.0](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.5.3...openlogi-core-v0.6.0) - 2026-06-07
### Added
- *(agent)* tarpc IPC server backed by the orchestrator + device I/O
- *(agent)* define tarpc IPC service contract + serde-derive wire types
### Fixed
- *(agent)* give the agent its own single-instance lock
### Other
- Merge origin/master into feat/agent-daemon-split
## [0.5.3](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.5.2...openlogi-core-v0.5.3) - 2026-06-06
### Fixed
- *(gui)* prefer asset-registry kind + harden device-kind classification
### Other
- gate config panels on HID++ capabilities, not device kind
## [0.5.2](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.5.1...openlogi-core-v0.5.2) - 2026-06-05
### Added
- *(core)* LockScreen and media actions via D-Bus on Linux
- *(core)* expose action_device_path for evtest attachment
- *(core)* implement Action::execute on Linux via uinput
- enable Thumb Wheel Up/Down mapping, "Do Nothing" action, and native scroll sensitivity ([#125](https://github.com/AprilNEA/OpenLogi/pull/125))
### Fixed
- *(core)* fmt + clarify mpris fallback log on the Linux D-Bus code
- *(core)* address PR #124 review comments
- *(core)* drop unused REL_X/REL_Y from the action uinput device
- *(core)* cover Action::None in execute_linux
- *(core)* address PR review comments
- *(core)* use enumerate_dev_nodes_blocking for correct event path
- *(core)* address code review findings
### Other
- run clippy on Windows instead of bare cargo check ([#146](https://github.com/AprilNEA/OpenLogi/pull/146))
- *(core)* simplify D-Bus helpers and add -v flag to inject_action
- *(core)* simplify inject_action parsing, guard --delay
- *(core)* extract KEY_CAPABILITIES const, drop too_many_lines allow
- *(core)* note LockScreen Linux limitation and D-Bus follow-up
- *(core)* note Ctrl+Shift+Z vs Ctrl+Y redo shortcut choice on Linux
- *(core)* clarify scroll unit difference between post_horizontal_scroll and HorizontalScroll* actions
- *(core)* simplify Linux execute helpers and doc fixes
- *(core)* add vk_mapping tests and inject_action example
## [0.5.1](https://github.com/AprilNEA/OpenLogi/compare/openlogi-assets-v0.5.0...openlogi-assets-v0.5.1) - 2026-06-05
### Fixed
- *(assets)* match devices against every model id a depot lists
### Other
- *(assets)* lock the index.json modelIds schema contract
## [0.5.0](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.4.1...openlogi-core-v0.5.0) - 2026-06-05
### Added
- add wired G-series keyboard RGB control ([#29](https://github.com/AprilNEA/OpenLogi/pull/29))
## [0.4.1](https://github.com/AprilNEA/OpenLogi/compare/openlogi-v0.4.0...openlogi-v0.4.1) - 2026-06-03
### Added
- *(gui)* refine device gallery worktree changes
- *(nix)* wire passthru.updateScript for nix-update / autobump
- *(nix)* add nixpkgs package + flake; commit the prebuilt app icon
### Other
- route issue-chooser questions to GitHub Discussions
- update Telegram invite link to the new channel
- *(release)* disable homebrew-tap dispatch (openlogi moved to homebrew-cask) ([#105](https://github.com/AprilNEA/OpenLogi/pull/105))
- add GitHub issue form templates ([#102](https://github.com/AprilNEA/OpenLogi/pull/102))
- configure release-plz branch prefix
## [0.4.0](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.3.4...openlogi-core-v0.4.0) - 2026-06-02
### Added
- *(i18n)* add zh-TW (Traditional Chinese, Taiwan) locale ([#57](https://github.com/AprilNEA/OpenLogi/pull/57))
## [0.3.4](https://github.com/AprilNEA/OpenLogi/compare/openlogi-hidpp-v0.3.3...openlogi-hidpp-v0.3.4) - 2026-06-01
### Added
- *(openlogi-hidpp)* vendor the hidpp 0.3 fork from lus/logy
### Fixed
- address /code-review findings (write timeouts, scanning fallback, asset sync, CoreBluetooth safety)
### Other
- *(hidpp)* up-convert short→long inside the channel for long-only BLE
## [0.3.3](https://github.com/AprilNEA/OpenLogi/compare/openlogi-assets-v0.3.2...openlogi-assets-v0.3.3) - 2026-06-01
### Fixed
- *(assets)* match devices by displayName when no PID lookup hits
## [0.3.2](https://github.com/AprilNEA/OpenLogi/compare/v0.3.1...v0.3.2) - 2026-06-01
### Other
- simplify format
## [0.3.1](https://github.com/AprilNEA/OpenLogi/compare/v0.3.0...v0.3.1) - 2026-06-01
### Added
- *(updater)* use static R2 manifest ([#43](https://github.com/AprilNEA/OpenLogi/pull/43))
## [0.3.0](https://github.com/AprilNEA/OpenLogi/compare/openlogi-core-v0.2.0...openlogi-core-v0.3.0) - 2026-06-01
### Added
- *(openlogi-gui)* add Russian localization and language select ([#38](https://github.com/AprilNEA/OpenLogi/pull/38))
### Fixed
- *(gui)* stabilize device tab ordering ([#37](https://github.com/AprilNEA/OpenLogi/pull/37))
## [0.2.0](https://github.com/AprilNEA/OpenLogi/compare/openlogi-hid-v0.1.4...openlogi-hid-v0.2.0) - 2026-05-31
### Added
- *(openlogi-hid)* route HID++ writes to directly-attached devices ([#5](https://github.com/AprilNEA/OpenLogi/pull/5))
## [0.1.4](https://github.com/AprilNEA/OpenLogi/compare/v0.1.3...v0.1.4) - 2026-05-31
### Other
- update workflow actions for Node 24
- *(release-plz)* fail loudly when a release silently stalls
## [0.1.3](https://github.com/AprilNEA/OpenLogi/compare/v0.1.2...v0.1.3) - 2026-05-31
### Added
- macOS menu-bar (tray) app: lives in the menu bar with the interactive mouse diagram, a mappable gesture-button hotspot, and live Open / Quit
- Dynamic Dock + menu-bar presence — full window with the app menu when open, tray-only once the window is closed; optional silent start-minimized on login
- "Show in menu bar" setting to keep OpenLogi in the menu bar, or run it as an ordinary Dock app instead
- ⌘W closes the focused window
### Fixed
- Use the real Xcode toolchain for GUI builds and build the installer DMG correctly
## [0.1.2](https://github.com/AprilNEA/OpenLogi/compare/v0.1.1...v0.1.2) - 2026-05-31
### 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
## [0.1.1](https://github.com/AprilNEA/OpenLogi/compare/v0.1.0...v0.1.1) - 2026-05-30
### Other
- *(release-plz)* write a single root changelog, not one per crate
- *(release-plz)* load CARGO_REGISTRY_TOKEN from 1Password