We quit MIDIServer while an app was running, and that app’s MIDI stopped without a single error.
The cause is MIDIServer, the background process that every MIDI message on a Mac goes through. If MIDIServer quits or crashes, apps that were already running lose their MIDI connection without any notice. Incoming MIDI stops arriving, and outgoing MIDI appears to be sent but never reaches your devices. Unless an app notices this and sets up its MIDI connection again, it stays disconnected. The reliable fix is to quit and reopen each app that uses MIDI, including Audio MIDI Setup.
How we noticed
We wanted to know what would happen to MIDIFabric if MIDIServer went away. So we ran an app that had set up its MIDI connection and a virtual port, and while it was running we typed killall MIDIServer in Terminal.
In less than a second, the app could no longer read any MIDI information. Yet sending to its own virtual port kept reporting success, and nothing actually arrived. The app received no notice that MIDIServer had quit. An app started afterwards, on the other hand, could use MIDI normally.
We tested this on macOS 27, but we do not think it is specific to one macOS version.
What MIDIServer is
Music apps do not talk to your MIDI devices directly. macOS runs a process called MIDIServer that sits between all apps and all MIDI devices, including USB, Bluetooth, network MIDI and the IAC Driver. Every app that uses MIDI is a client of MIDIServer.
MIDI driver plug-ins also run inside the MIDIServer process. These include Apple’s own drivers for USB, Bluetooth, network MIDI and the IAC Driver (in /System/Library/Extensions), and drivers that device makers provide (installed in /Library/Audio/MIDI Drivers, for example Roland’s). Because they all run in the same process, a problem in any one driver can take MIDIServer down with it, and every app loses MIDI at the same time.
When MIDIServer quits
- When no app is using MIDI. MIDIServer quits by itself and starts again the next time an app needs MIDI. This is normal and harmless, because no app is connected at that moment.
- When it crashes, for example because of a problem in a MIDI driver plug-in, or when someone runs
killall MIDIServerin Terminal (a common troubleshooting tip). - Unexpectedly. We have also seen MIDIServer quit while MIDIFabric was running and using MIDI. We do not know why.
What you will notice
- MIDI from your keyboard or controller no longer reaches the app.
- Notes and messages the app sends no longer reach your synths. The app shows no error, because from its side the send still succeeds.
- An app you open after this happened works normally, which makes the problem confusing: one app works and another does not.
- Audio MIDI Setup does not notice either. Its display and behavior can become unreliable until you reopen it.
Why many apps do not recover by themselves
macOS does not tell running apps that MIDIServer has gone away, and the app’s MIDI functions keep reporting success. To recover, an app has to notice the loss itself and set up its MIDI connection again (re-initialize Core MIDI). Many apps do not do this, so restarting the app is the reliable fix.
How to tell whether this happened
Open Terminal and run:
ps -o pid=,lstart= -p "$(pgrep -x MIDIServer)"
It shows when the current MIDIServer started. If that time is later than when you opened your music app, MIDIServer has restarted since then, and the app has probably lost its MIDI connection. If the command prints nothing, MIDIServer is not running right now; it will start again when an app needs MIDI.
What to do
- Quit every app that uses MIDI, including Audio MIDI Setup.
- Open them again. MIDIServer starts automatically.
- Before running
killall MIDIServeras a troubleshooting step, quit your music apps first. Otherwise they will lose MIDI as described above. - If it keeps happening, check which drivers are installed in
/Library/Audio/MIDI Driversand whether their makers offer updates. A driver for a device you no longer use can be removed with the maker’s uninstaller.
About MIDIFabric
MIDIFabric keeps checking its connection to MIDIServer and, if it is lost, shows a dialog right away asking you to restart it. The behavior above is in macOS and affects other apps too.