Jitsi and Matrix integration

Jitsi and Matrix integration lets a self-hosted Jitsi Meet check Matrix room membership before admitting people to a conference. This page covers the supported Docker method, the configuration sequence, moderator sync, and the failure points to test for.

On this page

What Jitsi and Matrix integration changes for room access

Your organization runs Matrix for chat and wants only room members to join Jitsi calls, on Jitsi infrastructure you control. The supported method is the Matrix user verification module in the Jitsi Docker setup, enabled and configured through the .env file. The alternative is the hybrid Matrix plus JWT mode (hybrid_matrix_token), which accepts both Matrix-verified users and JWT tokens from your own systems. With the Matrix user verification module, a participant who signs in with a Matrix account is checked against your homeserver before the conference opens. Matrix room membership then decides who can join a room that was created from Matrix. Someone who is not in the Matrix room does not get in through a shared link alone. This moves the access decision from the Jitsi side to the Matrix room, so changes to room membership in Matrix are what control who can join, not changes to Jitsi settings. For moderators, the change is mainly about ownership. MATRIX_UVS_SYNC_POWER_LEVELS makes Matrix room moderators owners of the Prosody room, so they can manage the call without a separate Jitsi account. Confirm that your power level policy in each Matrix room matches who you expect to hold that role, because the Jitsi permissions follow whatever the Matrix room says. Matrix room members can also be set to bypass the Jitsi lobby with MATRIX_LOBBY_BYPASS, which saves a step for trusted members but should be a deliberate choice for each room type. Guests are the group most likely to be surprised. Anyone without a Matrix account for your homeserver will be stopped by the verification step unless you plan a path for them, such as the hybrid mode with JWT tokens issued by a system you run, or a separate arrangement agreed with your security team. Decide before go-live how external participants are invited and admitted, and test that path as carefully as the member path. The integration spans two systems you must both control. The Matrix homeserver, its user directory, its room policies and the verification endpoint that Jitsi calls all have to run in infrastructure you operate or have agreed to rely on. The Jitsi side, including the MATRIX_UVS_URL, MATRIX_UVS_ISSUER and MATRIX_UVS_AUTH_TOKEN values, must point to services you manage. Confirm with your Matrix administrators which homeserver implementation and version you run, and confirm the exact settings for your Jitsi Docker release in the Jitsi Docker guide before you change anything.

What a Matrix-gated Jitsi deployment needs first

Matrix-gated Jitsi depends on three systems working together: a self-hosted Jitsi Docker deployment, a Matrix homeserver your organization runs, and an endpoint that Jitsi calls to confirm a user belongs to a room. Confirm each item below before you edit the Jitsi .env file, because a gap in any one of them blocks room access for everyone.

Self-hosted Jitsi Docker deployment

The official Docker setup runs separate web, prosody, jicofo, jvb, jigasi and jibri containers, and authentication settings live in the .env file. Confirm the stack starts and that a test conference works on your own hosts before adding Matrix. Also confirm the release you deploy: since stable-11146 the containers run rootless with read-only filesystems, so volume paths and file permissions must match that layout.

HTTPS with a domain certificate

The Jitsi handbook says HTTPS with a proper domain certificate is necessary for working audio and video, and it warns that self-signed certificates cause problems, especially with mobile clients. Issue the certificate for the exact hostname users open in their browser, and confirm the chain is trusted on desktops and phones. Matrix verification does not resolve certificate warnings, so fix this layer first.

Matrix homeserver your organization operates

Matrix user verification only makes sense against a homeserver your organization runs and can administer. Synapse is the most widely documented option, and its server_name setting fixes how user IDs such as @user:example.com are formed, so decide it before the first user registers. Confirm that room membership and power levels are available on that homeserver, since they drive both access and moderator mapping.

Verification endpoint and service token

The Prosody Matrix user verification module needs a reachable endpoint set through MATRIX_UVS_URL, an issuer value in MATRIX_UVS_ISSUER, and a service token in MATRIX_UVS_AUTH_TOKEN. Create a token for this integration only and store it in your secrets process, keeping it out of shared configuration files. The supplied documentation does not name the software that serves this endpoint or the version it needs, so confirm both with your Matrix stack's vendor before setting the variables.

Ports from the quick start and Docker guides

The Debian and Ubuntu quick start requires 80/TCP and 443/TCP for web access and 10000/UDP for media, with 5349/TCP for TCP fallback and 3478/UDP for STUN as optional. Open these on the host firewall and in any cloud security group, and check the Docker guide's port list as well, since container networking can differ. Also confirm the Jitsi host can reach the Matrix homeserver and the verification endpoint on their own ports.

How the Matrix user verification service checks room membership

Prosody makes the membership decision, not the web app or the conference focus. When Matrix user verification is enabled through the Prosody Auth Matrix User Verification module, Prosody sends the Matrix token from a joining participant to the endpoint set in MATRIX_UVS_URL. The module checks that the token was issued by the issuer named in MATRIX_UVS_ISSUER, and it authenticates its own call to the service with MATRIX_UVS_AUTH_TOKEN. Prosody only admits the participant if the service confirms the Matrix identity and the room membership that the conference depends on. Because the check runs in Prosody, the security of the join depends on three values being correct and on the service being reachable from the Prosody container.

The exact request and response behavior is the part you must verify before you rely on it. This page does not set out the HTTP methods, request fields, headers, or the response that signals a valid member, and those details can change between releases of the module and the Docker guide. Read the Docker guide for the Matrix user verification settings in the release you deploy, then read the documentation for your verification service to confirm what it accepts and returns. Ask the team that runs the service for a sample request and response from a member, a non-member, and an expired or malformed token, and keep those samples with your deployment records.

The hybrid_matrix_token auth type accepts both Matrix tokens and JWT tokens. A Matrix-only setup restricts entry to people whose Matrix identity passes the verification check, so room membership on your homeserver controls who joins. A hybrid setup adds a second path: a participant who presents a valid JWT can join without going through the Matrix check. That changes the access model. You need to decide who is allowed to issue JWTs for your deployment, whether guests from a portal or an external system should receive them, and whether those participants should be restricted in some other way. Treat the hybrid choice as a change to your membership policy, not only as a configuration option.

Plan the checks and the failure behavior before users depend on the integration. Test four cases with the exact settings you intend to run: a room member, a user outside the room, a token from an unexpected issuer, and a request made while the verification service is down. Confirm that the MATRIX_UVS_ISSUER value matches the issuer your Matrix stack actually emits, and confirm that a failed verification call denies the join rather than admitting the participant. Record who owns MATRIX_UVS_AUTH_TOKEN, where it is stored, and how it is rotated, since a leaked or expired value will either block legitimate members or expose the verification endpoint.

Configuring Jitsi and Matrix integration in order

This sequence turns a working self-hosted Jitsi Meet into one that admits conference access based on Matrix room membership, with moderators and guests handled deliberately. Each step ends with a check, so a failure is caught before the next setting is changed.

  1. Confirm the Jitsi Docker stack runs over HTTPS

    Before any authentication change, bring up the official Jitsi Docker stack and confirm the web, prosody, jicofo and jvb containers are running and that the public URL loads over HTTPS with a certificate issued for your domain. The Jitsi handbook states that HTTPS with a proper domain certificate is necessary for working audio and video, and self-signed certificates cause problems, especially on mobile clients. Check that a test meeting joins with audio and video from two browsers before continuing. If this fails, fix networking, certificates or ports first, because authentication errors would otherwise hide the underlying problem.

  2. Confirm how .env changes reach running containers

    Before editing authentication settings, read the Jitsi Docker guide to confirm how changes to the .env file are applied to containers that are already running, including whether a restart or recreation of specific services is required. Record the exact commands your version expects. Do not assume a restart picks up new values. Check this by noting which containers you must restart or recreate and confirming the agreed command in your own runbook before you proceed.

  3. Set the auth type and the Matrix UVS values

    In the .env file, set the authentication type to Matrix user verification and provide the three values the Matrix User Verification Service module needs: MATRIX_UVS_URL, MATRIX_UVS_ISSUER and MATRIX_UVS_AUTH_TOKEN. The URL points at the verification service your Matrix homeserver can reach, the issuer identifies the token source, and the auth token must be stored as a secret, not committed to version control. Apply the change using the method you confirmed in the previous step. Check by logging in with a known Matrix account and confirming Prosody accepts it, and by reviewing Prosody logs for verification errors.

  4. Decide whether moderators own Jitsi rooms

    Decide whether Matrix room moderators should become owners of the corresponding Prosody room. Setting MATRIX_UVS_SYNC_POWER_LEVELS makes that mapping happen, so a moderator in Matrix can manage the Jitsi meeting without a separate account. Involve the Matrix room administrators, because any change to their power levels will change who controls the meeting. Enable the setting only if that trade-off is accepted. Check by joining a Matrix room as a moderator and a member, then confirming in the Jitsi room which user has owner rights and which does not.

  5. Decide the lobby bypass for Matrix members

    Decide on MATRIX_LOBBY_BYPASS, which lets verified Matrix room members enter without waiting in the Jitsi lobby. Enabling it reduces friction for internal teams, while leaving it off keeps every participant waiting for a moderator to admit them. Record the decision with the owners of the meeting policy, since it changes who can walk in without review. Check by joining as a Matrix member with the setting on and off, and confirming the lobby behaves as recorded.

  6. Move to hybrid mode only if JWT guests are needed

    Switch the auth type to hybrid_matrix_token only if you need guests who authenticate with JWT tokens alongside Matrix members. The hybrid mode supports both methods, so it adds a second trust path that must be understood and reviewed. If no JWT guest workflow exists, keep the simpler Matrix setup. Apply the change using the confirmed method and check that the JWT path issues tokens and that Matrix login still works after the switch.

  7. Test the four access paths end to end

    Test four accounts against a single room: a Matrix member, a Matrix non-member, a Matrix moderator and a guest, using a JWT token if hybrid mode is enabled. Confirm the member joins, the non-member is refused or held, the moderator has owner rights if the power level sync is on, and the guest reaches the intended path. Record each result with the .env values in use. Do not treat the integration as complete until all four results match the access policy agreed in the earlier decisions.

Matrix roles and attributes mapped to Jitsi

This table maps each Matrix-side concept to the Jitsi behavior it controls when the Matrix user verification service is enabled, and names who owns the source of truth for each. Read each row as a chain: the Matrix decision on the left is the input, and the Jitsi effect in the middle is what the conference does with it. Confirm the claim names and identifier formats in the verification service documentation before you rely on any row.

Matrix conceptJitsi effectSource of truthConfirm before go-live
Room membershipUsers who authenticate through the verification service are admitted to conferences tied to the Matrix room they belong toMatrix room administrationWhich room IDs map to which conference names, and how the verification token encodes room context
Room moderator power level (MATRIX_UVS_SYNC_POWER_LEVELS set)Matrix room moderators become owners of the Prosody room, so they hold host rights in the Jitsi conferenceMatrix room administration, changed by the Matrix room's power level settingsWhich power level threshold counts as moderator in your homeserver and how changes take effect for an open meeting
Room members (MATRIX_LOBBY_BYPASS set)Matrix room members skip the Jitsi lobby and join directly, while other participants wait for admissionMatrix room administration for membership, Jitsi operator for lobby settingsWhether lobby behavior applies to guests and to the hybrid_matrix_token auth type in your release
Matrix user identityThe verification service returns an identity the Jitsi side uses for display and for matching the user to the Matrix accountMatrix homeserver for the account, Jitsi operator for the verification service configurationClaim names, identifier format (such as the full Matrix user ID or a localpart) and the issuer value in MATRIX_UVS_ISSUER
Verification service credential (MATRIX_UVS_AUTH_TOKEN)Lets Prosody call the verification service, and a wrong or rotated value blocks all Matrix-based loginsJitsi operatorWhere the token is stored, who can rotate it, and how a rotation is rolled out without interrupting meetings
Hybrid mode (hybrid_matrix_token)Accepts both Matrix-verified users and JWT-token users, so the rule for each path must be written downJitsi operatorWhich paths grant moderator rights and whether JWT claims can override Matrix power levels

Choosing Matrix only, hybrid mode or JWT for Jitsi rooms

The first decision is which identity source decides who may enter a room. Matrix user verification alone fits an organization whose intended participants all hold accounts on the Matrix homeserver that backs the room. In this model, the Prosody server asks the Matrix user verification service, configured through MATRIX_UVS_URL, MATRIX_UVS_ISSUER and MATRIX_UVS_AUTH_TOKEN, whether a participant is a valid Matrix user, and room membership then governs access. Before you choose this path, confirm with your homeserver team that every participant has an account on that server and that the verification endpoint is reachable from the Prosody container.

The hybrid_matrix_token type supports both Matrix and JWT token authentication in one deployment. It becomes relevant when some participants, such as external guests, contractors or automated systems, need tokens from another system and cannot hold Matrix accounts. Each path brings its own trust boundary: a token issuer whose signing keys, claims and rotation you control, and a Matrix verification service that depends on your homeserver. Ask who issues the tokens, who maintains key rotation, and whether Matrix membership should still matter for people who arrive with a token. Confirm in the Docker guide how the hybrid mode decides which path applies to a join attempt before you promise guests access.

The Jitsi handbook recommends JWT token authentication and marks the older secure domain method, which relies on username and password room creation, as deprecated for new installations. JWT moves admission into a token that your identity system signs, so the server checks claims such as the room and the user's role before the participant joins. The handbook also recommends a separate anonymous domain for guests. Guests then join through a domain that carries no authenticated identity, which keeps rooms that require sign-in apart from open access. Confirm the exact configuration keys in the token authentication guide, and test both domains with a guest account and an authenticated account before you rely on the split.

MATRIX_LOBBY_BYPASS lets Matrix room members skip the Jitsi lobby. The convenience is clear: members of a standing team room join immediately, and no host has to admit each one. The cost is that anyone who passes the membership check also skips the moment when a host sees a name and decides. A reasonable approach is to enable bypass for internal rooms whose membership your organization already governs, and to keep lobby admission for rooms that external parties enter. Write down which rooms fall into each group, and check the behavior with a moderator and a non-member before go-live.

MATRIX_UVS_SYNC_POWER_LEVELS makes Matrix room moderators owners of the Prosody room. This ties Jitsi ownership to Matrix power levels, so a change in Matrix changes who can manage the Jitsi room. The decision is therefore an access decision as well as a convenience setting. Review which accounts hold high power levels in each Matrix room that maps to a Jitsi room, remove stale moderators on a set schedule, and confirm that your room owners understand that a Matrix role change also affects Jitsi.

Where Jitsi and Matrix integration fails and how to isolate it

This table lists common Jitsi and Matrix integration failures, the likely cause of each, the setting or log to check first and the fix. Work through the request path in order: network reachability, token validation, room roles, lobby and guest access, then certificates. Most failures trace to the Matrix settings in the .env file, so check those values before changing the Matrix homeserver.

FailureLikely causeCheck firstFix
Verification endpoint unreachable from ProsodyThe Prosody container cannot resolve or reach the URL set for the Matrix user verification service, often because a host-only name or a firewall rule blocks it.MATRIX_UVS_URL, then Prosody container logs for connection errors.Use a URL the Prosody container can resolve, and test reachability from inside that container before restarting the stack.
Token rejected by the verification serviceThe shared credential in MATRIX_UVS_AUTH_TOKEN does not match the value the verification service expects, or it was changed on one side only.MATRIX_UVS_AUTH_TOKEN on both sides, and the verification service's own log for authentication failures.Set the same token on both services, then restart Prosody so the new value loads.
Issuer value does not matchMATRIX_UVS_ISSUER differs from the issuer string the verification service reports, so tokens fail the issuer check.MATRIX_UVS_ISSUER compared with the issuer configured in the verification service.Copy the issuer string exactly, including case and any trailing characters, and restart Prosody.
Moderators join but do not own the roomMATRIX_UVS_SYNC_POWER_LEVELS is not enabled, so Matrix moderator power levels never reach the Prosody room owner role.MATRIX_UVS_SYNC_POWER_LEVELS in the .env file and the user's power level in the Matrix room.Enable the sync setting, confirm the user holds moderator power in the Matrix room, then have them rejoin the conference.
Members stuck in the lobbyThe lobby is active and MATRIX_LOBBY_BYPASS is not set, so verified room members wait for manual admission.MATRIX_LOBBY_BYPASS and the authentication type in the .env file.Enable the lobby bypass for Matrix members, then test with a non-moderator member account.
Guests blocked in hybrid modeUnder hybrid_matrix_token, guests without a Matrix account fall outside the Matrix check and need a valid JWT path to enter.The authentication type in the .env file and the JWT settings used to issue guest tokens.Confirm which guests should enter without a Matrix account, make sure your token issuing covers them, and test with a guest session.
Certificate errors break mobile clientsA self-signed or incomplete certificate chain on the public Jitsi domain. The Jitsi handbook warns this causes problems, especially on mobile clients.The certificate chain served for the Jitsi domain, checked from a mobile network.Install a certificate from a trusted authority for the Jitsi domain with its full chain, then retest on iOS and Android.

Choosing the Matrix homeserver this integration depends on

The Matrix homeserver you run determines what the Jitsi integration can check against, so settle this choice before you edit the Jitsi .env file. Matrix.org's ecosystem page lists several homeserver implementations: Synapse, Dendrite, Conduit and its Rust forks Continuwuity and Tuwunel, and Element's commercial Synapse Pro. Synapse is the most widely documented of these, so most teams will compare against it first. Whichever server you choose, the Jitsi side depends on the Matrix user verification endpoint that MATRIX_UVS_URL points to. The homeserver and its version therefore belong in the Jitsi design from the start, and the team that runs the homeserver should sign off on that choice.

Synapse is developed by Element and distributed under AGPL-3.0, and Element sells commercial licenses for organizations that need terms beyond the AGPL. Confirm with your legal team whether running an AGPL-licensed server in your environment, including any modifications you make, creates obligations you must plan for, and whether a commercial license is needed. Licensing has also changed recently. On December 13, 2023, Element announced that future Synapse contributions would be licensed under AGPLv3 instead of Apache 2.0, that the repositories moved from matrix-org to element-hq on GitHub, and that contributors sign a CLA. If your engineers send patches upstream, the CLA terms apply to those contributions, and someone in your organization should review them before anyone signs.

Version floors constrain the database and runtime your platform team must build. Synapse 1.143.0 and later require PostgreSQL 14 or newer, and 1.142.0 and later require Python 3.10 or newer. Synapse documentation recommends PostgreSQL for production, with SQLite also supported, so a SQLite-based test homeserver may not match the database your production deployment uses. Check the upgrade notes for each version you plan to run. They also state that Synapse drops support for Python and PostgreSQL versions once those reach upstream end of life, so your database and host operating system lifecycles set the Synapse versions you can stay on.

Plan every homeserver upgrade with a rollback path that you have tested. The Synapse upgrade notes warn that rolling back can be difficult because database schema changes occur between releases. For this integration, a homeserver upgrade can change the behavior that the Jitsi verification depends on, and reverting the homeserver alone may not restore the earlier state. Take a database backup before each upgrade, record the exact Synapse and PostgreSQL versions in your change record, and schedule the upgrade in a window where room access can be checked afterward. Ask the homeserver operator which backups they will take and how long a restore takes in your environment.

Before go-live, confirm the verification integration against the homeserver and version you chose. The Jitsi Docker guide documents MATRIX_UVS_URL, MATRIX_UVS_ISSUER and MATRIX_UVS_AUTH_TOKEN, along with MATRIX_UVS_SYNC_POWER_LEVELS for moderators and the hybrid_matrix_token type for running Matrix and JWT together. Test with at least one room member, one non-member and one moderator, using the same homeserver version you will run in production. Record the results and repeat the test after every homeserver upgrade. The guide's settings are a starting point, but the endpoint behavior and token format come from your homeserver and its version, so confirm them there.

Security settings for Matrix-gated Jitsi rooms

These cards cover the trust points in a Jitsi and Matrix integration: the credential that links the two systems, the network path between them, the certificates browsers check, and the encryption that applies to media and chat. Each setting has a different scope, so review them together. DeployOpen can run security testing against this setup, but it does not issue audit reports or certifications. Independent auditors and certification bodies perform that work.

Protect the verification token

MATRIX_UVS_AUTH_TOKEN authenticates the Jitsi side when it asks the Matrix user verification service to confirm who may join a room. Keep it out of .env files in version control and load it from the secrets handling your organization already uses, such as a managed vault or your orchestrator's secret store. Check which accounts and processes can read the container environment, and plan a rotation procedure that updates Prosody and the verification service together.

Restrict the verification endpoint

MATRIX_UVS_URL points Prosody at the verification service, so that path should be reachable only from the Jitsi network segment. Allow the connection between the Prosody host or container and the service in firewall or security group rules, and deny other sources. Confirm the route in your environment, including any proxy or load balancer in between, and test that hosts outside the segment are refused.

Keep HTTPS and valid certificates

The Jitsi handbook states that HTTPS with a proper domain certificate is necessary for working audio and video, and it warns that self-signed certificates cause problems, especially with mobile clients. Use a certificate from a publicly trusted authority for the meeting domain, automate renewal, and check the chain from a mobile device as well as a desktop browser. Monitor expiry dates, since a lapsed certificate stops the browser from loading the meeting.

Understand DTLS-SRTP media encryption

Jitsi Meet encrypts audio and video on the network with DTLS-SRTP. The videobridge decrypts packets in memory so it can route them, and it never stores them. Treat this as encryption in transit to the bridge. Anyone who controls the videobridge host sits inside the trust boundary, so record that in your risk assessment and in the design of your bridge hosting.

Scope of end-to-end encryption

Jitsi Meet offers end-to-end encryption in Chromium 83 and later browsers and in the Jitsi Electron client. It covers audio, video and screen sharing, and it does not cover chat or polls. Enable it only after confirming that every participant uses a supported client. Tell users that chat and polls remain outside the encrypted scope, and document that limit for the people who approve meeting policy.

Synapse federation controls

Synapse federates on port 8448 by default. The federation_domain_whitelist setting restricts federation to the domains you list, and an empty list disables federation. Set the list to the partners your organization has agreed to, and firewall the federation listener so only those servers can reach it. Check server_name and any delegation records, because they determine how user IDs such as @user:example.com resolve.

How to test membership, moderator sync and lobby behavior

Test membership, moderator sync and lobby behavior against the access policy you agreed before any configuration was changed. The test cases should be written from that policy, not from what the configuration happens to do, because a test built from the configuration can only confirm the configuration. Before running anything, write down who may enter a conference, who may hold moderator rights, and who may skip the lobby, and map each of those statements to a test case with an expected result.

Build a dedicated Matrix test room with four accounts: one member, one non-member, one moderator and one guest. Use accounts that are clearly labeled as test users so they can be disabled afterward. For each account, attempt to join the Jitsi conference linked to the room and record the outcome. The member and moderator should be admitted under the rules your policy sets, the non-member should be refused, and the guest should follow whatever guest path you documented. Confirm the result from the Matrix user verification side as well, since the Prosody Auth Matrix User Verification module is the component making the decision. Do not rely only on what the browser displays.

Next, confirm the moderator sync. Set MATRIX_UVS_SYNC_POWER_LEVELS in the Docker .env file as your design specifies, then check that the Matrix moderator becomes the owner of the Prosody room. Verify this in the Prosody logs or with the administrative tools your deployment exposes, and confirm that a Matrix user without moderator power in the room does not gain owner status. Also confirm lobby behavior: members configured for MATRIX_LOBBY_BYPASS should join without waiting, and everyone else should wait in the lobby. Run this check for each role, because lobby bypass is the setting most often assumed to apply to moderators when it was only agreed for members.

Repeat the full test set after two events that commonly change behavior. The first is a Jitsi container restart, which confirms that the settings in .env persist and that the authentication path comes back in the same state. The second is a Matrix homeserver upgrade. If you run Synapse, read the upgrade notes for the release you are moving to before the test window, and confirm that the user verification endpoint still answers with the same token issuer and that room power levels were not altered by the upgrade. Schedule these retests before the change is approved for production, and ask your vendor or implementation partner to confirm any release-specific steps in writing.

For an internal review, keep a dated record for each run: the access policy version, the test account list with roles, the .env values in effect (with secrets redacted), the expected and observed result for every case, the Prosody log lines showing owner assignment, screenshots or screen recordings of lobby behavior, and the Matrix and Jitsi versions tested. Store the record where your change management process keeps other evidence. Record every failure and its fix, and rerun the affected cases afterward. This record shows reviewers what was tested and why, and it lets your team repeat the same plan after the next upgrade without rebuilding it.

Why Jitsi and Matrix integration fails at first login

This table lists four causes of first-login failures in a Jitsi and Matrix integration, each with the symptom to look for, the check to run and the fix to apply. Work through the rows in order, because a wrong issuer or token blocks every user while the other causes affect only some users or some clients. Confirm the log locations for Prosody and the verification service in the Jitsi Docker guide before you start.

CauseCheckFix
Wrong MATRIX_UVS_ISSUER valueCompare the value in your .env file with the issuer string the verification service puts in its tokens. Any mismatch in spelling, trailing slash or scheme makes Prosody reject every token.Set MATRIX_UVS_ISSUER to the exact issuer value your verification service emits, restart the affected containers and retest with a single known account.
Expired or incorrect service tokenCheck that MATRIX_UVS_AUTH_TOKEN matches the token the verification service expects, and whether it has been rotated or has passed its validity period. Look for authorization errors in the Prosody log.Replace the token with a current value, update the .env file in a controlled change, and confirm that the old value is no longer accepted.
Membership change not yet visible to the verification serviceHave a user who was just invited or added to the Matrix room try to join, then compare their room membership in the homeserver with what the verification service returns. A user who was removed may still get in for a short time.Wait for the membership state to propagate, then retry. If the delay persists, check the homeserver and verification service logs and confirm sync behavior with your Matrix homeserver version.
Browser login works but mobile client fails on certificate trustTest the same account in a desktop browser and in the mobile app. Check that the certificate chain for the Jitsi domain and the homeserver is complete and trusted by the device, not only by the browser.Install a publicly trusted certificate with the full chain on the Jitsi and homeserver endpoints. The Jitsi handbook warns that self-signed certificates cause problems, especially on mobile clients.

What drives cost and effort in Jitsi and Matrix integration

What makes a Jitsi and Matrix integration take more effort?

Effort depends on how many Matrix homeservers sit behind the integration, whether the Matrix user verification service already exists, whether you need hybrid Matrix plus JWT login, how moderators map to room owners, and how far testing goes. Each choice adds configuration, access coordination and verification steps across the Jitsi, Prosody and Matrix sides. Teams that already run a stable Matrix homeserver and a reverse proxy usually have less to build than teams starting both stacks at once. The fastest way to size the work is a written scope that lists each homeserver, each authentication mode and each room policy, followed by a review of your current environment.

How many Matrix homeservers does the integration need to cover?

Each homeserver adds its own configuration and testing. The Jitsi side is configured with a verification service URL, an issuer and an authentication token, so every Matrix server that should admit users needs a clear mapping to that setup. Synapse is the most widely documented homeserver, but the Matrix ecosystem also includes Dendrite, Conduit and its forks, and the work depends on which one you run. Federation settings matter too. Synapse federates on port 8448 by default and can restrict federation to listed domains, so the scope should state whether federation is open, limited or disabled. Synapse is licensed under AGPL-3.0 with commercial exceptions from Element, so confirm license terms with your legal team before you choose a homeserver.

Does an existing verification service or JWT requirement change the work?

An existing verification service shortens the build, but it still needs checks. If the Matrix user verification service is already running and reachable from the Jitsi host, the work moves toward connection settings, token handling and testing. Hybrid mode, which uses the hybrid_matrix_token authentication type, adds JWT token handling on top of Matrix checks, so the identity and token design must cover both paths. Lobby behavior also changes, because MATRIX_LOBBY_BYPASS lets Matrix room members skip the Jitsi lobby. That choice affects who can enter a meeting unattended. Confirm the service version, its owner and whether it is maintained as a supported component before you plan around it.

How do moderator policy and testing scope change the effort?

Moderator policy and testing scope decide how much verification happens. MATRIX_UVS_SYNC_POWER_LEVELS makes Matrix room moderators owners of the Prosody room, so you need an agreed rule for who holds moderator power in Matrix and how that power is reviewed. Each rule should be tested with test accounts in staging: member entry, guest entry, lobby behavior, moderator promotion and demotion, and room expiry. A narrow policy with a few room types takes less testing than one covering many departments, external guests and recorded meetings. Scope the test matrix in writing, including which browsers and mobile clients are covered, and ask the partner for the test cases and the evidence it will hand over.

What work is one-time and what recurs after go-live?

Setup is one-time, but upgrades and maintenance recur. One-time work covers design, configuration, the Matrix and Jitsi integration, access setup and acceptance testing. Recurring work includes Jitsi Meet and Docker updates, rotating the verification service token, patching the homeserver and its database, and retesting moderator sync after each change. Synapse documentation warns that rolling back can be difficult because of database schema changes between releases, so each homeserver upgrade needs a rehearsed plan and a backup taken before the change. Recent Synapse releases also require PostgreSQL 14 or newer and Python 3.10 or newer, so runtime upgrades recur as upstream support changes. Ask quotes to separate the initial build from a retainer for ongoing upgrades and support, since DeployOpen offers both.

What does our team need to provide before work starts?

The client supplies access, DNS and a policy owner. The work needs Matrix admin access to create or confirm verification and room settings, plus access to homeserver configuration and the database for upgrades. A DNS and certificate owner must control the Jitsi domain and the Matrix server name, because Jitsi requires HTTPS with a proper domain certificate for working audio and video, and self-signed certificates cause problems, especially on mobile clients. A named access policy owner must decide who may create rooms, who becomes moderator and which accounts count as guests. Without that person, testing stalls on open questions. Name these three roles before the scoping call so the schedule does not wait on access requests.

Can our internal team build and run this integration alone?

A capable internal team can do it, but the skills must cover both stacks. The integration touches Jitsi's Docker or Debian deployment, Prosody authentication, a Matrix homeserver, certificates and network ports, so one engineer rarely covers all of it. Jitsi's scalable setup guide warns that building scalable infrastructure is a task for experienced administrators and recommends configuration management tools, which signals the skill level expected for larger deployments. A team can split the work, with one group owning Jitsi, another owning Matrix and a security reviewer signing off on access rules. Check whether the same team can also handle upgrades and testing after go-live. A partner is useful when skills, staff time or a deadline is the constraint.

Why is no fixed price or duration given before a written scope?

No fixed price or duration until the scope is written. Cost depends on the drivers above: homeserver count, existing services, authentication mode, moderator policy, testing depth and the client's ownership of DNS, certificates and access. Until those are settled, any figure would be a guess, and DeployOpen does not publish a price list. Most engagements are fixed-scope, so scope, deliverables and timelines are agreed in writing before work starts, and the quote follows from that document. Ask for a quote that lists each deliverable, the client inputs it assumes, the testing evidence it includes and the cost of any recurring support under a separate retainer.

How DeployOpen scopes and delivers Jitsi and Matrix integration

DeployOpen plans and delivers self-hosted Jitsi Meet integrations inside your own infrastructure, including the Matrix user verification route and the hybrid Matrix plus JWT mode. Engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts, and ongoing support is available as a retainer.

How we scope

  • Confirm which Matrix homeserver holds the room membership that will gate Jitsi access.
  • Decide between Matrix user verification alone and the hybrid Matrix plus JWT mode for guests and service accounts.
  • Document how Matrix moderator power levels should map to Jitsi room owners and whether lobby bypass applies.

How we build

  • Deploy the Jitsi Docker stack with the Matrix verification settings held in the .env file under change control.
  • Verify the Prosody user verification service connection and token handling against a dedicated test homeserver room.
  • Test moderator sync, guest access and lobby behavior with scripted sessions before any user group is switched on.

How we hand over

  • Deliver a written configuration record covering the Matrix endpoints, issuer settings, token storage and authentication mode.
  • Provide runbooks for rotating the verification token and for recovering when the homeserver is unavailable.
  • Walk your administrators through room ownership sync, failure symptoms and the test cases used at acceptance.

How we support

  • Review Jitsi and Matrix component versions on a schedule agreed in the written scope or retainer.
  • Re-run the membership and moderator test cases after each upgrade of Jitsi or the homeserver.
  • Keep the integration documentation current with changes to your identity, network and homeserver setup.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.