Built to be understood, not just consumed
A small, honest API you can trace end to end. No black boxes between your backend token and media flowing through your own SFU.
Add the client
One package for the browser and React Native; a pub package for Flutter. Everything else — signalling, chat, media — comes through it.
1# Web / React Native2npm i @suryacloud/client livekit-client socket.io-client34# Flutter5flutter pub add suryacloudFrom npm install to a ringing phone in minutes
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 UIPick your platform
Same API surface everywhere. Learn calling once, ship it on mobile and web.
Flutter
suryacloudiOS + Android, with CallKit & FCM ringing built in.
Web / JS
@suryacloud/clientBrowser + React Native. Same API, TypeScript types included.
React Native
@suryacloud/clientShips with the JS SDK — register the WebRTC globals and go.
iOS (Swift)
SuryaCloudKitNative Swift package. On the roadmap.
From zero to a connected call in four steps
No black boxes. You can trace a call from your backend token all the way to media flowing through your own SFU.
Deploy the stack
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.
Mint a session token
Your backend calls /v1/session with an API key and gets back a short-lived user token. Secrets never touch the client.
Connect & ring
The SDK opens one socket for calls and chat. invite() rings the other user — on a real, locked phone if they're offline.
Media flows peer-to-SFU
Accepted calls join a LiveKit room. Tracks are simulcast to the SFU and fanned out, adapting to each viewer's bandwidth.
System status
All operational- Signalling APIOperational
- Media (SFU)Operational
- ChatOperational
- Recording egressOperational
- Push / offline ringingOperational
Ship it
Your first call is one npm install away
Grab a key, mint a token from your backend, and ring a phone before your coffee's cold.