Architecture overview
How Claire connects mobile, desktop, the API, Matrix, and plugins.
Claire is a unified messenger. The mobile and desktop clients talk to a Bun API. In PLATFORM_MODE=matrix, the API talks to Synapse and mautrix bridges, and messages are stored in Postgres through Supabase.
The moving pieces#
- ClientsReact Native (Expo) on iOS and Android, with the shared web client hosted in Electron on desktop
- APIBun + Express on port 3001
- StoragePostgres via Supabase, with Redis for sessions and queues
- BridgingSynapse (Matrix homeserver) with one mautrix bridge per network
- Extensibilitypackages/plugin-sdk, sandboxed and approval-gated
A single MatrixBridgeAdapter handles every network. Platform differences live in the bridge, not in Claire, so adding a network is mostly a matter of registering its ghost-user prefix and bridge bot.
What this looks like in the product#
The architecture exists to make one thing true: every conversation, from every network, arrives in one inbox with the sender’s real identity intact.
Working without messaging accounts#
Mock mode bypasses live bridges so contributors can develop against realistic data without linking a personal WhatsApp or Telegram account. It is the recommended way to start.