> ## Documentation Index
> Fetch the complete documentation index at: https://www.dynamic.xyz/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# React Native Setup

> Run the headless JavaScript SDK in a React Native app — Expo or bare React Native.

The JavaScript SDK is framework-agnostic, so it runs in React Native the same way it runs on the web: you create a Dynamic client, add extensions for the chains you support, and call functions directly. Almost every JavaScript SDK guide applies to React Native unchanged. React Native only adds a few native-specific setup steps — polyfills, native modules, and deep links.

<Warning>
  Install the JavaScript SDK packages (`@dynamic-labs-sdk/client`, `@dynamic-labs-sdk/react-hooks`, `@dynamic-labs-sdk/evm`, …). Do **not** install the older `@dynamic-labs/client` React Native SDK — despite the near-identical name, it is a separate, legacy product with a different API (`createClient()` and a rendered WebView). This guide covers the headless JavaScript SDK only.
</Warning>

<Note>
  Before you start: a React Native app and a Dynamic environment ID from the [Dynamic dashboard](https://app.dynamic.xyz).
</Note>

## Choose your setup

The setup differs depending on how your project is built. Pick the guide that matches your app:

<CardGroup cols={2}>
  <Card title="Expo" icon="mobile-screen" href="/docs/javascript/react-native/expo">
    Set up in an Expo app, using `expo install`, `expo-crypto`, and a custom entry point.
  </Card>

  <Card title="Bare React Native" icon="react" href="/docs/javascript/react-native/bare-react-native">
    Set up in a bare React Native app (`@react-native-community/cli`), including Babel and native project configuration.
  </Card>
</CardGroup>

<Warning>
  Expo Go is not supported. The SDK depends on native modules that are linked only when you build the native app (for example with `npx expo prebuild`). Use a development build, EAS Build, or a bare React Native workflow.
</Warning>

## What's the same as web

Once the client is created and initialized, the rest of your integration is identical to the web SDK. Use the same guides for everything else:

* [Authentication methods](/docs/javascript/authentication-methods/email) — email OTP, SMS, social, passkeys, and more.
* [Adding extensions](/docs/javascript/reference/adding-extensions) — enable the chains you support.
* [Wallets](/docs/javascript/reference/wallets/build-wallet-picker) — build a wallet picker, connect wallets, and manage accounts.

Where React Native behaves differently, the feature guide shows **Expo** and **Bare React Native** tabs next to the web example — the APIs can differ between the two (for example, `expo-linking` versus `react-native`'s `Linking`). When a guide has no such tabs, the web example works as-is.
