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