The world's first fully private and decentralized group messenger. Powered by Quilibrium and the libp2p stack, Quorum can be used over TCP, QUIC, Websockets, or even LoRa — so it can run across the traditional internet, local networks, or off-grid setups.
Available Platforms:
-
Web Browser - Live app (beta)
-
Desktop - Electron wrapper for native desktop experience
-
Mobile - quorum-mobile (React Native + Expo)
Quorum is built as a multi-repository ecosystem where shared functionality is centralized:
| Repository | Purpose |
|---|---|
| quorum-desktop | Web + Electron desktop app (this repo) |
| quorum-mobile | React Native + Expo mobile app |
| quorum-shared | Shared types, hooks, sync protocol (@quilibrium/quorum-shared) |
All clients sync data via the same protocol defined in quorum-shared, ensuring messages, bookmarks, and user settings stay in sync across all devices.
For detailed documentation on specific features and components, please refer to the .agents/docs directory. You can find the complete index of available documentation in .agents/INDEX.md.
Key Documentation:
- Quorum Ecosystem Architecture - Multi-repo system and shared package
- Component Management Guide - Creating cross-platform components
- Cross-Platform Architecture - How the shared codebase works
The .agents/ folder contains development resources including:
- Architecture documentation and component guides
- Bug reports and solutions
- Task management (pending & ongoing, completed)
- Mobile development guidelines and cross-platform considerations
The src/dev/ folder contains development utilities:
- Dev tools (
/dev) - Hub for the current available development tools - Documentation Viewer (
/dev) - Interactive frontend for browsing docs, tasks, and bug reports from the.agents/folder - Primitives Playground (
/playground) - Web-based testing environment for UI primitives and components - Mobile Playground - Comprehensive testing environment accessible by running the mobile app (see Mobile Development section)
src/dev/tests/harness/ runs the real desktop
client in Node - both sides of a conversation, no browser, no devices. It exists
for the DM transport investigation: reproducing decrypt failures, measuring
send-vs-arrive loss, and testing session recovery unattended.
yarn harness dm-basic # two bots exchange DMs both ways
yarn harness dm-reorder # reproduces the upstream decrypt failure in ~35s
yarn harness dm-loss # send-vs-arrive accounting per directionA sibling harness drives the mobile client the same way
(quorum-mobile/dev/harness/, yarn harness:dm).
Scenarios talk to the production relay and register real accounts, so use throwaway or dedicated test accounts only. The harness README covers setup, the full scenario list, and what the bench deliberately does not cover.
For the investigation these support, start at
.agents/docs/transport-reliability-index.md.
After running yarn dev, you can access the development tools at: http://localhost:[port]/dev
Add ?users=N to any URL to generate mock users/contacts for testing:
# Space members list (1000 mock users)
http://localhost:5173/spaces/{space-id}/{channel-id}?users=1000
# Direct messages list (50 mock contacts)
http://localhost:5173/messages?users=50
localStorage (persistent across sessions):
// Enable mock users (Space members)
localStorage.setItem('debug_mock_users', 'true')
localStorage.setItem('debug_mock_count', '1000')
// Enable mock conversations (DM contacts)
localStorage.setItem('debug_mock_conversations', 'true')
localStorage.setItem('debug_mock_conversation_count', '50')
// Disable
localStorage.removeItem('debug_mock_users')
localStorage.removeItem('debug_mock_conversations')Requires Node.js, plus two sibling repositories cloned next to this one:
your-git-folder/
├── quorum-desktop/ ← this repo
├── quorum-shared/ ← github.com/QuilibriumNetwork/quorum-shared
└── quilibrium-js-sdk-channels/
@quilibrium/quorum-sharedis linked locally, not installed from a registry.package.jsondeclares it as"link:../quorum-shared", soyarn installsymlinks the sibling folder directly intonode_modules. The folder must be named exactlyquorum-sharedand sit next toquorum-desktop, otherwise the install fails. There is no published package to fall back on.
When running locally in a browser, calls to the prod Quorum API are routed through the Vite dev server proxy (see web/vite.config.ts → server.proxy), so the browser only ever talks same-origin and no CORS workaround is needed. You do not need to disable browser CORS or install a CORS-unblocking extension. The proxy is dev-only; production and Electron builds call the API directly and are unaffected.
# 1. SDK: build it and register a global yarn link
cd ../quilibrium-js-sdk-channels/
yarn build
yarn link
# 2. Shared package: install deps and build dist/
# dist/ is gitignored, so a fresh clone ships no build output
cd ../quorum-shared/
yarn install
yarn build
# 3. This repo
cd ../quorum-desktop/
yarn link @quilibrium/quilibrium-js-sdk-channels
yarn installNote the asymmetry: the SDK uses yarn link (a global link registered by the SDK repo), while quorum-shared needs no link command at all, since the link:../quorum-shared entry in package.json makes yarn install create the symlink for you.
The app imports the built output (dist/index.mjs), not the TypeScript source. Editing quorum-shared/src has no effect on this app until you rebuild:
cd ../quorum-shared/
yarn build # one-off rebuild
yarn dev # or watch mode: rebuilds on every saveVite picks up the new dist on the next reload. If the app still serves stale shared code, run yarn dev:clean here to drop Vite's cache.
To run the web app in development:
yarn devTo run in Electron desktop app:
yarn dev
# In another terminal
yarn electron:devTo build for production and preview:
yarn build:previewThe mobile app lives in a separate repository: quorum-mobile
Both apps share code via the @quilibrium/quorum-shared package. See Quorum Ecosystem Architecture for details on the multi-repo setup.
All the existing translations (apart from English) have been created using an LLM.
Communities are welcome to proofread and correct them. We are setting up a dedicated platform to do just that. Proofreading completed for: English, Italian.
- Correct the file:
src/i18n/<locale>/messages.po - Run the command:
This updates the
yarn lingui:compile
messages.jsfile insrc/i18n/<locale>/messages.js. - Commit the changes and push to the remote repository.
- Add the language to
locales.tsin:src/i18n/locales.ts - Run the command:
This creates the
yarn lingui:extract
.pofile insrc/i18n/<new-locale>/messages.po. - Translate the messages in the
messages.pofile.- To translate via LLM, you can use: po-files-translator (even if you choose to use an LLM, it's important to proofread the final text)
- Run the command:
This creates the
yarn lingui:compile
messages.jsfile insrc/i18n/<new-locale>/messages.js. - Commit the changes and push to the remote repository.
Updated: 2026-07-28