Web serial
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
The serial read-only property of the Navigator interface returns a Serial object which represents the entry point into the Web Serial API.
When getting, the same instance of the Serial object will always be returned.
Browser support
| Feature | Desktop | Mobile | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
api.Navigator.serial Experimental | 89 | 89 | | | 138 | |
| DOM API | ||||||
Serial Experimental The Serial interface of the Web Serial API provides attributes and methods for finding and connecting to serial ports from a web page. | 89 | 89 | | | 138 | |
getPorts Experimental The getPorts() method of the Serial interface returns a Promise that resolves with an array of SerialPort objects representing serial ports connected to the host which the origin has permission to access. | 89 | 89 | | | 138 | |
requestPort Experimental The Serial.requestPort() method of the Serial interface presents the user with a dialog asking them to select a serial device to connect to. It returns a Promise that resolves with an instance of SerialPort representing the device chosen by the user. | 89 | 89 | | | 138 | |
requestPort (allowedBluetoothServiceClassIds option) Experimental `allowedBluetoothServiceClassIds` option | 117 | 117 | | | 138 | |
requestPort (filters bluetoothServiceClassId) Experimental `filters` `bluetoothServiceClassId` property | 117 | 117 | | | 138 | |
SerialPort Experimental The SerialPort interface of the Web Serial API provides access to a serial port on the host device. | 89 | 89 | | | 138 | |
close Experimental The SerialPort.close() method of the SerialPort interface returns a Promise that resolves when the port closes. | 89 | 89 | | | 138 | |
connect_event Experimental The connect event of the SerialPort interface is fired when the port connects to the device. | 89 | 89 | | | 138 | |
connect_event (bluetooth rfcomm) Experimental Bluetooth RFCOMM serial ports dispatch `connect` events | 130 | 130 | | | 138 | |
connected Experimental The connected read-only property of the SerialPort interface returns a boolean value that indicates whether the port is logically connected to the device. | 130 | 130 | | | 138 | |
disconnect_event Experimental The disconnect event of the SerialPort interface is fired when the port disconnects from the device. | 89 | 89 | | | 138 | |
disconnect_event (bluetooth rfcomm) Experimental Bluetooth RFCOMM serial ports dispatch `disconnect` events | 130 | 130 | | | 138 | |
forget Experimental The SerialPort.forget() method of the SerialPort interface returns a Promise that resolves when access to the serial port is revoked. | 103 | 103 | | | 138 | |
getInfo Experimental The getInfo() method of the SerialPort interface returns an object containing identifying information for the device available via the port. | 89 | 89 | | | 138 | |
getInfo (bluetoothServiceClassId) Experimental `bluetoothServiceClassId` return value property | 117 | 117 | | | 138 | |
getSignals Experimental The SerialPort.getSignals() method of the SerialPort interface returns a Promise that resolves with an object containing the current state of the port's control signals. | 89 | 89 | | | 138 | |
open Experimental The open() method of the SerialPort interface returns a Promise that resolves when the port is opened. By default the port is opened with 8 data bits, 1 stop bit and no parity checking. The baudRate parameter is required. | 89 | 89 | | | 138 | |
readable Experimental The readable read-only property of the SerialPort interface returns a ReadableStream for receiving data from the device connected to the port. Chunks read from this stream are instances of Uint8Array. This property is non-null as long as the port is open and has not encountered a fatal error. | 89 | 89 | | | 138 | |
setSignals Experimental The setSignals() method of the SerialPort interface sets control signals on the port and returns a Promise that resolves when they are set. | 89 | 89 | | | 138 | |
writable Experimental The writable read-only property of the SerialPort interface returns a WritableStream for sending data to the device connected to the port. Chunks written to this stream must be instances of ArrayBuffer, TypedArray, or DataView. This property is non-null as long as the port is open and has not encountered a fatal error. | 89 | 89 | | | 138 | |
serial Experimental The serial read-only property of the WorkerNavigator interface returns a Serial object which represents the entry point into the Web Serial API. | 89 | 89 | | | 138 | |
| Other | ||||||
html.elements.iframe.allow.serial Experimental | 89 | 89 | | | 89 | |
http.headers.Permissions-Policy.serial Experimental The HTTP Permissions-Policy header serial directive controls whether the current document is allowed to use the Web Serial API to communicate with serial devices, either directly connected via a serial port, or via USB or Bluetooth devices emulating a serial port. | 89 | 89 | | | 89 | |
- This browser only partially implements this feature
- Serial ports are only available if they're provided by Bluetooth RFCOMM serial port emulation.
- This browser only partially implements this feature
- Serial ports are only available if they're provided by Bluetooth RFCOMM serial port emulation.
- This browser only partially implements this feature
- Serial ports are only available if they're provided by Bluetooth RFCOMM serial port emulation.
- This browser only partially implements this feature
- Serial ports are only available if they're provided by Bluetooth RFCOMM serial port emulation.
Syntax
const port = await navigator.serial.requestPort();
await port.open({ baudRate: 9600 });
const reader = port.readable.getReader();
const { value } = await reader.read();
console.log('Received:', new TextDecoder().decode(value)); Use cases
-
Use Web serial
Use Web serial when standard HTML needs a more specific platform feature, semantic signal, or browser capability.
-
Handle edge cases
Apply Web serial to solve a focused requirement without redesigning the whole page architecture.
Cautions
- Test Web serial in your target browsers and input environments before depending on it as a primary behavior.
- Provide a fallback path or acceptable degradation strategy when support is still limited.
Accessibility
- Make sure Web serial supports the intended task without making the page harder to perceive, understand, or operate.