Volume control for macOS that lives in the menu bar: switch the output device with one click, connect Bluetooth headphones, and set a separate volume for every app. Site: fader.pantafive.dev.
Fader is free and open source. It sends nothing anywhere — no telemetry, no analytics, no network access at all. Audio is processed on your Mac through the system's own Core Audio process taps (an API introduced in macOS 14.4; Fader supports macOS 15+), so there is no kernel extension and no virtual audio driver to install.
- One-click switching between output devices — headphones, speakers, AirPlay — with the active one marked.
- Bluetooth management: paired headphones connect straight from the popover, and audio routes to them automatically.
- Per-app volume sliders and mute. An app at 100% is untouched: Fader only taps an app's audio after you adjust it, the default audio path stays bit-perfect.
- System output volume and mute, in sync with the volume keys and Control Center.
- Volumes persist per app across launches and reboots.
brew install --cask pantafive/tap/faderOr download the latest dmg — signed and notarized. Requires macOS 15+.
Adjusting an app's volume uses a Core Audio process tap, which macOS gates behind the System Audio Recording permission. Fader asks for it the first time you move a per-app slider. The tapped audio is re-rendered to your output device with the gain you set and never leaves the audio pipeline. Device switching and system volume need no permissions.
brew install xcodegen swiftlint swiftformat
make runmake drives local work: gen, build, test, lint, format, run. The Xcode project is generated by XcodeGen from project.yml and is not committed — edit project.yml, never the .xcodeproj. CI lints and tests every push; pushing a v* tag builds, signs, notarizes, and publishes the dmg as a GitHub release; the site redeploys on every push to main that touches site/.
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. The real-time audio callback (ProcessTap.render) runs on the HAL IO thread — no allocation, locks, Objective-C, or logging inside it; changes there get extra scrutiny. Contributions adding telemetry, analytics, or anything that phones home will be declined.
Report security issues privately via GitHub security advisories, not public issues.