React Native Integration

Stacks.js can be integrated into React Native applications to bring blockchain functionality to mobile devices. This tutorial walks you through setting up a React Native project with Expo and configuring it to work with Stacks.js libraries.

Objectives

  • Set up an Expo project configured for Stacks.js

  • Install and configure necessary polyfills for React Native

  • Generate wallets and sign transactions in a mobile app

  • Handle React Native's JavaScript environment limitations

  • Build a working Stacks mobile application

Prerequisites

  • Node.js and npm installed on your development machine

  • Basic knowledge of React Native and Expo

  • Familiarity with Stacks.js concepts

  • iOS or Android device or simulator for testing

Set up the Expo project

Start by creating a new Expo project. The latest version of Expo provides the best compatibility with Stacks.js polyfills.

The boilerplate project includes everything needed to start building. Test the initial setup by running the development server.

Connect your mobile device using the Expo Go app and scan the QR code to verify the base project works correctly.

Install necessary dependencies

React Native's JavaScript environment lacks certain Node.js and browser APIs that Stacks.js requires. Install the core Stacks libraries along with necessary polyfills.

Install the polyfill dependencies as dev dependencies to handle missing APIs.

These polyfills provide:

  • buffer and process for Node.js globals

  • react-native-get-random-values for crypto random values

  • text-encoding for TextEncoder and TextDecoder

  • crypto-browserify and @peculiar/webcrypto for cryptographic functions

Configure Metro bundler

Metro bundler needs configuration to properly resolve Node.js modules. Create a custom Metro configuration file.

Update metro.config.js to map Node.js modules to their React Native-compatible versions.

This configuration ensures that when Stacks.js requests Node.js modules, Metro provides the appropriate polyfills.

Set up global polyfills

Create a polyfill system to make browser and Node.js APIs available in React Native. This requires modifying the app's entry point.

Create the polyfill file

Create polyfill.js to initialize the required global objects.

Create a custom entry point

Create index.js so the app loads polyfills before the UI renders.

Update package.json

Point the app to use the new entry point.

Implement Stacks functionality

With the environment configured, you can now use Stacks.js in your React Native components. Update the main screen to demonstrate wallet generation and transaction signing.

Import Stacks.js modules

Edit app/(tabs)/index.tsx to import the necessary Stacks.js functions.

Set up component state

Create state variables to manage wallet data and user feedback.

Generate a wallet and sign a transaction

Implement the core functionality to create a wallet and sign a transaction.

Build the user interface

Show wallet information and trigger wallet generation from the UI.

Test your implementation

Run the app to verify everything works correctly.

1

Generate new wallet

Press "Generate New Wallet". A new seed phrase appears.

2

Wallet address

After generation, the wallet address displays below.

3

Sign transaction

A transaction is signed (not broadcast) using the generated wallet.

4

Confirm success

A success message confirms signing.

Secure storage: For production apps, never display seed phrases directly. Use secure storage libraries such as react-native-keychain or expo-secure-store.

Try it out

Extend the basic implementation with additional features.

Last updated

Was this helpful?