# How to white-label and rebrand Jitsi Meet

> 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.

Source: https://jitsi.help/guides/jitsi-white-label-branding/
Updated: September 26, 2026
Publisher: Jitsi Help (https://jitsi.help/)

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.

## Name and logo

```js
// 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

```js
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:

```js
(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:

```js
(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

```js
(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:

```js
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

```js
// 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`:

```ini
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](/guides/jitsi-lets-encrypt-ssl/).

## Keep it legal

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](/services/jitsi-white-label/).

## 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.


---

Jitsi Help is an independent service. It is not affiliated with, endorsed by or sponsored by 8x8, Inc. or the Jitsi project. Jitsi and Jitsi Meet are trademarks of 8x8, Inc., used here only to describe the software we host and support.
