WZ-IT Logo

Integrate Jitsi Meet into Your Own Applications – with Code Examples

Timo Wevelsiep
Timo Wevelsiep
#JitsiMeet #WebRTC #VideoIntegration #iFrameAPI #LibJitsiMeet #OpenSource #SelfHosted #GDPR #JWT #SecureDomain

Jitsi Meet is a free, WebRTC-based video conferencing system under Apache 2.0 license. It runs entirely in the browser and can be operated self-hosted. The modular architecture consisting of Jitsi Videobridge (SFU), Jicofo, Prosody, Jibri and Jigasi makes it ideal for integration, rebranding and automation. Info: Jitsi Meet, Architecture.

Why embedding makes sense for companies

  • GDPR & data sovereignty: Operation in own or European infrastructure.
  • Browser-based: High compatibility without client installation.
  • APIs & SDKs: From fast iFrame embedding to low-level control via lib-jitsi-meet.
  • Scalable: Horizontal via additional video bridges.

Table of Contents


2) Integration paths at a glance

Integration Purpose Source
iFrame/External API (JavaScript) Fastest way for web embedding and meeting control in the app iFrame API
lib-jitsi-meet (Low-Level JS API) Build your own UI, control media & signaling directly lib-jitsi-meet, Repo
Mobile SDKs (Android/iOS) Native integration in mobile apps incl. feature flags Android SDK Guide, SDK-Samples
JWT & Secure Domain Access control and rights via tokens or prosody accounts Secure Domain, Token Auth
Colibri-REST (Videobridge) Operator interface for monitoring/control at bridge level JVB REST
Self-Hosting-Guides Quick start for Debian/Ubuntu or Docker Quickstart, Docker Guide

3) iFrame/External API: fast web embedding with events and commands

Minimal example:

<div id="meet"></div>
<script src="https://meet.jit.si/external_api.js"></script>
<script>
 const domain = "meet.jit.si"; // or own instance: "meet.example.com"
 const options = {
 roomName: "DemoRoom123",
 width: "100%",
 height: 700,
 parentNode: document.querySelector('#meet')
 };
 const api = new JitsiMeetExternalAPI(domain, options);
</script>

Source: iFrame API – Getting started.

Events & Commands:

// Participant events
api.addEventListener('participantJoined', e => console.log('joined', e));
api.addEventListener('participantLeft', e => console.log('left', e));

// Control meeting
api.executeCommand('toggleAudio');
api.executeCommand('toggleVideo');

// Moderation (with appropriate rights)
api.executeCommand('kickParticipant', 'PARTICIPANT_ID'); // Extract ID from events

Reference: Events and Commands.

Advanced functions:

// Create breakout room
api.executeCommand('addBreakoutRoom', 'Workshop');

// Move participants to breakout room
api.executeCommand('sendParticipantToRoom', {
 participantId: 'abcd1234',
 roomName: 'Workshop'
});

// Raise / lower hand
api.executeCommand('toggleRaiseHand');

// Toggle Tile-View
api.executeCommand('toggleTileView');

// Start/stop recording (requires Jibri)
api.executeCommand('startRecording', { mode: 'file' });
api.executeCommand('stopRecording', 'file');

4) lib-jitsi-meet: Low-level API for your own web UI

With lib-jitsi-meet you can control connections, rooms and media directly. Ideal if you want to develop your own UI.

<script src="https://meet.jit.si/libs/lib-jitsi-meet.min.js"></script>
<script>
 // 1) Init
 JitsiMeetJS.init();

 // 2) Connection
 const options = {
 hosts: {
 domain: 'meet.example.com',
 muc: 'conference.meet.example.com'
 },
 serviceUrl: 'wss://meet.example.com/xmpp-websocket'
 };
 const connection = new JitsiMeetJS.JitsiConnection(null, null, options);

 // 3) Events
 connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnected);
 connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, console.error);
 connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, console.warn);

 connection.connect();

 function onConnected() {
 // 4) Conference + Events
 const confOpts = { openBridgeChannel: true };
 const room = connection.initJitsiConference('myRoom', confOpts);
 room.on(JitsiMeetJS.events.conference.CONFERENCE_JOINED, () => console.log('joined'));
 room.on(JitsiMeetJS.events.conference.TRACK_ADDED, track => {
 const el = track.getOriginalElement?.() || track.attach(document.createElement(track.getType()));
 document.body.append(el);
 });

 // 5) Add local tracks
 JitsiMeetJS.createLocalTracks({ devices: ['audio', 'video'] })
 .then(tracks => {
 tracks.forEach(t => room.addTrack(t));
 room.join();
 });
 }
</script>

Docs: lib-jitsi-meet API, Repo.


5) Mobile integration: Jitsi SDK for Android and iOS

Android example:

JitsiMeetConferenceOptions defaultOptions = new JitsiMeetConferenceOptions.Builder()
 .setServerURL(new URL("https://meet.example.com"))
 .setFeatureFlag("welcomepage.enabled", false)
 .build();
JitsiMeet.setDefaultConferenceOptions(defaultOptions);

JitsiMeetConferenceOptions options = new JitsiMeetConferenceOptions.Builder()
 .setRoom("MobileMeeting")
 .build();
JitsiMeetActivity.launch(this, options);

Sources: Android SDK Guide, SDK-Samples. For iOS see the samples in the repo.


6) Access and authentication: Secure Domain and JWT

Secure Domain: Only authenticated users may create new rooms; guests can join afterwards. Guide: Secure Domain

Token authentication (JWT): Access with signed token – ideal for integration with your own backends/portals. Guide: Token Authentication

Example payload:

{
 "context": {
 "user": {
 "avatar": "https://example.com/avatar.png",
 "name": "John Doe",
 "email": "[email protected]"
 },
 "features": {
 "recording": true,
 "livestreaming": false,
 "screen-sharing": true
 }
 },
 "aud": "jitsi",
 "iss": "wz-it.com",
 "sub": "meet.example.com",
 "room": "TeamMeeting2025",
 "exp": 1735753200
}

Token generation (Node.js):

import jwt from "jsonwebtoken";

const payload = {
 context: { user: { name: "John Doe" } },
 aud: "jitsi",
 iss: "wz-it.com",
 sub: "meet.example.com",
 room: "TeamMeeting2025",
 exp: Math.floor(Date.now() / 1000) + 60 * 60
};
const token = jwt.sign(payload, process.env.JITSI_APP_SECRET);
console.log("JWT:", token);

Prosody setup (simplified):

VirtualHost "meet.example.com"
 authentication = "token"
 app_id = "wz-it.com"
 app_secret = "YOUR_APP_SECRET"

7) Monitoring and operation: Colibri-REST (bridge level)

The Jitsi Videobridge provides a REST interface (Colibri/Colibri2) – for monitoring, conference allocation and health/stats; not for end-user actions such as "kick".

Retrieve stats:

# Standard (local): JVB_COLIBRI_PORT=8080
curl -s http://127.0.0.1:8080/colibri/stats

Sample response:

{
 "conferences": 4,
 "participants": 52,
 "bit_rate_download": 2400000,
 "bit_rate_upload": 2700000
}

Sources: Colibri REST, Docker Guide.

Participant actions such as kick are carried out via the iFrame API (client) or XMPP moderation, not via REST. Reference: iFrame Commands.


8) Self-hosting, GDPR and operation

  • Quickstart: Debian/Ubuntu, Docker.
  • Security/Privacy: Jitsi Security.
  • GDPR: Operation in German/European data centers possible; log, backup and access control remain completely in the hands of the company.

9) Conclusion

With iFrame/External API you can integrate Jitsi Meet into the web in minutes. With lib-jitsi-meet you build your own web UI with full control over media & signaling. With the mobile SDKs, you can integrate conferences natively into Android/iOS. Secure Domain/JWT regulates access, Colibri-REST provides operational metrics.

Everything is open source, self-hosted and GDPR-compliant – ideal for companies that need sovereignty and adaptability.

WZ-IT assists with design, hosting, SSO, branding, UI development, scaling, monitoring and support. WZ-IT Jitsi Meet Service


Schedule a Free Consultation

Want to integrate Jitsi Meet into your application? We will advise you on:

  • Technical feasibility & architecture
  • Hosting options & scaling
  • SSO integration & security
  • Custom adaptations & branding

Book your free consultation now →


Let's Talk About Your Project

Whether a specific IT challenge or just an idea – we look forward to the exchange. In a brief conversation, we'll evaluate together if and how your project fits with WZ-IT.

Trusted by leading companies

NextGymParitelEVADXBRekorderARGEKeymateAphyNegosh

To submit the form, we need your consent to display the Captcha.

By clicking the button, you accept our privacy policy and the Cookie Policy of Cloudflare.