Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

musubipapi/airpointer

Productivity & Utilities

Use a closed AirPods Pro case as a motion-controlled pointer and clicker for macOS.

180
26
Swift
MIT
new today

What it does

AirPointer turns a closed AirPods Pro case into a pointer for macOS. Moving the case moves the cursor, and tapping its front triggers a click. The app is built in Swift for macOS and includes helper programs that establish the Bluetooth link, stream motion data, detect taps, and keep the AirPods' audio link active.

The project explains its mechanism in detail: motion is converted into screen coordinates, a sudden movement in the tap direction is treated as a click, and the app suppresses Mac audio and microphone use on the AirPods during a session. During a session, silent audio is played to the AirPods to keep the link alive, and a cursor smaller than 2× is temporarily enlarged using a private macOS call. The intended user is someone with compatible AirPods, a Mac, and the willingness to build the app from source.

Build and try it

Requirements are AirPods paired with the Mac, Xcode, and macOS 26 on Apple Silicon; the only tested configuration is AirPods Pro 3 on one Mac with one pair. AirPods Pro 2 is recognized but not tested.

From a checkout of the repository, build the app:

zsh ./build.sh
open AirPointer.app

The build also runs the self-test and tap check. Do not build during a pointer session. On first launch, setup has four steps: allow AirPointer in Accessibility, connect the case by opening and closing the lid and setting it upright, calibrate by pointing at three dots, and tap the front of the case three times. Press fn ⌃ in any app to connect; press it again to pause or resume. The shortcut can be changed in Settings. To connect again after a session, open and close the lid.

If AirPointer does not appear in the Accessibility list after a rebuild, run:

tccutil reset Accessibility local.airpointer

Constraints

Compatibility is narrow and partly unverified: only AirPods Pro 3, macOS 26, and Apple Silicon were tested, and force quitting, sleep/wake, Bluetooth loss, and calls during a session were not tested deliberately. Connecting briefly drops the AirPods' Bluetooth link and stops their audio, so do not connect during a call. During a session the app keeps Mac sound and the microphone off all AirPods and restores them when the session ends or when the app is next opened after a force quit.

A session ends about 30 minutes after the lid closes. The README attributes this to a firmware timer and reports the addresses and duration from reading the firmware, while noting that no live capture has confirmed it yet. Ending a session uses up diagnostic data stored on the case, and some AirPods settings may remain as the session set them. The cursor can require Accessibility permission, and the app uses a private macOS call to enlarge small cursors. The code is MIT-licensed, but Assets/ is excluded and has a separate license.

HotRepo's take

The repository first appears on HotRepo's new-project list on 2026-11-06, recording 125 stars and 13 forks over a growth window of roughly ten hours. That single first-day snapshot shows early attention but provides no longer time series for assessing whether it lasts. The project stands out less for star count than for documenting a narrow, unusual hardware hack: it names the tested AirPods model, the firmware addresses behind the 30-minute session limit, and its own untested cases. The practical limitation is equally clear: users with anything other than the tested Pro 3 setup are working outside confirmed support, and the app is built from source rather than distributed as a ready-made installer.

Project source and documentation

Written by AI from the project's README, updated . The project's own docs are the source of truth.

Hacker News