Voice & Video
1:1 and group calls up to broadcast scale.
WebRTC SFU built on LiveKit, tuned for mobile networks. Adaptive simulcast, dynacast and hardware acceleration keep calls crisp on a 3G handset and a gigabit laptop alike.
suryacloud is the self-hosted alternative to Agora and ZEGOCLOUD. One SDK for calls, chat, live streaming and recording — running on your own cloud, at roughly half the price.
Powering real-time in
Median glass-to-glass latency
Signalling uptime target
Participants per room
Runs on cloud you own
Calls, ringing, chat, streaming and recording — designed to work together and learned once. Mix what you need; ignore the rest.
1:1 and group calls up to broadcast scale.
WebRTC SFU built on LiveKit, tuned for mobile networks. Adaptive simulcast, dynacast and hardware acceleration keep calls crisp on a 3G handset and a gigabit laptop alike.
Ring real phones — even when the app is closed.
A full signalling layer over WebSockets with push-triggered ringing through FCM and Apple CallKit. Invitations, accept/reject, timeouts and busy states are handled for you.
Drop in a full call screen in an afternoon.
Batteries-included call views for Flutter and Web — grid & spotlight layouts, PiP, mic/camera/speaker controls, mirroring, and hang-up wired to the SDK. Theme it or fork it.
1:1 and group messaging with history.
Realtime messaging with delivery, unread counts, typing indicators, read receipts and paginated history — sharing the same connection as your calls, so there's one socket to manage.
Go from a call to a stadium-scale broadcast.
Promote any room to an RTMP/HLS broadcast for audiences of thousands. Ingest from OBS or a phone, egress to HLS, and pull viewers in at a fraction of streaming-CDN cost.
Compliant recordings, straight to your bucket.
Server-side composite or track recording via egress, written directly to S3-compatible storage you control. Nothing leaves your account — ideal for regulated telehealth and fintech.
An API small enough to hold in your head. The same calls work in Flutter, Web and React Native — no rewrites between platforms.
1import { SuryaCloud } from '@suryacloud/client'23const sc = new SuryaCloud('https://cloud.yourco.com')45// your backend mints the token from an API key6await sc.connect({7 sessionEndpoint: '/api/sc-session',8 userId: 'alice',9})1011sc.onIncomingCall = (call) => ring(call) // show your UIThe pieces a real product needs around media — tenancy, keys, metering, residency — are built in. The same panel we run in production ships with the platform.
Projects, API keys, per-tenant quotas and rotation — the same panel we run in production.
Every participant-minute metered at the edge, with exportable usage for your own invoicing.
Media and recordings stay in the region and account you deploy to. No third-party hop.
Your backend mints short-lived session tokens with an API key. Users never see a secret.
One identical API across Flutter, Web and React Native. Learn it once, ship everywhere.
Docker Compose to a single VM, or Kubernetes for scale. You hold the keys the whole way.
One Docker Compose file brings up the SFU, signalling and control plane on a VM you own. Point a subdomain at it and you're taking real calls — with every byte of media staying inside your account.
Same features. Better data control. A fraction of the per-minute cost. Here's the side-by-side.
| Capability | suryacloud | ZEGOCLOUD | Agora |
|---|---|---|---|
| Where media runs | Your own cloud | Their cloud | Their cloud |
| Video / voice calls | |||
| Offline ringing (CallKit/FCM) | Add-on | ||
| In-app chat included | Separate SKU | Separate SKU | |
| Live streaming | |||
| Recording to your bucket | Their storage | Their storage | |
| Data residency control | Full | Limited | Limited |
| Source-available core | |||
| Per participant-minute | $0.0009 | ~$0.0040 | ~$0.0040 |
| Free tier / month | 10,000 min | 10,000 min | 10,000 min |
Competitor pricing is public list price for HD video, rounded, for comparison only. Your mileage varies with codecs and region.
No black boxes. You can trace a call from your backend token all the way to media flowing through your own SFU.
One Docker Compose file brings up the SFU, signalling and control plane on a VM you own. Point a subdomain at it and you're live.
Your backend calls /v1/session with an API key and gets back a short-lived user token. Secrets never touch the client.
The SDK opens one socket for calls and chat. invite() rings the other user — on a real, locked phone if they're offline.
Accepted calls join a LiveKit room. Tracks are simulcast to the SFU and fanned out, adapting to each viewer's bandwidth.
Real products running calls, chat and offline ringing on suryacloud today.
We swapped ZEGOCLOUD for suryacloud in a weekend. Calls ring on locked phones, chat rides the same socket, and our comms bill dropped by an order of magnitude.
Recordings write straight to our own bucket, so compliance stopped being a blocker. The self-hosted deploy took an afternoon.
One API across Flutter and Web meant our mobile and web teams shipped calling the same week. That never happens.
Get started
Start free with 10,000 participant-minutes every month. Move to your own infrastructure whenever you're ready — the SDKs never change.