// the find
rainbow-me/rainbow
🌈‒ the Ethereum wallet that lives in your pocket
Rainbow is a production Ethereum wallet for iOS and Android, built in React Native, with a browser extension. It's a real consumer product with hundreds of thousands of users, not a toy wallet tutorial — the codebase covers DeFi swaps, NFTs, WalletConnect, hardware wallet support, and cross-chain assets.
The multi-icon system for Android is surprisingly well-executed — 20+ alternative app icons each with proper adaptive icon layers, which most wallet apps skip entirely. The native module layer is thoughtfully separated: haptics, BIP39, gesture handling, and navbar height each get their own package rather than one monolithic bridge. The CI setup pins Xcode versions and runs E2E tests on both platforms via separate workflows, which is the minimum bar for shipping a financial app. The postinstall prebuild hook pattern (reading .env to generate build configs before yarn finishes) is a clean way to handle the secret-injection problem without custom scripts scattered everywhere.
External contributors are essentially second-class: several API keys are noted as 'not currently accessible' with a vague promise to sort it out with data providers, which means you can't run a meaningful local build without connections inside the team. The Android setup doc tells you to launch Android Studio from the terminal every time to inherit nvm PATH — that's a known React Native footgun they've documented instead of fixed, e.g. with a wrapper script. The dependency surface is enormous (React Native + Reanimated + WalletConnect + dozens of native modules) and the postinstall hooks depend on a private repo (rainbow-scripts), making the build fragile for anyone outside the org. No mention of how private keys are stored or what security review the keychain/keystore integration has gone through — surprising omission for a project where a bug means users lose money.