// the find
AprilNEA/OpenLogi
⚡️A native, local-first alternative to Logitech Options+, written in Rust 🦀 — remap buttons, DPI, and SmartShift over HID++. No account, no telemetry.
OpenLogi is a Rust-based replacement for Logitech Options+ that talks directly to Logitech devices over HID++ without requiring an account or network access. It targets power users on macOS, Linux, and Windows who want plain-text config, a CLI, and no background telemetry. Still pre-1.0 but already shipping signed installers and NixOS module support.
- The workspace structure is genuinely well-organized: separate crates for hidpp protocol, HID device management, camera, CLI, agent, and GUI means the pieces are independently testable and the agent can run headless
- The Cargo.toml lint setup is serious — workspace-wide `unsafe_code = deny`, `unwrap_used`, `expect_used`, `allow_attributes_without_reason` all set to warn. This is stricter than most commercial Rust codebases
- Linux is treated as a real platform, not an afterthought: udev rules, systemd user service, NixOS module, deb/rpm/pacman packages, and D-Bus MPRIS support for media keys
- TOML config that syncs across machines is a concrete, practical win over Options+ which stores config in a proprietary cloud account
- GPUI is pinned to zed's default branch via a floating git dependency — not a tag, not a hash in the dependency itself (relies on Cargo.lock). Any zed refactor can silently break the build between lockfile bumps, and this has already burned contributors to other GPUI-based projects
- Device support is inherently limited and underdocumented: HID++ feature coverage varies wildly by mouse model (0x2111, 0x2121, etc.), and there's no compatibility matrix in the README telling you whether your specific device works before you uninstall Options+
- The agent/GUI split adds real operational friction on Windows — the README warns you to keep two executables side by side and notes the tray toggle is macOS-only, suggesting Windows is still catching up in polish
- Pre-stable warning buried at the top means config format can change between releases with no migration path documented, which is painful if you've scripted or synced your TOML across machines