This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
The MIDIPort interface of the Web MIDI API represents a MIDI input or output port.
A MIDIPort instance is created when a new MIDI device is connected. Therefore it has no constructor.
MIDIPort.id Read only
Returns a string containing the unique ID of the port.
MIDIPort.manufacturer Read only
Returns a string containing the manufacturer of the port.
MIDIPort.name Read only
Returns a string containing the system name of the port.
MIDIPort.type Read only
Returns a string containing the type of the port, one of:
MIDIPort.version Read only
Returns a string containing the version of the port.
MIDIPort.state Read only
Returns a string containing the state of the port, one of:
"disconnected"The device that this MIDIPort represents is disconnected from the system.
"connected"The device that this MIDIPort represents is currently connected.
MIDIPort.connection Read only
Returns a string containing the connection state of the port, one of:
This interface also inherits methods from EventTarget.
MIDIPort.open()Makes the MIDI device connected to this MIDIPort explicitly available, and returns a Promise which resolves once access to the port has been successful.
MIDIPort.close()Makes the MIDI device connected to this MIDIPort unavailable, changing the state from "open" to "closed". This returns a Promise which resolves once the port has been closed.
statechangeCalled when an existing port changes its state or connection.
The following example lists input and output ports, and displays information about them using properties of MIDIPort.
function listInputsAndOutputs(midiAccess) {
for (const entry of midiAccess.inputs) {
const input = entry[1];
console.log(
`Input port [type:'${input.type}'] id:'${input.id}' manufacturer: '${input.manufacturer}' name: '${input.name}' version: '${input.version}'`,
);
}
for (const entry of midiAccess.outputs) {
const output = entry[1];
console.log(
`Output port [type:'${output.type}'] id: '${output.id}' manufacturer: '${output.manufacturer}' name: '${output.name}' version: '${output.version}'`,
);
}
}
The following example takes the list of input ports and adds them to a select list, in order that a user can choose the device they want to use.
inputs.forEach((port, key) => {
const opt = document.createElement("option");
opt.text = port.name;
document.getElementById("port-selector").add(opt);
});
| Specification |
|---|
| Web MIDI API> # MIDIPort> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
MIDIPort |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
close |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
connection |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
id |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
manufacturer |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
name |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
open |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
state |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
statechange_event |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
type |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
version |
43 | 79 | 108 | 30 | No | 43 | No | 30 | No | 4.0 | 43 | No |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/MIDIPort