← Back to Home

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 .dmg directly
  • Quit Logi Options+ completely if you have it installed — the two applications cannot share HID++ access simultaneously
  • brew install --cask openlogi OR 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.

Architecture

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-hook crate) 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 (0x1806 feature), 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 from assets.openlogi.org
    • openlogi diag features — dump every HID++ feature the active device supports
    • openlogi 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)

  1. Download the latest signed, notarized .dmg from GitHub Releases
  2. Open the .dmg and drag OpenLogi.app to /Applications
  3. 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:

  1. Device carousel at the top — switch between paired Logitech devices
  2. Mouse diagram — interactive hotspot overlay; click on any button to reassign it
  3. Action picker — browse the 39-action catalog or record a custom keyboard shortcut
  4. DPI presets — set up to 4 DPI levels (e.g. 800/1600/3200/6400) with Cycle or Set-preset actions
  5. SmartShift panel — toggle ratchet-to-free-spin mode, adjust SmartShift sensitivity, lock to permanent ratchet
  6. 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 list in terminal — shows your paired device with status
  • Run openlogi diag features — dumps all HID++ features
  • Quit OpenLogi and relaunch — config changes persist

Resources

← Retour à l'Accueil

OpenLogi : Une Alternative Locale à Logitech Options+ Écrite en Rust

OpenLogi : Une Alternative Locale à Logitech Options+ Écrite en Rust 🦀

Qu'est-ce que c'est ? OpenLogi est une alternative native et locale à Logitech Options+, écrite entièrement en Rust. Elle communique avec les souris Logitech HID++ via un récepteur Logi Bolt, Bluetooth ou une connexion filaire directe — sans jamais toucher à un compte Logitech ni envoyer de télémétrie. Deux binaires sont livrés ensemble : une application de bureau GPUI complète avec un diagramme de souris interactif, un sélecteur d'actions, des préréglages DPI et des contrôles SmartShift ; et un CLI pour l'inventaire sans tête, les diagnostics et la synchronisation d'actifs.

Pourquoi c'est tendance : OpenLogi a atteint plus de 4 000 étoiles GitHub en deux semaines après sa première version. L'application Logitech Options+ est largement critiquée pour exiger un compte en ligne, envoyer de la télémétrie et être lourde — surtout sur macOS. OpenLogi résout ces trois problèmes avec un binaire léger de 1,2 Mo, un fichier de configuration TOML simple et zéro appel réseau au-delà des vérifications de mise à jour optionnelles et du téléchargement d'images d'appareils. Pour les développeurs et les utilisateurs soucieux de leur vie privée qui possèdent des souris Logitech MX Master ou Anywhere, OpenLogi est exactement l'outil qu'ils ne savaient pas qu'ils cherchaient.

Prérequis

Avant d'installer OpenLogi, assurez-vous d'avoir :

  • Une souris Logitech HID++ (MX Master 3/4, MX Anywhere 3/4, MX Ergo, ou similaire) avec un récepteur Logi Bolt ou le support Bluetooth
  • macOS (pris en charge aujourd'hui ; Linux et Windows sont sur la feuille de route)
  • Homebrew (optionnel, pour une installation facile) — ou téléchargez le .dmg directement
  • Quittez Logi Options+ complètement si vous l'avez installé — les deux applications ne peuvent pas partager l'accès HID++ simultanément
  • brew install --cask openlogi OU téléchargement depuis la dernière version GitHub

Architecture

OpenLogi est structuré comme un espace de travail Rust modulaire avec cinq crates principales, chacune responsable d'une couche distincte de la pile.

Architecture

Couche 1 : Matériel et Périphériques d'Entrée

OpenLogi prend en charge trois modes de connexion pour les souris Logitech HID++ :

  • Récepteur Logi Bolt — protocole 2,4 GHz propriétaire, faible latence, appairé via la RF du récepteur (OpenLogi gère la découverte et l'appairage nativement).
  • Bluetooth / Direct — profil HID BLE standard ; aucun récepteur requis, fonctionne avec toute souris Logitech compatible Bluetooth.
  • OS Event Tap — sur macOS, OpenLogi installe un EventTap (via le crate openlogi-hook) pour capturer les pressions de boutons, les gestes et les changements d'application au premier plan pour le remappage par profil.

Les trois chemins convergent vers la couche de protocole HID++.

Couche 2 : Protocole HID++

Deux crates gèrent la communication bas niveau :

  • openlogi-hidpp — analyseur de protocole HID++ pur. Implémente les versions 1.0 et 2.0 de la spécification HID++ Logitech, la découverte des fonctionnalités (jeu de fonctionnalités, nom, batterie, DPI, SmartShift, molette latérale), l'analyse des événements et la gestion des récepteurs (Bolt et Unifying). C'est une bibliothèque réutilisable sans dépendances externes.
  • openlogi-hid — couche de transport HID brute. Gère l'inventaire des appareils (liste des périphériques appairés via les récepteurs Bolt), l'appairage, la reprogrammation des boutons (fonctionnalité 0x1806), le basculement SmartShift et les opérations d'écriture HID. Elle abstrait l'API HID spécifique au système d'exploitation.

Couche 3 : Moteur Central

  • openlogi-core — l'exécution centrale qui connecte les événements HID++ à la logique applicative. Gère :
    • Résolution des liaisons — mappe les pressions de boutons (ex: "Back", "Forward", "GestureLeft") vers des actions d'un catalogue de 39 actions
    • Gestion de la configuration TOML — lit/écrit le fichier de configuration atomique à $XDG_CONFIG_HOME/openlogi/config.toml
    • Suivi de l'état des périphériques — connecté/déconnecté, niveau de batterie, préréglage DPI actif, mode SmartShift
    • Distribution des actions — transmet les actions résolues à l'EventTap OS pour injection

Couche 4 : Couche Applicative

Deux binaires sont livrés avec OpenLogi :

  • openlogi-gui — l'application de bureau phare, construite avec GPUI (le même framework UI que Zed). Fonctionnalités :
    • Diagramme de souris interactif avec zones cliquables
    • 39 actions intégrées plus des raccourcis clavier personnalisés enregistrés
    • Panneau de préréglages DPI (actions Cycle et Set-preset via HID++ 0x2201)
    • Panneau SmartShift (basculement de mode, sensibilité, cliquet permanent via HID++ 0x2111)
    • Profils par application (commutation automatique au focus)
    • Carrousel d'appareils pour basculer entre les souris appairées
    • Fenêtre de paramètres (lancement à la connexion, vérification des mises à jour, barre de menus, langue)
    • Localisé en 6 langues (en, ja, ru, zh-CN, zh-HK, zh-TW)
  • openlogi-cli — un outil en ligne de commande pour l'automatisation et les diagnostics :
    • openlogi list — liste les appareils appairés
    • openlogi assets sync — pré-télécharge les rendus d'appareils
    • openlogi diag features — affiche toutes les fonctionnalités HID++
    • openlogi diag dpi — test de DPI (lecture → écriture → relecture → restauration)
    • openlogi diag smartshift — basculement SmartShift et restauration

Couche 5 : Persistance de la Configuration

Tous les paramètres vivent dans un seul fichier TOML lisible à ~/.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"

# Profile par application : Back devient Undo uniquement dans VS Code.
[devices.2b042.per_app_bindings."com.microsoft.VSCode"]
Back = "Undo"

La configuration est lue au démarrage et écrite de manière atomique à chaque changement. Un crate optionnel openlogi-assets télécharge les rendus d'images d'appareils depuis le CDN du projet pour le diagramme de souris — c'est le seul sous-système dépendant du réseau, et il est entièrement optionnel.

Installation

macOS (via Homebrew)

# Quittez Logi Options+ d'abord si vous l'avez installé
brew install --cask openlogi

macOS (DMG manuel)

  1. Téléchargez le .dmg signé et notarié depuis GitHub Releases
  2. Ouvrez le .dmg et glissez OpenLogi.app dans /Applications
  3. Lancez OpenLogi — il demandera les permissions d'Accessibilité pour l'EventTap

Construction depuis les Sources

Consultez le guide DEVELOPMENT.md. Vous aurez besoin de Rust nightly et des dépendances GPUI :

git clone https://github.com/AprilNEA/OpenLogi.git
cd OpenLogi
cargo build --release -p openlogi-gui

Configuration et Utilisation

Mode GUI

Lancez OpenLogi.app depuis votre dossier Applications. La fenêtre principale affiche :

  1. Carrousel d'appareils en haut — basculez entre les souris Logitech appairées
  2. Diagramme de souris — superposition interactive de zones cliquables ; cliquez sur un bouton pour le réassigner
  3. Sélecteur d'actions — parcourez le catalogue de 39 actions ou enregistrez un raccourci clavier personnalisé
  4. Préréglages DPI — configurez jusqu'à 4 niveaux de DPI avec des actions Cycle ou Set-preset
  5. Panneau SmartShift — basculez entre les modes cliquet et rotation libre, ajustez la sensibilité
  6. Profils par application — cliquez sur "Ajouter un profil" et sélectionnez une application pour remplacer les liaisons quand elle est active

Mode CLI

Pour une utilisation sans tête ou scriptée :

# Lister tous les appareils appairés
openlogi list

# Lancer les diagnostics HID++
openlogi diag features
openlogi diag dpi

# Pré-télécharger les images d'appareils pour l'interface
openlogi assets sync

Définissez OPENLOGI_LOG=debug pour un traçage détaillé sur l'un ou l'autre binaire.

Différences Clés avec Logitech Options+

Fonctionnalité Logitech Options+ OpenLogi
Compte requis Oui (compte Logitech) Non
Télémétrie Activée par défaut Aucune — zéro télémétrie
Format de config Binaire / synchronisé TOML simple, local uniquement
Taille du binaire ~200 Mo ~1,2 Mo
Support plateforme macOS, Windows macOS (Linux/Win à venir)
Protocole HID++ Pilote propriétaire Implémentation Rust pure
Licence Propriétaire MIT / Apache 2.0
Sans tête / CLI Non Oui — openlogi-cli

Liste de Vérification

Après avoir installé OpenLogi et appairé votre souris, parcourez cette liste :

  • Lancez OpenLogi — le carrousel d'appareils montre votre souris
  • Le pourcentage de batterie s'affiche correctement
  • Remappez un bouton (ex: Back → Undo) — appuyez sur le bouton et vérifiez que l'action fonctionne
  • Définissez un préréglage DPI (ex: 1600) — vérifiez que la vitesse de la souris change
  • Basculez SmartShift — vérifiez que la molette passe entre cliquet et rotation libre
  • Créez un profil par application pour VS Code — Back devient Undo uniquement dans VS Code
  • Exécutez openlogi list dans le terminal — affiche votre appareil avec son statut
  • Exécutez openlogi diag features — affiche toutes les fonctionnalités HID++
  • Quittez OpenLogi et relancez — les changements de configuration persistent

Ressources