> ## Documentation Index
> Fetch the complete documentation index at: https://www.cometchat.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Calling SDK

> CometChat Calling SDK v4 - Stable Release - Overview for React Native. This is the stable v4 documentation. Most users should use this version.

<Note>
  🚀 **v5 Beta Available** — The Calling SDK v5 is now available in beta with significant improvements. [Check out the v5 docs →](/calls/react-native/overview)
</Note>

## Overview

CometChat provides voice and video calling capabilities for your React Native application. This guide helps you choose the right implementation approach based on your use case.

## Prerequisites

1. CometChat SDK installed and configured. See the [Setup](/sdk/react-native/setup-sdk) guide.
2. CometChat Calls SDK added to your project:

```bash theme={null}
npm install @cometchat/calls-sdk-react-native
```

For detailed setup instructions, see the [Calls SDK Setup](/calls/v4/react-native/setup) guide.

## Choose Your Implementation

CometChat offers three approaches to implement calling:

<CardGroup cols={3}>
  <Card title="Ringing" icon="phone-volume" href="/calls/v4/react-native/ringing">
    Complete calling flow with incoming/outgoing call UI, accept/reject functionality, and call notifications.
  </Card>

  <Card title="Call Session" icon="video" href="/calls/v4/react-native/call-session">
    Direct call session management. Use with Ringing flow or for custom call initiation logic.
  </Card>

  <Card title="Standalone Calling" icon="phone-flip" href="/calls/v4/react-native/standalone-calling">
    Calls SDK only implementation without the Chat SDK dependency.
  </Card>
</CardGroup>

### Ringing

Use this when you need a complete calling experience with:

* Incoming and outgoing call UI
* Call accept/reject/cancel functionality
* Call notifications via push notifications
* Integration with CometChat messaging

**Flow:** Initiate call → Receiver gets notified → Accept/Reject → Start session

[Get started with Ringing →](/calls/v4/react-native/ringing)

### Call Session

Use this when you need to:

* Start a call session after the Ringing flow completes
* Implement custom call initiation logic with your own UI
* Join participants to a shared session using a session ID

**Flow:** Generate token → Start session → Manage call → End session

[Get started with Call Session →](/calls/v4/react-native/call-session)

### Standalone Calling

Use this when you want:

* Calling functionality without the Chat SDK
* Your own user authentication system
* Minimal SDK footprint

**Flow:** Get auth token via REST API → Generate call token → Start session

[Get started with Standalone Calling →](/calls/v4/react-native/standalone-calling)

## Features

<CardGroup cols={2}>
  <Card title="Recording" icon="circle-dot" href="/calls/v4/react-native/recording">
    Record audio and video calls for playback, compliance, or archival purposes.
  </Card>

  <Card title="Video View Customization" icon="sliders" href="/calls/v4/react-native/video-view-customisation">
    Customize the video call UI layout, participant tiles, and visual appearance.
  </Card>

  <Card title="Presenter Mode" icon="presentation-screen" href="/calls/v4/react-native/presenter-mode">
    Enable screen sharing and presentation capabilities during calls.
  </Card>

  <Card title="Call Logs" icon="list" href="/calls/v4/react-native/call-logs">
    Retrieve and display call history including duration, participants, and status.
  </Card>

  <Card title="Session Timeout" icon="clock" href="/calls/v4/react-native/session-timeout">
    Configure automatic call termination when participants are inactive.
  </Card>
</CardGroup>

<AccordionGroup>
  <Accordion title="Best Practices">
    * Initialize `CometChatCalls` on app startup, right after `CometChat.init()`
    * Use the Ringing flow for user-to-user calls where you need push notification support
    * Use Call Session when building custom call UIs or conference-style experiences
    * Always request camera and microphone permissions before initiating a call
    * Handle call errors gracefully and provide user-friendly feedback
  </Accordion>

  <Accordion title="Troubleshooting">
    * **Calls not connecting:** Verify the Calls SDK is initialized after the Chat SDK and that both use the same App ID and Region
    * **No audio/video:** Check that camera and microphone permissions are granted on both Android and iOS
    * **Push notifications not arriving:** Ensure push notification setup is complete — see the [Push Notifications](/notifications/react-native-push-notifications-android) guide
    * **iOS build fails:** Run `pod install` in the `ios` directory after adding the Calls SDK dependency
    * **Android minSdkVersion error:** Set `minSdkVersion` to 24 or higher in your `build.gradle`
  </Accordion>
</AccordionGroup>

## Next Steps

<CardGroup cols={2}>
  <Card title="Calls SDK Setup" icon="gear" href="/calls/v4/react-native/setup">
    Install dependencies, configure permissions, and initialize the Calls SDK.
  </Card>

  <Card title="Ringing Flow" icon="phone-volume" href="/calls/v4/react-native/ringing">
    Implement the complete incoming/outgoing call experience.
  </Card>

  <Card title="Call Session" icon="video" href="/calls/v4/react-native/call-session">
    Manage call sessions with custom initiation logic.
  </Card>

  <Card title="Call Logs" icon="list" href="/calls/v4/react-native/call-logs">
    Retrieve and display call history for your users.
  </Card>
</CardGroup>
