Skip to content
Jitsi.help

How to white-label and rebrand Jitsi Meet

Updated Tested on Jitsi Meet stable-11031By the Jitsi Help engineering team

Short answer

On Docker, put branding overrides in config/web/custom-interface_config.js (APP_NAME, DEFAULT_LOGO_URL, SHOW_JITSI_WATERMARK=false and related flags) and behavior overrides in custom-config.js. The web container appends both files on every start, so your branding survives restarts and upgrades. Colors and the welcome page text need a small CSS and script block in the same file.

A white-labeled Jitsi looks like your product: your name in the browser tab and welcome page, your logo in the corner, your colors on the buttons, and no Jitsi watermark or app promos. On the Docker setup all of this lives in two small files that survive upgrades.

These are the exact overrides our platform renders for customers who buy the Branding feature.

Where branding lives

The web container regenerates config.js and interface_config.js every time it starts, then appends:

File Controls
config/web/custom-interface_config.js Name, logo, watermark, promos, background, colors
config/web/custom-config.js Behavior: toolbar buttons, invite, prejoin, features

Never edit the generated files. Your changes disappear on the next restart.

// config/web/custom-interface_config.js
interfaceConfig.APP_NAME = "Acme Meet";
interfaceConfig.NATIVE_APP_NAME = "Acme Meet";
interfaceConfig.PROVIDER_NAME = "Acme";

interfaceConfig.DEFAULT_LOGO_URL = "https://meet.example.com/images/acme-logo.svg";
interfaceConfig.DEFAULT_WELCOME_PAGE_LOGO_URL = "https://meet.example.com/images/acme-logo.svg";

You can serve the logo from any HTTPS URL, or embed it as a data URI so there is no extra file to manage.

Remove the watermark and promos

interfaceConfig.SHOW_JITSI_WATERMARK = false;
interfaceConfig.JITSI_WATERMARK_LINK = "";
interfaceConfig.SHOW_WATERMARK_FOR_GUESTS = false;
interfaceConfig.SHOW_POWERED_BY = false;
interfaceConfig.SHOW_PROMOTIONAL_CLOSE_PAGE = false;
interfaceConfig.MOBILE_APP_PROMO = false;

The welcome page footer with App Store and Google Play badges is not covered by MOBILE_APP_PROMO. Hide it with CSS:

(function () {
  var s = document.createElement("style");
  s.textContent = ".welcome-footer,.welcome-footer--row-1,.welcome-footer-row-block{display:none !important;}";
  document.head.appendChild(s);
})();

Brand colors

Jitsi’s UI reads several CSS variables. Override them and the main buttons:

(function () {
  var c = "#0f6a5d";
  var s = document.createElement("style");
  s.textContent =
    ":root{--link-color:" + c + ";--focus-color:" + c + ";" +
    "--action-button-background:" + c + ";--ok-action-button-background:" + c + ";}" +
    ".welcome-page-button,#enter_room_button,.action-button,.prejoin-preview-btn--primary,.primary{" +
    "background:" + c + " !important;border-color:" + c + " !important;}";
  document.head.appendChild(s);
})();

interfaceConfig.DEFAULT_BACKGROUND = "#0b1220";

Class names can change between releases, so re-check colors after each upgrade.

Favicon

(function () {
  var icon = document.querySelector("link[rel~='icon']") || document.createElement("link");
  icon.setAttribute("rel", "shortcut icon");
  icon.setAttribute("href", "https://meet.example.com/images/favicon.png");
  document.head.appendChild(icon);
})();

Welcome page title

The welcome page headline and subtitle come from translation strings, not APP_NAME. Patch them after render:

document.addEventListener("DOMContentLoaded", function () {
  var n = 0;
  var iv = setInterval(function () {
    var t = document.querySelector(".header-text-title");
    var s = document.querySelector(".header-text-subtitle");
    if (t) t.textContent = "Acme Meet";
    if (s) s.textContent = "Secure video meetings for Acme";
    if (++n > 30) clearInterval(iv);
  }, 200);
});

Toolbar and behavior

// config/web/custom-config.js
config.disableInviteFunctions = true;
config.toolbarButtons = [
  "microphone", "camera", "desktop", "raisehand", "reactions",
  "participants-pane", "tileview", "fullscreen", "settings", "hangup",
  "security", "videoquality", "filmstrip", "whiteboard", "select-background"
];

Prejoin, required display names and default language are simpler to set in .env:

ENABLE_PREJOIN_PAGE=1
ENABLE_REQUIRE_DISPLAY_NAME=1
DEFAULT_LANGUAGE=en

Apply changes with docker compose restart web, then hard-refresh the browser.

Custom domain

Your own domain is the most visible part of the brand. Point meet.yourcompany.com at the server and set PUBLIC_URL and the Let’s Encrypt domain to it. See Let’s Encrypt SSL for Jitsi.

Jitsi Meet’s code is Apache 2.0, so you may rebrand and modify it. The names “Jitsi” and “Jitsi Meet” are trademarks of 8x8, so a white-labeled service should carry your own name and logo, not theirs.

Done for you

Branding is a one-time $29 feature on our platform: upload a logo, pick colors and a name, and it is applied and kept through upgrades. For custom UI work beyond configuration, see our white label service.

Frequently asked questions

Is it legal to white-label Jitsi Meet?

The Jitsi Meet software is Apache 2.0 licensed, which allows you to modify and rebrand it. The Jitsi name and logo are trademarks of 8x8, so a rebranded service should use its own name and logo rather than presenting itself as Jitsi. Keep the license notices in the source.

How do I remove the Jitsi watermark?

Set interfaceConfig.SHOW_JITSI_WATERMARK = false and interfaceConfig.JITSI_WATERMARK_LINK = '' in custom-interface_config.js, and also SHOW_WATERMARK_FOR_GUESTS and SHOW_POWERED_BY to false. Hide the welcome page app download footer with a CSS rule, because the MOBILE_APP_PROMO flag does not cover it.

Will an upgrade overwrite my branding?

Not if it lives in the custom-*.js files under config/web. The container regenerates config.js and interface_config.js on start and then appends the custom files. Edits made directly to config.js are lost on the next restart.

Can I rebrand the Jitsi mobile apps?

Yes, but that means building the React Native apps from source with your own bundle IDs, icons and store listings, then maintaining them through updates. Most teams use the mobile browser instead, which picks up web branding automatically.

Stuck, or would rather not do this by hand?

Deploy it in one click

A private Jitsi server in your own AWS account with SSL, your domain and optional recording, transcription and JWT. Free 15 minute trial.

Start free trial

Talk to a Jitsi engineer

Setup, fixes, branding, recording, scaling. Tell us what is happening and we reply with a plan and a quote.

Get expert help

Related