Skip to content
Son Tran (Snow)
All posts
  • 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.

PanelReadsSource
Lid AngleHinge angle, in degreesA hinge sensor, sampled at 125 Hz
SlapHit count and impact force, in gThe accelerometer, at 100 Hz
LevelRoll and pitch on a bubble dialThe same accelerometer, with gravity kept rather than stripped
Trackpad ScaleWeight, in gramsForce frames from the trackpad
Light MeterIlluminance, in luxThe 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.app

You 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 AppleSPUHIDDriver before 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.

Every hardware detail was verified on one machine: macOS 27 on a Mac16,12 (an M4 MacBook Air). Other models may report differently.

If a panel misbehaves on your Mac, the issues are the best place to say which model and macOS version you have.