> ## Documentation Index
> Fetch the complete documentation index at: https://react-native-nfc-kit.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Setup

> Most NFC support questions are setup questions. One page per use case, with both the Expo plugin option and the exact plist and manifest XML for a bare project.

Most NFC support questions are setup questions. A tag that works on Android and
appears not to exist on iOS, a session that fails to open with an error that never
mentions Info.plist, a tag that stops launching the app after an OS upgrade — all
configuration, none of it visible from the JavaScript.

So each page here covers one use case and gives **both routes**:

<CardGroup cols={2}>
  <Card title="Expo" icon="puzzle-piece">
    The plugin options to put in `app.json`.
  </Card>

  <Card title="Bare React Native" icon="screwdriver-wrench">
    The exact plist keys and manifest XML to write by hand, because a bare project has no `prebuild`
    to write them for you.
  </Card>
</CardGroup>

<Info>
  The bare snippets are not transcribed. They are **generated from the config plugin** and compared
  against these pages in CI, so the two routes cannot drift apart.
</Info>

## Pick your page

| You want to                                   | Page                                            |
| --------------------------------------------- | ----------------------------------------------- |
| Read or write NDEF tags                       | [NDEF](/setup/ndef)                             |
| Send APDUs to a smartcard (DESFire, JavaCard) | [ISO 7816](/setup/iso7816)                      |
| Read FeliCa cards                             | [FeliCa](/setup/felica)                         |
| Read MIFARE Classic                           | [MIFARE Classic](/setup/mifare-classic)         |
| Handle a tag that launches your app           | [Background reading](/setup/background-reading) |
| Emulate a card for a terminal                 | [Card emulation](/setup/hce)                    |
| Read an Apple Wallet pass                     | [Apple Wallet passes](/setup/vas)               |
| Read a tag from a browser                     | [Web NFC](/setup/web)                           |
| Install into a bare React Native project      | [Bare React Native](/setup/bare-react-native)   |

## Before anything else: you need a development build

<Warning>
  NFC is native code, so it cannot run in Expo Go. `npx expo run:ios`,
  `npx expo run:android`, `eas build` and `eas build --local` all produce a
  development build that works.

  This is not a temporary state of affairs: Expo Go on the App Store is frozen at
  SDK 54, and Expo now positions it as a learning tool rather than a development
  target.
</Warning>

## How to check what you actually got

Two commands, in order of how much they tell you:

```bash theme={null}
# What the plugin will write, without generating any native code.
npx expo config --type prebuild

# Actually generate it, with the plugin's own logging.
EXPO_DEBUG=1 npx expo prebuild --clean
```

Then read the files.

<CodeGroup>
  ```bash iOS theme={null}
  cat ios/*/Info.plist
  cat ios/*/*.entitlements
  ```

  ```bash Android theme={null}
  cat android/app/src/main/AndroidManifest.xml
  cat android/app/src/main/res/xml/nfc_kit_tech_filter.xml
  ```
</CodeGroup>

If a value you expected is missing, the plugin either was not applied or rejected
your options — it fails the prebuild with a message naming the option rather than
writing something that would match no tag.

## What the plugin refuses to do

Options that would produce a configuration matching nothing are errors, not
warnings:

* An NDEF intent filter with neither a `mimeType` nor a `scheme`.
* A `host` or `pathPrefix` without a `scheme` — Android ignores both, so the
  filter would be far wider than it looks.
* An AID that is not plain hexadecimal, or outside the 5-to-16-byte range that
  ISO 7816 allows.
* A FeliCa system code that is not exactly two bytes.
* An empty tech list, which matches every tag.

Each of these otherwise fails silently at the radio, months later, on someone
else's phone.
