The Jitsi Meet IFrame API lets you embed a complete, production-ready video conference directly into any web page. By loading a single JavaScript file from your Jitsi server, you get access to theDocumentation 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.
JitsiMeetExternalAPI constructor, a rich set of commands, and a full event system — all without managing any backend infrastructure. This quickstart walks you through every step, from adding the script tag to listening for participant events, so you can go from zero to a live embedded meeting in under five minutes.
Prerequisites
- A modern browser with WebRTC support (Chrome, Firefox, Edge, or Safari 14+)
- A text editor and a way to serve an HTML file (even
python3 -m http.serverworks) - No server-side code or account required when using
meet.jit.si
Steps
Add the Jitsi Meet External API script to the
<head> (or end of <body>) of your HTML page. The script is served directly from the Jitsi instance you want to connect to:This script exposes the
JitsiMeetExternalAPI class globally. If you are self-hosting, replace meet.jit.si with your own domain — the script must always be loaded from the same domain as the server that will host the meeting.For production workloads, point this script tag — and the
domain option in the next step — at your own self-hosted Jitsi instance or your JaaS subdomain (8x8.vc) rather than the public meet.jit.si. The public instance is rate-limited and not suitable for high-volume or branded deployments.Add a
<div> to your page where the meeting iframe will be injected. Give it an id so you can reference it from JavaScript:You can size this element with CSS to fit your layout — the API will match the iframe to the container’s dimensions, or you can pass explicit
width and height options in the next step.After the script has loaded, create a new
JitsiMeetExternalAPI instance. Pass the domain as the first argument and an options object as the second:const domain = "meet.jit.si";
const options = {
roomName: "MyAwesomeProjectKickoff", // unique room name (no spaces)
width: "100%", // iframe width (px or %)
height: 600, // iframe height in px
parentNode: document.getElementById("meet"), // container element
configOverwrite: {
startWithAudioMuted: true, // join muted by default
disableModeratorIndicator: false,
},
interfaceConfigOverwrite: {
TOOLBAR_BUTTONS: [ // limit visible toolbar buttons
"microphone", "camera", "closedcaptions",
"desktop", "chat", "raisehand",
"videoquality", "tileview", "hangup",
],
},
};
const api = new JitsiMeetExternalAPI(domain, options);
The
roomName uniquely identifies the conference. Anyone who loads the page (or visits the same room URL on meet.jit.si) will join the same call. The configOverwrite and interfaceConfigOverwrite objects let you override any option from config.js and interface_config.js respectively without touching server files.The
api object is an EventEmitter. Use .on(eventName, listener) to react to meeting lifecycle events:// Fired when the local participant successfully joins the conference
api.on("videoConferenceJoined", (event) => {
console.log("Joined room:", event.roomName);
});
// Fired when the local participant leaves or the conference ends
api.on("videoConferenceLeft", (event) => {
console.log("Left the conference:", event.roomName);
// e.g. redirect the user or clean up the container
});
// Fired whenever a remote participant joins
api.on("participantJoined", (event) => {
console.log("Participant joined:", event.jid);
});
// Fired when audio mute state changes
api.on("audioMuteStatusChanged", (event) => {
console.log("Audio muted:", event.muted);
});
You can listen to as many events as you need. See the IFrame API events reference for the complete list of available events.
The full IFrame API supports dozens of events, including
participantLeft, dominantSpeakerChanged, recordingStatusChanged, knockingParticipant, and more. Check the IFrame API events page for the authoritative reference.You can programmatically control the meeting at any time by calling
api.executeCommand(commandName, ...args):// Toggle the local participant's microphone
api.executeCommand("toggleAudio");
// Toggle the local participant's camera
api.executeCommand("toggleVideo");
// Change the meeting subject shown in the header
api.executeCommand("subject", "Sprint Review — Week 42");
// Set the local participant's display name
api.executeCommand("displayName", "Jane Smith");
// Hang up and leave the conference
api.executeCommand("hangup");
Complete Working Example
The snippet below is a self-contained HTML page you can save and open in a browser right now. It is based on the official example from the Jitsi Meet repository.Next Steps
IFrame API Reference
Full list of commands, events, and getters available on the
JitsiMeetExternalAPI object.Self-Hosting Guide
Run your own Jitsi Meet instance on Debian/Ubuntu or Docker for production and branded deployments.
