Help centre

Answer

Can a PWA access the user’s contacts?

Short answer

A PWA can access contacts only through the Contact Picker API, which opens the device’s native contact picker so the user explicitly selects which contacts to share — there is no way for a site to read the whole address book silently. It is supported on Android Chrome and some other Chromium Android browsers; iOS Safari and desktop browsers do not support it.

By InstantPWA engineering·Reviewed July 25, 2026

How it works

navigator.contacts.select(["name", "email", "tel"], { multiple: true }) opens the system picker and resolves with only the fields and contacts the user chose.

Privacy model

There is no ambient or background access — every use requires a fresh user gesture and an explicit selection dialog each time.

Support

Android Chrome/Chromium only as of 2026; not available on iOS Safari or desktop browsers.

Related
Can a PWA access the camera?
Yes. A PWA can access the camera, microphone, geolocation and file system through the same Web APIs a regular website uses (getUserMedia, showOpenFilePicker, Geolocation). Every capability requires explicit user permission and works cross-platform, though a few APIs (Bluetooth, USB, NFC) are still Chromium-only.
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.
Can a PWA connect to USB devices?
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.
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.