[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74055":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":45,"readmeContent":46,"aiSummary":47,"trendingCount":16,"starSnapshotCount":16,"syncStatus":48,"lastSyncTime":49,"discoverSource":50},74055,"Mouser","TomBadash\u002FMouser","TomBadash","A lightweight, open-source, fully local alternative to Logitech Options+ for remapping Logitech HID++ mice.","",null,"Python",4614,148,9,62,0,60,355,723,180,28.52,"MIT License",false,"master",true,[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],"automation","controler","free","linux","linux-app","logi","logitech","logitech-options","macos","macos-app","mouse","mouse-remapping","mx-master","mx-master-3s","mx-master-4","open-source","productivity","python","2026-06-12 02:03:21","# Mouser — Logitech Mouse Remapper\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"images\u002Flogo_icon.png\" width=\"128\" alt=\"Mouser logo\" \u002F>\n\u003C\u002Fp>\n\nEnglish | [中文文档](README_CN.md)\n\nA lightweight, open-source, fully local alternative to **Logitech Options+** for\nremapping Logitech HID++ mice. The current best experience is on the **MX Master**\nand **MX Anywhere** families, with detection and fallback UI support for additional\nLogitech models.\n\n**No telemetry. No cloud. No Logitech account required.**\n\n---\n\n## Contents\n\n- [Download & Run](#download--run)\n- [Screenshots](#screenshots)\n- [Features](#features)\n- [Device coverage](#device-coverage)\n- [Default mappings](#default-mappings)\n- [Available actions](#available-actions)\n- [Build from source](#build-from-source)\n- [Limitations](#limitations)\n- [Roadmap](#roadmap)\n- [Contributing](#contributing)\n- [Acknowledgments](#acknowledgments)\n- [License](#license)\n\n---\n\n## Download & Run\n\n> **No install required.** Just download, extract, and double-click.\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FTomBadash\u002FMouser\u002Freleases\u002Flatest\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdownloads\u002FTomBadash\u002FMouser\u002Flatest\u002FMouser-Windows.zip?style=for-the-badge&color=00d4aa&logo=windows&label=Windows&displayAssetName=false\" alt=\"Windows Downloads\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FTomBadash\u002FMouser\u002Freleases\u002Flatest\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdownloads\u002FTomBadash\u002FMouser\u002Flatest\u002FMouser-macOS.zip?style=for-the-badge&color=00d4aa&logo=apple&label=macOS%20Apple%20Silicon&displayAssetName=false\" alt=\"macOS Apple Silicon Downloads\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FTomBadash\u002FMouser\u002Freleases\u002Flatest\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdownloads\u002FTomBadash\u002FMouser\u002Flatest\u002FMouser-macOS-intel.zip?style=for-the-badge&color=00d4aa&logo=apple&label=macOS%20Intel&displayAssetName=false\" alt=\"macOS Intel Downloads\" \u002F>\n  \u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FTomBadash\u002FMouser\u002Freleases\u002Flatest\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdownloads\u002FTomBadash\u002FMouser\u002Flatest\u002FMouser-Linux.zip?style=for-the-badge&color=00d4aa&logo=linux&label=Linux&displayAssetName=false\" alt=\"Linux Downloads\" \u002F>\n  \u003C\u002Fa>\n  \u003Cbr \u002F>\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fdownloads\u002FTomBadash\u002FMouser\u002Ftotal?style=for-the-badge&color=00d4aa&label=Total%20Downloads%20(all%20versions)\" alt=\"Downloads\" \u002F>\n\u003C\u002Fp>\n\n1. Open the [**latest release page**](https:\u002F\u002Fgithub.com\u002FTomBadash\u002FMouser\u002Freleases\u002Flatest).\n2. Download the zip for your platform:\n   - **Windows** — `Mouser-Windows.zip`\n   - **macOS (Apple Silicon)** — `Mouser-macOS.zip`\n   - **macOS (Intel)** — `Mouser-macOS-intel.zip`\n   - **Linux** — `Mouser-Linux.zip`\n3. Extract it anywhere (Desktop, Documents, `\u002FApplications`, wherever).\n4. Run the executable: `Mouser.exe`, `Mouser.app`, or `.\u002FMouser`.\n\nThat's it. The app opens, drops a tray \u002F menu-bar icon, and starts remapping immediately.\n\n### What to expect on first launch\n\n- The settings window opens to the device-aware **Mouse & Profiles** page.\n- A tray icon appears (next to the clock on Windows \u002F Linux, in the menu bar on macOS).\n- Closing the window keeps Mouser running in the tray. Right-click the tray icon → **Quit Mouser** to fully exit.\n- Mouser remembers language and startup behavior between runs.\n\n### First-time notes\n\n- **Windows SmartScreen** may warn the first time — click **More info** → **Run anyway**.\n- **Logitech Options+ must not be running.** Both apps fight over HID++ access; quit Options+ before launching Mouser.\n- **macOS** asks for **Accessibility** permission so the event tap can intercept mouse events. See [readme_mac_osx.md](readme_mac_osx.md) for the full setup walkthrough.\n- **Linux** needs read access to `\u002Fdev\u002Fhidraw*`, `\u002Fdev\u002Finput\u002Fevent*`, and write access to `\u002Fdev\u002Fuinput`. Run the bundled helper once after extracting:\n  ```bash\n  cd \u002Fpath\u002Fto\u002Fextracted\u002FMouser\n  .\u002Finstall-linux-permissions.sh\n  ```\n  Reconnect the mouse, then relaunch.\n- Config is saved automatically to:\n  - `%APPDATA%\\Mouser\\config.json` (Windows)\n  - `~\u002FLibrary\u002FApplication Support\u002FMouser\u002Fconfig.json` (macOS)\n  - `~\u002F.config\u002FMouser\u002Fconfig.json` (Linux)\n- Logs rotate automatically (5 × 5 MB) under `%APPDATA%\\Mouser\\logs`, `~\u002FLibrary\u002FLogs\u002FMouser`, or `$XDG_STATE_HOME\u002FMouser\u002Flogs`.\n\n---\n\n## Screenshots\n\n| Mouse & Profiles | Point & Scroll |\n|---|---|\n| \u003Cimg src=\"images\u002FScreenshot_mouse.png\" alt=\"Mouser — Mouse & Profiles page\" \u002F> | \u003Cimg src=\"images\u002FScreenshot_settings.png\" alt=\"Mouser — Point & Scroll settings\" \u002F> |\n\n---\n\n## Features\n\n### Button remapping\n\n- **Remap any programmable button** — middle click, gesture button, back, forward, mode shift, DPI switch (MX Vertical), and horizontal scroll.\n- **Mouse-to-mouse remap** — bind any button to act as left, right, middle, back, or forward click.\n- **Per-application profiles** — Mouser auto-switches mappings when the foreground app changes (e.g. Chrome vs. VS Code).\n- **Custom keyboard shortcuts** — record any key combination (e.g. `Ctrl+Shift+P`) directly in the UI.\n- **40+ built-in actions** — navigation, browser, editing, media, scroll-mode, and DPI shortcuts that adapt per platform.\n\n### Device control\n\n- **DPI \u002F pointer speed** — slider from 200 to the device max (8000 on MX Master) with quick presets, plus a `Cycle DPI Presets` action you can map to a button.\n- **Smart Shift** — toggle Logitech's ratchet ↔ free-spin scroll mode (HID++ `0x2111`), with a sensitivity threshold and a mappable `Toggle SmartShift` action.\n- **Switch scroll mode** — bind a button to flip ratchet \u002F free-spin without opening the UI; defaults to mode-shift.\n- **Scroll direction inversion** — independent toggles for vertical and horizontal scroll.\n- **Gesture button + swipe actions** — tap for one action, swipe up\u002Fdown\u002Fleft\u002Fright for four others.\n\n### Cross-platform\n\n- **Windows, macOS, and Linux** — native hooks per platform (`WH_MOUSE_LL`, `CGEventTap`, `evdev` + `uinput`).\n- **Native Intel and Apple Silicon macOS builds** — separate `Mouser-macOS-intel.zip` and `Mouser-macOS.zip` artifacts; the menu-bar app runs as `LSUIElement` (no Dock icon).\n- **Resizable UI** — main window starts at 1060 × 700 with a 920 × 620 minimum; the mouse diagram and controls reflow as you resize.\n- **Start at login** — Windows registry key, macOS LaunchAgent, and Linux XDG autostart, with an independent **Start minimized** option that boots straight into the tray. Linux autostart intentionally waits about 15 seconds after login so Bluetooth \u002F HID devices are usually ready before Mouser restores device settings.\n- **Single-instance guard** — launching a second copy brings the existing window to the front instead of starting a duplicate.\n\n### Smart connectivity\n\n- **Bluetooth and Logi Bolt** — both transports are supported on all three platforms; the UI labels the live connection (`Logi Bolt` only when the receiver PID is positively identified).\n- **Auto-reconnection** — Mouser watches for power-off \u002F on cycles and rebinds HID++ + the OS mouse hook without a restart; SmartShift settings are replayed on every reconnect (including wake-from-sleep).\n- **Live connection status** — real-time Connected \u002F Not Connected badge, model name, and active layout in the UI.\n- **Device-aware UI** — interactive MX Master and MX Anywhere diagrams with clickable hotspots; generic fallback card for other models, with an experimental layout-override picker.\n\n### Multi-language UI\n\n- **English \u002F Simplified Chinese \u002F Traditional Chinese** — switch instantly, no restart required.\n- Language preference is saved to `config.json` and restored on next launch.\n- Covers nav, mouse page, settings page, dialogs, system tray \u002F menu bar, and permission prompts.\n\n### Privacy first\n\n- **Fully local** — config is a plain JSON file, all processing happens on your machine.\n- **System tray \u002F menu bar** — runs quietly in the background.\n- **Zero telemetry, zero cloud, zero account required.**\n\n---\n\n## Device coverage\n\n| Family \u002F model | Detection + HID++ probing | UI support |\n|---|---|---|\n| MX Master 4 \u002F 3S \u002F 3 \u002F 2S \u002F MX Master | Yes | Dedicated interactive per-model layouts |\n| MX Anywhere 3S \u002F 3 \u002F 2S | Yes | Dedicated interactive per-model layouts |\n| MX Vertical | Yes | Generic fallback card (with DPI switch button support) |\n| Unknown Logitech HID++ mice | Best effort by PID\u002Fname | Generic fallback card |\n\n> MX Master and MX Anywhere devices have dedicated visual overlays. Other devices are still detected, show their model name, and can opt into an experimental layout override — button positions just may not line up until a real overlay lands. See [CONTRIBUTING_DEVICES.md](CONTRIBUTING_DEVICES.md) to add yours.\n\n---\n\n## Default mappings\n\n| Button | Default action |\n|---|---|\n| Back button (XButton1) | Alt + Tab (Switch Windows) |\n| Forward button (XButton2) | Alt + Tab (Switch Windows) |\n| Middle click | Pass-through |\n| Gesture button | Pass-through |\n| Gesture swipes (up \u002F down \u002F left \u002F right) | Pass-through |\n| Mode shift (scroll click) | Switch Scroll Mode (Ratchet \u002F Free Spin) |\n| Horizontal scroll left | Browser Back |\n| Horizontal scroll right | Browser Forward |\n| DPI switch (MX Vertical) | Pass-through |\n\n---\n\n## Available actions\n\nAction labels adapt per platform. Windows exposes `Win+D` and `Task View`; macOS exposes `Mission Control`, `Show Desktop`, `App Exposé`, and `Launchpad`; Linux falls back to compositor-native equivalents.\n\n| Category | Actions |\n|---|---|\n| **Navigation** | Alt+Tab, Alt+Shift+Tab, Show Desktop, Previous Desktop, Next Desktop, Task View (Windows), Mission Control \u002F App Exposé \u002F Launchpad (macOS), Page Up \u002F Page Down \u002F Home \u002F End |\n| **Browser** | Back, Forward, Close Tab (Ctrl+W), New Tab (Ctrl+T), Next Tab (Ctrl+Tab), Previous Tab (Ctrl+Shift+Tab) |\n| **Editing** | Copy, Paste, Cut, Undo, Select All, Save, Find |\n| **Media** | Volume Up, Volume Down, Volume Mute, Play \u002F Pause, Next Track, Previous Track |\n| **Scroll** | Switch Scroll Mode (Ratchet \u002F Free Spin), Toggle SmartShift, Cycle DPI Presets |\n| **Mouse** | Left Click, Right Click, Middle Click, Back (Mouse Button 4), Forward (Mouse Button 5) |\n| **Custom** | User-defined keyboard shortcuts (any key combination, captured in the UI) |\n| **Other** | Do Nothing (pass-through) |\n\n---\n\n## Build from source\n\nYou only need this if you want to hack on Mouser or run a development build. Most users should grab a release zip — see [Download & Run](#download--run).\n\n### Common prerequisites\n\n- **Windows 10\u002F11**, **macOS 12+ (Monterey)**, or **Linux** (X11; KDE Wayland for app detection)\n- **Python 3.10+** (tested up to 3.14)\n- A supported Logitech HID++ mouse paired via Bluetooth or a USB receiver\n- **Logitech Options+ must NOT be running** — it conflicts with HID++ access\n- `git` and a working build toolchain\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FTomBadash\u002FMouser.git\ncd Mouser\npython -m venv .venv\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Windows\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```powershell\n.\\.venv\\Scripts\\activate\npip install -r requirements.txt\n\n# Run from source\npython main_qml.py\n\n# Or start straight into the tray\npython main_qml.py --start-hidden\n\n# Build a portable zip\nbuild.bat                # standard\nbuild.bat --clean        # force clean rebuild\n```\n\n`build.bat` installs requirements, verifies that `hidapi` is importable, and packages with PyInstaller. The output lives in `dist\\Mouser\\` — zip the folder and ship it.\n\nTo launch a source checkout without a console window, create a shortcut that uses `pythonw.exe`; see [DEVELOPMENT.md](DEVELOPMENT.md#desktop-shortcut-windows).\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>macOS\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```bash\nsource .venv\u002Fbin\u002Factivate\npip install -r requirements.txt\n\n# Run from source\npython main_qml.py\npython main_qml.py --start-hidden     # launch directly to menu bar\n\n# Build the native menu-bar bundle\npip install pyinstaller\n.\u002Fbuild_macos_app.sh\n```\n\nThe output is `dist\u002FMouser.app`. The script reuses `images\u002FAppIcon.icns` when present, otherwise generates one from `images\u002Flogo_icon.png`. Signing depends on whether `MOUSER_SIGN_IDENTITY` is set in the environment:\n\n- **Unset (default)**: ad-hoc signs with `codesign --sign -`. Convenient for one-off builds, but the bundle's code identity can change on rebuild, so macOS may ask for Accessibility permission again.\n- **Set to a codesigning identity** (`security find-identity -v -p codesigning` to list them — SHA-1 form preferred): signs every nested `.dylib` \u002F `.so` \u002F `.framework` with hardened runtime options, then signs the outer app with the hardened-runtime exceptions at `build_resources\u002FMouser.entitlements`. This is a local developer signing path for repeated builds; stable macOS permission behavior depends on keeping the same source, resolved Python interpreter, dependency versions, architecture, signing identity, entitlements, and timestamp policy. A failing `codesign --verify --deep --strict` check aborts the build.\n\n```sh\nMOUSER_SIGN_IDENTITY=\"ABCD1234...\" .\u002Fbuild_macos_app.sh   # local signed build\n```\n\n- This is **not** a notarized release-signing flow. Public macOS release zips remain ad-hoc signed until a separate Developer ID signing, secure timestamp, notarization, stapling, and Gatekeeper validation workflow exists.\n- Build on the architecture you want to ship: an `arm64` Python produces an Apple Silicon bundle, an `x86_64` Python produces an Intel bundle. Set `PYINSTALLER_TARGET_ARCH=arm64|x86_64|universal2` to override.\n- Release CI publishes both `Mouser-macOS.zip` (Apple Silicon) and `Mouser-macOS-intel.zip` (Intel) automatically on tag pushes.\n- Accessibility permission is required. See [readme_mac_osx.md](readme_mac_osx.md) for the full grant flow and platform-specific notes.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Linux\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```bash\nsource .venv\u002Fbin\u002Factivate\npip install -r requirements.txt\n\n# Run from source\npython main_qml.py\n\n# Install device permissions (only needed once, then reconnect the mouse)\n.\u002Fpackaging\u002Flinux\u002Finstall-linux-permissions.sh\n\n# Build a portable bundle\nsudo apt-get install libhidapi-dev\npip install pyinstaller\npyinstaller Mouser-linux.spec --noconfirm\n```\n\nThe helper installs `69-mouser-logitech.rules`, reloads `udev`, and tries to `modprobe uinput`. After a successful run, reconnect the mouse, fully quit Mouser, and launch normally — no `sudo`. On systems without logind \u002F `uaccess`, adding the user to the `input` group is the distro-specific fallback.\n\nThe first normal Linux launch creates or refreshes:\n\n```text\n~\u002F.local\u002Fshare\u002Fapplications\u002Fio.github.tombadash.mouser.desktop\n```\n\nThe generated launcher uses absolute paths for the current portable app or source checkout. If you move the checkout, launch Mouser once from the new path to refresh the app-menu entry. Enabling **Start at login** also manages:\n\n```text\n~\u002F.config\u002Fautostart\u002Fio.github.tombadash.mouser.desktop\n```\n\nThat Linux autostart entry includes a short GNOME startup delay so Mouser does not race Bluetooth \u002F HID initialization immediately after login.\n\n`xdotool` enables per-app profile switching on X11; `kdotool` adds KDE Wayland support. Other Wayland compositors fall back to the default profile.\n\n\u003C\u002Fdetails>\n\n> **Automated releases:** pushing a `v*` tag triggers [`.github\u002Fworkflows\u002Frelease.yml`](.github\u002Fworkflows\u002Frelease.yml), which builds Windows, macOS (Apple Silicon + Intel), and Linux artifacts in CI and uploads them to the GitHub Release.\n\nFor project layout, the architecture diagram, the HID++ gesture detector, the Engine + reconnection flow, debug CLI flags (`--hid-backend=iokit|hidapi|auto`), and how to run the test suite, see [DEVELOPMENT.md](DEVELOPMENT.md). To add a new device, see [CONTRIBUTING_DEVICES.md](CONTRIBUTING_DEVICES.md).\n\n---\n\n## Limitations\n\n- **Per-device mappings aren't fully separated yet** — layout overrides are stored per detected device, but profile mappings are still global.\n- **Conflicts with Logitech Options+** — both apps fight over HID++ access. Quit Options+ before running Mouser.\n- **Scroll inversion** uses coalesced post-injection on Windows to avoid LL-hook deadlocks; it's stable in mainstream apps but may misbehave in some games or low-level drivers.\n- **Admin not required** — but injected keystrokes may not reach elevated windows or some games. Run Mouser elevated if you need that path.\n- **Linux app detection is partial** — X11 works via `xdotool`, KDE Wayland works via `kdotool`, GNOME \u002F other Wayland compositors still fall back to the default profile.\n- **Linux device permissions** — Mouser needs access to `\u002Fdev\u002Fhidraw*`, `\u002Fdev\u002Finput\u002Fevent*`, and `\u002Fdev\u002Fuinput`. Use [`install-linux-permissions.sh`](packaging\u002Flinux\u002Finstall-linux-permissions.sh) once instead of running as root.\n\n---\n\n## Roadmap\n\n- [ ] **Dedicated overlays for more devices** — real hotspot maps and artwork for MX Vertical and other Logitech families\n- [ ] **True per-device config** — separate mappings cleanly when multiple Logitech mice are used on the same machine\n- [ ] **Dynamic button inventory** — build button lists from discovered `REPROG_CONTROLS_V4` controls instead of the current fixed sets\n- [ ] **Improved scroll inversion** — explore driver-level or interception-driver approaches\n- [ ] **Gesture swipe tuning** — improve swipe reliability and defaults across more devices\n- [ ] **Per-app profile auto-creation** — detect new apps and prompt to create a profile\n- [ ] **Export \u002F import config** — share configurations between machines\n- [ ] **Tray icon badge** — show the active profile name in the tray tooltip\n- [ ] **Broader Wayland support** — extend app detection beyond X11 \u002F KDE and validate across more distros\n- [ ] **Plugin system** — allow third-party action providers\n\n---\n\n## Contributing\n\nContributions are welcome.\n\n- **Code, fixes, and features:** fork → branch → PR. The dev setup, architecture overview, debug flags, and test instructions live in [DEVELOPMENT.md](DEVELOPMENT.md).\n- **Adding a new Logitech mouse:** follow the discovery-dump walkthrough in [CONTRIBUTING_DEVICES.md](CONTRIBUTING_DEVICES.md). Even a partial dump helps.\n- **Help wanted:**\n  - Testing with other Logitech HID++ devices\n  - Scroll inversion improvements\n  - Broader Linux \u002F Wayland validation\n  - UI\u002FUX polish, accessibility, and translations\n\n## Support the project\n\nIf Mouser saves you from installing Logitech Options+, consider supporting development:\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fsponsors\u002FTomBadash\">\n    \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSponsor-❤️-ea4aaa?style=for-the-badge&logo=githubsponsors\" alt=\"Sponsor\" \u002F>\n  \u003C\u002Fa>\n\u003C\u002Fp>\n\nEvery bit helps keep the project going — thank you.\n\n---\n\n## Acknowledgments\n\n- **[@andrew-sz](https:\u002F\u002Fgithub.com\u002Fandrew-sz)** — macOS port: CGEventTap mouse hooking, Quartz key simulation, NSWorkspace app detection, and NSEvent media key support.\n- **[@thisislvca](https:\u002F\u002Fgithub.com\u002Fthisislvca)** — significant expansion of the project including macOS compatibility improvements, multi-device support, new UI features, and active triage of open issues.\n- **[@awkure](https:\u002F\u002Fgithub.com\u002Fawkure)** — cross-platform login startup (Windows registry + macOS LaunchAgent), single-instance guard, start-minimized option, and MX Master 4 detection.\n- **[@hieshima](https:\u002F\u002Fgithub.com\u002Fhieshima)** — Linux support (evdev + HID++ + uinput), mode-shift mapping, Smart Shift toggle, custom keyboard shortcut support, Linux connection-state stabilization, and macOS CGEventTap reliability fixes (auto re-enable on timeout, trackpad scroll filtering).\n- **[@pavelzaichyk](https:\u002F\u002Fgithub.com\u002Fpavelzaichyk)** — Next Tab \u002F Previous Tab browser actions, persistent rotating log file storage, Smart Shift enhanced support (HID++ `0x2111`) with sensitivity control and scroll-mode sync.\n- **[@nellwhoami](https:\u002F\u002Fgithub.com\u002Fnellwhoami)** — Multi-language UI system (English, Simplified Chinese, Traditional Chinese) and Page Up \u002F Page Down \u002F Home \u002F End navigation actions.\n- **[@guilamu](https:\u002F\u002Fgithub.com\u002Fguilamu)** — Mouse-to-mouse button remapping (left, right, middle, back, forward click) and HID++ stability fixes (stuck-button auto-release, auto-reconnect after consecutive timeouts, async dispatch queue for the Windows hook).\n- **[@vcanuel](https:\u002F\u002Fgithub.com\u002Fvcanuel)** — Logi Bolt receiver support on macOS via the `hidapi` fallback path.\n- **[@farfromrefug](https:\u002F\u002Fgithub.com\u002Ffarfromrefug)** — smaller macOS bundle (Qt Quick Controls trim, QtDBus, Qt asset filtering).\n- **[@MysticalMike60t](https:\u002F\u002Fgithub.com\u002FMysticalMike60t)** — README structure ideas (collapsible per-OS build sections).\n\n---\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n**Mouser** is not affiliated with or endorsed by Logitech. \"Logitech\", \"MX Master\", and \"Options+\" are trademarks of Logitech International S.A.\n","Mouser 是一个轻量级、开源的本地替代方案，用于重新映射罗技 HID++ 鼠标的功能。它使用 Python 编写，支持 Windows、macOS 和 Linux 平台，无需安装，下载解压后即可运行。Mouser 提供了丰富的自定义选项，允许用户根据个人需求调整鼠标按键功能，尤其适用于 MX Master 系列和 MX Anywhere 系列鼠标。该工具完全本地化运行，不收集任何遥测数据，也不需要连接云端或创建罗技账户，特别适合注重隐私保护和工作效率提升的用户。",2,"2026-06-11 03:48:36","high_star"]