Realtime communications backend

Chat, calls and E2EE — the server half, already built.

Ollacore is a production backend for messaging, multi-party audio/video and end-to-end encryption. One Rust service on one Linux VM. You build the apps; the durable ordering, media forwarding, key distribution, push and multi-tenancy are done.

Integration checklist → Quickstart

81 HTTP operations · 2 WebSocket channels · 29 migrations · MIT/Apache-only dependency tree

Your app iOS · Android · Web REST + 2 sockets room-scoped JWT you build this HTTPS /v1/* WS /v1/chat/ws WS /v1/rtc/ws Ollacore one Rust service chat · ordering · outbox SFU · per-sub forwarding E2EE key transport directory · identity worker · jobs · sweeps PostgreSQL — durable, ordered Valkey · RustFS — cache, blobs webhooks → your server FCM · APNs · Web Push RTP media rides UDP direct to the SFU; signalling rides the sockets above.

What ships in the box

Everything below is implemented and verified against a live deployment.

Not a roadmap. Each of these has integration tests running against a real stack on every release, and a production smoke suite on every deploy.

MESSAGING

Durable, strictly ordered

Persisted before delivery, monotonic per-room sequence, idempotent send. Replies, edits, reactions, delivery/read receipts, unread cursors, full-text search, stories.

REALTIME

Gap-free reconnection

Clients resume from their last sequence with deliberate overlap — nothing missed, nothing duplicated. Typing indicators, presence with crash detection.

CALLING

SFU audio, video, screen share

Multi-party with per-subscriber forwarding, multi-device, trickle ICE, TURN relay. Verified with real WebRTC clients and across four browser engines.

ENCRYPTION

E2EE transport, blind relay

Megolm/Olm key distribution with atomic one-time-key issuance and forward-secrecy signalling. The server never holds a key or a plaintext.

IDENTITY

Turnkey phone-OTP directory

Optional: phone signup, contact discovery, direct/group conversations, chat-list inbox and token vending — so you can ship a messenger without building an auth layer.

NOTIFICATIONS

Web Push, FCM and APNs

Presence-aware so only genuinely offline members are notified, with storm cooldown and content-free mode. Incoming calls ring offline devices.


Two ways to integrate

Bring your own users — or don't.

The difference is only who owns identity. Everything downstream — chat, calls, push — is identical.

PATH A · YOU OWN IDENTITY

Server-to-server

Your app-server authenticates the user however you already do, then calls Ollacore with a tenant-pinned API key to provision a room and mint a room-scoped token for the client.

The backend stores no names, emails or phone numbers. Best for embedding chat/calls into an existing product.

PATH B · TURNKEY

Phone-OTP directory

The client talks to Ollacore directly: phone + one-time code, contacts, conversations, and a token per conversation. No app-server of your own required.

You supply your own SMS route and push credentials — we hold no telecom or push account. Best for a standalone consumer messenger.

See both paths, step by step, in the integration checklist →


Evidence, not adjectives

How it is verified

CheckWhat it proves
Integration suites vs a live stackEvery plane exercised against real Postgres, Valkey and object storage — not mocks.
Real WebRTC media through the SFUHeadless peers exchange genuine audio, video and screen-share RTP, in order.
Browser interoperabilityChromium, Firefox, Chrome and WebKit driven against a live stack, media proven by received-byte counters.
Push through Google's real serviceWeb Push verified end-to-end to a service worker, not a local sink.
Production smoke on every deploy13 checks including restart durability; the release is refused if they fail.
Licence compliance, mechanicallyThe whole dependency tree is checked at every release — MIT/Apache/BSD/ISC/Zlib only.
Restore drill from off-site backupMeasured RTO of 64 seconds, with the smoke suite run against the restored data.

What it is not

The limits, stated plainly

You will find these in the docs too. It is cheaper for both of us if you know them now.

No high availability

Single SFU, single VM by design. Host loss is an outage until the machine is rebuilt (~20 minutes). There is no SLA or status page yet.

No client SDKs yet

You integrate against the OpenAPI and AsyncAPI documents by hand, including a thin realtime layer for reconnect semantics. Generated SDKs are planned, not shipped.

You bring SMS and push accounts

OTP delivery and native push use your vendor credentials. We hold no telecom or push account, and DLT/sender registration stays yours.

Capacity is a measured envelope

About 150 concurrent chat sessions and 50+ concurrent uploads per node, with calls bounded structurally. Beyond that is unproven, not promised.


Start with the checklist

Exact endpoints, exact frames, in the order you need them: stand up chat, place a call, and ring an offline phone.

Integration checklist → Read the docs