README.md

Fader

CI Release License: MIT

A macOS menu bar app for audio output switching and per-app volume. Switch the output device in one click, connect Bluetooth headphones, and set a separate volume for every app. The binary is ~0.7 MB, self-contained, signed, and notarized. Site: fader.pantafive.dev.

Fader popover: output devices with priority order, Bluetooth section, per-app volume fader

It sends nothing anywhere: no telemetry, no analytics, no network code at all. Per-app volume is processed on-device through Core Audio process taps (an API added in macOS 14.4), so there is no kernel extension and no virtual audio driver to install. Requires macOS 15+ on Apple silicon.

Install

sh
1brew install --cask pantafive/tap/fader

Or download the latest dmg. Both are signed and notarized.

Features

Output devices

Output devices switch with one click. Headphones, speakers, displays, and AirPlay targets all appear in the popover, with the active one marked. Paired-but-disconnected Bluetooth headphones are listed too; clicking one connects it and routes audio there in a single action, and you disconnect from the same row.

Drag a device row to set its priority. The order becomes your auto-switch preference: when a higher-priority device connects Fader switches to it, and when the current default disappears Fader falls back to the best-ranked device still present. This stays dormant until you first reorder. Wired devices unused for 30 days collapse into a "Rarely used" group, and you can demote a row manually by dragging it onto the group.

Per-app volume

Every app that plays sound gets a volume fader and a mute toggle. Volumes persist across launches. An app left at 100% and unmuted is untouched: no tap, no processing, bit-perfect native playback. The tap exists only while a fader sits below full volume or an app is muted.

Microphone

The microphone tab switches the default input and sets input gain. The gain slider disables itself on devices whose gain is hardware-only, so the control never lies about what it can do. It also shows which apps are using the microphone right now, so you can spot a forgotten recorder. That last part is an indicator only, because Core Audio exposes no per-app input gain.

Throughout

System output volume and mute stay in sync with the volume keys and Control Center. Scrolling the wheel or trackpad over any slider adjusts it.

Permissions

Most of Fader needs no permission at all. Device switching, system volume, and the entire microphone tab work the moment you install. The one ask is for per-app volume, which uses a Core Audio process tap (the macOS 14.4+ API) that macOS gates behind the System Audio Recording permission. Fader requests it only the first time you move an app's fader.

The name of that permission sounds broader than what Fader does with it, so it is worth stating plainly here rather than letting a system dialog surprise you. The tapped audio is re-rendered to your output device with the gain applied and never leaves the Mac. There are no kernel extensions and no virtual audio drivers.

Privacy

Fader has zero telemetry, zero analytics, and zero network code, so it cannot phone home even by accident. The website loads no external resources either. Being open source under MIT, the claim is checkable: read the source and confirm there is nothing reaching out.

Development

sh
1brew install xcodegen swiftlint swiftformat
2make run

Built in Swift 6 with strict concurrency. The Xcode project is generated by XcodeGen from project.yml and is not committed, so edit project.yml rather than the .xcodeproj. make drives local work: gen, build, test, lint, format, run.

CI lints and tests every push. Pushing a v* tag builds, signs, notarizes, and publishes the dmg as a GitHub release.

The real-time audio callback runs on the HAL IO thread. No allocation, locks, Objective-C, or logging is allowed inside it.

Contributing

Bug reports and pull requests are welcome; for anything bigger than a fix, open an issue first. make test and make lint must pass. Commit messages follow Conventional Commits, imperative mood, English.

Changes to the real-time audio callback get extra scrutiny for the constraints above. Contributions adding telemetry, analytics, or anything that phones home will be declined.

Security

Report security issues privately via GitHub security advisories, not public issues.

License

MIT