Skip to main content
Welcome to Rainbow Wallet! We’re excited that you’re interested in contributing to the Ethereum wallet that lives in your pocket.

Quick Start

Rainbow is a React Native crypto wallet app for iOS and Android. It uses React Navigation, custom Zustand-based store creators for state management, and ethers/viem for blockchain interactions.

Prerequisites

Before you begin, ensure you have:
1

Install nvm

Install Node Version Manager from nvm repository
2

Install Node.js

Install the required Node.js version:
nvm install
On future terminal sessions, run nvm use to activate the correct Node.js version.
3

Install Ruby

Install Ruby (version specified in .ruby-version). macOS system Ruby is too old. Use a version manager such as rbenv or rvm.
4

Enable Yarn

corepack enable

Setup for External Contributors

If you’re an external contributor, follow these steps:
1

Fork the repository

Fork the Rainbow repository on GitHub and clone your fork locally.
2

Configure environment

Copy .env.example to .env and fill in your own API keys:Note: Some features are currently not accessible. We are working with Data Providers to provide open source API Keys.
3

Add Firebase configuration

Provide your own google-services.json in android/app/ from a personal Firebase project registered under the package name me.rainbow.The iOS GoogleService-Info.plist is already in the repo and gets its API key patched from GOOGLE_SERVICE_API_KEY in your .env.
4

Install dependencies

yarn install && yarn setup

Platform-Specific Setup

iOS (macOS only)

1

Install Xcode

Install Xcode from the Mac App Store.
2

Install Watchman

brew install watchman
3

Install bundles and Pods

yarn install-bundle && yarn install-pods

Android

1

Install JDK 17

Do not use the JDK bundled with Android Studio (it’s JDK 21, which causes build failures). On macOS:
brew install --cask zulu@17
2

Configure environment variables

Add to your shell profile (~/.zshrc or ~/.bashrc):
export JAVA_HOME=/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home
export ANDROID_HOME=$HOME/Library/Android/sdk  # macOS
# export ANDROID_HOME=$HOME/Android/Sdk        # Linux
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools
On Linux, also install system dependencies:
sudo apt install libsecret-tools watchman
3

Install Android Studio

Install Android Studio using the standard setup wizard.
4

Configure Android Studio

  • Increase IDE memory: Go to Android Studio > Settings > Memory Settings and set the heap to at least 4096 MB
  • Set Gradle JDK: Go to Settings > Build, Execution, Deployment > Build Tools > Gradle > Gradle JDK and select the JAVA_HOME (Azul Zulu 17) entry
5

Create an emulator

Create an emulator via Android Studio > Device Manager (unless using a physical device).
6

Run first build

Restart any open terminals, then run the first build to generate native headers:
cd android && ./gradlew assembleDebug && cd ..
7

Launch Android Studio properly

Quit Android Studio completely, then reopen it from the terminal:
open -a "Android Studio"  # macOS
Always launch Android Studio this way so it inherits your shell PATH (including node from nvm). Launching from Spotlight or the Dock will cause Gradle sync to fail.

Development Workflow

Running the App

Start Metro in one terminal:
yarn start
Then build and run:
  • iOS: Open ios/Rainbow.xcworkspace in Xcode (not the .xcodeproj) and press Cmd+R, or run:
    yarn ios
    
  • Android: Open the android/ folder in Android Studio, or run:
    yarn android
    

Before Submitting

Before submitting a pull request, ensure your code passes all verification checks:
yarn lint        # Format check + TypeScript + ESLint
yarn test        # Run Jest tests
See Code Conventions and Testing for detailed guidelines.

Getting Help

If you have questions or need help:

Next Steps

Code Conventions

Learn about our coding standards and style guide

Testing Guidelines

Understand our testing requirements and best practices

Pull Request Process

Follow our PR workflow and review process

Working with GraphQL

Learn how to work with GraphQL queries and clients

Build docs developers (and LLMs) love