How to Route MIDI Between Apps on macOS
Last updated: March 2026
This guide explains how to route MIDI between apps on macOS — whether you are connecting a keyboard to a DAW, routing output between two DAWs, or building complex multi-app setups. macOS provides the IAC (Inter-Application Communication) driver for basic MIDI routing, but it has no visual interface and limited flexibility. Midilize is a visual MIDI routing utility that replaces hidden buses with a drag-and-drop patch-graph interface, giving you a clear view of every connection in your setup.
What is MIDI routing?
MIDI routing is the process of directing MIDI data from a source — such as a hardware keyboard, a DAW track, or a software instrument — to a destination such as a synthesizer, another application, or a virtual instrument. On macOS, MIDI devices and apps communicate through MIDI ports. A MIDI router sits between source and destination, forwarding, filtering, or transforming the signal as it passes through.
Common routing setups include:
- Keyboard to DAW — the simplest setup: one source, one destination
- One keyboard to multiple DAWs — split the signal to reach several apps simultaneously
- DAW output to a hardware synthesizer
- Two DAWs exchanging MIDI data over a virtual bus
- Controller to multiple destinations, each filtered to a specific channel
The macOS IAC driver
macOS includes the IAC (Inter-Application Communication) Driver, a built-in virtual MIDI bus that lets apps send MIDI to each other. To enable it:
- Open Audio MIDI Setup (in /Applications/Utilities)
- Go to Window > Show MIDI Studio
- Double-click the IAC Driver icon
- Check "Device is online"
- Add additional ports if needed using the + button
- Rename ports by double-clicking their names for clarity
Now any app can send MIDI to the IAC bus, and any other app can receive from it. In your DAW, select "IAC Driver Bus 1" (or your named port) as the MIDI output. In the destination app, select the same port as its MIDI input.
Limitations of the IAC driver
While the IAC driver works for basic routing, it has significant drawbacks for complex setups:
- No visual overview — you cannot see which apps are connected to which ports
- No filtering — all MIDI data on a port goes everywhere; you cannot filter by channel or message type
- No transformation — you cannot transpose, remap, or modify MIDI data in transit
- Naming confusion — managing multiple IAC ports with generic names quickly gets confusing
- No monitoring — you cannot see what is actually flowing through the bus without a separate tool
- No fan-out control — routing one input to multiple destinations requires workarounds
Visual routing with Midilize
Midilize replaces the invisible IAC workflow with a visual patch-graph interface. Your entire MIDI routing setup appears as nodes and cables on a canvas. Here is how to set up a basic route:
Switch to Flow Mode
Open Midilize and press Cmd+2 to enter Flow Mode. Create a new graph from the sidebar or open an existing one.
Add MIDI In and MIDI Out nodes
From the tool palette, drag a MIDI In node (your source device or virtual port) and a MIDI Out node (the destination app or device) onto the canvas.
Add processing tools (optional)
Need to filter channels, transpose, or remap CCs? Drop processing nodes between input and output. Midilize has 40+ tools including filters, transposers, channel routers, velocity modifiers, and scriptable processors.
Connect with cables
Click an output port on one node and drag to an input port on another. The cable appears and MIDI flows immediately. You can see messages moving through the graph in real time.
Save your setup
Press Cmd+S to save your routing as a file. Load it anytime to restore the exact same configuration — all nodes, connections, and settings.
Screenshot: Midilize Flow Mode with routing graph
Example: routing a MIDI keyboard to two DAWs
A common scenario is splitting a MIDI keyboard between two applications. In Midilize:
- Add a MIDI In node for your keyboard
- Add a Split node to divide by note range (e.g., below C4 and above C4)
- Add two MIDI Out nodes, one for each DAW's virtual input port
- Connect: Keyboard → Split → DAW 1 (low range) and DAW 2 (high range)
The entire setup is visible at a glance. No hidden buses, no configuration files.
Common routing scenarios
Channel-based routing: Route one device's output to multiple destinations, each receiving a different MIDI channel. Use the Channel Router node between MIDI In and multiple MIDI Out nodes, assigning each output a specific channel.
Velocity layers: Route quiet notes (velocity < 64) to one instrument and louder notes to another, creating dynamic switching between sounds based on how hard you play. Use the Double Filter tool configured to split on velocity.
CC filtering: Strip control change messages before sending to a synthesizer that misinterprets mod wheel or expression pedal data. Add a Filter node set to block CC messages on the connection to that destination.
Transpose and route: Transpose a keyboard up an octave using the Transpose tool, then route the result to a bass synth. Useful when a synth patch is pitched in the wrong register.
Multiple sources, one destination: Merge MIDI from two keyboards into a single output using multiple MIDI In nodes connected to the same MIDI Out node. All messages from both sources flow to the destination.
Virtual ports
Midilize can create virtual MIDI inputs and outputs directly from the Sources panel. Other apps see these as standard MIDI ports — the same as hardware devices or IAC ports. Virtual ports created by Midilize appear with the name you set, making them easy to identify in other apps. This replaces the need to manually configure IAC driver ports in Audio MIDI Setup.
Troubleshooting routing issues
MIDI not flowing between apps: Check that both apps have the same virtual port selected. In Midilize, verify the MIDI In and MIDI Out nodes show a green active indicator. Confirm the cables in the flow graph are properly connected (port to port, not floating).
MIDI feedback loop: If you route an app's MIDI output back to its own input, you create a feedback loop — notes trigger more notes infinitely. Monitor Mode will show an exponentially growing message count. Break the loop by removing the return cable or filtering the channel that feeds back.
Wrong channel at destination: Add a Channel Filter node between MIDI In and MIDI Out to block unwanted channels, or add a Set Channel node to force all messages to the correct channel before they reach the destination.
Destination app not seeing the virtual port: Restart the destination app after creating a virtual port in Midilize. Some apps only scan for MIDI devices at launch. Midilize must remain open for its virtual ports to be visible.
Network MIDI and cross-Mac routing
macOS supports MIDI over a local network through the built-in Network MIDI feature. This allows you to route MIDI between two Macs on the same network, or between a Mac and an iPhone or iPad running a compatible app. To set it up:
- Open Audio MIDI Setup and go to Window > Show MIDI Studio
- Double-click the Network icon in MIDI Studio
- Check "Enable network MIDI" on both machines
- On one machine, click the + button to add the other machine as a participant
- Once connected, the remote Mac appears as a MIDI device in your DAW and in Midilize
Network MIDI adds approximately 10–30ms of additional latency depending on your network quality. It is suitable for monitoring remote MIDI sources or triggering sounds that are not time-critical, but not ideal for tight rhythmic performance. For zero-latency cross-Mac routing, a direct USB or Thunderbolt connection is preferred.
You can also monitor what flows through a Network MIDI port in Midilize: enable the network MIDI device in the Sources panel and any messages arriving over the network appear in Monitor Mode. This is useful for remotely diagnosing a MIDI setup on a second machine without physically being at that desk.
Merging and splitting MIDI streams
Two of the most powerful routing operations are merging (combining multiple sources into one destination) and splitting (sending one source to multiple destinations). Both are straightforward in Midilize's patch-graph:
Merging: Add multiple MIDI In nodes and connect all of them to a single MIDI Out node or processing tool. All messages from every source flow into the destination as a unified stream. This is how you combine a hardware keyboard and a software step sequencer into a single synthesizer input.
Splitting: Connect one MIDI In node to multiple MIDI Out nodes. Every incoming message is copied and forwarded to all destinations simultaneously. Add channel filters or note range filters on each output branch to send only specific messages to each destination — this is the foundation of keyboard splits and layered sounds.
Unlike the IAC driver, which delivers all data on a port to every subscriber without distinction, Midilize lets you apply different processing to each output branch independently. One branch can transpose, another can filter to specific channels, and a third can remap CC numbers — all from the same single input source.
Frequently asked questions
Can I route MIDI from one app to multiple apps at once?
Yes. In Midilize, connect one MIDI In node to multiple MIDI Out nodes. The signal fans out to all destinations simultaneously. A single IAC port cannot do this without additional routing tools.
Does MIDI routing add latency?
Routing through Midilize or the IAC driver adds negligible latency — well under 1ms under normal conditions. The main source of perceptible MIDI latency is your DAW's audio buffer size, not the routing layer.
Can I save my routing setup and reload it?
Yes. Press Cmd+S to save your flow graph as a file. Double-click the file to restore the exact routing setup including all nodes, connections, and per-tool settings.
Do I need to keep Midilize open while using my routing setup?
Yes. Midilize must be running for its virtual ports and routing to remain active. You can minimize it to the Dock — it runs silently in the background with minimal CPU use.