Web MIDI API works in Chrome 43+, Edge 79+, Opera 30+, Samsung Internet 4+, and Firefox 108+. Safari and iOS do not support it. Learn the API and limits.

Prince Dewani
May 6, 2026
The Web MIDI API is a W3C JavaScript API that lets web pages talk to Musical Instrument Digital Interface (MIDI) hardware through navigator.requestMIDIAccess. It works in Chrome 43+, Edge 79+, Opera 30+, Samsung Internet 4+, and Firefox 108+ behind a Site Permission Add-On, while Safari and Internet Explorer never added support.
This guide covers what the Web MIDI API is, the browsers that support it, the key features, how to enable it, the use cases, and the limitations.
The Web MIDI API is a W3C JavaScript API that lets a web page enumerate, read from, and send messages to Musical Instrument Digital Interface (MIDI) devices over USB and Bluetooth. The W3C Audio Working Group edits the spec, and pages call navigator.requestMIDIAccess to open the permission flow.
Chromium-based desktop and mobile browsers, Samsung Internet, and Firefox 108+ ship the Web MIDI API, while Safari on macOS, Safari on iOS, and Internet Explorer leave it out, so global browser support sits near 78%.
Chrome supports the Web MIDI API from Chrome 43 on Windows, macOS, Linux, ChromeOS, and Android, and the API is on by default in every Chromium release after that. Calls run in secure HTTPS contexts only, and SysEx messages need a separate sysex: true permission grant. Chrome 4 to 42 did not support the API.
Microsoft Edge supports the Web MIDI API from Edge 79, the first Chromium-based release, on Windows, macOS, and Linux. Pre-Chromium EdgeHTML 12 to 18 never added the API. Chromium-based Edge inherits Chrome's permission model, including the separate SysEx grant, and tracks every Chromium release after Edge 79.
Firefox supports the Web MIDI API from Firefox 108 on Windows, macOS, Linux, and Android. The first call to navigator.requestMIDIAccess prompts users with at least one connected MIDI device to install a generated Site Permission Add-On, and the API only resolves once the add-on is approved. The dom.webmidi.enabled preference is true by default in Firefox 108+. Firefox 2 to 107 did not support the API.
Safari does not support the Web MIDI API on macOS in any version. Apple WebKit cited fingerprinting concerns as the reason for not shipping it, and no public WebKit bug tracks an active implementation. macOS users who need a Web MIDI tester can install Chrome, Edge, Opera, or Firefox instead.
Safari on iOS and iPadOS does not support the Web MIDI API in any version. Apple's app store rules force every iOS browser to use the WebKit engine, so Chrome, Edge, and Firefox on iOS inherit the same gap. iPhone and iPad users who need Web MIDI must install Web MIDI Browser, a third-party app from the App Store that bundles its own MIDI plumbing.
Opera supports the Web MIDI API from Opera 30 on Windows, macOS, and Linux, and tracks every Chromium release after that. Opera Mobile supports Web MIDI from Opera Mobile 80 on Android, while Opera Mini does not support it in any version. Opera 9 to 29 did not support the API.
Samsung Internet supports the Web MIDI API from Samsung Internet 4 on Galaxy phones and tablets running Android 6.0 Marshmallow or later. The browser ships the same Chromium MIDI pipeline that Chrome on Android uses. Samsung Internet 1.0 to 3.x did not support the API.
Chrome for Android, Samsung Internet, and Android WebView together expose the Web MIDI API on most modern Android phones, with USB MIDI working through the Android USB host stack. The legacy stock Android Browser, last shipped with Android 4.4 KitKat, never added the API. Firefox for Android picks up Web MIDI from Firefox 108+ with the same Site Permission Add-On rule.
Internet Explorer does not support the Web MIDI API in any version. The API depends on Chromium device-service plumbing that Trident never had. Internet Explorer is end-of-life and out of support, so move any MIDI-dependent web app to Chromium-based Edge, Chrome, or Firefox for any new work.
Note: The Web MIDI API breaks across Safari, iOS, and older Firefox builds. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
The Web MIDI API is built around a permission-gated access object, MIDIInput and MIDIOutput port maps, and event-based message delivery. Every call runs in a secure HTTPS context on a top-level page or in an iframe the parent has unlocked through the midi Permissions-Policy.
The Web MIDI API is on by default in Chrome, Edge, Opera, and Samsung Internet. Firefox needs a one-time Site Permission Add-On the first time a page asks for MIDI access. Safari on macOS and iOS does not expose any toggle to turn it on.
If the console says navigator.requestMIDIAccess is not a function, you are on Safari, iOS, or a Firefox version below 108. Switch to Chrome, Edge, Opera, or Firefox 108+, or fall back to a polyfill such as Jazz-Soft Jazz-Plugin or WebMIDIAPIShim for older builds.
The Web MIDI API powers production apps that need direct, low-latency access to keyboards, drum pads, controllers, and synthesizers. Browser-based DAWs, music education platforms, and live performance tools all ship on it.
Paste this snippet into the DevTools console of Chrome, Edge, Opera, or Firefox 108+ over HTTPS. Connect a MIDI keyboard, then play any note to see the raw status, note number, and velocity stream into the console.
// Paste this into the DevTools console of Chrome, Edge, Opera, or Firefox 108+ over HTTPS.
// Connect a MIDI keyboard or controller, then play any note.
if (navigator.requestMIDIAccess) {
console.log("Web MIDI API is available.");
navigator.requestMIDIAccess({ sysex: false }).then((access) => {
for (const input of access.inputs.values()) {
console.log("Input port:", input.name, "from", input.manufacturer);
input.onmidimessage = (event) => {
const [status, note, velocity] = event.data;
console.log("status 0x" + status.toString(16), "note", note, "velocity", velocity);
};
}
access.onstatechange = (event) => {
console.log("Port", event.port.name, "is now", event.port.state);
};
}, (err) => {
console.error("MIDI access failed:", err.message);
});
} else {
console.log("Web MIDI API is not supported in this browser.");
}If the console prints Web MIDI API is not supported in this browser, you are on Safari, iOS, or a Firefox build older than 108. Fall back to a polyfill or guide users to Chrome, Edge, or Firefox 108+ for a smoother input path.
The Web MIDI API has a smaller footprint than most modern device APIs. The painful edges show up around the Safari and iOS gap, the Firefox Site Permission Add-On flow, and the security rules layered on top of MIDI access.
In my experience, the trickiest failure is the Firefox Site Permission Add-On flow paired with a single-page app. A page that calls requestMIDIAccess on mount before the user has clicked anywhere never triggers the install dialog, so the Promise sits pending forever. Wire the call to a real button click and the dialog appears the first time.
All Web MIDI API version numbers and platform notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance