{"adoption": {"forks": 96, "observed_at": "2026-08-28T04:08:38.787228+00:00", "stars": 4188}, "canonical_url": "https://ross.abutalabs.com/products/unnaturalscrollwheels", "card": {"archived": false, "artifact_type": "application", "description": "Invert scroll direction for physical scroll wheels while maintaining \"Natural\" scrolling for trackpads on MacOS", "domain": ["operating-systems", "developer-tools", "desktop-applications"], "enriched": true, "function": ["developer-tools"], "health_score": 97, "homepage": null, "language": "Swift", "license": "GPL-3.0", "license_family": "copyleft", "maturity": "active", "member_repos": ["ther0n/UnnaturalScrollWheels"], "name": "ther0n/UnnaturalScrollWheels", "platform": [], "pushed_at": "2026-08-03T17:14:35+00:00", "repo": "ther0n/UnnaturalScrollWheels", "stars": 4188, "tags": ["scroll-direction", "mouse", "trackpad", "accessibility-permissions", "menu-bar-app", "macos"], "topics": [], "urls": [], "use_cases": ["invert mouse wheel scroll direction on mac without affecting trackpad", "use natural scrolling for trackpad but unnatural for mouse wheel", "separate mouse and trackpad scroll settings on macOS", "disable scroll acceleration for a physical mouse wheel", "fix scroll direction after macOS Catalina broke other solutions"], "what_it_is": "A macOS menu bar application that inverts the scroll direction for physical mouse scroll wheels while keeping 'Natural' scrolling for trackpads. It works around macOS's limitation where mouse and trackpad scroll settings are linked, by intercepting and modifying scroll events via accessibility permissions.", "when_to_avoid": ["you are on Windows or Linux", "you only use a trackpad and are happy with system settings", "you cannot grant accessibility permissions to apps"], "when_to_choose": ["you use both a mouse with a scroll wheel and a trackpad on macOS and want different scroll directions", "you want a simple menu bar app installable via Homebrew", "you need to disable scroll wheel acceleration on macOS"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/unnaturalscrollwheels", "repo": "ther0n/UnnaturalScrollWheels", "role": "main", "score": 88}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:22:37.027093+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97f3fffda2240303d93c4d1fb4e7870cfb491b4a33eae6f06cfb825ae281ad9c", "fetched_at": "2026-08-28T04:08:38.787228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ther0n/UnnaturalScrollWheels"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:22:37.027093+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97f3fffda2240303d93c4d1fb4e7870cfb491b4a33eae6f06cfb825ae281ad9c", "fetched_at": "2026-08-28T04:08:38.787228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ther0n/UnnaturalScrollWheels"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:22:37.027093+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97f3fffda2240303d93c4d1fb4e7870cfb491b4a33eae6f06cfb825ae281ad9c", "fetched_at": "2026-08-28T04:08:38.787228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ther0n/UnnaturalScrollWheels"}], "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:08:38.787228+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:22:37.027093+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97f3fffda2240303d93c4d1fb4e7870cfb491b4a33eae6f06cfb825ae281ad9c", "fetched_at": "2026-08-28T04:08:38.787228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ther0n/UnnaturalScrollWheels"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:22:37.027093+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97f3fffda2240303d93c4d1fb4e7870cfb491b4a33eae6f06cfb825ae281ad9c", "fetched_at": "2026-08-28T04:08:38.787228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ther0n/UnnaturalScrollWheels"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:22:37.027093+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97f3fffda2240303d93c4d1fb4e7870cfb491b4a33eae6f06cfb825ae281ad9c", "fetched_at": "2026-08-28T04:08:38.787228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ther0n/UnnaturalScrollWheels"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:38.787228+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:22:37.027093+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97f3fffda2240303d93c4d1fb4e7870cfb491b4a33eae6f06cfb825ae281ad9c", "fetched_at": "2026-08-28T04:08:38.787228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ther0n/UnnaturalScrollWheels"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:22:37.027093+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97f3fffda2240303d93c4d1fb4e7870cfb491b4a33eae6f06cfb825ae281ad9c", "fetched_at": "2026-08-28T04:08:38.787228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ther0n/UnnaturalScrollWheels"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:22:37.027093+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97f3fffda2240303d93c4d1fb4e7870cfb491b4a33eae6f06cfb825ae281ad9c", "fetched_at": "2026-08-28T04:08:38.787228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ther0n/UnnaturalScrollWheels"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:22:37.027093+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "97f3fffda2240303d93c4d1fb4e7870cfb491b4a33eae6f06cfb825ae281ad9c", "fetched_at": "2026-08-28T04:08:38.787228+00:00", "kind": "readme", "missing": false, "url": "https://github.com/ther0n/UnnaturalScrollWheels"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "longevity": 100, "rhythm": 72}, "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": 2231, "days_push": 30, "days_rel": 30, "gap_med": 122, "n_releases_24m": 2}, "score": 88, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}