- Essay
- #macos
- #swift
- #open-source
MacFeel: the sensors your MacBook keeps to itself
A menu bar app that turns a MacBook into a scale, protractor, spirit level and light meter by reading sensors macOS already has.
Your MacBook is also a scale, a protractor, a spirit level and a light meter. And it yelps when you slap it. MacFeel is a menu bar app that lets you use any of that.
It is free and open source. The app and downloads are on macfeel.ttsalpha.com, and the code is on GitHub. Version 1.0.0 came out in September 2026.
What it shows
MacFeel reads sensors that macOS keeps to itself and puts the numbers in a popover. Each panel is gated on a hardware probe, so it stays empty on a Mac without the sensor.
| Panel | Reads | Source |
|---|---|---|
| Lid Angle | Hinge angle, in degrees | A hinge sensor, sampled at 125 Hz |
| Slap | Hit count and impact force, in g | The accelerometer, at 100 Hz |
| Level | Roll and pitch on a bubble dial | The same accelerometer, with gravity kept rather than stripped |
| Trackpad Scale | Weight, in grams | Force frames from the trackpad |
| Light Meter | Illuminance, in lux | The ambient light sensor, at 10 Hz |
The trackpad scale uses the same Force Touch hardware that fakes a click you can feel. Instead of the click, MacFeel reads the force number, so the trackpad weighs whatever you set on it.
Install
brew install -y --cask ttsalpha/tap/macfeel && xattr -dr com.apple.quarantine /Applications/MacFeel.appYou can also download the .dmg and drag the app to Applications. The app is not notarized, so Gatekeeper quarantines it; the xattr call clears that flag.
It needs an Apple Silicon MacBook, since desktop Macs have none of these sensors, and macOS 14 or later. The app says so when the hardware is missing.
Permissions
Only the accelerometer is access-controlled. Slap and Level ask for Input Monitoring the first time they start, and the other three panels are unaffected. Granting it in Settings takes effect the next time the popover opens, with no relaunch.
What was tricky
- Sensors that look broken. The accelerometer, gyroscope and ambient light sensor boot powered down. Opening one succeeds and then reports nothing, which looks exactly like a swallowed permission failure. The app wakes them through
AppleSPUHIDDriverbefore opening any device. - One clock for every number. The sensors run anywhere from 10 Hz to 100 Hz. Reading them on separate clocks made the panel feel like unrelated parts, so every figure now publishes on one 250 ms tick, as a median.
- Telling a slap from a bump. Impact detection follows taigrr/apple-silicon-accelerometer, tuned against this exact sensor. Three voters look at a gravity-stripped signal: STA/LTA at three timescales, CUSUM, and a peak over MAD.
- Weighing needs contact. The trackpad reports force only while it senses a finger, so the scale needs contact kept and a tare taken.
Sound
Nothing ships in the bundle. Sound packs live on a CDN, indexed by a manifest, and the app downloads them in the background. Sound is off by default.
Under the hood
MacFeel is written in Swift 6 and runs as an agent app, with no Dock icon and no window, only a status item and its popover. It uses its own status item rather than SwiftUI's MenuBarExtra, because MenuBarExtra cannot be opened from code. The sensor code wraps IOKit HID and the private MultitouchSupport framework, and each panel is gated on a hardware probe, so collapsing a panel stops its sensor.
If a panel misbehaves on your Mac, the issues are the best place to say which model and macOS version you have.