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 Idea

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

  • Keymate
  • SolidProof
  • Rekorder
  • Führerscheinmacher
  • ARGE
  • NextGym
  • Paritel
  • EVADXB
  • Boese VA
  • Maho Management
  • Aphy
  • Negosh
  • Millenium
  • Yonju
  • Mr. Clipart
1/3 – Topic Selection33%

What is your inquiry about?

Select one or more areas where we can support you.