Testing

Web NFC: Browser Support, API, Limitations

Web NFC works in Chrome for Android 89+, Edge for Android, Opera for Android, and Samsung Internet. Firefox, Safari, iOS, and desktop browsers do not support it.

Author

Prince Dewani

May 1, 2026

Web NFC is a W3C JavaScript API that lets web pages read and write NFC Data Exchange Format messages on nearby NFC tags through NDEFReader. It works in Chrome for Android 89+, Edge for Android, Opera for Android, and Samsung Internet, while Firefox, Safari, iOS, and desktop browsers lack support.

This guide covers what Web NFC is, the browsers that support it, the key features, how to read and write tags, the use cases, and the known issues.

What is Web NFC?

Web NFC is a JavaScript API that lets a web page read, write, and lock NFC tags through the NDEFReader interface. The W3C Web NFC Community Group edits the spec, and the API is limited to NDEF messages, the NFC Forum's lightweight binary format. Low-level I/O and host card emulation are out of scope.

Which browsers does Web NFC support?

Web NFC ships only on Chromium-based Android browsers. Firefox, Safari on macOS, Safari on iOS, every desktop Chromium browser, and Internet Explorer leave it out, so global browser support sits at about 6% as of April 2026.

Loading browser compatibility data...

Web NFC compatibility in Chrome

Chrome for Android supports Web NFC from Chrome 89, the version where the API moved out of origin trial and shipped on by default. Chrome 80 to 88 had Web NFC behind chrome://flags/#enable-experimental-web-platform-features as part of the origin trial. Chrome on Windows, macOS, Linux, and ChromeOS does not support Web NFC in any version, since the API is restricted to Android.

Web NFC compatibility in Edge

Edge for Android supports Web NFC from Edge 89 on Android phones and tablets, since it tracks the Chromium engine. Edge on Windows, macOS, and Linux does not support Web NFC, because Chromium itself does not ship the API on desktop. Pre-Chromium EdgeHTML versions 12 to 78 never added Web NFC.

Web NFC compatibility in Firefox

Firefox does not support Web NFC in any version on Windows, macOS, Linux, or Android. Mozilla has marked Web NFC as harmful in its public standards-positions list, citing tracking and privacy risks tied to silent tag reads. There is no about:config preference that turns Web NFC on, and Mozilla has no engineer publicly assigned to the work.

Web NFC compatibility in Safari

Safari does not support Web NFC on macOS, iPadOS, or iOS. Apple ships Core NFC for native iOS apps but has not added Web NFC to WebKit, and Safari Technical Preview also leaves the API out. iPhone and iPad users running the latest iOS see NDEFReader as undefined, with no flag to enable in Settings.

Web NFC compatibility in Opera

Opera for Android supports Web NFC from Opera Mobile 64 on Android, since it tracks Chromium 89 and later. Opera on Windows, macOS, and Linux does not support Web NFC, mirroring the Chromium desktop gap. Opera Mini and the legacy Opera Presto builds do not expose Web NFC in any version.

Web NFC compatibility in Samsung Internet

Samsung Internet supports Web NFC from version 15 on Galaxy phones and tablets, since it tracks the Chromium 89 engine. Samsung Internet 4.0 to 14 did not support Web NFC. The feature flag is on by default in current builds, so Galaxy users do not need to flip a setting in the Samsung Internet app.

Web NFC compatibility in Android Browser

Chrome for Android is the reference Web NFC implementation and supports the API from Chrome 89 on any Android device with NFC hardware and Android 6.0 or later. The legacy stock Android Browser based on WebView 2.x to 4.x never added Web NFC. Firefox for Android does not support Web NFC, so Gecko-based Android builds skip the API.

Web NFC compatibility in Internet Explorer

Internet Explorer does not support Web NFC in any version. The API depends on the Chromium device service plumbing on Android, which Trident and pre-Chromium EdgeHTML never had. Microsoft has retired Internet Explorer 11, so move NFC-dependent web apps to Chrome for Android, Edge for Android, Opera for Android, or Samsung Internet for any new work.

Note

Note: Web NFC breaks across Firefox, Safari, iOS, and every desktop browser. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!

What are the key features of Web NFC?

Web NFC exposes a small, focused surface around the NDEFReader object. The headline features cover scanning, writing, locking, permissions, and NDEF record types.

  • NDEFReader.scan: Starts listening for NDEF messages on nearby tags. The call returns a Promise that resolves once the user grants the nfc permission, and a reading event fires every time the device touches a tag.
  • NDEFReader.write: Writes an NDEF message to the next tag the user touches. The page passes a string, an ArrayBuffer, or an array of NDEFRecord objects, and the browser handles tag formatting and chunking.
  • NDEFReader.makeReadOnly: Locks the next tag the user touches, so no future write call from any page or app can change its contents. The change is permanent and cannot be undone in software.
  • NDEFRecord types: Supports text, url, absolute-url, mime, smart-poster, and external NFC Forum record types, plus an empty record. Each record carries a recordType, mediaType, encoding, lang, and data buffer.
  • AbortController integration: Cancels an in-flight scan or write by passing an AbortSignal. Useful for stopping reads when the user navigates away from the page or hides the tab.
  • Permissions API hook: The nfc permission name plugs into navigator.permissions.query, so a page can check granted, prompt, or denied state without firing a scan first.
  • Page Visibility integration: Web NFC pauses scans and writes when the tab is hidden and resumes when it is visible again. Background tabs cannot read tags silently.
  • Secure context and user gesture: Both scan and write require an HTTPS origin and a real user activation. Both rules are enforced inside the browser, not the page, so they cannot be bypassed by a script.

How do you read and write NFC tags with Web NFC?

You read and write NFC tags by feature-detecting NDEFReader, creating a reader instance from a user gesture, and calling scan or write. The first call triggers the nfc permission prompt; on grant, the reading event fires every time the phone touches a tag.

A scan listens until the page calls abort or the tab is closed. A write resolves on the next tag touch and supports plain strings for URLs, NDEFRecord arrays for mixed content, and an explicit signal option for cancellation.

Paste this snippet into the DevTools console of Chrome for Android 89+, Edge for Android, Opera for Android, or Samsung Internet. Tap the page once to grant the nfc permission, then tap any NFC tag.

// Paste this into the DevTools console of Chrome for Android 89+ to test Web NFC.
if ("NDEFReader" in window) {
  console.log("Web NFC is available.");

  document.body.addEventListener("click", async () => {
    const reader = new NDEFReader();

    try {
      await reader.scan();
      console.log("Scan started, tap a tag.");

      reader.addEventListener("readingerror", () => {
        console.log("Could not read the tag.");
      });

      reader.addEventListener("reading", ({ message, serialNumber }) => {
        console.log("Tag serial:", serialNumber);
        for (const record of message.records) {
          console.log("Record type:", record.recordType);
        }
      });
    } catch (error) {
      console.log("Web NFC scan failed:", error.message);
    }
  }, { once: true });
} else {
  console.log("Web NFC is not supported in this browser.");
}

If the console prints "Web NFC is not supported in this browser", you are running Firefox, Safari, iOS, or a desktop browser. Fall back to a native helper app or a Trusted Web Activity for those visitors.

...

What are the use cases of Web NFC?

Web NFC fits any flow where a phone tap on a sticker or wristband should trigger a web action without installing an app. The strongest production use cases sit in retail, events, museums, and inventory.

  • Museum and gallery exhibits: A visitor taps an NFC sticker next to an exhibit and the page shows artist notes, audio, or a 3D model. The exhibit team writes the URL to the sticker once with makeReadOnly.
  • Event badges and conference check-in: Conference staff write attendee IDs to wristbands or lanyards, and a kiosk page reads the ID on tap to mark check-in or unlock a session.
  • Retail product labels and authenticity: Brands embed NDEF tags with a product URL or signed serial. Shoppers tap the label to confirm authenticity, see manuals, or open a return-portal page.
  • Inventory and asset tracking: Warehouse staff tap a Chrome for Android device against a tagged crate, and the page writes a new lot number, expiry, or location to the tag in place.
  • Smart poster campaigns: A printed poster with an embedded tag opens a campaign URL, app deeplink, or video on tap. The smart-poster record type carries title, action, and language.
  • Guided device provisioning: A phone web app reads a Wi-Fi credential or MQTT broker address from a tag on the side of a smart light or printer, then walks the user through the rest of setup over HTTPS.
...

What are the known issues with Web NFC?

Web NFC ships in only one engine on one OS, so the painful edge cases land on the iOS and desktop gap, the user-gesture rule, the NDEF-only scope, and tag-format quirks.

  • Android-only, never desktop: Web NFC ships in Chromium for Android only. Chrome, Edge, and Opera on Windows, macOS, Linux, and ChromeOS do not expose NDEFReader, even when the host machine has an NFC reader plugged in.
  • No iOS, no iPadOS, no Safari: Every iOS browser is forced onto WebKit, and WebKit has not shipped Web NFC. iPhone and iPad users need a native iOS app built on Core NFC, since there is no flag, profile, or beta channel to turn the web API on.
  • Firefox calls Web NFC harmful: Mozilla flags Web NFC as harmful in its standards-positions list, citing privacy and tracking concerns. Sites that need NFC on Firefox must ship a native helper or guide users to Chrome, Edge, or Opera for Android.
  • NDEF-only, no raw tag I/O: The spec is limited to NDEF messages on passive tags. ISO-DEP, NFC-A, NFC-B, NFC-F, and host card emulation are out of scope, so EMV cards, transit cards, and e-passports cannot be read or emulated.
  • scan and write need a user gesture: Chrome throws DOMException "NotAllowedError" if scan or write runs from a setTimeout, fetch callback, or page-load handler. Always wire both calls to a click, tap, or keypress.
  • Tag format and capacity quirks: NTAG213 stickers hold about 132 bytes of NDEF; NTAG215 about 480 bytes; NTAG216 about 868 bytes. Long URLs or multi-record messages can fail with NotSupportedError on smaller tags, and some Mifare Classic tags reject NDEF writes outright.
  • Page Visibility and abort gotchas: A scan pauses on tab hide and resumes on show, but a write rejected mid-tap surfaces as "AbortError". Pages must reattach the reading listener and prompt the user to tap again, since the original Promise is already settled.
  • HTTPS or localhost only: Web NFC refuses to run on plain HTTP origins. Local development needs http://localhost or a self-signed HTTPS certificate, since file:// and chrome-untrusted:// pages also fail the secure-context check.

In my experience, the most common shipping bug is silent failure on tags with a tiny capacity. A campaign that works on a 868-byte NTAG216 prototype throws NotSupportedError on the production NTAG213 stickers, because the URL plus the smart-poster wrapper crosses the 132-byte ceiling. Always test on the exact tag SKU you will ship, not just the engineering bench tag.

Citations

All Web NFC version numbers and platform notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests