---
title: Announcing the Capacitor NFC Plugin
description: The Capacitor NFC plugin by Capawesome lets Ionic and Capacitor apps read, write and emulate NFC tags on Android, iOS and Web, including raw commands.
date: 
  created: 2022-08-17
  updated: 2026-10-19
authors:
  - robingenz
categories:
  - Announcements
  - Capacitor
  - SDKs
links:
  - Capacitor NFC: sdks/capacitor/nfc.md
faq: true
sponsor:
  name: NFC21
  image: /docs/assets/images/sponsors/nfc21-logo.png
  url: https://nfc21.de/?_locale=en&utm_source=capawesome&utm_medium=referral&utm_campaign=capawesome
---

# Announcing the Capacitor NFC Plugin

The [Capacitor NFC plugin](../../sdks/capacitor/nfc.md) from Capawesome reads, writes and emulates Near Field Communication (NFC) tags from Ionic and Capacitor apps on Android, iOS and Web. NFC21 sponsored the development, and the plugin is available through Capawesome Insiders, with the source on [GitHub](https://github.com/capawesome-team/capacitor-plugins){:target="_blank"}. In this post we cover what the plugin does, which tags work with it, what a first scan returns, and what has changed since the release in 2022.

<!-- more -->

<div class="capawesome-z29o10a">
  <a href="https://capawesome.io/" target="_blank">
    <img alt="Ship a fix in one command with Capawesome Cloud Live Updates, no store review" src="https://capawesome.io/assets/banners/cloud-ship-a-fix-in-one-command.png" />
  </a>
</div>

**Key takeaways:**

- The Capacitor NFC plugin was released on August 17, 2022 as `@capawesome-team/capacitor-nfc`, sponsored by NFC21 and available through Capawesome Insiders.
- One API covers Android, iOS and Web: NDEF reading and writing on all three, raw commands on Android and iOS, and Host Card Emulation on Android.
- NDEF tags such as NXP's NTAG213, NTAG215 and NTAG216 work on both platforms, MIFARE Classic is Android-only, and FeliCa needs an extra polling option on iOS.
- Since the release the plugin gained `connect()` and `close()` for raw commands on Android (April 2024), Host Card Emulation (December 2024) and `isEnabled()` on iOS and Web (March 2026).
- NFC is a native capability, so the first scan needs Android manifest entries, the iOS NFC capability and a new native build.

## What it covers

The Capacitor NFC plugin exposes the NFC features of all three platforms behind one API, so the scan code you write once runs on an Android phone, an iPhone and in Chrome on Android:

- **NDEF read and write**: scan a tag and receive its NDEF message, or [`write(...)`](../../sdks/capacitor/nfc.md#write) text, URI, MIME and external records. Tags can be erased, formatted and locked permanently.
- **Raw commands**: send byte-level commands with [`transceive(...)`](../../sdks/capacitor/nfc.md#transceive) to tags and smart cards that use their own protocol, such as NTAG, MIFARE and ISO 7816 cards.
- **Host Card Emulation**: let an Android phone act as the card and answer APDU commands from an external reader through `respond(...)`.
- **Device information**: check NFC support and status with `isSupported()` and `isEnabled()`, open the Android NFC settings, and read the antenna position on Android to guide the user.

We built the plugin from scratch for Capacitor, and NFC21 funded that work. The Web implementation sits on top of the Web NFC API, so a browser build in Chrome on Android works for development without a second code path.

## Which tags work

Most tags you can buy are NDEF-formatted, and NDEF reading and writing works with them on all three platforms. The differences start below NDEF, with the chip and its protocol, because Android and Core NFC expose different tag technologies. The [`NfcTagTechType`](../../sdks/capacitor/nfc.md#nfctagtechtype) enum lists each one with its platforms, and these are the families you will meet most often:

- **NTAG213, NTAG215 and NTAG216**: the NXP chips in most stickers, cards and key fobs, with 144, 504 and 888 bytes of user memory. They work on Android and iOS for NDEF and for raw commands through the MIFARE Ultralight technology.
- **MIFARE Classic**: the older access cards, often 1K or 4K. Android reads them, iOS does not, because Core NFC does not expose the MIFARE Classic technology.
- **MIFARE DESFire and ISO 7816 smart cards**: access badges, transit cards and ID cards. Both platforms exchange APDU commands with them; on Android through ISO-DEP, on iOS through the MIFARE DESFire and ISO 7816 technologies.
- **NFC-V (ISO 15693) tags**: common in libraries, laundry and industrial tracking. Both platforms read them, and iOS takes the request flags and command code as separate options.
- **FeliCa**: the Japanese transit and payment standard. Android reads it as NFC-F, and iOS needs `PollingOption.iso18092` in the scan session.

In the browser, Chrome on Android reads and writes NDEF only. For our own tests we use the NTAG 215 from the [NFC Starter Kit](https://www.nfc-tag-shop.de/en/NFC-Starter-Kit-Medium-12-Piece-Set/17350){:target="_blank"} by NFC21, which bundles twelve tags in different form factors.

## A first look

To install the Capacitor NFC plugin, please refer to the [Installation](../../sdks/capacitor/nfc.md/#installation) section in the plugin documentation. It covers the npm registry setup for Capawesome Insiders, the Android manifest entries, and the iOS capability and `Info.plist` key. Reading a tag is then a scan session with one listener. Start the session, wait for the [`nfcTagScanned`](../../sdks/capacitor/nfc.md#addlistenernfctagscanned) event, and stop the session once the tag arrived:

```typescript
import { Nfc } from '@capawesome-team/capacitor-nfc';

const readFirstTag = async () => {
  await Nfc.addListener('nfcTagScanned', async ({ nfcTag }) => {
    await Nfc.stopScanSession();
    console.log(nfcTag);
  });
  await Nfc.startScanSession();
};
```

On iOS, `startScanSession()` opens the system NFC sheet; on Android, the app starts polling in place. For a blank NTAG 215 on Android, the event carries an object like this, shortened to the fields you will use first:

```ts
{
  id: [4, 161, 23, 42, 206, 97, 128],
  techTypes: ['NFC_A', 'MIFARE_ULTRALIGHT', 'NDEF'],
  isWritable: true,
  canMakeReadOnly: true,
  maxSize: 492,
  message: undefined
}
```

The `id` is the seven-byte serial number of the chip, `maxSize` is the largest NDEF message the tag accepts, and `message` stays `undefined` until something is written. Writing happens in the same listener, while the tag is still in the field. The bundled `NfcUtils` class builds the record:

```typescript
import { Nfc, NfcUtils } from '@capawesome-team/capacitor-nfc';

const writeFirstTag = async () => {
  const { record } = new NfcUtils().createNdefTextRecord({ text: 'Capacitor NFC Plugin' });
  await Nfc.addListener('nfcTagScanned', async () => {
    await Nfc.write({ message: { records: [record] } });
    await Nfc.stopScanSession();
  });
  await Nfc.startScanSession();
};
```

Scan the tag again and `message.records` holds one text record, which `getTextFromNdefTextRecord(...)` decodes back to "Capacitor NFC Plugin". From here the guide [How to Scan and Write NFC Tags with Capacitor](./exploring-the-capacitor-nfc-api.md) takes over with error handling, NDEF parsing, raw commands, card emulation, and the platform differences and errors you will meet on real devices.

## Use cases

Teams use the plugin wherever a physical object has to identify itself to an app. Beyond the inventory, provisioning and app-launch scenarios on the docs page, these are the ones we see most often:

- **Product authentication**: read the originality signature of an NTAG chip with `transceive(...)` to tell a genuine tag from a clone on packaging, spare parts or branded goods.
- **Access control and ticketing**: exchange APDU commands with smart cards and access badges on Android and iOS.
- **Loyalty and membership cards on the phone**: with Host Card Emulation, an Android phone presents itself as the card, and the reader at the counter treats it like a plastic one.
- **Field service check-ins**: a tag on every machine, cabinet or extinguisher; the technician taps it to open the asset and log the inspection with time and place.
- **Business cards and tap-to-share**: write a URI record or a vCard as a MIME record to a sticker, and the other person's phone opens it without installing anything.
- **Event check-in**: wristbands or badges carry an attendee identifier, and staff scan them with the app instead of a dedicated reader.

## Since the release

The plugin shipped in August 2022 with NDEF reading and writing, `makeReadOnly()` and raw commands. The larger additions since then, each with the post that introduced it:

- **April 2024, version 6**: raw commands on Android moved to an explicit `connect()`, `transceive()`, `close()` sequence, and `techType` became an iOS-only option. The [Capacitor 6 update post](./updating-to-capacitor-6.md) lists the migration steps.
- **November 2024**: the `compatibilityMode` option switches iOS to the NDEF-only reader session for tags that only answer there, see the [November 2024 update](./2024-november-update.md).
- **December 2024**: Host Card Emulation on Android, the `manufacturerCode` property and support for the `0x24` command, see the [December 2024 update](./2024-december-update.md).
- **March 2026**: `isEnabled()` works on iOS and Web, where it reflects whether NFC reading is available, see the [March 2026 update](./2026-march-update.md).
- **Version 8**: supports Capacitor 8, with CocoaPods or Swift Package Manager on iOS.

The plugin is used in more than 500 projects and follows every new Capacitor major with a matching release.

## FAQ

### How do I get the Capacitor NFC plugin?

The plugin is part of [Capawesome Insiders](../../insiders/index.md), a subscription for premium SDKs and priority support from the team that maintains them. Insiders get access to the private npm registry and the source code.

### Which platforms does the Capacitor NFC plugin support?

Android, iOS and Web through a single API. NDEF reading and writing work on all three. Raw commands work on Android and iOS, and Host Card Emulation, the NFC settings page and antenna information are Android-only.

### Which NFC tags work with an iPhone?

NDEF tags such as the NTAG213, NTAG215 and NTAG216, MIFARE Ultralight and DESFire, ISO 7816 smart cards, NFC-V tags and FeliCa all work on iOS. MIFARE Classic does not, because Core NFC does not expose it. For a tag you plan to buy in volume, test one sample on both platforms first.

### Is the plugin still maintained?

Yes. Version 8 supports Capacitor 8, and the [Since the release](#since-the-release) section lists what was added over the last years. Missing a feature? [Create a feature request](https://github.com/capawesome-team/capacitor-plugins/issues/new/choose){:target="_blank"} in the GitHub repository.

## Try Capawesome Cloud

NFC support is a native capability, so adding the plugin means a new native build for Android and iOS. Capawesome Cloud builds and signs that app without a Mac, and ships the web layer changes that follow as live updates.

[Try Capawesome Cloud Free](https://capawesome.io){ .md-button .md-button--primary }

## Closing thoughts

Start with the guide [How to Scan and Write NFC Tags with Capacitor](./exploring-the-capacitor-nfc-api.md) for a complete scan on a real device, and keep the [API Reference](../../sdks/capacitor/nfc.md#api) open for the options of each method. The [Demo App](https://github.com/capawesome-team/capacitor-nfc-demo){:target="_blank"} shows the plugin in action on both platforms.

Join the Capawesome [Discord](https://discord.gg/VCXxSVjefW){:target="_blank"} server for questions and subscribe to the Capawesome [newsletter](https://capawesome.io/newsletter/){:target="_blank"} to stay updated.
