Personalize your setup
Choose how your application will use Callx. This guide produces an ordered checklist with installation commands, copyable starter files, the relevant configuration pages and a result to verify at each step. Your choices stay in this page; nothing is submitted to a server.
Native owns the call in every UI mode. Incoming system presentation and the accepted-call screen are separate choices.
Your integration path
Start with these packages, then follow every checkpoint below.
flutter pub add callx
flutter pub add callx_livekitYour starter code
Generated for your current choices. TypeScript/TSX for React Native and Expo; Dart for Flutter. Native fragments are labeled separately.
Run in your app directory.
flutter pub add callx
flutter pub add callx_livekit
What you still need to wire up
- These are integration starter files, not a complete backend or a drop-in app. Apply the native checklist below and rebuild before calling setup.
- Keep one Callx instance per app. Native owns incoming presentation and media. Do not answer or join a second media room from an observation callback.
- Request microphone/notification permissions while the app is in use; request camera permission before an explicit camera action. Handle rejected command results in your UI.
- Register refreshed push tokens and refresh media credentials after sign-in/token rotation. End calls and reset credentials on sign-out; rotate the persisted native account generation.
- Supply an authenticated media-token endpoint and your own installation-token registration callback. Authentication, signaling and push delivery belong to your backend.
- Install and discover the native LiveKit adapter before bootstrap.
- Presentation.dart/tsx takes observed native state and app callbacks. Update the presentation controller from each snapshot, rebuild on minimize/expand, and mount the overlay above navigation.
Integration checkpoints
Install and bootstrap
Install the package, apply native configuration and rebuild the app. Expo requires a development build; Expo Go cannot load the native SDK.
Check: Native bootstrap and framework setup complete without errors.
Open this step →Prepare push and permissions
Configure Firebase/FCM on Android and APNs VoIP/signing on iOS. Request microphone and notification permissions as applicable.
Check: The device reports its platform push token. Camera permission is requested before publishing video.
Open this step →Connect your backend
Register installation tokens with the signed-in account. Create a call ID, send the invitation and relay answer/end signals to the native ingress.
Check: The intended device rings once; duplicate or expired invitations do not produce a second incoming screen.
Open this step →Add native LiveKit media
Install the adapter, configure its native discovery and provide an authenticated media-token endpoint. Callx starts media on native acceptance.
Check: Both participants join the same call room using distinct identities. The call becomes active when media connects.
Open this step →Mount the Callx call overlay
Mount one overlay above app navigation, configure branding and provide controls/video views. Keep Home mounted until incoming acceptance.
Check: Answer opens the same call; Back minimizes presentation without ending it. Native system integration remains enabled.
Open this step →Verify the first call and failure paths
Test Answer, Decline, remote end, expiry, duplicate pushes, background and recovery. Then verify video, camera pause and supported PiP behavior.
Check: Record results on the exact OS/build. Emulator success does not replace physical-device or iOS acceptance.
Open this step →
Before you start
- Read the requirements first.
- New to calling? Your backend signals who is calling whom. Your media provider carries microphone/camera tracks. Callx coordinates the native phone lifecycle and your app UI.
- A local console is a development tool, not a hosted backend. Real FCM/APNs trials still require credentials. Browser preview tests presentation without proving native calls.
- Standalone Kotlin/Swift SDKs are in development; the hosted backend and adapters other than LiveKit are planned. None is an available generated integration yet.
- Custom app screens retain CallKit/Telecom integration. There is no shipped Dart/TypeScript switch that disables all native incoming presentation.
Watch Steven call hao.dev7 for the cross-framework emulator demo, or incoming calls on the lock screen for native voice/video acceptance.