Dialed

The CMF Buds Pro 2 case has a dial. On a Mac it barely did anything. Dialed turns it into volume, scroll, seek, zoom, tab and slide controls, with a radial menu for switching modes.

Type

Swift · macOS · Open source (MIT)

Stack

Swift 6, macOS 14+, Sparkle 2, GitHub Actions

Year

2026

Dialed: the CMF Buds Pro 2 Smart Dial as a Mac controller

My role

Solo: idea, design, Swift code, hardware testing and releases.

Problem

The case has a dial. On a Mac it did almost nothing, and there’s no SDK.

What I built

11 modes (scroll, seek, zoom, tabs, slides…), a radial menu, per-app profiles, macros and signed auto-updates.

Public proof

Public repo, MIT licence, 51 unit tests in CI, release v1.1.0 on 23 Oct 2026.

The full story

Dialed radial menu of modes open on a Mac desktop
The radial menu: triple-press, turn, press.

No SDK, no docs, one dial

The buds only send what Bluetooth allows: volume steps and a few presses. Anything smarter had to be built around those signals.

Approach

Find out exactly what reaches the Mac, with real buds and Bluetooth logs, then design every feature around it. I wrote the findings up as a separate note.

What shipped

  • 11 modes. Volume, smooth scroll, media, video seek, brightness, zoom, browser tabs, slides, app switcher, windows, undo/redo. Plus custom modes.
  • Radial menu. Triple-press to open, turn to pick, press to choose. It never steals focus.
  • Profiles. Modes follow the app you’re using. Macros and Apple Shortcuts for everything else.
  • Auto-updates. Signed updates through Sparkle, built and attached by CI on every tagged release.
Dialed settings window listing its control modes
Modes, in the settings window.

Evidence

51 unit tests run in CI. Version 1.1 cut the app’s CPU use from about 23% to about 1%. It isn’t notarized yet, so macOS asks you to confirm the first launch.

Source on GitHub · Latest release

Working on something similar?

More projects