Skip to content
Getting started

Express vs UIKit 

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

CapabilityExpressUIKit
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—✅
Billingper participant-minuteper minute + MAU

Express — the media engine

Install the Express package:

terminal
1flutter pub add socrits_express livekit_client

Mint 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_handler

Connect 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
Pricing:See Pricing for the per-minute and per-MAU rates. You can switch a project between Express and UIKit anytime from the project page in the console.