diff --git a/docs/getting-started/quick-start/tab-docker/DockerCompose.md b/docs/getting-started/quick-start/tab-docker/DockerCompose.md
index 8b88d3ac4..b7bd492f3 100644
--- a/docs/getting-started/quick-start/tab-docker/DockerCompose.md
+++ b/docs/getting-started/quick-start/tab-docker/DockerCompose.md
@@ -56,9 +56,15 @@ To start your services, run the following command:
docker compose up -d
```
-## Helper Script
+## Helper Scripts
-A useful helper script called `run-compose.sh` is included with the codebase. This script assists in choosing which Docker Compose files to include in your deployment, streamlining the setup process.
+A set of helper scripts is included with the codebase to streamline common Docker workflows:
+
+- `docker-compose-launcher.sh` — Interactive Compose launcher with GPU auto-detection, configurable WebUI/API ports, host data mounts, and optional Playwright support. Run `./docker-compose-launcher.sh --help` for the full list of flags. Use `--drop` to tear down the project.
+- `docker-cleanup.sh` — Stops the Compose project and **deletes all volumes**, including persistent data. Prompts for confirmation before destroying data.
+- `docker-run.sh` — Builds the Open WebUI image and runs a single container, exposing it on `OPEN_WEBUI_PORT` (default `3000`).
+- `docker-ollama.sh` — Pulls and runs the official Ollama container with optional GPU passthrough, exposing it on `OLLAMA_PORT` (default `11434`).
+- `docker-update-models.sh` — Iterates through every model installed in the Ollama container and pulls the latest version.
---
diff --git a/docs/getting-started/quick-start/tab-docker/ManualDocker.md b/docs/getting-started/quick-start/tab-docker/ManualDocker.md
index b944625d4..8825dedf2 100644
--- a/docs/getting-started/quick-start/tab-docker/ManualDocker.md
+++ b/docs/getting-started/quick-start/tab-docker/ManualDocker.md
@@ -49,9 +49,9 @@ Visit [http://localhost:3000](http://localhost:3000).
For production environments, pin a specific version instead of using floating tags:
```bash
-docker pull ghcr.io/open-webui/open-webui:v0.9.5
-docker pull ghcr.io/open-webui/open-webui:v0.9.5-cuda
-docker pull ghcr.io/open-webui/open-webui:v0.9.5-ollama
+docker pull ghcr.io/open-webui/open-webui:v0.9.6
+docker pull ghcr.io/open-webui/open-webui:v0.9.6-cuda
+docker pull ghcr.io/open-webui/open-webui:v0.9.6-ollama
```
---
diff --git a/docs/getting-started/quick-start/tab-python/_PythonCompat.md b/docs/getting-started/quick-start/tab-python/_PythonCompat.md
new file mode 100644
index 000000000..80f68c9a1
--- /dev/null
+++ b/docs/getting-started/quick-start/tab-python/_PythonCompat.md
@@ -0,0 +1,6 @@
+:::info Python version compatibility
+Open WebUI supports **Python 3.11 and 3.12**. **Python 3.13 is not supported yet** — a handful of our dependencies still need to ship 3.13-compatible releases, and until they do, installs on 3.13 will fail or break at runtime.
+
+- **For production**, run the [Docker image](#docker) or use the **latest Python 3.11**. This is the combination we test against most heavily.
+- **Python 3.12 also works**, but we have seen very rare reports of odd behaviour on 3.12 that we have not reproduced on 3.11. If something inexplicable happens on 3.12, drop to the latest 3.11 first.
+:::
diff --git a/docs/getting-started/updating.mdx b/docs/getting-started/updating.mdx
index 68a118ccd..7b9000e04 100644
--- a/docs/getting-started/updating.mdx
+++ b/docs/getting-started/updating.mdx
@@ -31,9 +31,9 @@ The `:main` tag always points to the **latest build**. It's convenient but can i
For stability, pin a specific release tag:
```
-ghcr.io/open-webui/open-webui:v0.9.5
-ghcr.io/open-webui/open-webui:v0.9.5-cuda
-ghcr.io/open-webui/open-webui:v0.9.5-ollama
+ghcr.io/open-webui/open-webui:v0.9.6
+ghcr.io/open-webui/open-webui:v0.9.6-cuda
+ghcr.io/open-webui/open-webui:v0.9.6-ollama
```
Browse all available tags on the [GitHub releases page](https://github.com/open-webui/open-webui/releases).
diff --git a/docs/reference/api-endpoints.md b/docs/reference/api-endpoints.md
index 450d51b68..fc3426565 100644
--- a/docs/reference/api-endpoints.md
+++ b/docs/reference/api-endpoints.md
@@ -278,7 +278,7 @@ Even in the non-streaming case, **`outlet()` does not rewrite the HTTP response
```
:::tip
-If you need `outlet()` output over HTTP today, call `/api/chat/completions` followed by `/api/chat/completed`. Inline execution on `dev` is primarily for WebUI-shaped clients that read from the WebSocket. For more details on filter behavior, see the [Filter Function documentation](/features/extensibility/plugin/functions/filter#-filter-behavior-with-api-requests).
+If you need `outlet()` output over HTTP today, call `/api/chat/completions` followed by `/api/chat/completed`. Inline execution on `dev` is primarily for WebUI-shaped clients that read from the WebSocket. For more details on filter behavior, see the [Filter Function documentation](/features/extensibility/plugin/functions/filter#filter-behavior-with-api-requests).
:::
### 🦙 Ollama API Proxy Support
diff --git a/docs/reference/database-schema.md b/docs/reference/database-schema.md
index 8b5ab256e..464ba831a 100644
--- a/docs/reference/database-schema.md
+++ b/docs/reference/database-schema.md
@@ -10,7 +10,7 @@ This tutorial is a community contribution and is not supported by the Open WebUI
:::
> [!WARNING]
-> This documentation reflects schema changes up to Open WebUI v0.9.5.
+> This documentation reflects schema changes up to Open WebUI v0.9.6.
## Open-WebUI Internal SQLite Database
diff --git a/docs/reference/env-configuration.mdx b/docs/reference/env-configuration.mdx
index ed6ad2fc9..0403f05c0 100644
--- a/docs/reference/env-configuration.mdx
+++ b/docs/reference/env-configuration.mdx
@@ -12,23 +12,23 @@ As new variables are introduced, this page will be updated to reflect the growin
:::info
-This page is up-to-date with Open WebUI release version [v0.9.5](https://github.com/open-webui/open-webui/releases/tag/v0.9.5), but is still a work in progress to later include more accurate descriptions, listing out options available for environment variables, defaults, and improving descriptions.
+This page is up-to-date with Open WebUI release version [v0.9.6](https://github.com/open-webui/open-webui/releases/tag/v0.9.6), but is still a work in progress to later include more accurate descriptions, listing out options available for environment variables, defaults, and improving descriptions.
:::
-### Important Note on `PersistentConfig` Environment Variables
+### Important Note on `ConfigVar` Environment Variables
:::note
-When launching Open WebUI for the first time, all environment variables are treated equally and can be used to configure the application. However, for environment variables marked as `PersistentConfig`, their values are persisted and stored internally.
+When launching Open WebUI for the first time, all environment variables are treated equally and can be used to configure the application. However, for environment variables marked as `ConfigVar`, their values are persisted and stored internally.
-After the initial launch, if you restart the container, `PersistentConfig` environment variables will no longer use the external environment variable values. Instead, they will use the internally stored values.
+After the initial launch, if you restart the container, `ConfigVar` environment variables will no longer use the external environment variable values. Instead, they will use the internally stored values.
In contrast, regular environment variables will continue to be updated and applied on each subsequent restart.
-You can update the values of `PersistentConfig` environment variables directly from within Open WebUI, and these changes will be stored internally. This allows you to manage these configuration settings independently of the external environment variables.
+You can update the values of `ConfigVar` environment variables directly from within Open WebUI, and these changes will be stored internally. This allows you to manage these configuration settings independently of the external environment variables.
-Please note that `PersistentConfig` environment variables are clearly marked as such in the documentation below, so you can be aware of how they will behave.
+Please note that `ConfigVar` environment variables are clearly marked as such in the documentation below, so you can be aware of how they will behave.
To disable this behavior and force Open WebUI to always use your environment variables (ignoring the database), set `ENABLE_PERSISTENT_CONFIG` to `False`.
@@ -44,7 +44,7 @@ If you change an environment variable (like `ENABLE_SIGNUP=True`) but don't see
Set `ENABLE_PERSISTENT_CONFIG=False` in your environment. This forces Open WebUI to read your variables directly. Note that UI-based settings changes will not persist across restarts in this mode.
#### Option 2: Update via Admin UI (Recommended)
-The simplest and safest way to change `PersistentConfig` settings is directly through the **Admin Panel** within Open WebUI. Even if an environment variable is set, changes made in the UI will take precedence and be saved to the database.
+The simplest and safest way to change `ConfigVar` settings is directly through the **Admin Panel** within Open WebUI. Even if an environment variable is set, changes made in the UI will take precedence and be saved to the database.
#### Option 3: Manual Database Update (Last Resort / Lock-out Recovery)
If you are locked out or cannot access the UI, you can manually update the SQLite database via Docker:
@@ -78,7 +78,7 @@ environment variables, see our [logging documentation](https://docs.openwebui.co
- Type: `str`
- Default: `http://localhost:3000`
- Description: Specifies the URL where your Open WebUI installation is reachable. Needed for search engine support and OAuth/SSO.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
:::warning
@@ -97,7 +97,7 @@ Failure to set WEBUI_URL before using OAuth/SSO will result in failure to log in
- Type: `bool`
- Default: `True`
- Description: Toggles user account creation.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENABLE_SIGNUP_PASSWORD_CONFIRMATION`
@@ -148,14 +148,14 @@ After the admin account is created, sign-up is automatically disabled for securi
- Type: `bool`
- Default: `True`
- Description: Toggles email, password, sign-in and "or" (only when `ENABLE_OAUTH_SIGNUP` is set to True) elements.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENABLE_PASSWORD_CHANGE_FORM`
- Type: `bool`
- Default: `True`
- Description: Controls visibility of the password change UI in **Settings > Account**. When set to `False`, users do not see the password update form, which is useful for SSO-focused deployments where password changes should not be presented in the UI.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENABLE_PASSWORD_AUTH`
@@ -181,14 +181,14 @@ is also being used and set to `True`. **Never disable this if OAUTH/SSO is not b
- Type: `str`
- Default: `en`
- Description: Sets the default locale for the application.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `DEFAULT_MODELS`
- Type: `str`
- Default: Empty string (' '), since `None`.
- Description: Sets a default Language Model.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `DEFAULT_PINNED_MODELS`
@@ -196,14 +196,14 @@ is also being used and set to `True`. **Never disable this if OAUTH/SSO is not b
- Default: Empty string (' ')
- Description: Comma-separated list of model IDs to pin by default for new users who haven't customized their pinned models. This provides a pre-selected set of frequently used models in the model selector for new accounts.
- Example: `gpt-4,claude-3-opus,llama-3-70b`
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `DEFAULT_MODEL_METADATA`
- Type: `dict` (JSON object)
- Default: `{}`
- Description: Sets global default metadata (capabilities and other model info) for all models. These defaults act as a baseline — per-model overrides always take precedence. For capabilities, the defaults and per-model values are merged (per-model wins on conflicts). For other metadata fields, the default is only applied if the model has no value set. Configurable via **Admin Settings → Models**.
-- Persistence: This environment variable is a `PersistentConfig` variable. Stored at config key `models.default_metadata`.
+- Persistence: This environment variable is a `ConfigVar` variable. Stored at config key `models.default_metadata`.
:::info
@@ -220,7 +220,7 @@ is also being used and set to `True`. **Never disable this if OAUTH/SSO is not b
- Type: `dict` (JSON object)
- Default: `{}`
- Description: Sets global default parameters (temperature, top_p, max_tokens, seed, etc.) for all models. These defaults are applied as a baseline at chat completion time — per-model parameter overrides always take precedence. Configurable via **Admin Settings → Models**.
-- Persistence: This environment variable is a `PersistentConfig` variable. Stored at config key `models.default_params`.
+- Persistence: This environment variable is a `ConfigVar` variable. Stored at config key `models.default_params`.
:::info
@@ -240,14 +240,14 @@ is also being used and set to `True`. **Never disable this if OAUTH/SSO is not b
- `admin` - New users are automatically activated with administrator permissions.
- Default: `pending`
- Description: Sets the default role assigned to new users.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `DEFAULT_GROUP_ID`
- Type: `str`
- Default: Empty string (' ')
- Description: Sets the default group ID to assign to new users upon registration.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `DEFAULT_GROUP_SHARE_PERMISSION`
@@ -261,63 +261,63 @@ is also being used and set to `True`. **Never disable this if OAUTH/SSO is not b
- Type: `str`
- Default: Empty string (' ')
- Description: Sets a custom title for the pending user overlay.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `PENDING_USER_OVERLAY_CONTENT`
- Type: `str`
- Default: Empty string (' ')
- Description: Sets a custom text content for the pending user overlay.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENABLE_CALENDAR`
- Type: `bool`
- Default: `True`
- Description: Enables or disables the Calendar feature. When enabled, users can create calendars, manage events, and share calendars with other users or groups via access grants. Active automations are automatically surfaced as virtual events on a dedicated "Scheduled Tasks" calendar. Requires the `features.calendar` user permission (admins always pass).
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENABLE_CHANNELS`
- Type: `bool`
- Default: `False`
- Description: Enables or disables channel support.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENABLE_FOLDERS`
- Type: `bool`
- Default: `True`
- Description: Enables or disables the folders feature, allowing users to organize their chats into folders in the sidebar.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `FOLDER_MAX_FILE_COUNT`
- Type: `int`
- Default: `("") empty string`
- Description: Sets the maximum number of files processing allowed per folder.
-- Persistence: This environment variable is a `PersistentConfig` variable. It can be configured in the **Admin Panel > Settings > General > Folder Max File Count**. Default is none (empty string) which is unlimited.
+- Persistence: This environment variable is a `ConfigVar` variable. It can be configured in the **Admin Panel > Settings > General > Folder Max File Count**. Default is none (empty string) which is unlimited.
#### `ENABLE_AUTOMATIONS`
- Type: `bool`
- Default: `True`
- Description: Enables or disables the Automations feature globally. When disabled, the scheduler skips automation processing, the automation API endpoints return `403 Forbidden`, automation builtin tools are not injected, and the Automations entry is hidden from the sidebar. Requires the `features.automations` user permission (admins always pass).
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `AUTOMATION_MAX_COUNT`
- Type: `int`
- Default: `("") empty string` (unlimited)
- Description: Sets the maximum number of automations a non-admin user can create. When set to a positive integer, users who reach this limit will receive a `403 Forbidden` error when attempting to create additional automations. Admins bypass this limit.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `AUTOMATION_MIN_INTERVAL`
- Type: `int` (seconds)
- Default: `("") empty string` (no minimum)
- Description: Sets the minimum allowed interval in seconds between automation recurrences for non-admin users. When set, any automation schedule that recurs more frequently than this value will be rejected with a `400 Bad Request` error. One-time automations (`COUNT=1`) are exempt from this check. Admins bypass this limit.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
:::tip Common values for AUTOMATION_MIN_INTERVAL
@@ -347,20 +347,20 @@ is also being used and set to `True`. **Never disable this if OAUTH/SSO is not b
- Type: `bool`
- Default: `True`
- Description: Enables or disables the notes feature, allowing users to create and manage personal notes within Open WebUI.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENABLE_MEMORIES`
- Type: `bool`
- Default: `True`
- Description: Enables or disables the [memory feature](/features/chat-conversations/memory), allowing models to store and retrieve long-term information about users.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `WEBHOOK_URL`
- Type: `str`
- Description: Sets a webhook for integration with Discord/Slack/Microsoft Teams.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
:::note Admin posture toggles vs. security boundaries
@@ -416,14 +416,14 @@ Treat anything in this cluster as *what the admin sees and does in the product U
- Type: `bool`
- Default: `False`
- Description: Enables or disables user webhooks.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `RESPONSE_WATERMARK`
- Type: `str`
- Default: Empty string (' ')
- Description: Sets a custom text that will be included when you copy a message in the chat. e.g., `"This text is AI generated"` -> will add "This text is AI generated" to every message, when copied.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `IFRAME_CSP`
@@ -434,12 +434,15 @@ Treat anything in this cluster as *what the admin sees and does in the product U
#### `THREAD_POOL_SIZE`
- Type: `int`
-- Default: `0`
-- Description: Sets the thread pool size for FastAPI/AnyIO blocking calls. By default (when set to `0`) FastAPI/AnyIO use `40` threads. In case of large instances and many concurrent users, it may be needed to increase `THREAD_POOL_SIZE` to prevent blocking.
+- Default: `0` (unset — the AnyIO default limit of `40` applies)
+- Description: Sets the maximum number of **concurrent** blocking operations that may run in the AnyIO worker thread pool at once. Open WebUI offloads synchronous/blocking work (many DB calls, file I/O, sync route handlers, some library calls) to this pool via `run_in_threadpool`. The value is a **concurrency ceiling (a token limit), not a fixed pool of pre-spawned OS threads and not a CPU-core/thread count**: worker threads are created lazily only when needed and reused, so a high value does **not** by itself create that many threads, consume CPU, or cause CPU contention while idle. It only raises how many blocking operations can be in flight simultaneously before the rest must queue.
-:::info
+:::warning Set this high on any real server (2000+); never lower it
+The AnyIO default of `40` is far too low for production. When more than `THREAD_POOL_SIZE` blocking operations are needed at once (many users acting at the same time, or a few users each triggering several blocking calls), every further request **waits** for a free slot. The symptom is the whole app appearing to **hang / freeze / stop responding** under load, even though CPU and memory look fine — it is pool starvation, not resource exhaustion.
-If you are running larger instances, you WILL NEED to set this to a higher value like multiple hundreds if not thousands (e.g. `1000`) otherwise your app may get stuck the default pool size (which is 40 threads) is full and will not react anymore.
+- **Normal servers / production:** `2000` or higher. `2000` is a *lower* bound for very large multi-user instances — going higher is fine and is **not** a CPU or contention risk (it is a ceiling, not a preallocation).
+- **Never decrease below the default.** An idle high ceiling costs effectively nothing; a low ceiling causes freezes.
+- **Exception — weak hardware (Raspberry Pi, tiny VPS, containers capped at ~250m CPU / very low RAM):** do **not** set `2000` here. Each *genuinely concurrent* blocking op still uses a real OS thread (stack memory), so on a tiny device an enormous ceiling lets a traffic burst spawn enough threads to exhaust RAM. Leave it at the default, or set a modest value (e.g. a few hundred) matched to what the device can actually absorb. This caveat applies only to constrained single-board / micro deployments — any normal server should use `2000+`.
:::
@@ -454,21 +457,21 @@ If you are running larger instances, you WILL NEED to set this to a higher value
- Type: `bool`
- Default: `True`
- Description: Toggles whether to show admin user details in the interface.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENABLE_PUBLIC_ACTIVE_USERS_COUNT`
- Type: `bool`
- Default: `True`
- Description: Controls whether the active user count is visible to all users or restricted to administrators only. When set to `False`, only admin users can see how many users are currently active, reducing backend load and addressing privacy concerns in large deployments.
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENABLE_USER_STATUS`
- Type: `bool`
- Default: `True`
- Description: Globally enables or disables user status functionality. When disabled, the status UI (including blinking active/away indicators and status messages) is hidden across the application, and user status API endpoints are restricted.
-- Persistence: This environment variable is a `PersistentConfig` variable. It can be toggled in the **Admin Panel > Settings > General > User Status**.
+- Persistence: This environment variable is a `ConfigVar` variable. It can be toggled in the **Admin Panel > Settings > General > User Status**.
#### `ENABLE_EASTER_EGGS`
@@ -480,7 +483,7 @@ If you are running larger instances, you WILL NEED to set this to a higher value
- Type: `str`
- Description: Sets the admin email shown by `SHOW_ADMIN_DETAILS`
-- Persistence: This environment variable is a `PersistentConfig` variable.
+- Persistence: This environment variable is a `ConfigVar` variable.
#### `ENV`
@@ -566,13 +569,13 @@ Enabling `ENABLE_REALTIME_CHAT_SAVE` causes every single token generated by the
- Type: `bool`
- Default: `True`
-- Description: Controls whether the user and model profile-image endpoints honor an external `http(s)://` URL stored in `profile_image_url` by issuing a `302 Found` redirect to the original origin. When `False`, the redirect is suppressed and the endpoint falls through to the bundled default image instead. Set to `False` to prevent client-side IP, User-Agent, and Referer leaks to attacker-controlled origins via attacker-stored profile URLs (data URIs and same-origin/static images continue to load normally). Existing deployments that legitimately rely on external profile image URLs (e.g. Gravatar redirects served by upstream identity providers) should keep the default. **This variable is read once at startup — it is not a `PersistentConfig` and cannot be changed from the Admin UI.**
+- Description: Controls whether the user and model profile-image endpoints honor an external `http(s)://` URL stored in `profile_image_url` by issuing a `302 Found` redirect to the original origin. When `False`, the redirect is suppressed and the endpoint falls through to the bundled default image instead. Set to `False` to prevent client-side IP, User-Agent, and Referer leaks to attacker-controlled origins via attacker-stored profile URLs (data URIs and same-origin/static images continue to load normally). Existing deployments that legitimately rely on external profile image URLs (e.g. Gravatar redirects served by upstream identity providers) should keep the default. **This variable is read once at startup — it is not a `ConfigVar` and cannot be changed from the Admin UI.**
#### `PROFILE_IMAGE_ALLOWED_MIME_TYPES`
- Type: `str` (comma-separated MIME types)
- Default: `image/png,image/jpeg,image/gif,image/webp`
-- Description: Allowlist of MIME types accepted when serving a base64 `data:` URI as a profile image. The MIME type is parsed from the data URI prefix and checked against this list before the response is streamed; non-allowlisted types fall through to the bundled default image. Responses also set `X-Content-Type-Options: nosniff` to prevent the browser from sniffing the body into an executable type. SVG is intentionally not in the default list because it can carry inline `