Skip to content

Customize Branding (Whitelabel)

Set your own app name, logo, favicon, footer disclaimer, and policy URLs for Self-Managed Kindo. Use environment-variable defaults for branding across the install, and the CUSTOM_WHITELABEL feature flag for per-organization changes.

Branding uses the first available value in this order:

  1. The CUSTOM_WHITELABEL variant payload matching the organization’s orgId.
  2. The environment-variable default for that field.
  3. The built-in Kindo default for an optional field without an environment-variable value.

Omit a payload field to inherit its environment-variable default. appName also changes the API documentation titles; the other fields affect only the web app.

The charts ship Kindo defaults for every field, so no branding settings are required to install. Set the values below to rebrand. Services use these defaults when CUSTOM_WHITELABEL is off or a payload omits a field.

Environment variableServiceSet to rebrandPurpose
NEXT_PUBLIC_DEFAULT_APP_NAMEnextYesProduct name in the web app
NEXT_PUBLIC_DEFAULT_LOGO_URLnextYesHTTPS URL to the logo image
NEXT_PUBLIC_DEFAULT_FAVICON_URLnextYesHTTPS URL to the favicon
NEXT_PUBLIC_DEFAULT_PRIVACY_URLnextYesHTTPS URL to the privacy policy
NEXT_PUBLIC_DEFAULT_TERMS_OF_USE_URLnextYesHTTPS URL to the terms of use
NEXT_PUBLIC_DEFAULT_TERMS_OF_SERVICE_URLnextYesHTTPS URL to the terms of service
NEXT_PUBLIC_DEFAULT_MARKETING_WEBSITE_CONTACT_URLnextYesHTTPS URL for the “Contact us” link
NEXT_PUBLIC_DEFAULT_PUBLIC_DOCS_URLnextNoHTTPS URL to your Kindo Docs site
NEXT_PUBLIC_DEFAULT_DISCLAIMERnextNoFooter disclaimer text
NEXT_PUBLIC_DEFAULT_DISCLAIMER_POLICY_URLnextNoHTTPS URL linked from the disclaimer
DEFAULT_APP_NAMEapi, task-worker-tsYesProduct name in API documentation and server-rendered text
DEFAULT_PUBLIC_DOCS_URLtask-worker-tsNoBase URL for Kindo Docs search results

Configured URL fields must use HTTPS. DEFAULT_PUBLIC_DOCS_URL is empty by default on Self-Managed Kindo installs, so documentation search stays off until you set it.

To set global defaults:

  1. Set and apply the web app’s branding:

    Terminal window
    kindo config override set next NEXT_PUBLIC_DEFAULT_APP_NAME="Acme AI" NEXT_PUBLIC_DEFAULT_LOGO_URL=https://cdn.acme.example.com/logo.svg
    kindo config override apply next
  2. Set and apply the corresponding application name on the backend services:

    Terminal window
    kindo config override set api DEFAULT_APP_NAME="Acme AI"
    kindo config override apply api
    kindo config override set task-worker-ts DEFAULT_APP_NAME="Acme AI"
    kindo config override apply task-worker-ts
  3. Set the remaining values from the table with the same commands for their named services. See Service overrides.

With an external secrets store, kindo config override refuses to run. Set the same keys as chart values and apply them:

Terminal window
kindo config helm-override set next 'envData.NEXT_PUBLIC_DEFAULT_APP_NAME=Acme AI' envData.NEXT_PUBLIC_DEFAULT_LOGO_URL=https://cdn.acme.example.com/logo.svg
kindo config helm-override apply next
kindo config helm-override set api 'envData.DEFAULT_APP_NAME=Acme AI'
kindo config helm-override apply api
kindo config helm-override set task-worker-ts 'envData.DEFAULT_APP_NAME=Acme AI'
kindo config helm-override apply task-worker-ts

Kindo Docs search requires the KINDO_DOCS_SEARCH flag, a DEFAULT_PUBLIC_DOCS_URL pointing to a Kindo Docs site from the same documentation release as your install, and a disabled CUSTOM_WHITELABEL variant for the requesting organization. An enabled variant disables documentation search, including when publicDocsUrl is set or the payload is invalid.

Use a JSON payload to override fields for an organization. All fields are optional; omitted fields inherit the environment-variable defaults.

FieldTypePurpose
appNamestringProduct name in the web app, API documentation, and server-rendered titles
logoUrlHTTPS URLTop navigation and login logo
faviconUrlHTTPS URLBrowser tab favicon
disclaimerstringFooter disclaimer text
dashboardDisclaimerstringDashboard disclaimer; falls back to disclaimer when omitted
disclaimerPolicyUrlHTTPS URLLink from the disclaimer
privacyUrlHTTPS URLPrivacy policy link
termsOfUseUrlHTTPS URLTerms of use link
termsOfServiceUrlHTTPS URLTerms of service link
marketingWebsiteContactUrlHTTPS URL”Contact us” link
publicDocsUrlHTTPS URLPublic docs link

An invalid payload, such as malformed JSON, a non-HTTPS URL, or a wrong type, produces a warning in the logs. Branding falls back to the environment-variable defaults for the entire payload.

{
"appName": "Acme AI",
"logoUrl": "https://cdn.acme.example.com/branding/logo.svg",
"faviconUrl": "https://cdn.acme.example.com/branding/favicon.png",
"disclaimer": "Acme AI is for internal use only. Do not paste customer PII.",
"disclaimerPolicyUrl": "https://acme.example.com/legal/ai-policy",
"privacyUrl": "https://acme.example.com/legal/privacy",
"termsOfUseUrl": "https://acme.example.com/legal/terms",
"termsOfServiceUrl": "https://acme.example.com/legal/tos",
"marketingWebsiteContactUrl": "https://acme.example.com/contact",
"publicDocsUrl": "https://docs.acme.example.com"
}
  1. Sign in to Unleash at https://unleash.<your-base-domain> with username admin. Read unleash.adminPassword in the secrets config, then quit the editor without saving:

    Terminal window
    kindo config edit
  2. Find the CUSTOM_WHITELABEL flag.

  3. Add a variant named for the target organization, such as acme-prod. Select payload type string and paste the JSON payload from the example above into the Payload field.

  4. Add a strategy matching the target organization. Use a Gradual rollout strategy with an orgId IN [<org-uuid>] constraint and 100% rollout so every request from that organization uses the variant.

  5. Enable the flag in the target environment, typically production.

  6. Verify the branding. Sign in to Kindo as a user of the target organization and check the app name, logo, favicon, and disclaimer. Sign in as a user of another organization and confirm the environment-variable defaults still apply there.

For the same branding across all organizations, leave CUSTOM_WHITELABEL off and set NEXT_PUBLIC_DEFAULT_* and DEFAULT_APP_NAME using the override commands above. Set DEFAULT_PUBLIC_DOCS_URL on task-worker-ts when documentation search results should link to your Kindo Docs site from the same documentation release as your install.

SymptomLikely causeFix
Branding shows Kindo defaults even with the flag enabledBranding defaults are unset and the payload does not supply themSet and apply the values using the override commands above
Logo or favicon does not loadAsset URL uses http://Re-host the asset over HTTPS
Variant payload is ignoredInvalid JSON, URL, or field typeCheck api and next pod logs for Invalid CUSTOM_WHITELABEL payload or Failed to parse warnings
Wrong organization sees the brandingVariant strategy is missing the orgId constraintAdd a Gradual rollout strategy with an orgId IN [...] constraint and 100% rollout
Branding flickers between defaults and the overrideBranding can take a short time to appear after a payload changeWait briefly and check again