The mobile app for Quorum, the world's first fully private and decentralized group messenger. Powered by Quilibrium and the libp2p stack, Quorum runs over TCP, QUIC, Websockets, or even LoRa — across the traditional internet, local networks, or off-grid setups.
This repository is the React Native + Expo mobile client (iOS and Android).
Available Platforms:
-
Mobile - React Native + Expo (this repo)
-
Web Browser - Live app (beta)
-
Desktop - quorum-desktop (Electron + web)
Quorum is built as a multi-repository ecosystem where shared functionality is centralized:
| Repository | Purpose |
|---|---|
| quorum-mobile | React Native + Expo mobile app (this repo) |
| quorum-desktop | Web + Electron desktop app |
| quorum-shared | Shared types, hooks, sync protocol (@quilibrium/quorum-shared) |
All clients sync via the protocol defined in quorum-shared, so messages, bookmarks, and user settings stay in sync across devices.
- Node.js v20.19.2 (see
.node-version) - Yarn
- For iOS: macOS with Xcode (Xcode 14.0-compatible project format — see
PREBUILD.md) - For Android: Android Studio with NDK
- A local clone of
quorum-sharedalongside this repo (referenced asfile:../quorum-sharedinpackage.json)
yarn installyarn start # Start Expo dev server
yarn android # Build and run on Android
yarn ios # Build and run on iOS
yarn web # Start web versionyarn lint # Run ESLint
npx tsc --noEmit # TypeScript type checkingyarn clean # Clear watchman, Metro, and temp caches- The committed
ios/andandroid/directories are the source of truth for native projects — EAS reads them directly. Do not runexpo prebuild; the npm script is aliased to print a warning and exit. SeePREBUILD.mdfor rationale and the safe-prebuild procedure if you genuinely need it. - Native crypto module lives at
modules/quorum-crypto/— a Rust-based encryption/signing module built with Nitro, with native implementations inandroid/andios/subdirectories.
- Routing: Expo Router (file-based, in
app/) - State: 3-tier — React Context (
context/) for auth and connections, React Query for server state with MMKV persistence, MMKV (react-native-mmkv) for fast local storage - Sync:
@quilibrium/quorum-shared(types, hooks, sync protocol) - New Architecture: Enabled (
app.json)