Getting started
Socrits comes in two tiers. Express gives you the media engine and nothing else — you build the calling experience. UIKit gives you the whole thing: hosted call invitations, chat, presence and a prebuilt call screen. Pick based on how much you want to build vs. buy.
Which one do I need?
- Express — you already have (or want to build) your own ringing/invitation signalling and call UI, and you only need reliable voice/video media. Lowest cost: billed on participant-minutes only.
- UIKit — you want calling to just work: ring / accept / reject, offline push, 1:1 and group chat, and a drop-in call screen. Billed on participant-minutes plus monthly active users (MAU) for the hosted signalling.
UIKit is built on Express:The UIKit package depends on the Express media core, so you can always drop down to the low-level room API when you need it. Upgrading is a one-line change in the console.
What each tier includes
| Capability | Express | UIKit |
|---|---|---|
| Voice / video media (LiveKit) | ✅ | ✅ |
| Room token helper | ✅ | ✅ |
| Call invitations — ring / accept / reject | — | ✅ |
| Offline ringing (push) | — | ✅ |
| In-app chat (1:1 + groups) | — | ✅ |
| Prebuilt call screen (SocritsCallView) | — | ✅ |
| Whiteboard & AI effects | — | ✅ |
| Billing | per participant-minute | per minute + MAU |
Express — the media engine
Install the Express package:
terminal
1flutter pub add socrits_express livekit_clientMint a token on your backend (see Server & tokens), join the room, and render it with the re-exported livekit_client widgets. You own the ringing and the UI.
lib/call.dart
1import 'package:socrits_express/socrits_express.dart';23// 1) Your backend mints the room token with your sk_ key and returns { url, token }.4// (Never embed the sk_ key in the app — see Server & tokens.)5final t = await SocritsTokenClient(6 'https://your-backend.com/socrits/token',7 headers: {'Authorization': 'Bearer <your-user-jwt>'},8).fetch(room: 'room-123', identity: 'alice');910// 2) Join the media room (publishes mic; video:true also starts the camera).11final room = await SocritsRoom.join(url: t.url, token: t.token, video: true);1213// 3) Render `room` with the re-exported livekit_client widgets, and build your OWN14// ringing / invitation flow and call UI. When done:15await SocritsRoom.leave(room);UIKit — everything included
Install the UIKit package (it pulls in Express under the hood):
terminal
1flutter pub add socrits livekit_client permission_handlerConnect the client, wire the callbacks, and drop in SocritsCallView. Full walkthrough in the Flutter guide.
lib/call.dart
1import 'package:socrits/socrits.dart';23final client = Socrits(baseUrl: 'https://api.socrits.com');4await client.connect(sessionEndpoint: 'https://your-backend.com/socrits/session', userId: 'alice');56client.onIncomingCall = (call) async {7 final room = await client.accept(call); // hosted ring → join8};9client.onCallConnected = (room, mode) {10 // drop-in call screen — see the Flutter guide11 // SocritsCallView(room: room, title: 'Bob', initialCam: mode == CallMode.video)12};1314await client.invite(toUserId: 'bob', mode: CallMode.video); // hosted invitation