Skip to content
Cloudflare Docs

Meeting Lifecycle

Code Examples

If you prefer to learn by seeing examples, please check out the respective example repositories.

Web Examples

How UI Kit Components Communicate

The UI Kit components are able to understand and synchronize with each other because they are nested under the rtk-meeting component. The rtk-meeting component acts as the central coordinator that ensures all components under it stay in sync when it comes to meeting state, participant updates, and other real-time changes.

Here's an example of how state synchronization works when opening the participants sidebar:

flowchart LR
    accTitle: Sidebar State Synchronization Example
    accDescr: Example showing how clicking participants toggle updates rtk-sidebar through rtk-meeting coordination

    Toggle["👤 rtk-participants-toggle<br/>(User clicks)"]
    Meeting["rtk-meeting<br/>(State Coordinator)"]
    Sidebar["rtk-sidebar<br/>(Opens/Closes)"]
    App["Your App<br/>(Gets notified)"]

    Toggle -->|"emits rtkStateUpdate<br/>{activeSidebar: true,<br/>sidebar: 'participants'}"| Meeting
    Meeting -->|"propagates state"| Sidebar
    Meeting -->|"emits rtkStatesUpdate"| App

    style Meeting fill:#F48120,stroke:#333,stroke-width:2px,color:#fff
    style App fill:#0051C3,stroke:#333,stroke-width:2px,color:#fff

State Flow

  1. Child components emit state updates: When any UI component (like rtk-button, rtk-participants, rtk-grid) needs to update state, it emits a state update event
  2. rtk-meeting listens and coordinates: The rtk-meeting component listens to all these state update events from its children
  3. State propagation: rtk-meeting propagates the updated state to all other child components to keep them synchronized
  4. External notification: rtk-meeting also emits rtkStatesUpdate event that your application can listen to for updating your custom UI or performing actions based on state changes

Listening to State Updates

To build custom UI or perform actions based on meeting state changes, you need to listen to the rtkStatesUpdate event emitted by the rtk-meeting component. This event provides you with the current state of the meeting, including active speaker, participant list, recording status, and more.

For Web Components, you need to add an event listener to the rtk-meeting component to listen for rtkStatesUpdate events.

Example Code

<body>
<rtk-meeting id="meeting-component"></rtk-meeting>
</body>
<script type="module">
import RealtimeKitClient from "https://cdn.jsdelivr.net/npm/@cloudflare/realtimekit@latest/dist/index.es.js";
const meeting = await RealtimeKitClient.init({
authToken: "<participant_auth_token>",
});
// Add <rtk-meeting id="meeting-component" /> to your HTML, otherwise you will get error
const meetingComponent = document.querySelector("#meeting-component");
// Listen for state updates from rtk-meeting
meetingComponent.addEventListener("rtkStatesUpdate", (event) => {
console.log("RTK states updated:", event.detail);
// Store states to update your custom UI
const states = event.detail;
// Example: Access various state properties
console.log("Meeting state:", states.meeting); // 'idle', 'setup', 'joined', 'ended', 'waiting'
console.log("Is sidebar active:", states.activeSidebar);
console.log("Current sidebar section:", states.sidebar); // 'chat', 'participants', 'polls', etc.
console.log("Is screen sharing:", states.activeScreenShare);
// Update your custom UI based on states
// For example: Show/hide elements based on meeting state
if (states.meeting === "joined") {
// Show meeting controls
}
});
meetingComponent.showSetupScreen = true;
meetingComponent.meeting = meeting;
</script>

State Properties

The rtkStatesUpdate event provides detailed information about the UI Kit's internal state. Key properties include:

  • meeting: Current meeting state - 'idle', 'setup', 'joined', 'ended', or 'waiting'
  • activeSidebar: Whether the sidebar is currently open (boolean)
  • sidebar: Current sidebar section - 'chat', 'participants', 'polls', 'plugins', etc.
  • activeScreenShare: Whether screen sharing UI is active (boolean)
  • activeMoreMenu: Whether the more menu is open (boolean)
  • activeSettings: Whether settings panel is open (boolean)
  • viewType: Current video grid view type (string)
  • prefs: User preferences object (e.g., mirrorVideo, muteNotificationSounds)
  • roomLeftState: State when leaving the room
  • activeOverlayModal: Active overlay modal configuration object
  • activeConfirmationModal: Active confirmation modal configuration object
  • And many more UI state properties

Best Practices

  • Store states appropriately: Use React's useState hook or a state management library (like Zustand or Redux) for React apps. For vanilla JavaScript, use a reactive state management solution or simple object storage.
  • Avoid excessive re-renders: Only update your UI when necessary. In React, consider using useMemo or useCallback to optimize performance.
  • Access nested properties safely: Always check if nested properties exist before accessing them (e.g., states.sidebar, states.prefs?.mirrorVideo).
  • Use states for conditional rendering: Leverage the UI states to show/hide UI elements or respond to interface changes (e.g., showing custom indicators when states.activeScreenShare is true).
  • Understand the difference: rtkStatesUpdate provides UI Kit internal states for interface management. For meeting data (participants, active speaker, recording status), use the Core SDK's meeting object and its events directly.