OpenLogi: A Local-First Alternative to Logitech Options+ Written in Rust
OpenLogi: A Local-First Alternative to Logitech Options+ Written in Rust 🦀
What is it? OpenLogi is a native, local-first alternative to Logitech Options+, written entirely in Rust. It communicates with Logitech HID++ mice over a Logi Bolt receiver, Bluetooth, or a direct wired connection — without ever touching a Logitech account or sending telemetry. Two binaries ship together: a full GPUI desktop application with an interactive mouse diagram, action picker, DPI presets, and SmartShift controls; and a CLI for headless inventory, diagnostics, and asset sync.
Why it's trending: OpenLogi reached 4,000+ GitHub stars within two weeks of its first release. The Logitech Options+ application is widely criticized for requiring an online account, sending telemetry, and being bloated — especially on macOS. OpenLogi solves all three problems with a lean 1.2 MB binary, a plain TOML config file, and zero network calls beyond opt-in update checks and device image fetches. For developers and privacy-conscious users who own Logitech MX Master or Anywhere mice, OpenLogi is exactly the tool they didn't know they needed.
Prerequisites
Before installing OpenLogi, make sure you have:
- A Logitech HID++ mouse (MX Master 3/4, MX Anywhere 3/4, MX Ergo, or similar) with a Logi Bolt receiver or Bluetooth support
- macOS (supported today; Linux and Windows are on the roadmap)
- Homebrew (optional, for easy install) — or download the
.dmgdirectly - Quit Logi Options+ completely if you have it installed — the two applications cannot share HID++ access simultaneously
brew install --cask openlogiOR download from the latest GitHub release
Architecture Overview
OpenLogi is structured as a modular Rust workspace with five main crates, each responsible for a distinct layer of the stack.
Layer 1: Hardware & Input Devices
OpenLogi supports three connection modes for Logitech HID++ mice:
- Logi Bolt Receiver — proprietary 2.4 GHz protocol, low-latency, paired via the receiver's short-range RF (OpenLogi handles discovery and pairing natively).
- Bluetooth / Direct — standard BLE HID profile; no receiver required, works with any Bluetooth-capable Logitech mouse.
- OS Event Tap — on macOS, OpenLogi installs an EventTap (via the
openlogi-hookcrate) to capture button presses, gestures, and foreground app changes for per-profile remapping.
All three paths funnel into the HID++ protocol layer.
Layer 2: HID++ Protocol Layer
Two crates handle the low-level communication:
openlogi-hidpp— pure HID++ protocol parser. Implements both v1.0 and v2.0 of the Logitech HID++ specification, device feature discovery (feature set, device name, battery, DPI, SmartShift, thumbwheel), event parsing, and receiver management (Bolt and Unifying). This is a reusable library with no external dependencies on Logitech software.openlogi-hid— raw HID transport layer. Handles device inventory (listing paired devices via Bolt receivers), pairing new devices, button reprogramming (0x1806feature), SmartShift toggling, and HID write operations. It abstracts the OS-specific HID API (IOKit on macOS, hidraw on Linux).
Layer 3: Core Engine
openlogi-core— the central runtime that connects HID++ events to application logic. Manages:- Binding resolution — maps button presses (e.g. "Back", "Forward", "GestureLeft") to actions from a 39-action catalog (BrowserBack, Undo, media keys, keyboard shortcuts)
- TOML config management — reads/writes the atomic config file at
$XDG_CONFIG_HOME/openlogi/config.toml - Device state tracking — online/offline, battery level, active DPI preset, SmartShift mode
- Action dispatch — forwards resolved actions to the OS EventTap for injection
Layer 4: Application Layer
Two binaries ship with OpenLogi:
openlogi-gui— the flagship desktop application, built with GPUI (the same UI framework used by Zed). Features:- Interactive mouse diagram with clickable hotspots
- 39 built-in actions plus recorded custom keyboard shortcuts
- DPI presets panel (Cycle and Set-preset actions via HID++
0x2201) - SmartShift wheel panel (mode toggle, sensitivity, permanent ratchet via HID++
0x2111) - Per-application profile overlays (auto-switch on app focus)
- Device carousel for switching between paired devices
- Settings window (launch-at-login, update check, menu-bar, language)
- Localized into 6 languages (en, ja, ru, zh-CN, zh-HK, zh-TW)
openlogi-cli— a headless command-line tool for automation and diagnostics:openlogi list— list paired devices (slot, codename, kind, online, battery)openlogi assets sync— pre-fetch device renders fromassets.openlogi.orgopenlogi diag features— dump every HID++ feature the active device supportsopenlogi diag dpi— read → write → read-back → restore DPI (smoke test)openlogi diag smartshift— toggle SmartShift and restore
Layer 5: Config Persistence
All settings live in a single, human-readable TOML file at ~/.config/openlogi/config.toml:
schema_version = 1
selected_device = "2b042"
[app_settings]
launch_at_login = true
[devices.2b042]
dpi_presets = [800, 1600, 3200]
[devices.2b042.button_bindings]
Back = "BrowserBack"
Forward = "BrowserForward"
# Per-app overlay: Back becomes Undo only while VS Code is frontmost.
[devices.2b042.per_app_bindings."com.microsoft.VSCode"]
Back = "Undo"
The config is read on startup and written atomically on every change (no partial writes). An optional openlogi-assets crate fetches device image renders from the project's CDN for the GUI's mouse diagram — this is the only network-dependent subsystem, and it's entirely optional.
Installation
macOS (via Homebrew)
# Quit Logi Options+ first if you have it running
brew install --cask openlogi
macOS (manual .dmg)
- Download the latest signed, notarized
.dmgfrom GitHub Releases - Open the
.dmgand dragOpenLogi.appto/Applications - Launch OpenLogi — it will request Accessibility permissions for the EventTap
Building from Source
See the DEVELOPMENT.md guide. You'll need Rust nightly and the GPUI dependencies:
git clone https://github.com/AprilNEA/OpenLogi.git
cd OpenLogi
cargo build --release -p openlogi-gui
Configuration & Usage
GUI Mode
Launch OpenLogi.app from your Applications folder. The main window shows:
- Device carousel at the top — switch between paired Logitech devices
- Mouse diagram — interactive hotspot overlay; click on any button to reassign it
- Action picker — browse the 39-action catalog or record a custom keyboard shortcut
- DPI presets — set up to 4 DPI levels (e.g. 800/1600/3200/6400) with Cycle or Set-preset actions
- SmartShift panel — toggle ratchet-to-free-spin mode, adjust SmartShift sensitivity, lock to permanent ratchet
- Per-app profiles — click "Add Profile" and select an application (VSCode, Figma, etc.) to override bindings when that app is frontmost
CLI Mode
For headless or scripted use:
# List all paired devices
openlogi list
# Run HID++ diagnostics
openlogi diag features
openlogi diag dpi
# Pre-fetch device images for the GUI
openlogi assets sync
Set OPENLOGI_LOG=debug for verbose tracing on either binary.
Key Differences from Logitech Options+
| Feature | Logitech Options+ | OpenLogi |
|---|---|---|
| Account required | Yes (Logitech account) | No |
| Telemetry | On by default | None — zero telemetry |
| Config format | Binary / cloud-synced | Plain TOML, local only |
| Binary size | ~200 MB | ~1.2 MB |
| Platform support | macOS, Windows | macOS (Linux/Win coming) |
| HID++ protocol | Proprietary driver | Pure Rust implementation |
| Licensing | Proprietary | MIT / Apache 2.0 |
| Headless / CLI | No | Yes — openlogi-cli |
Verification Checklist
After installing OpenLogi and pairing your mouse, walk through this checklist:
- Launch OpenLogi — device carousel shows your mouse
- Battery percentage displays correctly (check status bar)
- Remap a button (e.g. Back → Undo) — press the button and verify the action fires
- Set a DPI preset (e.g. 1600) — verify the mouse speed changes
- Toggle SmartShift — verify the wheel switches between ratchet and free-spin
- Create a per-app profile for VS Code — Back becomes Undo only in VS Code
- Run
openlogi listin terminal — shows your paired device with status - Run
openlogi diag features— dumps all HID++ features - Quit OpenLogi and relaunch — config changes persist
Resources
- GitHub Repository: https://github.com/AprilNEA/OpenLogi
- Official Docs: https://github.com/AprilNEA/OpenLogi/tree/master/docs
- Configuration Guide: CONFIGURATION.md
- Development Guide: DEVELOPMENT.md
- GPUI Framework: https://gpui.rs
- Release Downloads: https://github.com/AprilNEA/OpenLogi/releases
- Author: AprilNEA — Full Stack Engineer, Open Sorcerer