rainbow Documentation

‒ the Ethereum wallet that lives in your pocket

4,398 stars TypeScript TypeScript 1 file · ~1,658 tokens #defi#ethereum#ethereum-wallet#rainbow#react-native
RAW Doc

Technical Documentation: rainbow-me/rainbow

ℹ️ Provenance: Multi-Tier Ingestion · CodeWiki Reference

Overview (README.md)

🌈️ Rainbow

the Ethereum wallet that lives in your pocket!

📲️ Available on the iOS App Store.

🤖 Android available on the Google Play Store

💻 Browser extension available on, Chrome, Brave, Edge, FireFox, and Arc.

𝕏 Follow us on X

Setup

[!TIP] > Internal developers can also use the rainbow-me/rainbow-setup
script to install all dependencies and configure the project in one step.

Prerequisites

  1. Install mise: curl https://mise.run | sh. See the
    installation docs for shell
    activation (required so tool versions auto-switch when you cd into the repo).
  2. From the repo root: mise install. This installs all pinned tools.
  3. Enable yarn: corepack enable

Internal developers

Set up these before running yarn install, as the postinstall script reads
.env and rainbow-scripts to generate build configs and run prebuild hooks.

  1. Authenticate the GitHub CLI (gh auth login), or
    export a GITHUB_TOKEN with access to our private repos.
  2. Run yarn update-env to install .env (overwrites any existing local .env).
  3. Clone rainbow-me/rainbow-scripts
    into the project root (the postinstall prebuild hooks depend on it).
  4. Install dependencies and run setup: yarn install && yarn setup.

External contributors

  1. Copy .env.example to .env and fill in your own API keys. Note that some
    features are currently not accessible; we are working with our Data
    Providers to provide open source API Keys.
  2. Provide your own google-services.json in android/app/ from a personal
    Firebase project registered under the package name me.rainbow. For Google
    Drive backup/restore to work in your builds, also register your signing
    keystore's SHA-1 fingerprint as an Android OAuth client in that project's
    Google Cloud console.
  3. Install dependencies and run setup: yarn install && yarn setup

The iOS GoogleService-Info.plist is already in the repo and gets its API key
patched by the postinstall script from GOOGLE_SERVICE_API_KEY in your .env.

iOS (macOS only)

  1. Install the Xcode version pinned in .xcode-version.
    Recommended: use the xcodes CLI,
    which reads .xcode-version automatically:
    sh
    brew install xcodesorg/made/xcodes
    xcodes install
    Alternatively, download the pinned version from
    developer.apple.com/download.
    CI and Bitrise build against the same pin, so local parity matters.
  2. Install Watchman: brew install watchman
  3. Install the required bundles and Pods:
    text
    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:

    sh
    brew install --cask zulu@17
  2. Add to your shell profile (~/.zshrc or ~/.bashrc):

    sh
    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 (the standard
    setup wizard is fine).

  4. Increase the IDE memory: Android Studio > Settings > Memory Settings and
    set the heap to at least 4096 MB. This project is large enough that the
    default 2048 MB will cause slow syncs and builds.

  5. Set the Gradle JDK: Settings > Build, Execution, Deployment > Build
    Tools > Gradle > Gradle JDK
    and select the JAVA_HOME (Azul Zulu 17)
    entry. The default points to the bundled JDK 21.

  6. Restart any open terminals so the new environment variables take effect.

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

  8. Run the first build from the terminal to generate native headers that
    Android Studio needs for Gradle sync:

    text
    cd android && ./gradlew assembleDebug && cd ..
  9. Quit Android Studio completely, then reopen it from the terminal so Gradle
    sync picks up the generated headers:

    text
    open -a "Android Studio"  # macOS

    Always launch Android Studio this way so it inherits your shell PATH
    (including node from mise). Launching from Spotlight or the Dock will
    cause Gradle sync to fail with "Cannot run program node".

Developing

Start Metro in one terminal:

text
yarn start

Then build and run:

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

--- METRICS ---