---
sidebar_position: 13
title: "Customizable Banners"
---
## Overview
Open WebUI allows administrators to display custom banners to logged-in users. Banners are useful for announcements, system-wide alerts, maintenance notices, and other important messages.
Banners are persistent and can optionally be **dismissible** by users. You can configure banners in two ways:
1. **Admin Panel** (recommended for quick edits and experimentation)
2. **Environment variable (`WEBUI_BANNERS`)** (recommended for automated / GitOps-style deployments)
---
## When to use banners
Banners are best for short, high-visibility messages such as:
- Scheduled maintenance and planned downtime windows
- Incident notifications (degraded performance, partial outages)
- Policy reminders (acceptable use, data handling, retention)
- Major changes (new models, feature rollouts, UI changes)
- Links to your internal comms channels for updates and Q&A
**Tip:** Keep banners concise and link to more detailed information (status page, release notes, support channel).
---
## Configuring banners
### Option 1: Using the Admin Panel
This is the most straightforward way to manage banners:
1. Log in to your Open WebUI instance as an administrator.
2. Navigate to **Admin Panel** → **Settings** → **General**.
3. Locate the **Banners** section.
4. Click the **+** icon to add a new banner.
5. Click **Save** to apply your changes.
You can configure the following options for each banner:
- **Type:** The color and style of the banner:
- `info` (Blue)
- `success` (Green)
- `warning` (Yellow)
- `error` (Red)
- **Title:** The main heading of the banner.
- **Content:** The main message (HTML only).
- **Dismissible:** If enabled, users can close the banner.
#### How dismissing works
Dismissed banners are stored in the user’s browser (client-side). This means:
- A dismissed banner may reappear if the user clears site data / cache
- A dismissed banner may reappear on a different device or browser
- Dismissal is per-banner `id` (if the `id` changes, the banner is treated as new)
If you need the banner to remain visible for everyone, set `dismissible: false`.
---
### Option 2: Using environment variables (`WEBUI_BANNERS`)
For automated deployments, configure banners using the `WEBUI_BANNERS` environment variable. The value must be a **JSON string** representing a **list** (array) of banner objects.
**Environment variable:**
- `WEBUI_BANNERS`
- **Type:** `string` (containing a JSON list of objects)
- **Default:** `[]`
- **Description:** A list of banner objects to be displayed to users
#### Example (Docker Compose)
```yaml
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
environment:
- 'WEBUI_BANNERS=[{"id":"maintenance-2026-03","type":"warning","title":"Maintenance","content":"A maintenance window is planned this week. Expect brief interruptions. See status page.","dismissible":true,"timestamp":1772500000}]'
```
> Note: Because `WEBUI_BANNERS` is a JSON string inside YAML, you must ensure it remains valid JSON (see "Common pitfalls" below).
---
## Banner object properties
Each banner object supports the following properties:
- `id` (string, required): Unique identifier for the banner. Used to track whether a user has dismissed it.
- `type` (string, required): Banner style. Must be one of: `info`, `success`, `warning`, `error`.
- `title` (string, optional): Title text.
- `content` (string, required): Main banner message (HTML only).
- `dismissible` (boolean, required): Whether the user can dismiss the banner.
- `timestamp` (integer, required): Present in configuration, but currently not used by the frontend to control display timing.
### Recommended `id` strategy (important)
Pick an `id` format that supports safe updates and avoids accidental re-showing or permanent hiding:
- Stable `id` for small text edits: `policy-reminder`
- Versioned `id` for "show again to everyone" updates: `incident-2026-03-06-v2`
- Time-bucketed `id` for recurring events: `maintenance-2026-03`
If users dismissed a banner and you want them to see an updated message, change the `id`.
---
## Supported content formatting (HTML only)
Banner `title` and `content` support a subset of **HTML only** — Markdown syntax is not rendered. Unsupported tags may render as plain text or break the layout.
### Text formatting
| HTML | Effect |
| --- | --- |
| `` / `` | Bold |
| `` / `` | Italic |
| `` | Underline |
| `` / `` | Strikethrough |
| `` | Highlight |
| `` | Slightly smaller text |
| `` / `` | Subscript / Superscript |
| `` / `` | Monospace inline code |
| `` | Hover tooltip |
### Structure
| HTML | Effect |
| --- | --- |
| `
` or literal newlines | Line break |
| `
` | Horizontal rule |
| `Click
... ` | Collapsible section |
### Links & media
| HTML | Effect |
| --- | --- |
| `` | Clickable link |
| `
` | Inline image |
### Custom styling
Inline styles are supported on allowed tags:
```html
Colored text
Heavier weight
Gradient background
```
> Keep styling minimal. Overly large padding, font sizes, or complex layouts can cause banners to become tall or visually inconsistent across themes.
---
## Unsupported content
The following are not supported in banners and may render as plain text or break the layout:
- Headings (``–``)
- Lists (``, ``)
- Tables
- Blockquotes
- Markdown syntax
If you need "list-like" content, use short lines separated by `
`.
---
## Common pitfalls (and how to avoid them)
### 1) Unexpected spacing from literal newlines
Banner content treats **literal newlines** as line breaks. If you paste nicely formatted/indented HTML with many line breaks, the banner may appear much taller than expected.
**Recommendation:**
- Use `
` deliberately, and keep the raw HTML relatively compact.
- Avoid adding blank lines unless you truly want extra spacing.
### 2) Broken links in banner content
If a link appears "broken" or the rest of the banner becomes clickable, it’s usually due to invalid HTML.
Use this exact pattern:
```html
Open link
```
**Recommendations:**
- Always close anchor tags with `
`.
- Use `target="_blank"` (underscore included).
- If your URL contains query parameters, escape `&` as `&` inside the `href` attribute:
```html
Example
```
- If you need guaranteed underlining, wrap link text with ``:
```html
Support
```
### 3) JSON/YAML escaping issues in `WEBUI_BANNERS`
When using `WEBUI_BANNERS`, you are embedding JSON inside a YAML string (or a shell string). Common problems include:
- Unescaped double quotes inside the JSON
- Line breaks inserted into the JSON string
- Copy/paste "smart quotes" (typographic quotes) instead of normal `"`
**Recommendations:**
- Validate the JSON in a JSON validator before deploying.
- Keep `content` strings simple; avoid unescaped `"` characters.
- Prefer using `\"` for quotes inside JSON strings if needed.
- Check server logs if the banner does not appear.
### 4) Overusing ``
`` is useful for secondary text, but wrapping large parts of the banner in `` can make content hard to read.
**Recommendation:** Use normal text for the main message and reserve `` for less important details.
### 5) External images
Images can be embedded via `
`, but external images may:
- Fail to load due to network restrictions
- Create inconsistent sizes across devices if not constrained
- Introduce privacy/security concerns if loaded from third-party domains
**Recommendations:**
- Prefer internal/static assets when possible.
- Always set explicit `width` and `height`.
- Keep icons small (e.g., 16×16) to avoid increasing banner height.
---
## Reusable patterns (copy/paste snippets)
### Pattern: Minimal two-line announcement with a link
```html
Notice
Service updates: Status page
```
### Pattern: Compact "label" chip (date/impact tag)
```html
Scheduled
```
### Pattern: Collapsible details (keep banners short)
```html
Planned update
More details
This update may cause brief interruptions during the deployment window.
```
---
## Operational best practices
### Keep banners scannable
A good banner is typically:
- A short title
- One sentence describing the situation
- One link for details and one link for questions (if needed)
### Use banner types consistently
To reduce alert fatigue, consider a consistent mapping:
- `info`: general announcements
- `success`: completed changes / resolved incidents
- `warning`: planned maintenance or partial degradation
- `error`: active incident / outage
### Remove expired banners
If you keep adding banners without removing old ones, users may ignore them. Remove or replace banners after the event is over.
---
## Troubleshooting
### Banner not appearing
- Ensure `WEBUI_BANNERS` is a valid JSON **array** of objects (not a single object).
- Check the server logs for parsing errors related to `WEBUI_BANNERS`.
- If using Admin Panel, confirm you clicked **Save**.
### Banner cannot be dismissed
- Verify that `dismissible` is set to `true`.
- If `dismissible` is `false`, the banner is intentionally always visible.
### Banner layout looks broken or too tall
- Remove extra blank lines and indentation from the raw HTML.
- Avoid unsupported HTML (lists, tables, headings).
- Reduce aggressive inline styles (large `padding`, large `font-size`).
---
## FAQ
### Can I use Markdown in banner content?
No. Banner content supports **HTML only**. Markdown syntax is not rendered.
### Does `timestamp` control when a banner shows?
No. The `timestamp` field is currently not used by the frontend to control whether a banner is displayed. If you need time-based behavior, manage it via your deployment automation (add/remove banners on a schedule).
### Can I show content in multiple languages?
Yes. You can include multiple languages in `content`. If you want to keep the banner short, place the secondary language in a `` block.