Help centre

Answer

Can a PWA connect to USB devices?

Short answer

Yes, through the WebUSB API, supported on Chrome, Edge and other Chromium desktop and Android browsers. navigator.usb.requestDevice() prompts the user to select a connected USB device, after which the page can send and receive raw USB data — used by tools like Arduino IDE’s web version and firmware flashers. Firefox and Safari do not support WebUSB.

By InstantPWA engineering·Reviewed July 25, 2026

How it works

requestDevice() with an optional vendor/product ID filter opens a native device chooser; once granted, the page communicates using low-level USB transfer methods.

Security model

Requires HTTPS and an explicit per-device user grant; the browser also blocks access to devices already claimed by the OS, like keyboards.

Typical use cases

Hardware configuration tools, firmware updaters, and educational coding boards that would otherwise require a native driver installer.

Related
Can PWAs use Bluetooth?
Partially. The Web Bluetooth API works on Chrome, Edge, Opera (desktop and Android) and Samsung Internet — enough to connect to BLE peripherals like heart-rate monitors, printers and IoT devices. iOS Safari and Firefox do not support it, and Apple has stated no intent to ship it.
Can a PWA read NFC tags?
Yes, but only on Android. The Web NFC API lets a page read and write NDEF-formatted NFC tags using the NDEFReader interface, with an explicit user permission prompt. It is supported on Android Chrome (and other Chromium Android browsers) only — iOS Safari and desktop browsers do not implement Web NFC as of 2026.
What is the Window Controls Overlay API?
The Window Controls Overlay API lets an installed desktop PWA reclaim the title-bar area next to the window’s minimize, maximize and close buttons, so the app can render its own tabs, search bar or menu there instead of leaving it blank — similar to how VS Code’s desktop app uses its title bar. It is enabled via "display_override": ["window-controls-overlay"] in the manifest.
Can a PWA be the default handler for a file type?
Yes, on desktop Chromium browsers. The File Handling API lets an installed PWA declare file_handlers in its manifest, associating file extensions or MIME types with the app so double-clicking a matching file (or right-clicking → Open With) launches the PWA with that file passed in via the launchQueue. This is not supported on iOS or Firefox.
Can a PWA register a custom URL protocol?
Yes. An installed PWA can register itself as the handler for a custom URL scheme (prefixed with "web+", e.g. web+myapp://) using the manifest’s protocol_handlers field, so clicking such a link anywhere on the OS opens the PWA with that URL — the same mechanism native apps use for schemes like mailto: or spotify:. It is supported on Chromium browsers; not on iOS Safari.