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.

Jitsi Meet supports two distinct recording approaches: local recording, which captures your meeting directly in the browser without any server infrastructure, and server-side recording powered by Jibri, which handles file storage and live RTMP streaming. Recordings can be saved to a local file, uploaded to Dropbox, or streamed to platforms like YouTube Live. The method you choose depends on your deployment capabilities and your participants’ needs.

Recording Types

Local recording runs entirely in the participant’s browser — no Jibri server or backend is required. The resulting file (WebM or MP4, depending on the browser) is saved directly to the participant’s device.Characteristics:
  • No server-side setup needed
  • Records only what the local participant sees and hears
  • Output saved as a WebM/MP4 file on the local machine
  • Can be scoped to self-only via the onlySelf flag
IFrame API commands:
// Start local recording (all participants' streams)
api.executeCommand('startRecording', { mode: 'local' });

// Start local recording (self only)
api.executeCommand('startRecording', { mode: 'local', onlySelf: true });

// Stop local recording
api.executeCommand('stopRecording', 'local');
Local recording availability depends on browser support. Use supportsLocalRecording() at runtime to check compatibility before invoking these commands.

IFrame API Control

The following snippet demonstrates the full lifecycle of a server-side file recording using the Jitsi IFrame API, including error handling via the recording-status-changed event.
const api = new JitsiMeetExternalAPI(domain, options);

// Start server-side recording
api.executeCommand('startRecording', {
  mode: 'file',
  dropboxToken: 'optional-token'  // omit to use the default recording service
});

// Stop recording
api.executeCommand('stopRecording', 'file');

Recording Events

Subscribe to recordingStatusChanged to react to recording state transitions in your embedding application.
api.addListener('recordingStatusChanged', ({ on, mode, error, transcription }) => {
  if (error) {
    console.error(`Recording error in mode "${mode}":`, error);
    return;
  }
  console.log(`Recording (${mode}) is now ${on ? 'active' : 'stopped'}`);
});
FieldTypeDescription
onbooleantrue when recording starts, false when it stops
mode'file' | 'stream' | 'local'The recording mode that changed state
errorstring | nullError identifier if the state change was caused by a failure
transcriptionbooleantrue if the event also involves a transcription session

Configuration Options

The following config.js fields control recording feature availability:
// config.js

// Enable server-side file recording via Jibri
recordingService: {
  enabled: true,
  sharingEnabled: false,  // whether to share the recording link in chat
  hideStorageWarning: false
},

// Enable live streaming to RTMP / YouTube
liveStreaming: {
  enabled: true,
  validatorRegExpString: 'youtube\\.com\\/live_stream\\?stream='
},

// Dropbox OAuth integration
dropbox: {
  appKey: 'your-dropbox-app-key'
},

// Local recording settings
localRecording: {
  disable: false,     // set true to hide local recording from the UI
  notifyAllParticipants: false  // notify others when local recording starts
}
  • Local recording — best for small meetings or situations where you have no server infrastructure. Quality depends on the participant’s hardware and browser.
  • Jibri file recording — best for archiving meetings reliably on the server side. Requires Jibri setup and storage configuration.
  • Jibri streaming — best for broadcasting live to YouTube or a custom RTMP endpoint.
  • Dropbox — best when participants need recordings delivered directly to their Dropbox without server storage on your side.

Build docs developers (and LLMs) love