React Native Phone
Ship a full-screen phone, a floating dynamic island, or your own call controls in a React Native app. The calling engine is the same JsSIP lifecycle as the React package, rebuilt around native media, permissions, audio routing, and touch.
Start with one component
Section titled “Start with one component”npx jsr add @azeer-ui-widget/react-native-phonenpx expo install react-native-webrtc @config-plugins/react-native-webrtc react-native-svgimport { SipPhone, type SipConfig } from "@azeer-ui-widget/react-native-phone";import { useSafeAreaInsets } from "react-native-safe-area-context";
export function PhoneScreen({ config }: { config: SipConfig }) { return <SipPhone config={config} autoConnect variant="screen" insets={useSafeAreaInsets()} />;}Choose your integration
Section titled “Choose your integration”| You need | Start with | Guide |
|---|---|---|
| A dedicated phone screen or tab | SipPhone variant="screen" |
Phone surfaces |
| A phone that floats over every screen | SipPhoneIsland |
Dynamic island |
| Contact suggestions, speed dial, your own call buttons | contacts, speedDial, extraControls |
Contacts & speed dial |
| Your brand, your language | theme.preset, labels, formatNumber |
Themes, identity & motion |
| A phone inside a scroll view, modal, or bottom sheet | variant="card" / variant="sheet" |
Phone surfaces |
| Your own call bar, keypad, or CRM screen | PhoneProvider + usePhone() |
Compose your own |
| Calling without React | PhoneClient from /core |
Compose your own |
How it differs from the web package
Section titled “How it differs from the web package”| Topic | React (web) | React Native |
|---|---|---|
| Media | Browser WebRTC | react-native-webrtc on iOS/Android; browser WebRTC under react-native-web |
| Permissions | Browser prompt | iOS prompt or Android runtime permission; blocked state links to Settings |
| Speaker | Output device (setSinkId) |
Earpiece/loudspeaker routing through an audio-session adapter |
| DTMF | RFC 2833 | RFC 2833 when available, automatic SIP INFO fallback |
| Audio visuals | Web Audio analysers | WebRTC statistics (identical on every platform) |
| Island | Fixed-position panel | Capsule, heads-up banner, swipe gestures, Android Back, iOS escape gesture |
| Lifecycle | Page visibility | Re-registers when the app returns to the foreground |
This release handles one audio call per client. CallKit/ConnectionService, push-woken incoming calls, video, conferencing, recording, and emergency calling are outside its scope; Platforms & recovery explains how to integrate system call UI.