Getting started
Virtual MIDI port — macOS IAC
Set up a virtual MIDI port on macOS using the built-in IAC Driver so Universal Controller MIDI can talk to Logic, Ableton, MainStage and any other DAW.
Updated
macOS has shipped a free virtual MIDI driver since 2007 — the IAC (Inter-Application Communication) bus inside Audio MIDI Setup. Universal Controller MIDI creates its own CoreMIDI source automatically, but enabling IAC gives you a second, system-wide route that any legacy DAW or standalone synth can subscribe to.
Open Audio MIDI Setup
Spotlight: ⌘ Space, type "Audio MIDI Setup", hit return. Or from the terminal:
open -a "Audio MIDI Setup" Show the MIDI Studio window: Window → Show MIDI Studio (or ⌘ 2).
Enable the IAC Driver
Double-click the IAC Driver icon. In the panel that opens, tick Device is online. Under Ports, you'll see a default port named Bus 1. Rename it to something obvious — UCM Bus works.
Click Apply. The port is now live system-wide. Every CoreMIDI client (Logic, Ableton, MainStage, GarageBand, Reaper) will see it as both an input and an output.
macOS MIDI driver options compared
You have three native choices on macOS for routing UCM into a DAW, plus two third-party options for cross-host work. Most users only ever need the app's internal port; IAC is the escape hatch for multi-host setups.
| Driver | Bundled with | Multi-client | Network MIDI | Best for |
|---|---|---|---|---|
| UCM internal CoreMIDI source | The app | Yes (8 readers) | No | Single-DAW workflows. |
| IAC Driver (built-in) | macOS 10.5+ | Yes (unlimited) | No | Two DAWs listening at once. |
| Network MIDI Session | macOS Audio MIDI Setup | Yes | Yes | iPad / second Mac over LAN. |
| rtpMIDI (third-party) | tobias-erichsen.de | Yes | Yes | Cross-OS network MIDI to Windows. |
| Bome MIDI Translator | bome.com | Yes | Yes | Heavy filtering / rewriting. |
Route the app to IAC
In Universal Controller MIDI → Settings → MIDI output, switch the output target from Universal Controller (internal) to IAC: UCM Bus. The internal port still exists; you're just choosing which one receives the stream.
Scripted IAC setup
If you're imaging a fleet of studio Macs, you don't want to click through Audio MIDI Setup on each one. The IAC driver is configured by a plist; enable + rename in a single shell command:
# Inspect current IAC config
defaults read com.apple.audio.CoreAudio | grep -i iac
# Toggle the IAC driver online via the CoreMIDI plist
# (path is fixed; values are user-scoped)
plutil -replace devices.iac.online -bool true \
~/Library/Preferences/ByHost/com.apple.MIDI.*.plist
# Restart CoreMIDI to pick up the change
sudo killall coremidiserver Verify with sendmidi
If you have sendmidi installed, list ports:
# List every CoreMIDI source + destination
sendmidi list
# Send a test note-on into the IAC bus and listen for it elsewhere
sendmidi dev "UCM Bus" on 60 100
sleep 0.5
sendmidi dev "UCM Bus" off 60 0 You should see both Universal Controller and UCM Bus in the output list.
What if it doesn't work?
IAC is rock-solid 99% of the time, but here are the failure modes that show up in our inbox:
- "Device is online" won't stay ticked — IAC plist owned by another user. Run
ls -la ~/Library/Preferences/ByHost/com.apple.MIDI.*.plistand fix the ownership withchown. - IAC port doesn't appear in DAW dropdown — DAW caches the MIDI list at launch. Quit and re-open the DAW after enabling IAC, or hit "Rescan MIDI" if your DAW exposes one (Reaper does, Logic doesn't).
- Stuck "All Sound Off" loop — IAC feedback loop. Make sure UCM's input source isn't set to the same IAC bus it's outputting to. The app prevents this in the UI but custom CLI configs can still cause it.
- UCM sends notes but IAC monitor shows nothing — wrong port selected in Settings → MIDI output. Switch back to
Universal Controller (internal)first to confirm the chain, then re-route to IAC. - CoreMIDI crashed after enabling IAC — rare but real on macOS 12. Run
sudo killall coremidiserver— launchd respawns it immediately and the IAC config sticks.
What's next
Test the chain in verify everything works, or learn how virtual MIDI ports work under the hood.