Jetpack Core-Telecom
Uses androidx.core:core-telecom for modern Android telecom session lifecycle instead of treating ConnectionService as the primary path.
Native Android telecom and call UI for React Native New Architecture — Kotlin, Jetpack Core-Telecom, and TurboModules.
react-native-telecom is an open-source Android telecom library for React Native New Architecture. It provides native incoming and outgoing call UI, Jetpack Core-Telecom session handling, CallStyle notifications, lock-screen full-screen incoming UI, ringtone and vibration, mute, hold, speaker / earpiece / Bluetooth audio routes, DTMF events, and FCM wake support.
The package is implemented as a TurboModule with a TypeScript API and customizable Android XML layouts. It is Android-first (minSdk 26). iOS CallKit support is planned and not available in the current release.
react-native-telecom was created from a production engineering constraint in Alo Voice: the product needed reliable native Android calling behavior while using React Native New Architecture.
The existing react-native-callkeep-based approach created compatibility constraints in the project's New Architecture setup. Instead of treating that only as a JavaScript package problem, I investigated the Android telecom layer and built a Kotlin approach around Jetpack Core-Telecom, CallStyle notifications, and TurboModules.
react-native-callkeep remains a widely downloaded React Native calling package — npm currently shows 50K+ weekly downloads for that ecosystem. react-native-telecom was created from a different requirement: a native Android telecom architecture aligned with the project's React Native New Architecture.
react-native-callkeep on npm ↗ · See the Alo Voice case study
React Native calling app with Telnyx media and native Android call presentation needs.
CallKeep-based integration did not fit the project's New Architecture requirements cleanly.
Moved into Jetpack Core-Telecom, CallStyle, lifecycle, audio session, and FCM wake behavior.
Built a Kotlin TurboModule boundary for telecom + call UI, not a media engine.
Open-sourced as an Android-first package for New Architecture VoIP apps.
The library owns Android telecom session state and call UI. Media engines stay in the application and attach through audio-session events.
TypeScript API: setup, displayIncomingCall, startCall, mute, hold, routes, DTMF, events.
New Architecture native module surface between JS and Kotlin.
Jetpack Core-Telecom session lifecycle and Android Telecom registration.
CallStyle notifications plus full-screen incoming / in-call Activities (overridable XML).
didActivateAudioSession / didDeactivateAudioSession for attaching a media engine.
Telnyx, WebRTC, LiveKit, or similar — connected by the app, not bundled in the library.
Uses androidx.core:core-telecom for modern Android telecom session lifecycle instead of treating ConnectionService as the primary path.
System CallStyle notifications for Answer / Decline / End, with a quieter ongoing notification after answer.
Lock-screen capable full-screen Activity using showWhenLocked and USE_FULL_SCREEN_INTENT patterns documented in the repo.
Default ringtone and vibration behavior that respects silent / vibrate / normal device modes.
Earpiece, speaker, and Bluetooth SCO route control through the library API.
Apps can override rn_telecom_incoming_call.xml and rn_telecom_incall.xml while keeping documented view ids.
react-native-telecom is designed as a TurboModule library for React Native New Architecture. The TypeScript API talks to a Kotlin native implementation rather than relying on a legacy bridge-first calling stack.
That choice matches the Alo Voice requirement: keep native call presentation and telecom lifecycle correct even when the broader app stack is moving onto Fabric / TurboModules.
Related positioning lives in Engineering Focus — Native Android / Kotlin.
react-native-telecom is UI + Telecom infrastructure. It does not ship Telnyx, WebRTC, LiveKit, or Twilio binaries.
Apps show native call UI with displayIncomingCall / startCall, attach media on didActivateAudioSession, and tear media down on didDeactivateAudioSession. Mute and DTMF events can be forwarded into the app's signaling or media SDK.
This is an architectural comparison for New Architecture Android VoIP apps — not a claim that CallKeep is abandoned, deprecated, or broken.
react-native-telecom centers on Jetpack Core-Telecom. react-native-callkeep historically focuses on ConnectionService-era Android calling patterns.
react-native-telecom is TurboModule / New Architecture first. CallKeep remains widely used in existing apps; this package targets projects that need a New Architecture-aligned native boundary.
react-native-telecom is implemented in Kotlin with a TypeScript API surface.
CallStyle notifications plus customizable full-screen incoming and in-call screens.
Neither package is a complete media stack. react-native-telecom documents audio-session events as the integration point for Telnyx, WebRTC, or LiveKit.
react-native-telecom is Android-first today; iOS CallKit is planned. CallKeep already covers CallKit on iOS for many apps.
Supported: Android (minSdk 26)
Not currently supported: iOS CallKit (planned), Web, desktop.
React Native New Architecture is required. Physical devices are recommended for Telecom / CallStyle / full-screen intent testing — emulators are often unreliable for those paths.
react-native-telecom is an open-source Android telecom and call UI library for React Native New Architecture, built with Kotlin, Jetpack Core-Telecom, and TurboModules. It handles native incoming/outgoing call presentation and telecom session lifecycle; it is not a media engine.
It is an Android-focused alternative approach for the same job — native VoIP call UI — built around Jetpack Core-Telecom and React Native New Architecture / TurboModules. It does not claim to be an official CallKeep replacement or that CallKeep is abandoned.
Yes. The project is designed around TurboModules and React Native New Architecture.
No. It provides Android telecom and call UI infrastructure. Media engines such as Telnyx, WebRTC, or LiveKit can be connected through audio-session events. Those SDKs are not bundled.
Not currently. The project is Android-first; iOS CallKit support is planned and not available in the current release.
Current minimum SDK is 26 (Android 8.0).
It originated from Alo Voice engineering work. The project needed reliable native Android calling behavior under React Native New Architecture, and the existing CallKeep-based integration created compatibility constraints. Investigating Jetpack Core-Telecom and building a Kotlin TurboModule layer led to the open-source package.
Yes, through the documented audio-session integration boundary (didActivateAudioSession / didDeactivateAudioSession). Telnyx is not bundled inside the library.
The package includes TelecomPushBridge so native FCM handling can present an incoming call when the JS runtime may not be running. Exact OEM and process-state behavior still depends on Android permissions, OEM policies, and correct high-priority FCM setup.
Abdul Moiz Dev (@itxmoizdev).
Install with npm install react-native-telecom. Maintained by Abdul Moiz Dev (@itxmoizdev).