coderef

WebUSBLimited availability

The WebUSB API exposes USB compatible devices to web pages.

Not yet supported in all major browsers — check the table and provide a fallback.

Browser support

DesktopChrome
1–60Not supported
61+Supportedsince Sep 5, 2017
Current: 155
Edge
12–18Not supported
79+Supportedsince Jan 15, 2020
Current: 154
Firefox
✕Not supportedup to 157
Current: 157
Safari
✕Not supportedup to 27
Current: 27
MobileChrome Android
18–60Not supported
61+Supportedsince Sep 5, 2017
Current: 155
Firefox Android
✕Not supportedup to 157
Current: 157
Safari iOS
✕Not supportedup to 27
Current: 27

How to use

Not supported in Firefox, Safari, Firefox Android, Safari iOS. Use feature detection below and provide a fallback (or a polyfill) for those browsers.

Example

Full syntax and examples are on MDN: usb.

Feature detection

JS · check before using
if ("USB" in globalThis) {
  // USB is available
} else {
  // load a polyfill or use a fallback
}

Sub-features

Support for each part of the feature (106). The overall table above shows when the whole feature works.

Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
Navigator.usb6179✕✕61✕✕
USB6179✕✕61✕✕
USB.connect_event6179✕✕61✕✕
USB.disconnect_event6179✕✕61✕✕
USB.getDevices6179✕✕61✕✕
USB.requestDevice6179✕✕61✕✕
USB.worker_support✕✕✕✕✕✕✕
USBAlternateInterface6179✕✕61✕✕
USBAlternateInterface.USBAlternateInterface6179✕✕61✕✕
USBAlternateInterface.alternateSetting6179✕✕61✕✕
USBAlternateInterface.endpoints6179✕✕61✕✕
USBAlternateInterface.interfaceClass6179✕✕61✕✕
USBAlternateInterface.interfaceName6179✕✕61✕✕
USBAlternateInterface.interfaceProtocol6179✕✕61✕✕
USBAlternateInterface.interfaceSubclass6179✕✕61✕✕
USBAlternateInterface.worker_support✕✕✕✕✕✕✕
USBConfiguration6179✕✕61✕✕
USBConfiguration.USBConfiguration6179✕✕61✕✕
USBConfiguration.configurationName6179✕✕61✕✕
USBConfiguration.configurationValue6179✕✕61✕✕
Show 86 more
Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
USBConfiguration.interfaces6179✕✕61✕✕
USBConfiguration.worker_support✕✕✕✕✕✕✕
USBConnectionEvent6179✕✕61✕✕
USBConnectionEvent.USBConnectionEvent6179✕✕61✕✕
USBConnectionEvent.device6179✕✕61✕✕
USBConnectionEvent.worker_support✕✕✕✕✕✕✕
USBDevice6179✕✕61✕✕
USBDevice.claimInterface6179✕✕61✕✕
USBDevice.clearHalt6179✕✕61✕✕
USBDevice.close6179✕✕61✕✕
USBDevice.configuration6179✕✕61✕✕
USBDevice.configurations6179✕✕61✕✕
USBDevice.controlTransferIn6179✕✕61✕✕
USBDevice.controlTransferOut6179✕✕61✕✕
USBDevice.deviceClass6179✕✕61✕✕
USBDevice.deviceProtocol6179✕✕61✕✕
USBDevice.deviceSubclass6179✕✕61✕✕
USBDevice.deviceVersionMajor6179✕✕61✕✕
USBDevice.deviceVersionMinor6179✕✕61✕✕
USBDevice.deviceVersionSubminor6179✕✕61✕✕
USBDevice.forget101101✕✕101✕✕
USBDevice.isochronousTransferIn6179✕✕61✕✕
USBDevice.isochronousTransferOut6179✕✕61✕✕
USBDevice.manufacturerName6179✕✕61✕✕
USBDevice.open6179✕✕61✕✕
USBDevice.opened6179✕✕61✕✕
USBDevice.productId6179✕✕61✕✕
USBDevice.productName6179✕✕61✕✕
USBDevice.releaseInterface6179✕✕61✕✕
USBDevice.reset6179✕✕61✕✕
USBDevice.selectAlternateInterface6179✕✕61✕✕
USBDevice.selectConfiguration6179✕✕61✕✕
USBDevice.serialNumber6179✕✕61✕✕
USBDevice.transferIn6179✕✕61✕✕
USBDevice.transferOut6179✕✕61✕✕
USBDevice.usbVersionMajor6179✕✕61✕✕
USBDevice.usbVersionMinor6179✕✕61✕✕
USBDevice.usbVersionSubminor6179✕✕61✕✕
USBDevice.vendorId6179✕✕61✕✕
USBDevice.worker_support✕✕✕✕✕✕✕
USBEndpoint6179✕✕61✕✕
USBEndpoint.USBEndpoint6179✕✕61✕✕
USBEndpoint.direction6179✕✕61✕✕
USBEndpoint.endpointNumber6179✕✕61✕✕
USBEndpoint.packetSize6179✕✕61✕✕
USBEndpoint.type6179✕✕61✕✕
USBEndpoint.worker_support✕✕✕✕✕✕✕
USBInTransferResult6179✕✕61✕✕
USBInTransferResult.USBInTransferResult6179✕✕61✕✕
USBInTransferResult.data6179✕✕61✕✕
USBInTransferResult.status6179✕✕61✕✕
USBInTransferResult.worker_support✕✕✕✕✕✕✕
USBInterface6179✕✕61✕✕
USBInterface.USBInterface6179✕✕61✕✕
USBInterface.alternate6179✕✕61✕✕
USBInterface.alternates6179✕✕61✕✕
USBInterface.claimed6179✕✕61✕✕
USBInterface.interfaceNumber6179✕✕61✕✕
USBInterface.worker_support✕✕✕✕✕✕✕
USBIsochronousInTransferPacket6179✕✕61✕✕
USBIsochronousInTransferPacket.USBIsochronousInTransferPacket6179✕✕61✕✕
USBIsochronousInTransferPacket.data6179✕✕61✕✕
USBIsochronousInTransferPacket.status6179✕✕61✕✕
USBIsochronousInTransferPacket.worker_support✕✕✕✕✕✕✕
USBIsochronousInTransferResult6179✕✕61✕✕
USBIsochronousInTransferResult.USBIsochronousInTransferResult6179✕✕61✕✕
USBIsochronousInTransferResult.data6179✕✕61✕✕
USBIsochronousInTransferResult.packets6179✕✕61✕✕
USBIsochronousInTransferResult.worker_support✕✕✕✕✕✕✕
USBIsochronousOutTransferPacket6179✕✕61✕✕
USBIsochronousOutTransferPacket.USBIsochronousOutTransferPacket6179✕✕61✕✕
USBIsochronousOutTransferPacket.bytesWritten6179✕✕61✕✕
USBIsochronousOutTransferPacket.status6179✕✕61✕✕
USBIsochronousOutTransferPacket.worker_support✕✕✕✕✕✕✕
USBIsochronousOutTransferResult6179✕✕61✕✕
USBIsochronousOutTransferResult.USBIsochronousOutTransferResult6179✕✕61✕✕
USBIsochronousOutTransferResult.packets6179✕✕61✕✕
USBIsochronousOutTransferResult.worker_support✕✕✕✕✕✕✕
USBOutTransferResult6179✕✕61✕✕
USBOutTransferResult.USBOutTransferResult6179✕✕61✕✕
USBOutTransferResult.bytesWritten6179✕✕61✕✕
USBOutTransferResult.status6179✕✕61✕✕
USBOutTransferResult.worker_support✕✕✕✕✕✕✕
WorkerNavigator.usb✕✕✕✕✕✕✕
iframe.allow.usb6079✕✕60✕✕
http.headers.Permissions-Policy.usb8888✕✕88✕✕