Jitsi customization

Jitsi customization changes how your meetings look, behave and connect to your tools, using configuration and deployment hooks instead of a fork. This page explains the work, what drives its cost and what you need to provide.

On this page

What Jitsi customization covers

Customization of Jitsi Meet covers four kinds of work: branding the web interface, configuring interface and feature settings, embedding meetings in your own applications with the IFrame API, and enabling optional components such as Etherpad for shared notes, Excalidraw whiteboards and transcription through Jigasi. Each has different owners and different risks, so it helps to scope them separately before a rollout starts.

Most changes start with a trigger. A rebrand changes logos, colors and the welcome page. An intranet embed places meetings inside a portal or case management tool. A feature policy turns off screen sharing for guests or hides features that conflict with recording rules. A new optional component, such as a whiteboard for a training team, adds a service that must be deployed, secured and upgraded alongside the core stack. Write down which trigger applies to each request, because it determines who should make the change.

Many small configuration changes can be made in-house by a platform team that is comfortable editing the deployment configuration and reading release notes. Embedding work, changes that span several components and upgrade-safe maintenance are more often outsourced, because they touch the web app, the IFrame API contract and the containers together, and because each Jitsi release can change them. Confirm with your team which of these skills you already have.

Jitsi Meet is licensed under Apache 2.0, so you may modify it, but most of these goals are met through configuration, the IFrame API and the supported optional components. A fork creates a code base you must merge and retest with every stable release. Ask any partner to show which goals truly require code changes before agreeing to maintain a fork.

What the work includes

Customization is delivered as configuration and integration work inside your own infrastructure, so the Jitsi Meet code stays upstream. Deliverables for each package are listed in the written scope before work starts.

Interface branding

Covers the logo, color palette, watermarks, favicon, pre-join page text and welcome text shown to participants. Check that every asset is supplied in the sizes and formats the web app expects, and that the branding survives the next Jitsi Meet stable release without manual patching.

Toolbar and feature configuration

Sets which toolbar buttons appear, default audio and video state on join, and which options moderators and guests receive, such as who can mute others or share screens. Each setting should be reviewed with the people who run meetings, because defaults chosen for a small team can fail at larger scale.

IFrame API embedding

Embeds meetings into an intranet portal or internal application through the Jitsi IFrame API, including room naming, display names and lifecycle events. Confirm how the host page passes identity into the meeting and which authentication model governs who can open a room.

Etherpad, Excalidraw and transcription

Enables the optional Etherpad shared notes, Excalidraw whiteboards and transcription backends (Google Cloud, Vosk or Whisper) as Docker extensions. Transcription choices decide where audio is processed, so confirm with your data protection owner whether a cloud backend is permitted before selecting it.

Versioned configuration repository

Keeps branding assets, interface settings, environment files and integration code in a Git repository that is handed over with the deployment. Pin the Jitsi release used for each change so upgrades can be tested against a known configuration rather than rebuilt from memory.

What drives customization effort

This table lists the factors that most change how much work a Jitsi customization takes, why each one adds effort, and how to keep it contained.

DriverWhy it adds effortHow to keep it down
Number of brand and layout changesEach logo, color, toolbar or pre-join change must be built, tested across browsers and carried through every upgrade. Changes to the web app's own code are the hardest to maintain.Limit changes to the supported interface and configuration options. Agree a written list of brand elements before build starts and treat anything beyond it as a new scope item.
Depth of interface configurationHiding or reordering toolbar buttons, changing default settings and switching features on or off touch several configuration files. Deep edits interact with each other and need regression checks.Set only the options your users need. Keep a single version-controlled configuration file so every change is visible, reviewed and easy to roll back.
Number of embedding points and their frameworksEach page or application that embeds meetings needs its own integration with the IFrame API, and each framework (React, Angular, plain HTML, mobile wrappers) handles lifecycle events differently.Reuse one embed pattern and one wrapper component across all embedding points. Confirm early which frameworks and platforms the embed must support.
Optional components enabledEtherpad, Excalidraw whiteboards, Jibri, Jigasi and transcription each add a service, storage, ports and monitoring. Each one also needs its own sizing, access rules and update cycle.Enable only the components the requirement names. Add them in phases with a pilot, so each one is verified before the next is introduced.
Transcription backend choice and data-handling rulesGoogle Cloud, Vosk and Whisper backends differ in where audio is processed, what is logged and how the output is stored. Data-handling rules from legal or privacy teams can force a design change after build work has started.Agree one transcription backend and its data-handling rules before any integration work. Document where audio and transcripts are stored and who can access them.
Number of environmentsEach environment (development, test, staging, production) needs its own configuration, certificates, domains and test data. Keeping them aligned is ongoing work, and drift between them causes most late defects.Keep environments built from the same configuration source and promote changes through them in order. Limit the number of environments to what the testing process actually uses.
Frequency of Jitsi release changesJitsi Meet publishes stable releases by build number. Customizations that touch configuration or embed code may need retesting each time the client moves to a newer release, and the frequency sets how often that retest happens.Confirm the release cadence the client will follow and keep customizations within supported configuration so upgrades need less rework. Plan the retest into the support agreement.

Project phases and outputs

The sequence moves from agreed requirements to a tested, documented customization that your team can redeploy without rebuilding it by hand.

  1. Discover brand, feature and embedding requirements

    We review your brand guidelines, the features you need switched on or off, and every page or application that will embed meetings, checking each requirement against the Jitsi Meet release tag you have chosen. The output is a requirements register that records each item, the release it was checked against, and any gaps that need a decision before design starts.

  2. Design the configuration and code boundary

    We draft the configuration design and list, item by item, what stays in configuration files and interface settings and what would require code changes to the web app. You review and approve the list, because items moved to code add maintenance work at every future upgrade. The output is a signed-off configuration design with a code change register.

  3. Build in a non-production environment

    We apply the approved configuration, branding assets and any approved code changes to a non-production deployment that matches your production topology as closely as the written scope allows. Changes are kept in version control so each build can be reproduced. The output is a working non-production instance and a build record tied to the release tag.

  4. Integrate embedding and optional components

    We connect the IFrame API embedding in your applications and enable any optional components in scope, such as Etherpad, whiteboards or transcription, with their own configuration checks. Each integration is tested for join, leave and meeting controls from the host page. The output is a list of working integrations with the test results for each.

  5. Test across browsers and devices

    We run the test plan across the browsers, operating systems and mobile devices your users rely on, covering branding display, feature toggles, embedded meetings and access paths. Defects are logged, fixed in non-production and retested until the agreed exit criteria are met. The output is a test report with pass and fail results, open defects and the browser and device matrix used.

  6. Hand over with a change log and repeatable deployment

    We move the approved build to your production process, document the configuration, the code boundary and the embedding setup, and walk your team through a deployment and rollback run. The change log records every customization and the release it applies to. The output is the handover pack, a change log and a repeatable deployment method your team can run again for future upgrades.

What stays in-house and what goes to a partner

This table compares the Jitsi customization work your team should keep with the technical work a partner typically takes on, along with the skills each side needs to cover it.

Work areaTypically kept in-houseTypically outsourced to a partnerSkills each side needs
Brand assets and visual identityLogos, colors, favicons, background images and the final approval of how the interface looksPlacing assets into the web app build, wiring them through the Docker or Debian configuration and checking them across browsersIn-house: brand and design owners. Partner: front-end and web configuration knowledge for the Jitsi Meet interface
Copy and text decisionsWording of welcome pages, prejoin text, legal notices and any language or locale choicesChanging text strings in the build, testing each locale and keeping overrides applied through upgradesIn-house: content owner and legal reviewer. Partner: web build and localization handling
Feature and interface policyDeciding which toolbar buttons, lobby rules, moderator powers and optional features users may seeTranslating those decisions into interface and feature configuration and confirming each option exists in the release you runIn-house: a product owner who can make the final call on each setting. Partner: knowledge of Jitsi configuration options
Configuration design against the releaseAgreeing which release line the organization will follow and who accepts upgrade riskMapping customizations to the stable release in use, recording which overrides must be reviewed on each upgradeIn-house: release owner. Partner: Jitsi Meet internals and release change review
Container-based overridesApproving which files or settings are overridden and reviewing the resulting imagesBuilding the override layer for the Docker setup, keeping containers rootless and read-only as the release provides, and documenting each overrideIn-house: container operations to run the result. Partner: Docker and container build skills
IFrame API embeddingNaming the internal applications and pages that will host meetings and owning their user experienceBuilding the embedding code, handling events and authentication hand-off, and testing inside each host applicationIn-house: application developers who own the host pages. Partner: IFrame API and web integration developers
Optional component setupDeciding whether Etherpad, Excalidraw whiteboards or transcription are needed, and which data may leave your networkConfiguring the chosen Docker extensions, connecting them to the web and XMPP services, and checking each component works end to endIn-house: data protection and privacy owner for transcription choices. Partner: Docker extension configuration skills
Testing and documentationAcceptance criteria, user pilot groups and sign-off on each changeTest plans for browsers and devices, regression checks after each change and written runbooks for the configurationIn-house: pilot users and product owner. Partner: QA, technical writing and Jitsi operations knowledge

What goes wrong and how to prevent it

Most Jitsi customization problems come from where changes live, how they survive upgrades, and what they expose to users and data flows. Check each item before the first production embed.

Edits inside running containers

Changes made directly inside a running container are lost when the container is recreated on redeploy. Since release stable-11146, the Docker containers run rootless with read-only filesystems, so writes inside them can fail anyway. Prevention: keep branding and configuration overrides as files on the host, mount them into the container, and keep those files in version control.

Upgrades that break customized configuration

A new Jitsi Meet release can change interface keys, templates or build output that your overrides depend on, and the break may appear only after a pull. Prevention: pin the release tag you run, rehearse each upgrade on a staging copy that includes your branding and embedded pages, and review the release notes before rollout.

Snippets from older or unrelated sources

Examples copied from forum posts, blogs or older Jitsi versions often reference settings, file paths or deployment models that no longer apply to your setup. Prevention: check every key and path against the handbook for the release you run, and remove any setting you cannot trace to a current source.

Embeds that ignore browser permissions

Browsers grant camera and microphone to an embedded meeting only when the iframe carries the required permission attributes and the host page is served over HTTPS. Without them, users may join a room that shows no audio or video. Prevention: set the allow attributes in your embed code and test joins in each browser your users run, inside your actual intranet or portal pages.

Optional components that add data obligations

Etherpad notes, Excalidraw whiteboards, Jigasi transcription and Jibri recordings each create data flows the base meeting does not have. Transcription may send audio to a backend such as Google Cloud, and recordings and notes need storage and retention rules. Prevention: map where each component's data goes before enabling it, and record the decision with your privacy and legal owners.

Self-signed certificates on embedded pages

A self-signed certificate on the meeting domain or on a page that embeds it can block audio and video, and the Jitsi handbook warns that such certificates cause problems, especially with mobile clients. Browser warnings also teach users to click through. Prevention: issue the meeting domain a certificate from a trusted authority, serve every embedding page over HTTPS, and test joins on mobile devices before launch.

How the work differs by starting point

Teams running the official Docker setup customize Jitsi through configuration rather than by editing files inside containers. Most of the work is in environment variables and mounted custom directories, which survive container image updates when they are kept separate from the image itself.

  • Overrides: Branding, interface settings and feature flags are passed through the environment file and custom directories mounted into the web container.
  • Container model: The web, Prosody, Jicofo and videobridge containers are separate, so each customization must be checked against the service it touches.
  • Rootless and read-only: Recent releases run rootless with read-only filesystems, so any change that writes into the image will fail, which pushes work toward mounts.
  • Optional containers: Etherpad, whiteboards and transcription add services, each with its own configuration and network needs.
  • Confirm first: The exact image tag you run, which environment variables your current file sets, and whether anyone has already edited files inside a running container.

What you need to provide

Before implementation starts, the client supplies the inputs that customization cannot be built without. Brand assets should arrive in the formats the work needs: logo files in vector form where available, favicon and app icon sources, and the colors and fonts used in the web interface. Approved copy for the pre-join page, the welcome page and any legal or privacy text should be final before build, because wording changes after theming tend to cause rework in the templates and language files.

A named decision owner is needed for feature policy. This person decides which toolbar buttons, moderator controls, lobby behavior, and default audio and video settings are enabled or hidden, and which optional extensions such as Etherpad, Excalidraw whiteboards or transcription are in scope. Feature settings in the interface configuration and the config file interact, so one owner should approve the final list rather than several departments each adding requests. The same owner should also approve the list of embedding applications and their hosting details, including the domains that will load the IFrame API and the URLs that will be allowed to embed meetings.

Access to a non-production Jitsi environment running the current stable release tag is required. Confirm which build tag the client has agreed to, and make sure the test environment matches the production version, Docker or Debian packaging method and HTTPS setup. Staff for browser and device testing should be named in advance, covering the browsers, operating systems and mobile clients the organization uses. If transcription is in scope, the client must name the transcription backend, confirm where audio may be processed, and state data-handling rules for transcripts, including retention and who may read them.

A change process for the production configuration must exist before go-live. It should record who requests a change, who reviews it, where configuration files are stored, and how changes are rolled back. Final sign-off rests with the client's named owner for the Jitsi service, who accepts the test results, the feature policy and the branding in writing. DeployOpen prepares the build and evidence, but the client's owner decides when a change goes to production.

Frequently asked questions

Does customizing Jitsi Meet require forking the code?

Generally no. Most branding, feature settings and embedding choices are made through configuration and web assets on your own deployment, so the upstream code stays unchanged. A fork becomes likely when you need behavior that configuration does not expose, such as new interface components, changed signaling or altered media handling. Each such change adds code your team must carry through every upgrade, so decide early which requirements truly need code.

What drives the cost of Jitsi customization, and can you give a price?

A figure follows from the written scope, so DeployOpen does not publish a price list or estimate prices. The main drivers are the number of branding and interface changes, whether meetings must be embedded in your own applications, which optional components such as Etherpad, whiteboards or transcription are enabled, the authentication work, and how many browsers and devices must be tested. Ask the quote to separate one-time build work from recurring upgrade and support work, and to list its assumptions.

How long does a Jitsi customization project take?

The timeline is set in the written scope before work starts, and it depends on the drivers listed there. Interface branding is usually the smallest part of the work. Embedding meetings in your applications, adding optional components and testing across clients take longer because each depends on your systems and internal approvals. Ask for the timeline with its dependencies, including when your team must review designs, supply assets and approve test results.

Can our internal team customize Jitsi without outside help, and what must we supply?

Yes for small brand changes, such as a logo, colors, welcome text and a few settings, if an engineer is comfortable editing deployment configuration and redeploying the web container. Harder work includes embedding meetings with the IFrame API, handling authentication, and enabling optional components, which touch several services and need testing. Your team should supply brand assets in usable formats, a named decision-maker, a staging deployment that matches production, a working HTTPS certificate, and the list of applications that will embed meetings.

Do Jitsi customizations survive upgrades, and how are they tested?

Customizations survive upgrades when they are kept as separate configuration and web assets applied on top of an unmodified release. They break when they edit upstream files. Keep custom work in version control, pin each release, and rerun the branding, embedding and optional component checks in staging before each upgrade. Confirm whether your deployment uses Docker images or Debian packages, because the upgrade steps differ. Also recheck browser compatibility after each release.

What should we confirm about transcription data handling with Jitsi?

Confirm where audio goes and who can access it, because the answer depends on the backend you choose. Jitsi's optional transcription can use Google Cloud, Vosk or Whisper backends. A hosted service receives audio outside your infrastructure, so check its terms, data retention, processing region and contract with the provider. For a self-run backend, confirm where it is hosted, what it logs, and where transcripts are stored. Set retention and access rules before enabling it, and tell meeting participants that transcription is active.

How DeployOpen delivers Jitsi customization

DeployOpen scopes, builds, tests and hands over Jitsi customization inside infrastructure you control, without forking the Jitsi Meet code. Branding, interface settings, IFrame API embedding and optional components are configured on top of a standard deployment so upgrades stay manageable.

How we scope

  • Each engagement is fixed-scope, with the customization items, deliverables and timelines agreed in writing before work starts.
  • The written scope lists which web interface, branding, interface and feature settings change, and which embedding pages call the IFrame API.
  • Optional components such as Etherpad, Excalidraw whiteboards or transcription are scoped separately, with the backend and hosting choices confirmed first.

How we build

  • Customization is applied through configuration and supported extension points, keeping the upstream jitsi-meet codebase unmodified where possible.
  • Branding assets, interface options and feature flags are set in a version-controlled configuration that your team can review and reproduce.
  • Embedded meeting pages are built against the IFrame API and tested in the browsers and devices your users rely on.

How we hand over

  • Handover includes documentation of every customization, where it lives in the deployment and how to change it safely.
  • Optional components are documented with their resource needs, network requirements and the Docker or package settings that control them.
  • Your team receives a test checklist covering branding, embedding and component behavior to run after each future Jitsi release.

How we support

  • Ongoing support, upgrades and continuous testing are available as a retainer, covering customizations across Jitsi releases.
  • Upgrade testing checks that custom branding, IFrame embeds and optional components still behave after each stable release.
  • Confirm with DeployOpen which items a retainer covers, how upgrades are tested and how quickly issues are triaged before you sign.

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.