Tim Baek c38885a1a7 0.13.0 (#33387)
* refac

* refac

* refac

* Merge pull request #33377 from Classic298/fix-chat-load-controller-renewal

fix: Controls file removals and shared-chat Regenerate break in a new chat

* i18n: add pt-BR translations for newly added UI items and consistency pass (#33379)

New **pt-BR** translations for items introduced in the latest releases, plus a consistency/quality pass across existing strings (grammar, tone, capitalization, pluralization). Placeholders and hotkeys preserved. No logic changes.

* feat: generate a title when renaming a chat from the top bar (#33382)

Renaming a chat from the top bar had no way to generate a title, while the sidebar rename has a sparkle button for it. The rename field in the top bar now has the same button: it generates a title from the conversation and saves it right away, like the sidebar does. If you switch chats while the title is generating, it still goes to the original chat and does not show up on the one you switched to.

* feat: raise the default tool-call iteration limit per response to 1024 (#33384)

With native function calling, each model turn that calls tools counts as one iteration, and a single response was stopped with "Tool-call limit reached (256 iterations)." after 256 of them. The CHAT_RESPONSE_MAX_TOOL_CALL_ITERATIONS environment variable now defaults to 1024, also when it is set empty or to something that is not a number, and the error shows the new number. A model stuck calling tools in a loop now runs up to 1024 iterations before it is stopped; setting the variable to 256 keeps the old limit, and -1 still means no limit.

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* fix: channel reaction tooltip shows only a count instead of who reacted (#33393)

Hovering a reaction in a channel stopped naming the people who reacted and only showed a count, such as "2 🚀". It names them again, for example "You and Alice reacted with 🚀". Reactions on comments keep showing just the count, since the app does not list who reacted there.

Fixes #33392

* refac

* fix(a11y): every window has a name for screen readers (#33412)

* fix(a11y): a channel message's Add Reaction, Pin, Edit and Delete buttons have names (#33410)

* fix(a11y): a model's details in Admin Analytics open from the keyboard (#33408)

* fix(a11y): Enter and Space on a notification's Dismiss button dismiss it instead of opening the chat (#33406)

* fix(a11y): Enter and Space on a tool call's Allow and Deny buttons answer the request (#33404)

* refac

* fix(a11y): the model picker's active option stays rendered and announced after scrolling the list (#33414)

* fix(a11y): a filter's clear button has a name and isn't inside the filter's button (#33416)

* fix(a11y): a group's checkbox in the member picker has a name and isn't inside the group's button (#33418)

* fix(a11y): Valves fields and the Chat Controls Valves selects have names (#33420)

* fix(a11y): fields on Workspace, Notes, Playground and chat pages have names (#33422)

* fix(a11y): fields in windows and the Settings window have names (#33424)

* fix(a11y): Admin Settings fields are named by their visible labels (#33426)

* fix(a11y): calendar event chips and "and N more" are no longer inside the day and hour buttons (#33428)

* refac

* fix(a11y): the Ports list's Refresh and Open in new tab buttons aren't inside other buttons (#33430)

* feat: {{USER_ROLE}} prompt variable for the signed-in user's role (#33441)

Prompts could use the user's name and email but not their role, so role-aware system prompts needed a custom Filter function. Model system prompts, the user's own system prompt, saved prompts used with a slash command and chat requests through the API now replace {{USER_ROLE}} with the role, such as admin or user. Requested in #4765.

* fix(a11y): the sidebar can be resized from the keyboard (#33440)

* fix(a11y): notebook cells can be opened for editing with Enter (#33438)

* fix(a11y): Analytics and group member tables can be sorted from the keyboard (#33432)

* fix(a11y): multi-select lists in Valves can be reached and used from the keyboard, also inside windows (#33434)

* fix(a11y): the emoji button in Set your status can be reached with the keyboard (#33436)

* refac

* fix(a11y): the full-size image viewer is a dialog that keeps focus inside it and returns it on close (#33443)

* refac

* refac

* refac

* refac

* refac

* refac

* fix(a11y): the sources of a web search can be opened from the keyboard, and the status toggle no longer wraps them (#33447)

* fix(a11y): tag and voice suggestions can be chosen with the arrow keys and Enter (#33452)

* fix(a11y): opening a Search menu moves focus to its options, and Escape returns focus to its button (#33450)

* fix(a11y): icon buttons named only by a tooltip have names (#33454)

* chore: i18n

* refac

* refac

* refac

* fix(a11y): 8 fields named "Password", by a placeholder, or not at all have names (#33477)

* fix(a11y): the page buttons' Previous and Next have names, and the current page is marked (#33475)

* fix(analytics): read activity scroll position from the scrolled element (#33469)

* i18n: improve Latvian (lv-LV) translations (#33465)

* i18n: improve Latvian (lv-LV) translations

* i18n: lv-LV follow-up - Select → atlasīt, Claim → prasījums

- Select → Atlasiet/atlasīt in 118 strings (Choose keeps Izvēlieties)
- OAuth/OIDC Claim → prasījums in 15 strings
- no "tad" in "tikai, ja" (2 strings)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* i18n: lv-LV - ", pat kad" instead of "arī tad, kad" (even while)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* i18n: lv-LV - ", pat ja" instead of ", pat kad"

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>

* fix: Temporary Chat toggle on a folder page drops the folder (#33456)

Turning Temporary Chat on or off on a folder's page, with the button at the top or with /temporary, sent you to the home page. The next chat was then not saved in the folder and did not get the folder's system prompt, default model or knowledge. You now stay on the folder page and only Temporary Chat switches.

Fixes #33448

* refac: identify loader archives by content (#33460)

* fix: apply the document archive size guard to every zip file, not just named extensions

The decompression-bomb guard in the document loader only ran when the
filename extension or the declared content type matched a fixed list, so
an office archive renamed to a legacy or unknown extension (for example
an .xlsx saved as .xls, .bin, or served from a URL with no extension)
skipped the check entirely and was fully inflated in the worker. The
guard now detects zip archives by content and checks every one of them,
while non-archive files keep the previous behavior.

* refac: identify loader archives by content

The document loader now recognises archives by their content when checking their size.

* fix(a11y): 25 fields, switches and buttons with no name, or only a placeholder, have names (#33471)

* refac

* refac

* fix(channels): focus thread input on reply in thread (#33467)

* refac: run the knowledge read check on every pending files poll (#33461)

The pending knowledge files stream now checks the user's current account and read access again on every poll.

* refac

* i18n: fill missing translations in 39 languages (#33458)

* refac

* refac

* refac

* refac

* fix(a11y): drawers keep keyboard focus inside and are announced as dialogs (#33547)

* doc: readme

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* doc: readme

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* doc: i18n

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* chore: bump

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* fix(a11y): three buttons' names include the text they show (#33593)

* fix(a11y): task list checkboxes are named by their item's text (#33589)

* fix(a11y): unselected Analytics tabs pass contrast in Accessibility Mode (#33591)

* fix: Preview opens a code block nested in a list, quote or details block (#33586)

Nested Markdown is rendered by MarkdownTokens calling itself, and those
calls passed `preview` but not `onPreview`, so a code block inside a list
item, a quote or a details block showed a Preview button that called the
empty default. Pass `onPreview` down like `preview`.

* refac

* fix: opening or reloading the new chat page shows no model and ignores URL parameters (#33459)

Opening or reloading the new chat page or a folder's page showed "Select a model" in place of the default model, ignored URL parameters such as models=, model= and q= (which fills in the message), and a message sent from there got no reply. Now the default model or the one from the URL is selected and the URL parameters apply, whether you open the page directly or come from another chat. Opening the Inbox and coming back still keeps the typed message and the chosen model.

Fixes #33457

* i18n: add pt-BR translations for newly added UI items and consistency pass (#33595)

New **pt-BR** translations for items introduced in the latest releases, plus a consistency/quality pass across existing strings (grammar, tone, capitalization, pluralization). Placeholders and hotkeys preserved. No logic changes.

* refac

* fix(a11y): Tab cancels shortcut recording instead of binding Tab, and focus stays on the shortcut (#33597)

* fix(a11y): windows opened from a menu return focus to the menu button when they close (#33601)

* refac

* refac

* refac

* refac

* refac

* refac

* refac

* chore: i18n

* docs: start 0.13.0 changelog (#33386)

* docs: start 0.12.6 changelog

* docs: add knowledge base file limits to 0.12.6 changelog

* docs: add MCP Apps and PowerPoint charts to 0.12.6 changelog

* docs: update 0.12.6 changelog date

* docs: add comments and tool switches to 0.12.6 changelog

* docs: add comment highlights to 0.12.6 changelog

* docs: add accessibility improvements to 0.12.6 changelog

* docs: add date added sorting to 0.12.6 changelog

* docs: add role prompt variable to 0.12.6 changelog

* docs: extend accessibility entry in 0.12.6 changelog

* docs: add 3D previews and Overview move to 0.12.6 changelog

* docs: extend accessibility entry in 0.12.6 changelog

* docs: add notification inbox to 0.12.6 changelog

* docs: link inbox request in 0.12.6 changelog

* docs: add note block handles to 0.12.6 changelog

* docs: add tool creation, folder and thread fixes to 0.12.6 changelog

* docs: add thread toolbar fix to 0.12.6 changelog

* docs: extend accessibility entry in 0.12.6 changelog

* docs: add tabbed side panel and moved controls to 0.12.6 changelog

* docs: link note copy button request in 0.12.6 changelog

* docs: add Git panel to 0.12.6 changelog

* docs: add live terminal updates to 0.12.6 changelog

* docs: add terminal browser sessions to 0.12.6 changelog

* docs: add terminal desktop tab to 0.12.6 changelog

* docs: update 0.12.6 changelog date

* docs: add comments slash command to 0.12.6 changelog

* docs: add side chats to 0.12.6 changelog

* docs: rename the changelog section to 0.13.0

* docs: add sub-agent models to 0.13.0 changelog

* docs: add sidebar approval marker to 0.13.0 changelog

* docs: add sub-agent limit defaults to 0.13.0 changelog

* doc: changelog

* chore: format

* refac

* fix: Sub-agents settings show blank and switched off when a limit is 0 (#33612)

Saving the Sub-agents admin tab could turn sub-agents off and clear their system prompt when one of the limits was still 0. Older releases accepted 0 there, also from the SUBAGENTS_MAX_* environment variables, but the tab now fails to load such a value and shows everything blank and switched off, so saving writes that blank state back. A limit of 0 now shows as empty, meaning no limit, which matches what sub-agents already do with a 0 while they run.

Fixes #33609

* fix: OpenTelemetry request metrics create a new series for each distinct URL (#33613)

With OpenTelemetry metrics on, a request for a URL the server has no API endpoint for was counted under its full address, so every distinct URL became a metric series of its own and the series count kept growing. When the web interface is not served (API-only setups) this happens for any unknown URL, such as bots probing for missing paths. With Starlette 1.3.1, the version pinned for source installs, it also happens for every page load, static file and websocket request, because that version tells the server nothing about which part of the app answered them. These requests are now counted without a URL label, while API requests keep theirs. Admins need to do nothing, as the old series stop growing and age out.

Fixes #33576

* fix: non-ASCII stop sequences on a model reach the provider corrupted (#33614)

A Stop Sequence saved on a workspace model reached the provider corrupted when it had non-ASCII text in it (終 went out as çµ\x82, café as café), so the model never stopped on it. This happened when an API client used the model through /openai/chat/completions or /ollama/api/chat. Those stops now arrive unchanged, and typing \n in the field still sends a newline.

Fixes #33610

* fix: saving an orchestrator terminal connection wipes policy settings made in Terminals (#33617)

Opening an orchestrator terminal connection in Admin Settings > Integrations and clicking Save overwrote its policy in Terminals with only the fields the dialog shows (image, CPU, memory, storage, idle timeout and environment variables). Everything else set in Terminals, like restricted mode or the pod and container security settings, was lost, so new terminals started without it. Saving now keeps the policy settings the dialog does not show and only updates the ones it shows.

Fixes #33580

* refac

* fix: notes over 2 MB open empty and cannot be edited (#33618)

A note over 2 MB, which one pasted screenshot can reach because images are embedded in the note, opened as an empty page and discarded what you typed. Live editing of notes had its own 2 MB limit, smaller than what the server accepts in one transfer, so it refused to load such notes. That limit now matches the server's 16 MB transfer limit, so any note the server can receive opens and saves again.

Fixes #33606

* fix: replies cut off at the token limit on a Responses API connection lose their token usage (#33619)

When a streamed reply from a Responses API connection stopped early, for example at the token limit or through a content filter, its token counts were lost. The chat showed no usage for that reply and the admin analytics recorded zero tokens for it. Such replies now keep the usage the provider reported, the same as replies that finished normally.

Fixes #33615

---------

Co-authored-by: Classic298 <27028174+Classic298@users.noreply.github.com>
Co-authored-by: joaoback <156559121+joaoback@users.noreply.github.com>
Co-authored-by: G30 <50341825+silentoplayz@users.noreply.github.com>
Co-authored-by: shpokas <1006081+shpokas@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
c38885a1a7 · 2026-11-03 21:21:21 +09:00
20,281 Commits
2026-11-03 18:59:59 +09:00
2026-10-15 17:08:00 +04:00
2026-11-02 08:48:51 +09:00
2026-11-02 09:59:00 +09:00
2026-09-06 16:48:30 -04:00
2026-10-28 08:04:47 +09:00
2026-10-15 17:08:00 +04:00
2026-06-13 02:13:39 +01:00
2023-10-08 15:38:42 -07:00
2026-10-15 17:08:00 +04:00
2026-11-03 17:35:16 +09:00
2026-09-16 08:51:02 -04:00
2026-03-17 17:58:01 -05:00
2026-02-28 02:05:22 -06:00
2026-11-02 08:48:51 +09:00
2026-11-02 08:48:51 +09:00
2026-11-02 08:48:51 +09:00
2026-11-02 08:48:51 +09:00
2026-11-02 08:48:51 +09:00
2026-10-05 09:24:43 +04:00
2026-10-10 23:30:58 +04:00
2026-04-14 12:18:24 -05:00
…
2026-11-02 10:35:40 +09:00
2026-11-02 10:35:40 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-11-03 17:36:03 +09:00
2026-10-05 09:24:43 +04:00
2026-02-28 13:46:30 -06:00
2026-11-02 01:16:43 +09:00

Open WebUI

Open WebUI is a home for AI: an extensible, easy-to-use, self-hosted platform built to run entirely offline. Connect local models through Ollama or use OpenAI-compatible APIs for local and cloud models.

English | 简体中文 | 繁體中文 | 한국어 | Deutsch | Español | Français | Italiano | Dansk | 日本語 | Polski | Русский | Bosanski | العربية | Norsk | Português (Brasil) | ไทย | Türkçe | Українська | বাংলা | Ελληνικά | Tiếng Việt

Open WebUI Demo

GitHub stars GitHub forks GitHub watchers GitHub repo size GitHub language count GitHub top language GitHub last commit Discord

Explore Open WebUI →

Installation

Python

Requires Python 3.12.

pip install open-webui
open-webui serve

Then open http://localhost:8080.

Docker

docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main

Then open http://localhost:3000.

Image tag Includes
:main Standard image with local AI dependencies
:slim Lightweight image using external services for embeddings, document extraction, and voice
:cuda Open WebUI with CUDA acceleration
:ollama Open WebUI bundled with Ollama
:dev Latest development build

Add these options to docker run before the image name as needed:

Option Purpose
-e OLLAMA_BASE_URL=http://your-ollama-server:11434 Connect to Ollama on another server
-e OPENAI_API_KEY=your_secret_key Set your OpenAI API key
-e HF_HUB_OFFLINE=1 Disable Hugging Face model downloads for offline use
--gpus all Enable Nvidia GPU access for :cuda or :ollama; requires the Nvidia Container Toolkit

See the Docker installation guide for setup instructions and configuration options.

Desktop App

Download the native desktop app for macOS, Windows, and Linux.

Read the docs →

Ecosystem

  • Open Terminal / Terminals (Enterprise): The action layer that turns Open WebUI into a full agent harness, with enterprise orchestration for per-user workspaces.
  • Knowledge Base Sync (oikb): Mirror folders, repos, buckets, and wikis into Open WebUI Knowledge Bases with incremental sync.
  • Open WebUI Computer: Your computer in any browser: files, editor, terminal, git, and optional AI agents, running on your real machine.

See the ecosystem documentation for details.

Troubleshooting and Updates

See the troubleshooting guide for connection issues and the updating guide to update your installation.

Documentation

See the docs for configuration and usage, and the roadmap for planned work.

For Docker Compose, Kubernetes, and other setups, see the installation docs.

Support

Open an issue or start a discussion.

Find us on Reddit, X, and Discord.

Security

Report vulnerabilities privately through GitHub security advisories. Security reports are accepted only through GitHub.

Star History

Star History Chart

License

Includes code under the Open WebUI License, which requires preserving the Open WebUI branding, and prior contributions under their original licenses. See LICENSE and LICENSE_HISTORY for terms and history.

Enterprise · Careers · Sponsor

Created by Timothy Jaeryang Baek.

Languages
Svelte 37.3%
Python 36.7%
JavaScript 17.5%
TypeScript 6.4%
CSS 1.7%
Other 0.2%