{"adoption": {"forks": 186, "observed_at": "2026-08-28T04:09:11.698825+00:00", "stars": 5173}, "canonical_url": "https://ross.abutalabs.com/products/mouser", "card": {"archived": false, "artifact_type": "application", "description": "A lightweight, open-source, fully local alternative to Logitech Options+ for remapping Logitech HID++ mice.", "domain": ["developer-tools", "desktop-applications", "cross-platform", "hardware"], "enriched": true, "function": ["gui", "workflow-automation", "configuration-management", "developer-tools"], "health_score": 98, "homepage": null, "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["TomBadash/Mouser"], "name": "TomBadash/Mouser", "platform": ["windows", "cross-platform", "python"], "pushed_at": "2026-08-13T10:09:08+00:00", "repo": "TomBadash/Mouser", "stars": 5173, "tags": ["logitech", "hidpp", "mouse-remapping", "mx-master", "input-devices", "logitech-options-alternative", "local-first", "no-telemetry", "linux", "macos", "desktop"], "topics": ["logitech", "mouse-remapping", "mx-master", "automation", "controler", "linux", "logi", "logitech-options", "macos", "mx-master-3s", "mx-master-4", "productivity", "python", "free", "linux-app", "macos-app", "mouse", "open-source"], "urls": [], "use_cases": ["remap Logitech MX Master mouse buttons on Linux", "open-source alternative to Logitech Options+ without an account", "customize mouse gestures and button actions on macOS", "configure MX Anywhere extra buttons on Windows", "remap mouse buttons locally with no cloud or telemetry", "get Logitech mouse thumb buttons working on Linux"], "what_it_is": "Mouser is a lightweight, fully local, open-source alternative to Logitech Options+ for remapping buttons on Logitech HID++ mice, with the best support for MX Master and MX Anywhere models. It ships as portable executables for Windows, macOS, and Linux with no telemetry, cloud, or Logitech account required.", "when_to_avoid": ["you need full Logitech Options+ features like Flow, smart scrolling tuning, or battery dashboards for unsupported devices", "your Logitech device isn't HID++ compatible or is outside the supported model families", "you need per-game or application-specific remapping beyond what Mouser's profiles offer"], "when_to_choose": ["you use an MX Master or MX Anywhere mouse and want button remapping without Logitech's cloud software", "you're on Linux, where Logitech Options+ isn't available", "you want a portable, no-install app with no telemetry or account requirements"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mouser", "repo": "TomBadash/Mouser", "role": "main", "score": 80}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:01:50.552963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8debe49fc9df190d1651e517b3cf28be7e25efb880a5266d3569cad0d7cc30dd", "fetched_at": "2026-08-28T04:09:11.698825+00:00", "kind": "readme", "missing": false, "url": "https://github.com/TomBadash/Mouser"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:01:50.552963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8debe49fc9df190d1651e517b3cf28be7e25efb880a5266d3569cad0d7cc30dd", "fetched_at": "2026-08-28T04:09:11.698825+00:00", "kind": "readme", "missing": false, "url": "https://github.com/TomBadash/Mouser"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:01:50.552963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8debe49fc9df190d1651e517b3cf28be7e25efb880a5266d3569cad0d7cc30dd", "fetched_at": "2026-08-28T04:09:11.698825+00:00", "kind": "readme", "missing": false, "url": "https://github.com/TomBadash/Mouser"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:01:50.552963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8debe49fc9df190d1651e517b3cf28be7e25efb880a5266d3569cad0d7cc30dd", "fetched_at": "2026-08-28T04:09:11.698825+00:00", "kind": "readme", "missing": false, "url": "https://github.com/TomBadash/Mouser"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:01:50.552963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8debe49fc9df190d1651e517b3cf28be7e25efb880a5266d3569cad0d7cc30dd", "fetched_at": "2026-08-28T04:09:11.698825+00:00", "kind": "readme", "missing": false, "url": "https://github.com/TomBadash/Mouser"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:01:50.552963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8debe49fc9df190d1651e517b3cf28be7e25efb880a5266d3569cad0d7cc30dd", "fetched_at": "2026-08-28T04:09:11.698825+00:00", "kind": "readme", "missing": false, "url": "https://github.com/TomBadash/Mouser"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:11.698825+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:01:50.552963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8debe49fc9df190d1651e517b3cf28be7e25efb880a5266d3569cad0d7cc30dd", "fetched_at": "2026-08-28T04:09:11.698825+00:00", "kind": "readme", "missing": false, "url": "https://github.com/TomBadash/Mouser"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:01:50.552963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8debe49fc9df190d1651e517b3cf28be7e25efb880a5266d3569cad0d7cc30dd", "fetched_at": "2026-08-28T04:09:11.698825+00:00", "kind": "readme", "missing": false, "url": "https://github.com/TomBadash/Mouser"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:01:50.552963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8debe49fc9df190d1651e517b3cf28be7e25efb880a5266d3569cad0d7cc30dd", "fetched_at": "2026-08-28T04:09:11.698825+00:00", "kind": "readme", "missing": false, "url": "https://github.com/TomBadash/Mouser"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:01:50.552963+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "8debe49fc9df190d1651e517b3cf28be7e25efb880a5266d3569cad0d7cc30dd", "fetched_at": "2026-08-28T04:09:11.698825+00:00", "kind": "readme", "missing": false, "url": "https://github.com/TomBadash/Mouser"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 97, "longevity": 13, "rhythm": 95}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 190, "days_push": 20, "days_rel": 36, "gap_med": 5.0, "n_releases_24m": 13}, "score": 80, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}