> ## Documentation Index
> Fetch the complete documentation index at: https://docs.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/legacy-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.

> [!NOTE]
>
> Before you start: a React Native app and a Dynamic environment ID from the [Dynamic Console](https://console.dynamic.xyz).

## Choose your setup

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

> [card] [Expo](https://docs.dynamic.xyz/docs/javascript/react-native/expo.md)
>
> Set up in an Expo app, using `expo install`, `expo-crypto`, and a custom entry point.

> [card] [Bare React Native](https://docs.dynamic.xyz/docs/javascript/react-native/bare-react-native.md)
>
> Set up in a bare React Native app (`@react-native-community/cli`), including Babel and native project configuration.

> [!TIP]
>
> Prefer a single guided path? Start with the [React Native Quickstart (JS SDK)](https://docs.dynamic.xyz/docs/javascript/reference/react-native-quickstart.md) — Agent-friendly prompt or Manual embed — then return here for platform-specific details.

> [!WARNING]
>
> An embedded wallet signs inside a WebView that the SDK loads with `metadata.universalLink` as its host origin, so that exact value must be listed under **Allowed Origins** in your environment's [console security settings](https://console.dynamic.xyz). If it isn't, the WebView is rejected and every signing action fails with "The embedded wallet failed to load after exhausting its retry attempts", while reads keep working because they never open it.

> [!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.

## 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](https://docs.dynamic.xyz/docs/javascript/authentication-methods/email.md) — email OTP, SMS, social, passkeys, and more.
* [Adding extensions](https://docs.dynamic.xyz/docs/javascript/reference/adding-extensions.md) — enable the chains you support.
* [Wallets](https://docs.dynamic.xyz/docs/javascript/reference/wallets/build-wallet-picker.md) — build a wallet picker, connect wallets, and manage accounts.

Two features have React Native specifics on their own pages: [Passkeys](https://docs.dynamic.xyz/docs/javascript/react-native/passkeys.md) and [Business Accounts](https://docs.dynamic.xyz/docs/javascript/react-native/business-accounts.md).

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.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.