Skip to main content
This guide sets up the JavaScript SDK in a bare React Native app created with @react-native-community/cli (without Expo). These steps configure the native modules, polyfills, and build transforms the SDK needs for cross-platform compatibility.
Before you start: a bare React Native app and a Dynamic environment ID from the Dynamic dashboard. For an Expo app, use Setup on Expo instead.

Install dependencies

1

Install the core packages

Install the SDK packages and their peer dependencies.
2

Install the polyfills

Install the polyfills required for secure operations.
You may already have some of these polyfills installed. Install only the ones your project is missing.

Feature packages

The packages above cover email, wallet, and session basics. Each feature below needs an extra package — install it only when you use that feature, then follow its guide.
@react-native-community/netinfo is a peer dependency of @walletconnect/react-native-compat — without it, WalletConnect sessions will not reconnect reliably after network changes.

Configure Babel

The SDK ships modern JavaScript syntax that the stock React Native Babel preset does not transform (export * as ns from … and static class blocks). Install the two required transform plugins:
Then add them to your babel.config.js:
babel.config.js
After changing the Babel config, restart Metro with a cleared cache: npx react-native start --reset-cache.

Create a polyfills file

Create a polyfills.ts file at the root of your project. It handles the critical environment shims: the Crypto API, the Buffer implementation, and a window.location shim required for embedded wallets.
polyfills.ts
Using WalletConnect? Install @walletconnect/react-native-compat and add import '@walletconnect/react-native-compat'; as the first import in polyfills.ts, above the random-values shim — the WalletConnect relay client requires it to load before anything WalletConnect-related. See WalletConnect integration.

Load the polyfills first

Import the polyfills as the very first line of your entry point (index.js), so they run before any other application logic:
index.js

Configure the native projects

These steps configure native deep linking. The custom URL scheme and package visibility are needed whenever your app returns from an external app — WalletConnect / external wallets and social (OAuth) login. The JitPack repository and the wc scheme query are WalletConnect-specific — skip them if you don’t use WalletConnect.
The SDK uses a custom URL scheme to return to your app after external wallet interactions and OAuth (social login) flows. Register the same scheme on both platforms (replace myapp with your own scheme). Add to ios/<YourApp>/Info.plist:
Info.plist
Add a second intent filter to your MainActivity in android/app/src/main/AndroidManifest.xml:
AndroidManifest.xml

Declare Android package visibility

On Android 11+, apps must declare which URL schemes they intend to open. Add a <queries> block to AndroidManifest.xml (as a sibling of <application>) so the SDK can open wallet universal links and WalletConnect deeplinks:
AndroidManifest.xml

Add the JitPack Gradle repository (WalletConnect only)

@walletconnect/react-native-compat pulls a native artifact hosted on JitPack. Add jitpack.io to the repositories in android/settings.gradle (or android/build.gradle, depending on where your repositories are declared):
settings.gradle

Rebuild the native app

After adding native modules, reinstall pods and rebuild so the native code is linked.

Initialize the Dynamic client

Create a dynamicClient.ts file in your project root or a shared configuration folder. This client is your primary interface to the SDK.
dynamicClient.ts
metadata.universalLink is required for passkey flows on React Native, and both links are used by WalletConnect to redirect back to your app — set them up front. For a full reference of the options, see Creating a Dynamic Client and Initializing the Dynamic Client.

Next steps

Your bare React Native app is set up. From here, wrap your app in the React hooks provider, add the chains you support, and the rest of your integration works the same as on the web — the guides below apply unchanged unless they show a Bare React Native tab.

Set up the React hooks

Wrap your app in QueryClientProvider and DynamicProvider to use the hooks.

Add the EVM extension

Register EVM (or another chain) so the client can connect wallets and sign.

WalletConnect integration

Connect external wallets over WalletConnect — see the Bare React Native tab for deep linking.

Authenticate with email

Send an email OTP and verify the user.

Build a wallet picker

List wallet providers and connect a wallet.
Running into issues? See Troubleshooting in the Overview docs.
Last modified on July 22, 2026