Build using UI Kit
The default RealtimeKit Meeting UI component gives you a complete meeting experience out of the box, with all the essential features built in. Just drop it into your app and you are ready to go.
Select a framework based on the platform you are building for.
Please install the following dependencies into your project repository:
npm i @cloudflare/realtimekit-react @cloudflare/realtimekit-react-uiOptional: You can also build on top of our ready-made template:
git clone https://github.com/cloudflare/realtimekit-web-examples.git cd realtimekit-web-examples/react-examples/examples/default-meeting-uiPlease install the following dependencies into your project repository:
npm i @cloudflare/realtimekit-web @cloudflare/realtimekit-uiOptional: You can also build on top of our ready-made template:
git clone https://github.com/cloudflare/realtimekit-web-examples.gitcd realtimekit-web-examples/html-examples/examples/default-meeting-uiPlease install the following dependencies into your project repository:
npm i @cloudflare/realtimekit-angular @cloudflare/realtimekit-angular-uiOptional: You can also build on top of our ready-made template:
git clone https://github.com/cloudflare/realtimekit-web-examples.gitcd realtimekit-web-examples/angular-examples/examples/default-meeting-uiAdd the following dependencies to your build.gradle file:
dependencies { implementation 'com.cloudflare.realtimekit:core:1.5.5' // Optional: Add UI components for Android implementation 'com.cloudflare.realtimekit:ui-android:0.3.0'}Install the RealtimeKit SDK using Swift Package Manager:
- In Xcode, go to File > Add Package Dependencies.
- Enter the package URL:
https://github.com/dyte-in/RealtimeKitCoreiOS.git. - 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 Core Flutter SDK by adding the dependency to your pubspec.yaml file:
flutter pub add realtimekit_coreThen import the package into your project:
import 'package:realtimekit_core/realtimekit_core.dart';Set compileSdkVersion 36 and minSdkVersion 24 in your build.gradle file at <project root>/android/app/build.gradle:
defaultConfig { ... compileSdkVersion 36 minSdkVersion 24 ...}Change the Kotlin version to 1.9.0:
ext.kotlin_version = '1.9.0'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:
<key>LSSupportsOpeningDocumentsInPlace</key><true/><key>UIFileSharingEnabled</key><true/>Install the core dependencies:
npm install @cloudflare/realtimekit-react-native @cloudflare/react-native-webrtcOptional: For UI components, install additional dependencies:
npm install @cloudflare/realtimekit-react-native-ui @react-native-documents/picker react-native-file-viewer react-native-fs react-native-sound-player react-native-webview react-native-svgInstall react-native-safe-area-context based on your React Native version:
- React Native 0.64 - 0.74:
npm install react-native-safe-area-context@^4.0.0 - React Native >= 0.74:
npm install react-native-safe-area-context@^5.0.0
Refer to the react-native-svg installation guide ↗ for setup.
Optional: For interactive livestream functionality:
npm install amazon-ivs-react-native-playerInstall the core and UI dependencies:
npx expo install @cloudflare/realtimekit-react-native-ui @cloudflare/realtimekit-react-native @cloudflare/react-native-webrtc @react-native-documents/picker react-native-file-viewer react-native-fs react-native-sound-player react-native-webview react-native-svgInstall react-native-safe-area-context based on your React Native version:
- React Native 0.64 - 0.74:
npm install react-native-safe-area-context@^4.0.0 - React Native >= 0.74:
npm install react-native-safe-area-context@^5.0.0
Install Expo config plugins:
npx expo install @expo/config-pluginsAdd the plugins to your app.json:
{ "expo": { "plugins": [ "@cloudflare/realtimekit-react-native", "@cloudflare/react-native-webrtc" ] }}Run prebuild to set up native modules:
npx expo prebuildThe following instructions are for release builds. Debug builds should work without additional steps.
Edit your android/gradle.properties and add the following lines:
newArchEnabled=falseandroid.useFullClasspathForDexingTransform=trueNote: Starting from version >=0.2.0, add a required blob_provider_authority string resource in the strings.xml file:
<resources> ... <string name="blob_provider_authority">YOUR_APP_RESOURCE_NAME</string> ...</resources>Create or append to the file android/app/proguard-rules.pro:
-keep class realtimekit.org.webrtc.** { *; }-dontwarn org.chromium.build.BuildHooksAndroidIn your android/app/build.gradle, edit the release configuration and add the following line importing the ProGuard configuration:
buildTypes { release { ... proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' }}Note: The minimum supported iOS version is 14.0.
Open your Podfile and set the platform to iOS 14:
platform :ios, '14.0'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/>To Initialise your SDK, add the following code to your React application:
import { useEffect } from 'react';import { useRealtimeKitClient } from '@cloudflare/realtimekit-react';
export default function App() {const [meeting, initMeeting] = useRealtimeKitClient();useEffect(() => { initMeeting({ authToken: '<auth-token>' });}, []);
return <div></div>}Use the Create Participant API to fetch the authToken.
Now, Create a meeting component using the RtkMeeting component and the useRealtimeKitMeeting hook (this hook provides access to the meeting object that contains all the meeting state and methods).
import { useRealtimeKitMeeting } from '@cloudflare/realtimekit-react';import { RtkMeeting } from '@cloudflare/realtimekit-react-ui';
export default function MyMeetingUI() { const { meeting } = useRealtimeKitMeeting(); return ( <RtkMeeting mode="fill" meeting={meeting} showSetupScreen={true} /> );}Use the Meeting component like so:
import { useEffect } from 'react';import { useRealtimeKitClient, RealtimeKitProvider } from '@cloudflare/realtimekit-react';import MyMeetingUI from './MyMeetingUI.tsx'
export default function App() { const [meeting, initMeeting] = useRealtimeKitClient();
useEffect(() => { initMeeting({ authToken: '<auth-token>' }); }, []);
return ( <RealtimeKitProvider value={meeting}> <MyMeetingUI /> </RealtimeKitProvider> );}Add the following imports to your HTM file:
<!DOCTYPE html><html lang="en"> <head> <!-- 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></html>Use the rtk-meeting component to display the meeting UI.
<body> <rtk-meeting id="my-meeting" show-setup-screen="true" /></body>Initialise the SDK using the authToken and pass the meeting prop to the UI component to connect to the meeting.
Use the Create Participant API to fetch the authToken.
<script> const authToken = <auth-token> // Initialize the SDK RealtimeKitClient.init({ authToken, }).then((meeting) => { document.getElementById('my-meeting').meeting = meeting; });</script>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.
{ "compilerOptions": { "allowSyntheticDefaultImports": true }}Load the RtkMeeting component to your template file (component.html).
<rtk-meeting #myid></rtk-meeting>Initialise the Meeting
class AppComponent { å; title = "MyProject"; @ViewChild("myid") meetingComponent: RtkMeeting; rtkMeeting: RealtimeKitClient;
async ngAfterViewInit() { const meeting = await RealtimeKitClient.init({ authToken: "<auth-token>", }); meeting.join(); this.rtkMeeting = meeting; if (this.meetingComponent) this.meetingComponent.meeting = meeting; }}Use the Create Participant API to fetch the authToken.
You have successfully integrated RealtimeKit with the default meeting UI. Participants can now see and hear each other in sessions.
While the default UI provides a complete meeting experience, you may want to build a custom interface using individual UI Kit components. This approach gives you full control over the layout, design, and user experience.
To build your own custom meeting UI, follow these guides in order:
- UI Kit Components Library - Browse available components and their visual representations
- UI Kit Meeting Lifecycle - Lifecycle of a meeting and how components communicate and synchronize with each other
- Session Lifecycle - Understand different peer states and transitions
- Meeting Object Explained - Access meeting data and participant information using the Core SDK
- Build Your Own UI - Put everything together to create a custom meeting interface
Was this helpful?
- Resources
- API
- New to Cloudflare?
- Directory
- Sponsorships
- Open Source
- Support
- Help Center
- System Status
- Compliance
- GDPR
- Company
- cloudflare.com
- Our team
- Careers
- © 2026 Cloudflare, Inc.
- Privacy Policy
- Terms of Use
- Report Security Issues
- Trademark
-