# BlackHole: a macOS loopback driver for routing audio between apps

> BlackHole is a virtual audio driver for macOS that lets one application send audio to another. It is small, it needs no kernel extension, and its licence is the part most teams get wrong.

**ExistentialAudio/BlackHole** — BlackHole is a modern macOS audio loopback driver that allows applications to pass audio to other applications with zero additional latency.

- Repository: https://github.com/ExistentialAudio/BlackHole
- Stars: 19,840 · Forks: 844
- Language: C
- License: NOASSERTION
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/existentialaudio-blackhole

## What problem BlackHole solves, and for whom

macOS gives applications no general way to hand audio to each other. A DAW can capture from a microphone and a conferencing app can capture from a microphone, but pointing the output of one program at the input of another normally means a physical cable, an aggregate device, or a kernel extension. BlackHole presents itself to CoreAudio as an ordinary audio device with both inputs and outputs. An application writes to it, another application reads from it, and the audio never leaves the machine.

The README frames the project as a "modern macOS audio loopback driver that allows applications to pass audio to other applications with zero additional latency." The people who need that are narrower than the download numbers suggest. It is podcasters and streamers who want to send a DAW mix into Zoom, FaceTime, Google Meet or Skype; the README links separate how-to pages for Logic Pro X and GarageBand against each of those four destinations. It is also developers building desktop recording or transcription pipelines who want a stable, named capture endpoint rather than a screen-recording API. The README's own sponsorship section points at Recall.ai, a desktop recording API, which is a fair hint at the kind of commercial user this driver attracts.

It is not a mixer, not a recorder, and not a routing matrix. Those jobs belong to the host application or to Audio MIDI Setup.

## The mechanism: a HAL plug-in, not a kernel extension

BlackHole is a CoreAudio HAL plug-in. The built artifact is a bundle named `BlackHoleXch.driver`, and the README's build instructions say to move it to `/Library/Audio/Plug-Ins/HAL` and then restart CoreAudio. That directory is the documented location for user-space audio drivers on macOS, and placing the bundle there is what makes the device appear in Audio MIDI Setup and in every application's device list.

Because it is a HAL plug-in, the README can state that no kernel extensions or modifications to system security are necessary. That matters on modern macOS, where loading a kext requires reduced security and a reboot into recovery. A HAL plug-in does not. The trade-off is that the driver is still a system-wide install: it goes into `/Library`, not `~/Library`, and the README calls that out explicitly in the uninstall steps.

The channel count is a build-time property, not a runtime setting. The repository ships 2, 16, 64, 128 and 256 channel versions, and the pre-compiler constants listed in the developer guide include `kNumber_Of_Channels`, `kSampleRates`, `kLatency_Frame_Size`, `kDevice_IsHidden`, `kDevice_HasInput` and `kDevice_HasOutput`. A build can also expose a second device through the `kDevice2_*` constants, which the feature list describes as a customizable mirror device for a hidden input or output. In other words, the shape of the device is decided when you compile it, not when you plug it into a session. If you install the 2-channel package and later need 16 channels, you install a different package.

## Installing BlackHole and routing your first signal

The README gives two install paths. The first is a signed installer downloaded from existential.audio/blackhole: close all running audio applications, open the package, install, and restart when prompted. The second is Homebrew, which is the faster route on a machine you control:

```bash
brew install blackhole-2ch
```

The README lists `blackhole-2ch`, `blackhole-16ch` and `blackhole-64ch` as the available formulae. Pick the channel count you actually need, because switching later means installing a different package rather than changing a setting.

After the restart, open Audio MIDI Setup and confirm the device is listed. The README's own screenshot of that window is the reference for what you should see. Then wire up a route. The README's "Route Audio Between Applications" procedure is four steps: set the output driver to BlackHole in the sending application, output audio to any channel, set the input device to BlackHole in the receiving application, and input from the corresponding output channels.

For recording system audio the README describes a longer path. Create a Multi-Output Device in Audio MIDI Setup, right-click it and choose "Use This Device For Sound Output", then open a DAW such as GarageBand, set its input device to BlackHole, and arm a track on channels 1-2. The Multi-Output Device is what lets you hear the audio yourself while BlackHole captures it; without it, setting BlackHole as the system output means you hear nothing.

If you need to remove it, the README gives an uninstaller package per channel count, or two commands. Replace `X` with `2`, `16` or `64`:

```bash
rm -R /Library/Audio/Plug-Ins/HAL/BlackHoleXch.driver
sudo killall -9 coreaudiod
```

The README warns that the path is the root `/Library`, not `/Users/user/Library`. Getting that wrong is a common way to think you uninstalled something you did not.

## Where BlackHole is the wrong tool

The first limitation is platform. This is a macOS driver and the README says nothing about Windows or Linux. Searches for a PC build return nothing the project supports. If your capture pipeline has to run on a Windows build agent, BlackHole is not a candidate at all.

The second is that BlackHole is a pipe, not a router. It moves channels from a writer to a reader. It does not mix, it does not apply gain, it does not resample per application, and it does not decide which application gets which channel. The README's instruction to "output audio to any channel" and then "input audio from the corresponding output channels" puts that bookkeeping on you. On a 64-channel build, channel mapping is your problem.

The third is the sample rate. The feature list enumerates supported rates from 8kHz through 768kHz, but the device you install presents a fixed set of them, and mismatches between the sending and receiving application are a normal source of trouble. The README does not document a troubleshooting procedure for that case; it points to the wiki.

Finally, the documentation surface is split. The README covers installation, uninstallation, build customization and two routing procedures. The per-application guides for Logic Pro X, GarageBand, Audacity and Reaper live on existential.audio and on the wiki, not in the repository. If you need a documented answer for a specific host application, the README will not give it to you, and you should check whether the wiki page exists before assuming the route is supported.

## BlackHole against a virtual audio cable and against Loopback

The closest alternative in kind is a virtual audio cable: the same idea, a named device that carries audio between applications. The difference is distribution and control. BlackHole is open source, builds from an Xcode project in this repository, and exposes its channel count, device name, bundle identifier, icon, latency frame size and hidden-device flag as pre-compiler constants you can override with `xcodebuild`. A typical virtual audio cable is a closed binary with whatever channel count the vendor chose. If you need a device that reports itself as something specific, or you need a 256-channel endpoint, BlackHole is the one you can reshape. If you just want a 2-channel loopback and never intend to compile anything, that flexibility buys you nothing.

The other comparison is with Loopback, a paid macOS application from Rogue Amoeba that presents a graphical patchbay: you draw lines between applications and devices, and it handles the routing graph. BlackHole has no such interface. Its equivalent of a patchbay is Audio MIDI Setup plus the sending and receiving applications' own device pickers. That is a real difference in effort. A multi-source mix that takes a minute to draw in a patchbay takes an aggregate device and several channel assignments with BlackHole. The compensation is that BlackHole is a driver, so it works inside other software's device lists without that software knowing anything about it, and it costs nothing to install.

## Maintenance, upgrading and the licence question

The repository is not archived, and the last push was on 2026-08-11. Releases are infrequent and deliberate: v0.7.1 on 2026-07-03, v0.7.0 on 2026-06-18, and v0.6.1 before that on 2025-02-08. That cadence is normal for a driver whose job is to sit still. It also means you should not expect a fix to land quickly if you hit an edge case, and the README does not document an upgrade procedure beyond installing the newer package.

Upgrading has a cost that is easy to miss. Because the driver is a system-wide bundle in `/Library/Audio/Plug-Ins/HAL`, every version change is a system-level install followed by a CoreAudio restart, which interrupts audio for every application on the machine. On a shared or managed Mac, that is an IT action, not a user action.

The licence is the part to read carefully. The repository's licence is classified as NOASSERTION, and the README's developer guide states plainly that "a license is required for all non-GPLv3 projects" and directs you to contact Existential Audio to request one. So the practical position is: if your project is GPLv3, you are in the intended case. If it is not, the README says you need a licence, and the terms are not stated in the repository. That is a question for your own legal review, not something this article can settle, but it is a real gate for commercial products that embed or redistribute the driver. The 2-channel and 16-channel installers and uninstallers are distributed from existential.audio rather than from the repository's release assets, so distribution is partly outside GitHub.

## Conclusion

Adopt BlackHole if you need a fixed, named audio device on macOS that carries audio from one application to another without a kernel extension, and if your project can live with GPLv3 or you are willing to request a licence from Existential Audio. Do not adopt it if you need Windows or Linux support, since the driver is macOS only, or if you expect the README to explain every routing scenario: several guides live on the wiki and the existential.audio how-to pages instead. Before committing, verify three things on your own machine: that the channel count you install matches the channel count your receiving application expects, that your sample rate is one of the rates listed in the features section, and that your product's licence position is settled, because the README states a licence is required for all non-GPLv3 projects.

## FAQ

### Which BlackHole version should I download?

The README lists 2, 16 and 64 channel packages for Homebrew, and the feature list also mentions 128 and 256 channel builds. Choose the channel count your routing needs, since the channel count is fixed at install time rather than configurable afterwards.

### How do I install BlackHole on a Mac?

Either download the installer from existential.audio/blackhole, close all running audio applications, install the package and restart when prompted, or use Homebrew with a command such as brew install blackhole-2ch.

### How do I use BlackHole to route audio between applications on macOS?

Set the output driver to BlackHole in the sending application and output audio to a channel, then set the input device to BlackHole in the receiving application and input from the corresponding output channels.

### How do I use the BlackHole 2ch device?

The 2ch package installs a two-channel loopback device. Point the sending application's output at BlackHole 2ch and the receiving application's input at the same device, using channels 1-2.

### How do I use BlackHole on macOS?

Install the driver, restart, then set BlackHole as the output device in the sending application and as the input device in the receiving application. For system audio recording the README adds a Multi-Output Device step in Audio MIDI Setup.

## Sources

- [ExistentialAudio/BlackHole on GitHub](https://github.com/ExistentialAudio/BlackHole)
- [Issues](https://github.com/ExistentialAudio/BlackHole/issues)
- [README](https://github.com/ExistentialAudio/BlackHole/blob/master/README.md)
- [Releases](https://github.com/ExistentialAudio/BlackHole/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/existentialaudio-blackhole
