Skip to main content
is a framework built on React Native that provides many out-of-the-box features, similar to NextJS for web but designed for mobile development. Para provides a @getpara/react-native-wallet package that works seamlessly in both React Native bare and Expo workflows.

Prerequisites

To use Para, you need an API key. This key authenticates your requests to Para services and is essential for integration.
Don’t have an API key yet? Request access to the to create API keys, manage billing, teams, and more.

Dependency Installation

Install the required dependencies:
npm install @getpara/react-native-wallet @react-native-async-storage/async-storage react-native-keychain react-native-modpow react-native-nitro-modules react-native-passkey react-native-quick-base64 @craftzdog/react-native-buffer react-native-quick-crypto viem --save-exact

Project Setup

If you plan to use native passkeys, additional platform configuration (associated domains, SHA-256 fingerprints) is required. See for iOS and Android setup.

Configure Metro Bundler

Create or update metro.config.js so Metro knows how to resolve the Node polyfills Para depends on (for example crypto and buffer). For more details on Metro configuration, see the .
metro.config.js
const { getDefaultConfig } = require("expo/metro-config");

const config = getDefaultConfig(__dirname);

config.resolver.extraNodeModules = {
  crypto: require.resolve("react-native-quick-crypto"),
  buffer: require.resolve("@craftzdog/react-native-buffer"),
};

module.exports = config;

Import Required Shims

Import the Para Wallet shim in your root layout file to ensure proper global module shimming. This ensures that the necessary modules are available globally in your application. Ensure this is the very first import in your root layout file.
app/_layout.tsx
import "@getpara/react-native-wallet/shim";
// ... rest of your imports and layout code
Alternatively, you can create a custom entry point to handle the shimming. This will ensure that the shim occurs before the Expo Router entry point.
Create index.js in your project root and add the following imports:
index.js
import "@getpara/react-native-wallet/shim";
import "expo-router/entry";
Update package.json to point to your new entry file:
package.json
{
  "main": "index.js"
}

Prebuild and Run

Since native modules are required, you’ll need to use Expo Development Build to ensure that linking is successful. This means using the expo prebuild command to generate the necessary native code and then run your app using expo run:ios or expo run:android.
npx expo prebuild
npx expo run:ios
npx expo run:android
You cannot use Expo Go as it doesn’t support native module linking. When running via yarn start, switch to development mode by pressing s, then i for iOS or a for Android.

Initialize the SDK

Set up the Para client singleton and initialize it in your app:
para.ts
import { ParaMobile } from "@getpara/react-native-wallet";

export const para = new ParaMobile(YOUR_API_KEY, undefined, {
  disableWorkers: true,
});
Initialize it in your app entry point:
app/_layout.tsx
import { para } from "../para";
import { useEffect } from "react";

export default function Layout() {
  useEffect(() => {
    const initPara = async () => {
      await para.init();
    };

    initPara();
  }, []);
  // ... rest of your layout code
}
Beta Testing Credentials In the BETA Environment, you can use any email ending in @test.getpara.com (like dev@test.getpara.com) or US phone numbers (+1) in the format (area code)-555-xxxx (like (425)-555-1234). Any OTP code will work for verification with these test credentials. These credentials are for beta testing only. You can delete test users anytime in the beta developer console to free up user slots.
If you’re using a legacy API key (one without an environment prefix) you must provide the Environment as the first argument to the ParaMobile constructor. You can retrieve your updated API key from the Para Developer Portal at https://developer.getpara.com/

Examples

Troubleshooting

If you’re having trouble initializing the Para SDK:
  • Ensure that you’ve called para.init() after creating the Para instance.
  • Verify that you’re using the correct API key and environment.
  • Check that all necessary dependencies are installed and linked properly.
  • Look for any JavaScript errors in your Expo bundler console.
If you’re seeing errors about missing native modules:
  • Ensure you’ve run expo prebuild to generate native code.
  • Run expo run:ios and expo run:android to rebuild your app after adding new native dependencies.
  • Verify that your app.json file includes the necessary configurations for native modules.
If you’re experiencing authentication issues:
  • Double-check that your API key is correct and properly set in your environment variables.
  • Verify you’re using the correct environment (BETA or PRODUCTION) that matches your API key.
  • Ensure your account has the necessary permissions for the operations you’re attempting.
  • Check your network requests for any failed API calls and examine the error messages.
If you’re encountering problems during the Expo build process:
  • Ensure you’re using a compatible Expo SDK version with all your dependencies.
  • Run expo doctor to check for any configuration issues in your project.
  • For EAS builds, check your eas.json configuration and ensure it’s set up correctly for both iOS and Android.
For a more comprehensive list of solutions, visit our .

Next Steps