Route any app's audio to any output device — on your Mac.
MacHole is a lightweight macOS menu-bar app that lets you choose which output device each running application plays through. Send your music player to your USB audio interface, keep video calls on your headphones, and push a game to the living-room speakers — all at the same time, from one simple menu.
It’s built entirely on Apple’s native Core Audio process taps. There are no kernel extensions and nothing to install at the system level.
- macOS 14.4 or later
- Apple Silicon or Intel
- Go to the latest release
and download
MacHole.dmg. - Open the DMG and drag MacHole onto the Applications folder.
- Launch MacHole from Applications. Because it’s ad-hoc signed, the first time
you open it, right-click the app and choose “Open” (or run
xattr -dr com.apple.quarantine /Applications/MacHole.app).
Prefer a plain app? A zipped
MacHole.zipis attached to each release too.
You only need the Swift toolchain (the Xcode Command Line Tools are enough — a full Xcode install is not required):
git clone git@github.com:MoonTheRipper/MacHole.git
cd MacHole
./scripts/build-app.sh # builds dist/MacHole.app
open dist/MacHole.app
# …or build the drag-and-drop installer:
./scripts/make-dmg.sh # builds dist/MacHole.dmg- Launch MacHole. A small waveform icon appears in your menu bar.
- Click it to open the dropdown. You’ll see the apps currently using audio.
- For any app, pick an output device from the menu next to it.
- That app’s sound now plays through the device you chose. Pick System Default again to hand it back.
The first time MacHole redirects an app, macOS may ask for permission to capture that app’s audio — this is required to move the sound to another device. Click Allow.
Your choices are remembered and automatically re-applied when the apps relaunch.
Open Settings… from the dropdown for advanced options:
- Launch at login — start MacHole automatically.
- Only show apps that are currently playing — keep the list short.
- Automatically re-apply routes — restore your routing when apps relaunch.
- Active routes — see and clear everything you’ve routed.
When you route an app to a device, MacHole:
- Creates a process tap on that app to capture its audio.
- Builds a private aggregate device wrapping your chosen output.
- Streams the captured audio to that device, while muting the app on its original output.
All of this uses public Core Audio APIs introduced in macOS 14.4. Nothing is installed outside the app, and removing the app removes everything it created.
MacHole runs entirely on your Mac. It does not collect, transmit, or store any audio, usage data, or personal information. It captures app audio only for the apps you explicitly route, and only to play them through the device you pick.
- Routed apps stay visible. Once you route an app, it stays in the menu — even after it stops playing — so you can always undo or change it. You can also route an app that isn’t open yet; the choice applies the next time it plays.
- Unplugging a device stops its routes cleanly, and reconnecting it restores them automatically.
- Channels. Stereo audio is mapped onto the first channels of multi-channel interfaces. Per-channel custom mapping isn’t exposed yet.
- Sample rate. Routing works best when the app and the destination device run at the same sample rate; large mismatches are smoothed by drift compensation.
- Browser tabs. Some browsers play audio from a helper process the system re-parents away from the browser; in that case the audio may appear under the helper rather than the browser name. Turn on Show all audio processes in Settings if you need to find it.
- Signing. Release builds are ad-hoc signed (no paid Developer ID), so macOS asks you to confirm the first launch.
- An app doesn’t appear in the list — it has to be actively using audio. Start playback, then click the refresh icon.
- No sound after routing — make sure the target device is connected and not muted, then try selecting System Default and the device again.
- “MacHole can’t be opened” — right-click the app and choose Open, or run
xattr -dr com.apple.quarantine MacHole.app.
Released under the MIT License.