Documentation Index Fetch the complete documentation index at: https://developers.cloudflare.com/realtime/llms.txt Use this file to discover all available pages before exploring further.
Install the RealtimeKit UI Kit using Swift Package Manager:
In Xcode, go to File > Add Package Dependencies.
Enter the package URL: https://github.com/dyte-in/RealtimeKitUI.
Select the version and add the package to your project.
Add the following entries to the Info.plist file. This gives your app permissions to access the camera and microphone, access photos, and install the required fonts and icons.
<key>NSBluetoothPeripheralUsageDescription</key><string>Access Bluetooth to connect to headphones and audio devices during calls.</string><key>NSBluetoothAlwaysUsageDescription</key><string>Access Bluetooth to connect to headphones and audio devices during calls.</string><key>NSCameraUsageDescription</key><string>Access camera to enable video during meetings.</string><key>NSMicrophoneUsageDescription</key><string>Access microphone to enable audio during meetings.</string><key>NSPhotoLibraryUsageDescription</key><string>Access photos to share images during meetings.</string><key>UIBackgroundModes</key><array> <string>audio</string> <string>voip</string> <string>fetch</string> <string>remote-notification</string></array>
The UIBackgroundModes key is used in the Info.plist file of an iOS app to declare the app's supported background execution modes. This key is an array of strings that specifies the types of background tasks that the app supports. By declaring the background modes, the app can continue to run in the background and perform specific tasks even when it is not in the foreground.
Install the RealtimeKit UI Kit by adding the dependency to your pubspec.yaml file:
Set your platform to iOS 13.0 or above in your Podfile:
platform :ios, '13.0'
Add the following entries to the Info.plist file. This gives your app permissions to access the camera and microphone, access photos, and install the required fonts and icons.
<key>NSBluetoothPeripheralUsageDescription</key><string>Access Bluetooth to connect to headphones and audio devices during calls.</string><key>NSBluetoothAlwaysUsageDescription</key><string>Access Bluetooth to connect to headphones and audio devices during calls.</string><key>NSCameraUsageDescription</key><string>Access camera to enable video during meetings.</string><key>NSMicrophoneUsageDescription</key><string>Access microphone to enable audio during meetings.</string><key>NSPhotoLibraryUsageDescription</key><string>Access photos to share images during meetings.</string><key>UIBackgroundModes</key><array> <string>audio</string> <string>voip</string> <string>fetch</string> <string>remote-notification</string></array>
Optional: If you are allowing users to download attachments in chat, add the following permissions to your Info.plist:
The SDK includes an Android foreground service that keeps audio and video running when the app moves to the background. The service starts automatically when a participant joins a meeting and stops when they leave.
By default the service is enabled with generic notification text. To customize the notification or disable the service, pass keepAliveService to the useRealtimeKitClient hook before calling initMeeting:
const [meeting, initMeeting] = useRealtimeKitClient({ keepAliveService: { enabled: true, // set to false to disable entirely title: "Team call", // notification title text: "Tap to return to your meeting", // notification body },});
On Android 13 and above, the SDK automatically requests the POST_NOTIFICATIONS permission so the notification appears in the shade. No additional setup is required.
Minimum supported iOS version: 15.1.
Open your Podfile and set the platform to iOS 15.1:
platform :ios, '15.1'
Add the following permission entries to your Info.plist file:
<key>NSCameraUsageDescription</key><string>Access camera to enable video during meetings.</string><key>NSMicrophoneUsageDescription</key><string>Access microphone to enable audio during meetings.</string><key>NSPhotoLibraryUsageDescription</key><string>Access photos to share images during meetings.</string><key>UIViewControllerBasedStatusBarAppearance</key><false/>
Screen sharing (iOS)
iOS screen sharing requires a Broadcast Upload Extension and additional native setup. Refer to the Screen Share Setup (iOS) guide for full instructions.
Once native setup is complete, pass iOSScreenshareEnabled={true} to RtkMeeting to enable the screen share button in the UI:
You can create an application from the Cloudflare Dashboard ↗, by clicking on Create App.
Optional: You can also use our API reference for creating an application:
curl --location 'https://api.cloudflare.com/client/v4/accounts/<account_id>/realtime/kit/apps' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer <api_token>' \--data '{"name": "My First Cloudflare RealtimeKit app"}'
Note: We recommend creating different apps for staging and production environments.
Create a Meeting
Use our Meetings API to create a meeting. We will use the ID from the response in subsequent steps.
curl --location 'https://api.cloudflare.com/client/v4/accounts/<account_id>/realtime/kit/<app_id>/meetings' \--header 'Content-Type: application/json' \--header 'Authorization: Bearer <api_token>' \--data '{"title": "My First Cloudflare RealtimeKit meeting"}'
Add Participants
Create a Preset
Presets define what permissions a user should have. Learn more in the Concepts guide.
You can create new presets using the Presets API or via the RealtimeKit dashboard ↗.
Note: Skip this step if you created the app in the dashboard—default presets are already set up for you.
Note: Presets can be reused across multiple meetings. Define a role (for example, admin or viewer) once and apply it to participants in any number of meetings.
Add a Participant
A participant is added to a meeting using the Meeting ID created above and selecting a Preset Name from the available options.
The response includes an authToken which the Client SDK uses to add this participant to the meeting room.
Replace <auth-token> with the authToken obtained from the previous step.
Run the application and navigate to the meeting page to see the RealtimeKit Client SDK in action.
npm run dev
Optional: If you are using our ready-made template, run the following command to start the application:
npm i -g vite && npm run dev
Open the app in your browser. To join the meeting, append your auth token to the preview URL:
http://localhost:5173?authToken=<auth_token>
Inside your html application, add the following code:
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Default Meeting UI | RealtimeKit</title> <!-- Import helper to load UI Kit components --> <script type="module"> import { defineCustomElements } from 'https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit-ui@latest/loader/index.es2017.js'; defineCustomElements(); </script> <!-- Import RealtimeKit Core via CDN --> <script src="https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit@latest/dist/browser.js"></script> </head> <body> <rtk-meeting id="my-meeting" show-setup-screen="true" /> <script> const searchParams = new URL(window.location.href).searchParams; const authToken = searchParams.get('authToken'); if (!authToken) { alert( "An authToken wasn't passed, please pass an authToken in the URL query to join a meeting." ); } // Initialize a meeting RealtimeKitClient.init({ authToken, }).then((meeting) => { document.getElementById('my-meeting').meeting = meeting; }); </script> </body></html>
Replace <auth-token> with the authToken obtained from the previous step.
Run the application and navigate to the meeting page to see the RealtimeKit Client SDK in action.
npm run dev
Optional: If you are using our ready-made template, run the following command to start the application:
npm i -g vite && npm run dev
Open the app in your browser. To join the meeting, append your auth token to the preview URL:
http://localhost:5173?authToken=<auth_token>
Load the RTKComponentsModule into your app module. This is typically the app.module.ts file.
This allows you to use the UI components in your component HTML files.
import { NgModule } from '@angular/core';import { BrowserModule } from '@angular/platform-browser';import { RTKComponentsModule } from '@cloudflare/realtimekit-angular';import { AppComponent } from './app.component';@NgModule({declarations: [AppComponent],imports: [BrowserModule, RTKComponentsModule],providers: [],bootstrap: [AppComponent],})export class AppModule {};
Optional: If you are using TypeScript, set allowSyntheticDefaultImports as true in your tsconfig.json.