Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/stripe/stripe-terminal-react-native/llms.txt

Use this file to discover all available pages before exploring further.

The SDK ships with an Expo config plugin that automatically configures the native permissions and settings required for both iOS and Android.

Installation

yarn add @stripe/stripe-terminal-react-native

Add the plugin

Add @stripe/stripe-terminal-react-native to the plugins array in your app.json or app.config.js:
app.json
{
  "expo": {
    "plugins": ["@stripe/stripe-terminal-react-native"]
  }
}

Plugin options

You can pass optional configuration to customize the permission descriptions and enable optional features:
app.json
{
  "expo": {
    "plugins": [
      [
        "@stripe/stripe-terminal-react-native",
        {
          "bluetoothBackgroundMode": false,
          "locationWhenInUsePermission": "Location access is required in order to accept payments.",
          "bluetoothPeripheralPermission": "Bluetooth access is required in order to connect to supported bluetooth card readers.",
          "bluetoothAlwaysUsagePermission": "This app uses Bluetooth to connect to supported card readers.",
          "localNetworkUsagePermission": "This app uses the local WiFi network to connect to supported card readers.",
          "tapToPayCheck": false,
          "appDelegate": false
        }
      ]
    ]
  }
}
OptionTypeDescription
bluetoothBackgroundModebooleanAdds bluetooth-central to UIBackgroundModes in Info.plist
locationWhenInUsePermissionstringCustom description for NSLocationWhenInUseUsageDescription
bluetoothPeripheralPermissionstringCustom description for NSBluetoothPeripheralUsageDescription
bluetoothAlwaysUsagePermissionstringCustom description for NSBluetoothAlwaysUsageDescription
localNetworkUsagePermissionstringCustom description for NSLocalNetworkUsageDescription
tapToPayCheckbooleanInjects the TapToPay.isInTapToPayProcess() guard into MainApplication
appDelegatebooleanInjects TerminalApplicationDelegate.onCreate(this) into MainApplication

What the plugin does

When you run expo prebuild (or EAS Build), the plugin automatically applies the following native configuration: iOS (Info.plist)
  • Adds NSBluetoothAlwaysUsageDescription
  • Adds NSBluetoothPeripheralUsageDescription
  • Adds NSLocationWhenInUseUsageDescription
  • Adds NSLocalNetworkUsageDescription
  • Optionally adds bluetooth-central to UIBackgroundModes
  • Adds a blank Swift file required for native modules with Swift files
Android (AndroidManifest.xml)
  • Adds BLUETOOTH_CONNECT and BLUETOOTH_SCAN permissions
  • Adds ACCESS_FINE_LOCATION and ACCESS_COARSE_LOCATION permissions
  • Adds android.jetifier.ignorelist=jackson-core to gradle.properties

Managed vs. bare workflow

In a managed Expo project, the plugin handles all native configuration. You do not need to edit any native files manually.
1

Install the package

yarn add @stripe/stripe-terminal-react-native
2

Add the plugin to app.json

app.json
{
  "expo": {
    "plugins": ["@stripe/stripe-terminal-react-native"]
  }
}
3

Build with EAS Build

The plugin runs automatically during the EAS Build process. No further native configuration is needed.
eas build

Version requirements

This SDK uses @expo/config-plugins version 7.8.4 or above. This corresponds to Expo SDK 50+. If you are on an older Expo SDK, upgrade before adding the plugin.

Build docs developers (and LLMs) love