Skip to content
New in 3.0.1Backend events from Dart and JavaScript, cancel pushes, Call back fix

CallxNative calls. Your app’s experience.

Incoming and outgoing calls, native audio and video, picture-in-picture and optional call screens for Flutter and React Native, on one shared native core. Your backend, your branding.

Real call · two Android emulators · native Telecom and LiveKitWatch with chapters →
SECURE PIN · NATIVE INCOMING · ANDROID EMULATOR

Incoming calls, even while locked

Voice, video and native call controls · development build.

How this was recorded →

Secure PIN and RequireUnlock on Android 16. Keyguard intervals use timestamped screen captures. Licensed sample clips feed the cameras; people shown are not Callx endorsers. Silent recording; the test checks media connection and remote video, not audible speech. Read the transcript · Download MP4

Latest release: 3.0.1

Backend events from Dart and JavaScript, cancel pushes that stop a ringing Android call, and a fixed missed-call Call back. 3.0.0 added audio routes, DTMF, caller-name updates and call back. Release notes · What has been verified

Start with your app ​

The same call, in either framework ​

ts
import {Callx} from '@bear-block/callx';

const callx = new Callx();
await callx.setup();

// Incoming calls ring natively. Your UI follows the native state.
callx.observe(({call}) => render(call));

// Answer from your own screen; CallKit and Telecom stay in sync.
await callx.answer(callId);
dart
import 'package:callx/callx.dart';

final callx = Callx();
await callx.setup();

// Incoming calls ring natively. Your UI follows the native state.
callx.snapshots.listen((snapshot) => render(snapshot.call));

// Answer from your own screen; CallKit and Telecom stay in sync.
await callx.answer(callId);

Packages ​

PackageFlutter (pub.dev)React Native (npm)
Core: CallKit and Telecom, push ingress, incoming UI, recoverycallx@bear-block/callx
LiveKit audio/video adapter (optional)callx_livekit@bear-block/callx-livekit
Device-trial tools: call console, test pushes, conformance@bear-block/callx-testkit

Choose your call UI ​

Keep your own Dart or TypeScript screens, or use the call overlay and mini-call components with your colors, logo and controls. Native code owns the call lifecycle in either case. Picture-in-picture keeps a compact video or branded layout visible when the user leaves the app (experimental on iOS). A unified configuration for native, custom and supplied UI is planned.

Provider adapters ​

ProviderStatusScope
LiveKitAvailable: audio and videoNative media adapter for Flutter and React Native
Twilio Video / Programmable VoicePlanned nextMedia adapter and a separate provider-managed signaling adapter
Zoom Video SDKPlannedAudio/video media adapter
AgoraPlannedAudio/video media adapter

Only LiveKit has a Callx adapter today. Planned adapters have no installable Callx package or release date. See the provider roadmap for dependencies and the providers queued by demand.

What Callx is not ​

Callx is a library, not a calling service. It does not host signaling, send pushes or relay media. You keep your backend and your media provider; Callx makes the phone side of the call correct. Read why that boundary matters →

Callx is independent open source. Sponsoring it keeps it maintained through every iOS and Android release. Need calls in your app? Work with us.

Released under the MIT License. No telemetry, in the library or on this site.