react-native-webrtc/react-native-callkeep
react-native-webrtc/react-native-callkeep has 1,065 GitHub stars and 508 forks. Star changes are not measured yet. Last checked 2026-11-09 11:18 UTC. Last push 2026-10-31.
iOS CallKit framework and Android ConnectionService for React Native
Measured star growth
- in 24h
- Update delayed
- in 7 days
- Update delayed
- in 15 days
- Update delayed
- in 1 month
- Update delayed
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalReact Native CallKeep
React Native CallKeep shows your app's VoIP calls in the phone's own call UI: CallKit on iOS and ConnectionService (Telecom) on Android. Incoming calls ring on the lock screen, calls appear in the system's recents, and the user answers, holds, mutes or hangs up from the system UI.
CallKeep handles the call UI and the system integration. The audio and the signaling come from your VoIP stack, for example react-native-webrtc or a SIP library.
Compatibility
| React Native | Tested with 0.87, New Architecture enabled |
| iOS | React Native's minimum (15.1 with 0.87). Calls need a device: the Simulator has no CallKit service. Tested on iOS 26 and 27 |
| Android | Android 6 (API 23) and later; self-managed mode needs Android 8 (API 26). Calls work on emulators. Tested on Android 10 and 16 |
| Expo | With a development build, not Expo Go: see the Expo guide |
Installation
npm install react-native-callkeep
cd ios && pod install
Then follow the platform setup: iOS and Android.
Quick start
import RNCallKeep from 'react-native-callkeep';
await RNCallKeep.setup({
ios: { appName: 'My App' },
android: {
// Shown when the user has to enable the app's phone account.
alertTitle: 'Permissions required',
alertDescription: 'This application needs to access your phone accounts',
cancelButton: 'Cancel',
okButton: 'OK',
additionalPermissions: [],
},
});
// The user answered, from the system call UI or your app.
RNCallKeep.addEventListener('answerCall', ({ callUUID }) => {
// Connect the call's media, then tell Android the call is active.
RNCallKeep.setCurrentCallActive(callUUID);
});
// The call ended, from the system call UI or your app.
RNCallKeep.addEventListener('endCall', ({ callUUID }) => {
// Hang up the call's media.
});
// An incoming call, typically when your server tells the app about one.
// callUUID is a UUID v4 that identifies the call, for example from the `uuid` package.
RNCallKeep.displayIncomingCall(callUUID, '5551234', 'Alice');
The example app shows every part of the library with simulated calls, on iOS and Android, and explains which file to look at for each part.
Documentation
- Setup and options
- API reference and events
- Guides: incoming calls when the app isn't running (VoIP push), Android self-managed mode, iOS 27 scene life cycle, Expo
- Troubleshooting
- Migrating from an older major version: v2 to v3, v3 to v4
- Changelog
Contributing
Pull requests, issue reports and suggestions are welcome. See CONTRIBUTING.md for how to try a change in an app and what a pull request needs, SECURITY.md to report a vulnerability privately, and the Code of Conduct that applies to everyone taking part.
License
This work is dual-licensed under ISC and MIT. Previous work done by @ianlin on iOS is under the ISC license; the rest of the project is under MIT.
SPDX-License-Identifier: ISC OR MIT
Explore related projects
freeCodeCamp/freeCodeCamp
freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.
458,941 starsdonnemartin/system-design-primer
Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards.
377,575 starsreact/react
The library for web and native user interfaces.
252,483 starsvuejs/vue
This is the repo for Vue 2. For Vue 3, go to https://github.com/vuejs/core
212,624 stars