Skip to content

Platform Support

PlatformTransportMinimumStatus
Webnavigator.requestMIDIAccess (browser Web MIDI passthrough)Any Web-MIDI-capable browser
iOSCoreMIDI — USB-MIDIiOS 14+
Androidandroid.media.midi — USB-MIDIAPI 24+ (Android 7)
BLE-MIDIBluetooth LE MIDI🔜 planned

On Web, requestMIDIAccess delegates directly to navigator.requestMIDIAccess. This means:

  • Chrome / Edge: full support, no extension needed.
  • Firefox: no native Web MIDI support as of writing; a browser MIDI extension may help.
  • Safari: no native Web MIDI support; a polyfill extension (e.g. Jazz-Plugin) may add it.

The browser handles all MIDI permission prompts itself.

  • Minimum OS: iOS 14.
  • Uses MIDIInputPortCreateWithProtocol + kMIDIProtocol_1_0 + MIDIEventList — modern CoreMIDI, no deprecated callback API.
  • No external native pod required (drops @motiz88/react-native-midi’s external pod dependency).
  • USB-MIDI class-compliant devices are plug-and-play via the Lightning/USB-C camera adapter or directly on USB-C iPads.
  • BLE-MIDI: not yet integrated natively. The consumer app can bridge BLE using react-native-ble-manager in the interim.
  • Minimum SDK: API 24 (Android 7 Nougat).
  • Uses android.media.midi.MidiManager — the standard system MIDI API.
  • USB-MIDI class-compliant devices are plug-and-play via OTG adapter or directly on USB-C devices.
  • BLE-MIDI: not yet integrated natively.

Bluetooth LE MIDI (MIDI over BLE, per the MIDI Association spec) is not yet implemented natively in this library. It is explicitly on the roadmap.

Today’s workaround: use react-native-ble-manager in the consuming app to handle BLE MIDI discovery and data transfer, and pipe messages manually into the library’s event surface.

Want to contribute BLE-MIDI? Open an issue on GitHub to discuss the approach before sending a PR. The tracking issue is Odisei-Music/Odisei-Play#1143.