Architecture at a glance
Understand the control plane, data plane, realtime path, and SDK boundaries before integrating.
Control plane and data plane
The dashboard-facing control plane manages organizations, applications, environments, credentials, channel types, webhooks, usage, audit, and support workflows. The data plane handles app users, channels, memberships, messages, read state, attachments, moderation, and app-user tokens.
| Boundary | Principal | Typical client |
|---|---|---|
| Control plane | Dashboard user session | DashboardClient, OrganizationClient, ApplicationClient, WebhookClient |
| Trusted data plane | Application credential | AppServerClient on your server or worker |
| End-user data plane | Short-lived app-user bearer token | VChatClient, AppUserClient, Flutter VChatClient |
| Realtime | App-user token exchanged for one-use connection ticket | TypeScript or Flutter realtime connection |
Durability and delivery
MongoDB is authoritative. A message mutation and its outbox record commit atomically. Workers publish scoped events after commit. Redis coordinates ephemeral connection, subscription, presence, and typing state; it is not the authority for message history.
- Writes use exact tenant, application, and environment scope.
- Durable channel events carry a monotonic per-channel eventSequence.
- Consumers assume at-least-once delivery and deduplicate by stable eventId.
- Sequence gaps trigger a documented REST reconciliation path.
- Presence and typing are ephemeral, TTL-bound, and never written to Drift.
What your application owns
- Your identity system, user session, and authenticated token endpoint.
- Secure application credential storage on the backend.
- UI state, optimistic presentation, cancellation, pagination, and explicit retry choices.
- Native push provider setup and notification presentation when enabled.
- Monitoring your integration and preserving request IDs for support without logging content or secrets.