Skip to main content
SDK v7.x · Last verified March 2026 · iOS · Android · Web
Platform note — code samples below use TypeScript. Every method has an equivalent in the iOS (Swift) and Android (Kotlin) SDKs — see the linked SDK reference in each step.
Full walkthrough below ↓
Livestream showing host in main view and co-host Carla Philips in secondary view, with live chat messages and reaction emojis

Co-host stage — host and co-host broadcasting together with live chat

Co-hosting lets multiple broadcasters share the stage during a live session. This guide covers both sides of the flow — the host sending and managing invitations, and the co-host accepting and joining the broadcast.
Prerequisites: A room must already exist and the host must be connected to LiveKit. See Go Live & Room Management first.

How Co-Hosting Works

Invitation statuses:

Host Side

1

Send a co-host invitation

Invitations are sent one user at a time. The host must already have a room.
To invite multiple co-hosts, call createInvitation once per user.
2

Track invitation status

Observe all invitations you’ve sent to show pending / accepted / declined states in your UI.
3

Cancel a pending invitation

Cancel before the invitee responds — e.g., if you sent the wrong user.

Co-Host Side

1

Retrieve your invitations

Poll or observe your pending room invitations. Show them as an in-app notification or banner.
2

Accept or decline

Present an “Accept / Decline” UI. Both operations are one-liners.
3

Join the broadcast

After accepting, fetch broadcast credentials and connect to LiveKit — same flow as the host.

UIKit: Pre-Built Co-Host Components

If you’re using UIKit, the co-hosting UI is handled for you:
See the component reference → Livestream Components

Common Mistakes

Calling getBroadcastData before accepting — The co-host must accept the invitation first. Calling getBroadcastData while the invitation is still pending or rejected will fail.
Not listening for invitation status changes — Use the live collection (getInvitations / getMyRoomInvitations) instead of a one-shot fetch. Statuses update in real-time (e.g., host cancels while you’re looking at the invite).
Assuming the room is still live — Between the invitation and the accept, the host may have stopped the stream. Always check room.status === 'live' before calling getBroadcastData.

Best Practices

  • Show pending invitations as a prominent banner or bottom-sheet, not a buried list
  • Include the host’s display name and room title in the invitation UI
  • After accepting, navigate directly to a “Preparing to go live…” screen
  • If a co-host’s LiveKit connection drops, listen for RoomEvent.Disconnected and show a “Reconnecting” state
  • Give co-hosts a “Leave stage” button that disconnects from LiveKit without ending the room
  • The host should see a visual indicator when a co-host goes offline
  • Each co-host adds a video track — bandwidth and layout get complex above 4–6 hosts
  • Consider a grid layout that caps visible tiles and puts overflow in a scrollable strip
  • Test on lower-end devices to verify performance with multiple video tracks

Next Steps

Go Live & Room Management

Room creation, broadcast setup, and lifecycle management.

Live Chat & Engagement

Wire up chat, reactions, and viewer count alongside the video.

Product Tagging

Pin products to the stream for live commerce.