WebUSB lets websites communicate with USB devices directly — no drivers, no native apps, no plugins. Shipped in Chrome 61+ and Edge. Not available in Firefox or Safari for security reasons.
🔌 What Is WebUSB?
WebUSB is a W3C WICG API exposing the raw USB protocol to web pages — direct access to USB device endpoints without OS class drivers. Devices must not be claimed by kernel drivers, and can opt in by including a WebUSB descriptor with a landing page URL. Chrome displays a notification popup when such devices connect.
🌐 Browser Support
| Browser | Support | Notes |
|---|---|---|
| Chrome 61+ | ✅ Full support | Desktop + Android Chrome |
| Edge 79+ | ✅ Full support | Chromium-based |
| Firefox | ❌ Not supported | Mozilla: OS driver conflicts + fingerprinting risk |
| Safari | ❌ Not supported | Apple has not shipped WebUSB |
⚙️ The API
// Request access — requires user gesture
const device = await navigator.usb.requestDevice({
filters: [{ vendorId: 0x2341 }] // Arduino
});
await device.open();
await device.selectConfiguration(1);
await device.claimInterface(2);
// Send data to device
await device.controlTransferOut({
requestType: 'class', recipient: 'interface',
request: 0x01, value: 0x22, index: 2
}, new Uint8Array([0x03]));
// Read data from device
const result = await device.transferIn(5, 64);
console.log(new TextDecoder().decode(result.data));
🛡️ Security Model
WebUSB requires several security conditions:
🔒 HTTPS Required
WebUSB is only available in secure contexts (HTTPS or localhost).
👆 User Gesture
Device picker can only be opened in response to a user action.
📋 Device Chooser
User must explicitly select device. No automatic enumeration.
🚫 Kernel Claimed
Devices with kernel drivers (HID, serial, etc.) cannot be accessed.
🔓 Open Source Projects
webusb/arduino
Official Arduino WebUSB library. Allows Arduino boards to appear as WebUSB devices with landing page support.
DAPjs
ARM Mbed WebUSB interface for flashing microcontrollers. Used by Lancaster University BBC micro:bit.
avrgirl-arduino
JavaScript library for flashing Arduino boards via WebUSB from the browser.
WebUSB Rockchip
Browser-based flashing tools for Rockchip SoC devices using raw USB protocol.
✅ Summary
WebUSB is a powerful API for browser-to-hardware communication. It works in Chrome and Edge, requires HTTPS and user gesture, and is ideal for DIY hardware projects, educational kits, and professional device interfaces. It is not supported in Firefox or Safari.