{"adoption": {"forks": 157, "observed_at": "2026-08-28T04:06:14.096028+00:00", "stars": 2108}, "canonical_url": "https://ross.abutalabs.com/products/sensible-side-buttons", "card": {"archived": false, "artifact_type": "application", "description": "A macOS menu bar app that enables system-wide navigation functionality for the side buttons on third-party mice.", "domain": ["desktop-applications", "developer-tools", "apple-ecosystem"], "enriched": true, "function": ["developer-tools", "gui"], "health_score": 20, "homepage": "http://sensible-side-buttons.archagon.net", "language": "C", "license": "GPL-2.0", "license_family": "copyleft", "maturity": "maintenance", "member_repos": ["archagon/sensible-side-buttons"], "name": "archagon/sensible-side-buttons", "platform": [], "pushed_at": "2024-02-17T11:53:20+00:00", "repo": "archagon/sensible-side-buttons", "stars": 2108, "tags": ["mouse-buttons", "menu-bar-app", "navigation", "system-tweak", "third-party-mice", "macos"], "topics": [], "urls": [], "use_cases": ["make mouse side buttons navigate back and forward on macOS", "fix useless M4/M5 buttons on a third-party mouse", "get Windows-style side button behavior on a Mac", "simulate three-finger swipes with mouse side buttons", "use Logitech MX Master-style navigation without vendor software", "avoid the menu bar blink and alert sound from rebinding buttons to Cmd+[ and Cmd+]"], "what_it_is": "A macOS menu bar application that makes the side (M4/M5) buttons on third-party mice work as back/forward navigation by simulating three-finger swipes system-wide. It is written in C and distributed under the GPL-2.0 license.", "when_to_avoid": ["you use a first-party Apple mouse or trackpad", "you need full mouse remapping or button customization beyond back/forward navigation", "you are on Windows or Linux"], "when_to_choose": ["you use a third-party mouse on macOS and want working back/forward side buttons", "you want a lightweight, free alternative to Logitech Options or USB Overdrive for navigation buttons", "you want the fix to apply system-wide, including apps that ignore Cmd+[ / Cmd+] rebinding"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/sensible-side-buttons", "repo": "archagon/sensible-side-buttons", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T02:53:53.022646+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f3f97e4d2050fe5f25af616c3be7c322e501ee6b50a3c422da83e7a2d5a81e3a", "fetched_at": "2026-08-28T04:06:14.096028+00:00", "kind": "readme", "missing": false, "url": "https://github.com/archagon/sensible-side-buttons"}, {"content_hash": "273590e7068c6b66440a2b7b987bc8eac4bed6b3271e9b8c5652be998fb37fc7", "fetched_at": "2026-08-29T10:33:58.301785+00:00", "kind": "homepage", "missing": false, "url": "http://sensible-side-buttons.archagon.net"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T02:53:53.022646+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f3f97e4d2050fe5f25af616c3be7c322e501ee6b50a3c422da83e7a2d5a81e3a", "fetched_at": "2026-08-28T04:06:14.096028+00:00", "kind": "readme", "missing": false, "url": "https://github.com/archagon/sensible-side-buttons"}, {"content_hash": "273590e7068c6b66440a2b7b987bc8eac4bed6b3271e9b8c5652be998fb37fc7", "fetched_at": "2026-08-29T10:33:58.301785+00:00", "kind": "homepage", "missing": false, "url": "http://sensible-side-buttons.archagon.net"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T02:53:53.022646+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f3f97e4d2050fe5f25af616c3be7c322e501ee6b50a3c422da83e7a2d5a81e3a", "fetched_at": "2026-08-28T04:06:14.096028+00:00", "kind": "readme", "missing": false, "url": "https://github.com/archagon/sensible-side-buttons"}, {"content_hash": "273590e7068c6b66440a2b7b987bc8eac4bed6b3271e9b8c5652be998fb37fc7", "fetched_at": "2026-08-29T10:33:58.301785+00:00", "kind": "homepage", "missing": false, "url": "http://sensible-side-buttons.archagon.net"}], "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:06:14.096028+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T02:53:53.022646+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f3f97e4d2050fe5f25af616c3be7c322e501ee6b50a3c422da83e7a2d5a81e3a", "fetched_at": "2026-08-28T04:06:14.096028+00:00", "kind": "readme", "missing": false, "url": "https://github.com/archagon/sensible-side-buttons"}, {"content_hash": "273590e7068c6b66440a2b7b987bc8eac4bed6b3271e9b8c5652be998fb37fc7", "fetched_at": "2026-08-29T10:33:58.301785+00:00", "kind": "homepage", "missing": false, "url": "http://sensible-side-buttons.archagon.net"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T02:53:53.022646+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f3f97e4d2050fe5f25af616c3be7c322e501ee6b50a3c422da83e7a2d5a81e3a", "fetched_at": "2026-08-28T04:06:14.096028+00:00", "kind": "readme", "missing": false, "url": "https://github.com/archagon/sensible-side-buttons"}, {"content_hash": "273590e7068c6b66440a2b7b987bc8eac4bed6b3271e9b8c5652be998fb37fc7", "fetched_at": "2026-08-29T10:33:58.301785+00:00", "kind": "homepage", "missing": false, "url": "http://sensible-side-buttons.archagon.net"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T02:53:53.022646+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f3f97e4d2050fe5f25af616c3be7c322e501ee6b50a3c422da83e7a2d5a81e3a", "fetched_at": "2026-08-28T04:06:14.096028+00:00", "kind": "readme", "missing": false, "url": "https://github.com/archagon/sensible-side-buttons"}, {"content_hash": "273590e7068c6b66440a2b7b987bc8eac4bed6b3271e9b8c5652be998fb37fc7", "fetched_at": "2026-08-29T10:33:58.301785+00:00", "kind": "homepage", "missing": false, "url": "http://sensible-side-buttons.archagon.net"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:06:14.096028+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T02:53:53.022646+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f3f97e4d2050fe5f25af616c3be7c322e501ee6b50a3c422da83e7a2d5a81e3a", "fetched_at": "2026-08-28T04:06:14.096028+00:00", "kind": "readme", "missing": false, "url": "https://github.com/archagon/sensible-side-buttons"}, {"content_hash": "273590e7068c6b66440a2b7b987bc8eac4bed6b3271e9b8c5652be998fb37fc7", "fetched_at": "2026-08-29T10:33:58.301785+00:00", "kind": "homepage", "missing": false, "url": "http://sensible-side-buttons.archagon.net"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T02:53:53.022646+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f3f97e4d2050fe5f25af616c3be7c322e501ee6b50a3c422da83e7a2d5a81e3a", "fetched_at": "2026-08-28T04:06:14.096028+00:00", "kind": "readme", "missing": false, "url": "https://github.com/archagon/sensible-side-buttons"}, {"content_hash": "273590e7068c6b66440a2b7b987bc8eac4bed6b3271e9b8c5652be998fb37fc7", "fetched_at": "2026-08-29T10:33:58.301785+00:00", "kind": "homepage", "missing": false, "url": "http://sensible-side-buttons.archagon.net"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T02:53:53.022646+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f3f97e4d2050fe5f25af616c3be7c322e501ee6b50a3c422da83e7a2d5a81e3a", "fetched_at": "2026-08-28T04:06:14.096028+00:00", "kind": "readme", "missing": false, "url": "https://github.com/archagon/sensible-side-buttons"}, {"content_hash": "273590e7068c6b66440a2b7b987bc8eac4bed6b3271e9b8c5652be998fb37fc7", "fetched_at": "2026-08-29T10:33:58.301785+00:00", "kind": "homepage", "missing": false, "url": "http://sensible-side-buttons.archagon.net"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T02:53:53.022646+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f3f97e4d2050fe5f25af616c3be7c322e501ee6b50a3c422da83e7a2d5a81e3a", "fetched_at": "2026-08-28T04:06:14.096028+00:00", "kind": "readme", "missing": false, "url": "https://github.com/archagon/sensible-side-buttons"}, {"content_hash": "273590e7068c6b66440a2b7b987bc8eac4bed6b3271e9b8c5652be998fb37fc7", "fetched_at": "2026-08-29T10:33:58.301785+00:00", "kind": "homepage", "missing": false, "url": "http://sensible-side-buttons.archagon.net"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "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": 3375, "days_push": 928, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}