---
title: UI Customization (self-hosted)
description: Learn how to customize the Langfuse UI for your organization.
label: "Version: v4"
sidebarTitle: "UI Customization (EE)"
---

# UI Customization

This is only available in the Enterprise Edition. Please add your [license key](/self-hosting/license-key) to activate it.

To help with large-scale deployments, Langfuse allows you to customize some key parts of the UI to fit an organization's environment.

## Links

You can customize the links highlighted in the screenshot below:

  ![UI Customization Links](/images/docs/ui-customization-links.png)

| Number | Variable                         | Description                                                                                                                                                                      |
| ------ | -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 1      | `LANGFUSE_UI_FEEDBACK_HREF`      | Replace the default _feature request_ and _bug report_ links with your internal feedback links.                                                                                  |
| 2      | `LANGFUSE_UI_DOCUMENTATION_HREF` | Customize the documentation link reference in the menu and settings to point to your internal documentation.                                                                     |
| 3      | `LANGFUSE_UI_SUPPORT_HREF`       | Customize the support link reference in the menu and settings to point to your internal support.                                                                                 |
| 4      | `LANGFUSE_UI_API_HOST`           | Customize the hostname that is referenced in the Langfuse project settings. Defaults to `window.origin`. Useful if Langfuse is deployed behind a reverse proxy for API requests. |

## Co-branding

Co-brand the Langfuse interface with your own logo.

![UI Customization Logo](/images/docs/ui-customization-logo.png)

Langfuse adapts to the logo width, with a maximum aspect ratio of 1:3. Narrower ratios (e.g., 2:3, 1:1) also work. The logo is fitted into a bounding box, so there are no specific pixel constraints. For reference, the example logo shown above is 160px x 400px.

| Variable                           | Description                    | Example                                                                |
| ---------------------------------- | ------------------------------ | ---------------------------------------------------------------------- |
| `LANGFUSE_UI_LOGO_LIGHT_MODE_HREF` | URL to the logo in light mode. | `https://static.langfuse.com/langfuse-dev/example-logo-light-mode.png` |
| `LANGFUSE_UI_LOGO_DARK_MODE_HREF`  | URL to the logo in dark mode.  | `https://static.langfuse.com/langfuse-dev/example-logo-dark-mode.png`  |

## Instance switcher [#instance-switcher]

Organizations that operate multiple Langfuse deployments (e.g. for development, staging, and production, or per business unit) can configure a list of instances. It is rendered as an instance switcher in the sidebar user menu so users can quickly move between deployments, similar to the region switcher on Langfuse Cloud.

  ![UI Customization Instance
  Switcher](/images/docs/ui-customization-instance-switcher.png)

| Variable                     | Description                                                                                                         |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `LANGFUSE_UI_INSTANCE_LINKS` | JSON array of objects with a unique `name` and an `http(s)` `url`. See the example below. Unset hides the switcher. |

```bash filename=".env"
LANGFUSE_UI_INSTANCE_LINKS='[{"name":"Staging","url":"https://langfuse-staging.example.com"},{"name":"Production","url":"https://langfuse.example.com"}]'
```

Notes:

- The entry whose host matches the URL the user is currently on is marked as the current instance.
- Links open in a new tab. Sessions are not shared between instances; each deployment authenticates on its own.
- The list is per-deployment configuration. Set the same value on all deployments so the switcher is consistent everywhere.
- Names must be unique, and URLs must use `http` or `https`. Names are what users pick from in the menu, and other URL schemes would not open a Langfuse deployment.
- If the value is not valid JSON in the expected shape, the switcher is hidden and a warning naming the problem is logged; the deployment still starts.

## LLM API/Gateway Connection defaults

LLM connections are configured in the Langfuse project settings. You can customize the default values via the following environment variables.

| Variable                                    | Description                                                                                                                                          |
| ------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `LANGFUSE_UI_DEFAULT_MODEL_ADAPTER`         | Set the default model adapter for the LLM playground and evals. Options: `OpenAI`, `Anthropic`, `Azure`. Example: `Anthropic`                        |
| `LANGFUSE_UI_DEFAULT_BASE_URL_OPENAI`       | Set the default base URL for OpenAI API in the LLM playground and evals. Example: `https://api.openai.com/v1`                                        |
| `LANGFUSE_UI_DEFAULT_BASE_URL_ANTHROPIC`    | Set the default base URL for Anthropic API in the LLM playground and evals. Example: `https://api.anthropic.com`                                     |
| `LANGFUSE_UI_DEFAULT_BASE_URL_AZURE_OPENAI` | Set the default base URL for Azure OpenAI API in the LLM playground and evals. Example: `https://{instanceName}.openai.azure.com/openai/deployments` |

## Product Module Visibility [#visibility]

Control which product modules are visible in the main menu. You can either specify which modules should be visible or which ones should be hidden.

| Variable                              | Description                                                                                                                               |
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `LANGFUSE_UI_VISIBLE_PRODUCT_MODULES` | Comma-separated list of modules that should be visible. All other modules will be hidden. Example: `tracing,evaluation,prompt-management` |
| `LANGFUSE_UI_HIDDEN_PRODUCT_MODULES`  | Comma-separated list of modules that should be hidden. All other modules will be visible. Example: `playground,datasets`                  |

Available modules:

- `dashboards`: Dashboards except for the default dashboard which is always visible
- `tracing`: Traces and users
- `evaluation`: Evaluations and scores
- `prompt-management`: Prompt management
- `playground`: LLM playground
- `datasets`: Datasets

If both variables are set, `LANGFUSE_UI_VISIBLE_PRODUCT_MODULES` takes precedence. If neither is set, all modules are visible by default.

---

If you experience any issues when self-hosting Langfuse, please:

1. Check out [Troubleshooting & FAQ](/self-hosting/troubleshooting-and-faq) page.
2. Use [Ask AI](/ask-ai) to get instant answers to your questions.
3. Ask the maintainers on [GitHub Discussions](/gh-support).
4. Create a bug report or feature request on [GitHub](/issues).

  Enterprise-grade support is available when self-hosting Langfuse. Learn more on
  our [pricing page](/pricing-self-host).

<!-- agent-instructions -->

---

## Agent Instructions

This page is part of the [Langfuse](https://langfuse.com) documentation, published as plain Markdown for AI agents. Every page is available as Markdown by appending `.md` to its URL, or by sending an `Accept: text/markdown` header. This page: `https://langfuse.com/self-hosting/administration/ui-customization.md`.

### Querying these docs

If the answer is not on this page, query the documentation instead of guessing:

- **Semantic search** across all Langfuse docs, returning an answer with the relevant pages and excerpts. Ask a specific, self-contained question:

  ```bash
  curl -sG "https://langfuse.com/api/search-docs" --data-urlencode "query=How do I trace a LangGraph agent?"
  ```

- **Index of every page**: <https://langfuse.com/llms.txt>, with per-section indexes [llms-docs.txt](https://langfuse.com/llms-docs.txt), [llms-integrations.txt](https://langfuse.com/llms-integrations.txt), and [llms-self-hosting.txt](https://langfuse.com/llms-self-hosting.txt).

### Before writing Langfuse code

- **Install the [Langfuse Agent Skill](https://langfuse.com/docs/api-and-data-platform/features/agent-skill).** It encodes Langfuse's own best practices for instrumentation, prompt management, and evaluation, and materially improves results.
- **Read [What does a good trace look like?](https://langfuse.com/docs/observability/best-practices.md)** before instrumenting an application.
- **Verify endpoints, parameters, and response fields** against the [API reference](https://api.reference.langfuse.com) instead of inferring them from code examples.
- **Use the [Langfuse CLI](https://langfuse.com/docs/api-and-data-platform/features/cli)** (`npx langfuse-cli api <resource> <action>`) to read or write traces, prompts, datasets, and scores from the terminal.

Found an error in these docs? Please open an issue at <https://github.com/langfuse/langfuse-docs/issues>.
