{"adoption": {"forks": 64, "observed_at": "2026-08-28T04:04:02.036466+00:00", "stars": 1221}, "canonical_url": "https://ross.abutalabs.com/products/apple-silicon-accelerometer", "card": {"archived": false, "artifact_type": "library", "description": "reading the undocumented mems accelerometer + gyroscope on apple silicon macbooks via iokit hid", "domain": ["hardware", "apple-ecosystem", "developer-tools", "operating-systems"], "enriched": true, "function": ["sdk", "developer-tools"], "health_score": 82, "homepage": "https://medium.com/@oli.bourbonnais/your-macbook-has-an-accelerometer-and-you-can-read-it-in-real-time-in-python-28d9395fb180", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["olvvier/apple-silicon-accelerometer"], "name": "olvvier/apple-silicon-accelerometer", "platform": ["python", "cli"], "pushed_at": "2026-03-27T15:25:21+00:00", "repo": "olvvier/apple-silicon-accelerometer", "stars": 1221, "tags": ["accelerometer", "gyroscope", "iokit", "hid", "apple-silicon", "mems", "sensor-processing-unit", "reverse-engineering", "motion-sensors", "macbook", "hardware", "macos"], "topics": ["accelerometer", "hid", "iokit", "m2", "m3", "m4", "macbook", "macos", "mems", "research", "sensor", "apple", "spu", "applespu", "gyroscope"], "urls": [], "use_cases": ["read accelerometer data from macbook in python", "access gyroscope on apple silicon mac", "detect taps or slaps on macbook lid", "build typing-force sound effects from keyboard vibration", "read lid angle and ambient light sensor on macos", "reverse engineer hidden sensors on m2 m3 m4 macbooks"], "what_it_is": "A Python library that reads the undocumented MEMS accelerometer and gyroscope on Apple Silicon MacBooks via IOKit HID, along with lid angle and ambient light sensors. It accesses the AppleSPUHIDDevice directly since no public API exposes these sensors.", "when_to_avoid": ["you need guaranteed support across all Apple Silicon models (only tested on M3 Pro)", "you need a public, stable Apple API for motion sensors", "you're on Intel Macs or non-Apple hardware"], "when_to_choose": ["you need real-time motion sensor data on an Apple Silicon MacBook", "you want to build apps reacting to physical taps, slaps, or typing force", "you're researching undocumented Apple hardware interfaces"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/apple-silicon-accelerometer", "repo": "olvvier/apple-silicon-accelerometer", "role": "main", "score": 50}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T06:15:52.969236+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b2f22756d74ea95c8716a7efb91db5b00d1991e2ab7d00feed78c02ab666c4b", "fetched_at": "2026-08-28T04:04:02.036466+00:00", "kind": "readme", "missing": false, "url": "https://github.com/olvvier/apple-silicon-accelerometer"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T06:15:52.969236+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b2f22756d74ea95c8716a7efb91db5b00d1991e2ab7d00feed78c02ab666c4b", "fetched_at": "2026-08-28T04:04:02.036466+00:00", "kind": "readme", "missing": false, "url": "https://github.com/olvvier/apple-silicon-accelerometer"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T06:15:52.969236+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b2f22756d74ea95c8716a7efb91db5b00d1991e2ab7d00feed78c02ab666c4b", "fetched_at": "2026-08-28T04:04:02.036466+00:00", "kind": "readme", "missing": false, "url": "https://github.com/olvvier/apple-silicon-accelerometer"}], "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:04:02.036466+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T06:15:52.969236+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b2f22756d74ea95c8716a7efb91db5b00d1991e2ab7d00feed78c02ab666c4b", "fetched_at": "2026-08-28T04:04:02.036466+00:00", "kind": "readme", "missing": false, "url": "https://github.com/olvvier/apple-silicon-accelerometer"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T06:15:52.969236+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b2f22756d74ea95c8716a7efb91db5b00d1991e2ab7d00feed78c02ab666c4b", "fetched_at": "2026-08-28T04:04:02.036466+00:00", "kind": "readme", "missing": false, "url": "https://github.com/olvvier/apple-silicon-accelerometer"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T06:15:52.969236+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b2f22756d74ea95c8716a7efb91db5b00d1991e2ab7d00feed78c02ab666c4b", "fetched_at": "2026-08-28T04:04:02.036466+00:00", "kind": "readme", "missing": false, "url": "https://github.com/olvvier/apple-silicon-accelerometer"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:04:02.036466+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T06:15:52.969236+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b2f22756d74ea95c8716a7efb91db5b00d1991e2ab7d00feed78c02ab666c4b", "fetched_at": "2026-08-28T04:04:02.036466+00:00", "kind": "readme", "missing": false, "url": "https://github.com/olvvier/apple-silicon-accelerometer"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T06:15:52.969236+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b2f22756d74ea95c8716a7efb91db5b00d1991e2ab7d00feed78c02ab666c4b", "fetched_at": "2026-08-28T04:04:02.036466+00:00", "kind": "readme", "missing": false, "url": "https://github.com/olvvier/apple-silicon-accelerometer"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T06:15:52.969236+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b2f22756d74ea95c8716a7efb91db5b00d1991e2ab7d00feed78c02ab666c4b", "fetched_at": "2026-08-28T04:04:02.036466+00:00", "kind": "readme", "missing": false, "url": "https://github.com/olvvier/apple-silicon-accelerometer"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T06:15:52.969236+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "9b2f22756d74ea95c8716a7efb91db5b00d1991e2ab7d00feed78c02ab666c4b", "fetched_at": "2026-08-28T04:04:02.036466+00:00", "kind": "readme", "missing": false, "url": "https://github.com/olvvier/apple-silicon-accelerometer"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 74, "longevity": 13, "rhythm": 39}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 195, "days_push": 159, "days_rel": 195, "gap_med": null, "n_releases_24m": 1}, "score": 50, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}