macOS IAC Driver: Inter-App MIDI Routing

The Inter-Application Communication (IAC) driver is a native macOS feature that routes MIDI data between different software programs running on the same computer without requiring external hardware. This article explains how the IAC driver functions, how it creates virtual pathways for MIDI messages, the steps required to configure it, and practical methods for managing inter-application workflows without latency or feedback loops.

What Is the IAC Driver?

Built directly into CoreMIDI—the MIDI subsystem of macOS—the IAC (Inter-Application Communication) driver functions as a set of virtual MIDI cables. Instead of routing signals through a physical MIDI interface to external hardware, the IAC driver transmits MIDI events (such as note on/off, control change, pitch bend, and clock signals) entirely within system memory from one software application to another.

How IAC Driver Buses Work

An IAC "bus" represents an individual bidirectional virtual MIDI port. When enabled, macOS registers this bus globally across the operating system, making it visible to any CoreMIDI-compatible application.

  1. Transmission (MIDI Out): The sending application (such as an algorithmic sequencer, notation software, or DAW) sets its MIDI track output to an active IAC bus.
  2. System Routing: macOS CoreMIDI captures the MIDI packets directly from the sending application's output buffer and routes them internally to the specified bus.
  3. Reception (MIDI In): The receiving application (such as a standalone software synthesizer, visualizer, or second DAW) monitors that same IAC bus on its MIDI input port and processes the incoming messages in real time.

Because data transmission occurs at the operating system level, transfer speeds are nearly instantaneous, avoiding the jitter and physical transmission delays associated with hardware DIN or USB MIDI connections.

How to Enable and Configure the IAC Driver

The IAC driver is disabled by default in macOS. It must be activated using the Audio MIDI Setup utility.

  1. Open Audio MIDI Setup (located in /Applications/Utilities).
  2. If the MIDI Studio window is not visible, select Window > Show MIDI Studio from the menu bar.
  3. Double-click the red IAC Driver icon to open its properties panel.
  4. Check the box labeled Device is online.
  5. Under the Ports list, review the available buses. By default, "Bus 1" is present.
  6. Click the + (Add) button below the ports list to create additional discrete buses (e.g., "IAC Bus 2", "Clock Bus") for routing multiple independent streams of MIDI data.
  7. Click Apply and close the window.

Once enabled, the configured buses immediately appear as selectable input and output devices in the MIDI preferences of any open or newly launched audio applications.

Practical Use Cases

Avoiding MIDI Feedback Loops

Because IAC buses are bidirectional, an application can inadvertently listen to and transmit on the same bus. If an application is configured to echo or pass through incoming MIDI data while simultaneously sending to the same IAC bus, an infinite MIDI loop will occur, rapidly overloading the CPU and freezing audio processes.

To prevent feedback: