Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/jitsi/jitsi-meet/llms.txt

Use this file to discover all available pages before exploring further.

The Jitsi IFrame API emits events when meeting state changes — participants joining or leaving, mute toggling, recording starting, errors occurring, and more. Subscribe with addEventListener or register multiple listeners at once with addEventListeners. All event handlers receive a single data object whose shape is specific to each event.

Subscribing to Events

// Subscribe to a single event
api.addEventListener('videoConferenceJoined', (event) => {
  console.log('Joined!', event.roomName);
});

// Subscribe to multiple events at once
api.addEventListeners({
  videoConferenceJoined: handleJoined,
  videoConferenceLeft: handleLeft,
  participantJoined: handleParticipant
});

// Remove a specific listener
api.removeEventListener('videoConferenceJoined', handleJoined);

// Remove all listeners for an event
api.removeEventListeners(['videoConferenceJoined', 'participantJoined']);
addEventListener and addEventListeners are backwards-compatible wrappers around Node.js EventEmitter. You can also use api.on(event, handler) and api.off(event, handler) directly. Call api.getSupportedEvents() to retrieve the full list of supported event names at runtime.

All Events

videoConferenceJoined — Fired when the local participant successfully joins the conference.
FieldTypeDescription
roomNamestringThe name of the conference room
idstringThe local participant’s JID
displayNamestringThe local participant’s display name
avatarURLstringThe local participant’s avatar URL
breakoutRoombooleanWhether this is a breakout room
api.addEventListener('videoConferenceJoined', ({ roomName, id, displayName }) => {
  console.log(`${displayName} (${id}) joined: ${roomName}`);
});

videoConferenceLeft — Fired when the local participant leaves the conference.
FieldTypeDescription
roomNamestringThe name of the room that was left
api.addEventListener('videoConferenceLeft', ({ roomName }) => {
  console.log(`Left room: ${roomName}`);
});

readyToClose — Fired after all hangup operations complete and the iframe is safe to remove from the DOM. Listen for this event before calling api.dispose().
api.addEventListener('readyToClose', () => {
  api.dispose();
});

ready — Fired when the Jitsi Meet iframe has fully initialised and the internal transport is active. This is also used to trigger the onload callback provided in the constructor options.
subjectChange — Fired when the meeting subject (title) changes.
FieldTypeDescription
subjectstringThe new meeting subject
api.addEventListener('subjectChange', ({ subject }) => {
  document.title = subject;
});

conferenceCreatedTimestamp — Fired with the timestamp of when the conference was created.
prejoinScreenLoaded — Fired when the pre-join screen is displayed to the user, before they enter the conference.
suspendDetected — Fired when a computer suspend/sleep event is detected by the browser.
participantJoined — Fired when a remote participant joins the conference.
FieldTypeDescription
idstringThe participant’s JID
displayNamestringThe participant’s display name
formattedDisplayNamestringDisplay name with role suffix if applicable
api.addEventListener('participantJoined', ({ id, displayName }) => {
  console.log(`${displayName} joined (${id})`);
});

participantLeft — Fired when a remote participant leaves the conference.
FieldTypeDescription
idstringThe JID of the participant who left

dominantSpeakerChanged — Fired when the active (loudest) speaker changes.
FieldTypeDescription
idstringThe JID of the new dominant speaker
api.addEventListener('dominantSpeakerChanged', ({ id }) => {
  console.log('Now speaking:', id);
});

raiseHandUpdated — Fired when a participant raises or lowers their hand.
FieldTypeDescription
idstringThe participant’s JID
handRaisednumberTimestamp when the hand was raised, or 0 if lowered

participantRoleChanged — Fired when a participant’s role changes (e.g. granted moderator).
FieldTypeDescription
idstringThe participant’s JID
rolestringNew role: 'moderator' or 'none'

displayNameChange — Fired when a participant changes their display name.
FieldTypeDescription
idstringThe participant’s JID
displaynamestringThe new display name
formattedDisplayNamestringThe new formatted display name

emailChange — Fired when a participant updates their email address.
avatarChanged — Fired when a participant changes their avatar.
participantKickedOut — Fired when a participant is removed from the conference by a moderator.
participantMuted — Fired when a participant’s mute state is changed by a moderator.
participantMenuButtonClick — Fired when a button in the participant context menu is clicked.
audioMuteStatusChanged — Fired when the local participant’s microphone mute state changes.
FieldTypeDescription
mutedbooleantrue if the microphone is now muted
api.addEventListener('audioMuteStatusChanged', ({ muted }) => {
  document.getElementById('mic-icon').classList.toggle('muted', muted);
});

videoMuteStatusChanged — Fired when the local participant’s camera state changes.
FieldTypeDescription
mutedbooleantrue if the camera is now off

screenSharingStatusChanged — Fired when the local participant starts or stops screen sharing.
FieldTypeDescription
onbooleantrue if screen sharing is now active
detailsobjectAdditional details about the shared source

audioAvailabilityChanged — Fired when audio input availability changes (e.g. microphone connected/disconnected).
FieldTypeDescription
availablebooleantrue if audio input is available

videoAvailabilityChanged — Fired when video input availability changes.
FieldTypeDescription
availablebooleantrue if a camera is available

videoQualityChanged — Fired when the active video quality (resolution) changes.
FieldTypeDescription
videoQualitynumberThe new video height constraint in pixels

audioOnlyChanged — Fired when the meeting switches into or out of audio-only mode.
audioOrVideoSharingToggled — Fired when audio or video sharing is toggled by any participant.
deviceListChanged — Fired when the list of available media devices changes (e.g. headphones plugged in).
cameraError — Fired when a camera-related error occurs (e.g. permission denied).
micError — Fired when a microphone-related error occurs.
computePressureChanged — Fired when the system compute pressure level changes, which may affect media quality.
contentSharingParticipantsChanged — Fired when the list of participants sharing their screen changes.
recordingStatusChanged — Fired when a server-side recording or live stream starts or stops.
FieldTypeDescription
onbooleantrue if recording is now active
modestring'file' or 'stream'
errorstring (optional)Error message if recording failed to start
api.addEventListener('recordingStatusChanged', ({ on, mode, error }) => {
  if (error) {
    console.error('Recording error:', error);
  } else {
    console.log(`Recording (${mode}): ${on ? 'started' : 'stopped'}`);
  }
});

recordingLinkAvailable — Fired when a download link for the recording becomes available.
FieldTypeDescription
linkstringThe URL to download the recording
ttlnumberTime-to-live for the link in milliseconds

recordingConsentDialogOpen — Fired when the recording consent dialog is displayed to a participant.
transcribingStatusChanged — Fired when meeting transcription starts or stops.
transcriptionChunkReceived — Fired when a new transcription chunk arrives from the speech-to-text service.
fileUploaded — Fired when a file is uploaded in the meeting.
fileDeleted — Fired when a file is deleted in the meeting.
knockingParticipant — Fired when a participant is waiting in the lobby and requests to join. Use this to build a custom admit/deny UI.
FieldTypeDescription
participant.idstringThe waiting participant’s ID
participant.namestringThe waiting participant’s display name
participant.emailstringThe waiting participant’s email
participant.avatarstringThe waiting participant’s avatar URL
api.addEventListener('knockingParticipant', ({ participant }) => {
  const admit = confirm(`${participant.name} wants to join. Admit?`);
  api.executeCommand('answerKnockingParticipant', participant.id, admit);
});

passwordRequired — Fired when a room password is required to join.
errorOccurred — Fired when a meeting error occurs. Check isFatal to determine whether the meeting can continue.
FieldTypeDescription
namestringShort error identifier
typestringError category (e.g. 'CONNECTION_ERROR')
detailsobjectAdditional error context
isFatalbooleanWhether the error is unrecoverable
api.addEventListener('errorOccurred', ({ name, type, isFatal }) => {
  console.error(`[${type}] ${name} (fatal: ${isFatal})`);
  if (isFatal) {
    api.dispose();
  }
});

peerConnectionFailure — Fired when the WebRTC peer connection encounters a failure.
browserSupport — Fired with information about browser WebRTC support capabilities.
incomingMessage — Fired when a chat message is received.
FieldTypeDescription
fromstringJID of the sender
nickstringDisplay name of the sender
messagestringThe message text
stampstringISO timestamp of the message
privateMessagebooleantrue if this is a direct/private message
api.addEventListener('incomingMessage', ({ nick, message, privateMessage }) => {
  console.log(`${privateMessage ? '[Private] ' : ''}${nick}: ${message}`);
});

outgoingMessage — Fired when the local participant sends a chat message.
FieldTypeDescription
messagestringThe message text

chatUpdated — Fired when the chat panel opens, closes, or the unread message count changes.
FieldTypeDescription
isOpenbooleanWhether the chat panel is visible
unreadCountnumberNumber of unread messages

endpointTextMessageReceived — Fired when a data channel message is received from another participant.
FieldTypeDescription
senderInfoobject{ id, displayName } of the sender
eventDataobjectThe raw message payload

nonParticipantMessageReceived — Fired when a message is received from a non-participant source.
breakoutRoomsUpdated — Fired whenever the breakout room structure changes (rooms created, participants moved, rooms closed).The payload is an object mapping room JIDs to room details, each containing a participants map.
api.addEventListener('breakoutRoomsUpdated', (data) => {
  console.log('Rooms updated:', data);
});
tileViewChanged — Fired when tile (grid) view is toggled.
FieldTypeDescription
enabledbooleantrue if tile view is now active

filmstripDisplayChanged — Fired when the filmstrip visibility changes.
participantsPaneToggled — Fired when the participants panel opens or closes.
toolbarButtonClicked — Fired when a toolbar button is clicked inside the meeting.
FieldTypeDescription
keystringThe identifier of the button that was clicked

toolbarVisibilityChanged — Fired when the meeting toolbar shows or hides.
whiteboardStatusChanged — Fired when the whiteboard is opened or closed.
moderationStatusChanged — Fired when AV moderation is turned on or off.
moderationParticipantApproved — Fired when a moderated participant is approved to unmute.
moderationParticipantRejected — Fired when a moderated participant’s unmute request is rejected.
p2pStatusChanged — Fired when the call switches between P2P and JVB (SFU) modes.
feedbackSubmitted — Fired when the post-call feedback form is submitted.
feedbackPromptDisplayed — Fired when the post-call feedback prompt is shown to the user.
notificationTriggered — Fired when an in-meeting notification is shown.
customNotificationActionTriggered — Fired when the user clicks a custom action on a notification.
faceLandmarkDetected — Fired when a face landmark is detected by the local video analysis.
dataChannelOpened — Fired when the data channel connection to the bridge is opened.
dataChannelClosed — Fired when the data channel connection to the bridge is closed.
proxyConnectionEvent — Fired when a proxy connection event is received. Used for wireless screensharing integrations.
externalShareSignal — Fired when a direct-cast screenshare signalling message (offer, ICE candidate, or stop) is received.
pipEntered — Fired when the meeting enters Picture-in-Picture mode.
pipLeft — Fired when the meeting exits Picture-in-Picture mode.
secondScreenSourceChanged — Fired when the second screen source changes.
secondScreenClosed — Fired when the second screen window is closed.
secondScreenError — Fired when an error occurs with the second screen feature.
log — Fired for each log message at levels configured in config.apiLogLevels.
FieldTypeDescription
logLevelstringThe log level (e.g. 'info', 'warn', 'error')
argumentsstring[]The log message parts

mouseEnter — Fired when the mouse pointer enters the conference iframe.
mouseLeave — Fired when the mouse pointer leaves the conference iframe.
mouseMove — Fired when the mouse pointer moves within the conference iframe.

Build docs developers (and LLMs) love