diff --git a/CHANGELOG.md b/CHANGELOG.md index 3df9f2e702..2f238a21ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,128 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.11.4] - 2026-09-12 + +### Added + +- ๐Ÿ“‰ **The slim image is about a ninth of its size.** A slim build now comes down at around 175 MB, near enough 89% smaller than the last release, the local models, the packages around them and the tools that installed them all gone from it; what that changes about the way an instance behaves is set out under Changed below and in the documentation. [Commit](https://github.com/open-webui/open-webui/commit/cb942bb94c8dc7941336088fb3392e2398ff56c1), [Commit](https://github.com/open-webui/open-webui/commit/d27aa72ab4a7b5632b4ad49e8467081ad3d7ebb4) +- ๐Ÿ“ฆ **The standard image is about 170 MB smaller.** The image no longer carries a second copy of Python, two sets of fonts nothing ever loaded, packages nothing imports, or the tool that installed them, taking about 170 MB off a standard build. [#29731](https://github.com/open-webui/open-webui/pull/29731), [#29723](https://github.com/open-webui/open-webui/pull/29723), [#29725](https://github.com/open-webui/open-webui/pull/29725), [#29726](https://github.com/open-webui/open-webui/pull/29726), [#29728](https://github.com/open-webui/open-webui/pull/29728), [Commit](https://github.com/open-webui/open-webui/commit/91f8775b28b52c9ae7f2ab990cf2490bda8055d6), [Commit](https://github.com/open-webui/open-webui/commit/98fcb844e1b19f7dd6289af26273cdec5447dc52), [Commit](https://github.com/open-webui/open-webui/commit/508de20779168003e538bb936b49a31d4a8fb8bb), [Commit](https://github.com/open-webui/open-webui/commit/a1c02098aa2687c72482a59117efe643b785df51) +- ๐Ÿ–ฅ๏ธ **A tab for every command a model runs.** The terminal pane now carries a tab for each command a model is running alongside your own shell, so you can watch them as they go, move between them and take the shell yourself, each tab opening with the command that produced it. Opening the pane puts you in a tab, starting your shell where nothing else is running, and closing the last tab folds the pane away again. [Commit](https://github.com/open-webui/open-webui/commit/54a7a7a7ce22725074c29c7e827446f5dce1421c), [Commit](https://github.com/open-webui/open-webui/commit/f3eade42aead0a3b96ada3a300d6c294c89f74a8), [Commit](https://github.com/open-webui/open-webui/commit/de1203f9b5d3d8b2a84bf5c89d1c61542469367a), [Commit](https://github.com/open-webui/open-webui/commit/675b9839f17df94f866c871cbdb9881323a18a8a) +- ๐Ÿ“‚ **Uploading a whole folder to a terminal.** The file browser beside a terminal takes a folder now, dropped onto it or picked from the Upload Folder entry in its menus, and rebuilds what is inside it as it goes, subfolders and all, where before a drop uploaded only the files sitting loose at the top. [Commit](https://github.com/open-webui/open-webui/commit/f80ef8bd), [Commit](https://github.com/open-webui/open-webui/commit/4cc0d48b), [Commit](https://github.com/open-webui/open-webui/commit/674760bf) +- โš–๏ธ **Comparing two files in a terminal.** Picking two files in the file browser lights up a Compare button that lays them side by side or one above the other, numbering the lines, marking what was added and removed down to the part of the line that changed, counting both, and letting you swap which is which or leave whitespace out of it, a choice it remembers. A terminal too old to offer the comparison says so rather than failing quietly. [Commit](https://github.com/open-webui/open-webui/commit/8556033c6b64fa53e44152ebab1f889a578529af), [Commit](https://github.com/open-webui/open-webui/commit/3808eace6c2beb1904f0f04fdd443ec544f94acb) +- ๐Ÿ“ **A cap on how much each Exa result carries.** Web search through Exa can be held to a number of characters per result, set beside its key in the admin web search settings or as `EXA_MAX_CONTENT_LENGTH`, so a few long pages no longer crowd out the rest of the conversation; left empty, results arrive whole as before, and a value that is not a positive whole number stops the server at startup rather than being quietly ignored. [Commit](https://github.com/open-webui/open-webui/commit/12b14124b9376eccf2ba7cf3dba92bc145493703) +- ๐Ÿ—ฃ๏ธ **Models and tools can carry their own translations.** A model, tool, skill, function, banner or arena entry can now hold its name, description, starter prompts and valve labels once per language, written in a searchable table in its own editor or brought in as a JSON file, which is refused where a translation drops one of the placeholders the original fills in. The interface shows the wording for the language it is set to, and falls back to the plain text where that language has none. [Commit](https://github.com/open-webui/open-webui/commit/7b6562e3358956ec71eed05352538a646d047734), [Commit](https://github.com/open-webui/open-webui/commit/858ab727d2d80bb3c9ef40f01a32de7a12ca75c9), [Commit](https://github.com/open-webui/open-webui/commit/3facfa61d413945d7144d26b827fcce1f3aef7c5), [Commit](https://github.com/open-webui/open-webui/commit/85b11a4f3504434bd9cd0748629b8a84817fb4f2) +- โœ๏ธ **Interface text you can reword.** An administrator can now replace the interface's own wording language by language from a panel in the admin settings, with a replacement refused where it drops one of the placeholders the original fills in. [Commit](https://github.com/open-webui/open-webui/commit/67ac1a4e937271a02bfb02a330aa99dc8192cbf4) +- ๐Ÿ”“ **Turning off the sign-in form.** The box asking for an email address and a password can now be taken off the sign-in page from the authentication settings, where until now it could only be set before the server started, leaving single sign-on or a directory to sign people in. [Commit](https://github.com/open-webui/open-webui/commit/c4a349651e34bf5d0920bb5e26707ae9961ac39f) +- ๐Ÿท๏ธ **Custom file metadata.** Metadata attached to an uploaded file now travels with the pieces that file is split into and arrives with the retrieved sources, the oversized and internal fields left out. [#29499](https://github.com/open-webui/open-webui/pull/29499), [#29486](https://github.com/open-webui/open-webui/issues/29486), [Commit](https://github.com/open-webui/open-webui/commit/894655f66b9563890e63c76090ddecc90a311eb2), [#29502](https://github.com/open-webui/open-webui/pull/29502) +- ๐Ÿ—‘๏ธ **Quick delete for notes and automations.** Holding Shift over a note in the list or grid, or over a row on the automations page, turns its trailing controls into a delete button, removing the entry in one click rather than the three the menu and its confirmation ask for. [#29635](https://github.com/open-webui/open-webui/pull/29635), [#29633](https://github.com/open-webui/open-webui/issues/29633), [#29640](https://github.com/open-webui/open-webui/pull/29640), [#29637](https://github.com/open-webui/open-webui/issues/29637) +- ๐Ÿ”€ **Diffs are drawn as diffs.** A diff or patch block in a reply is now laid out as one, with the file and hunk headings, the old and new line numbers, and the added and removed lines picked out down to the part of the line that changed, and a button to switch to the plain text and back. [Commit](https://github.com/open-webui/open-webui/commit/254e29b9af634145dde0450451a36f0dfbd8f421) +- โœ’๏ธ **A formatting switch for notes.** A note you can edit carries a Formatting switch in its menu: turned off, Markdown you type or paste stays as the characters you wrote, a paste keeps its plain text, and a web address is left as text, while formatting already in the note is untouched. [Commit](https://github.com/open-webui/open-webui/commit/d8f27e745bd31c89efa25cbe0f41bb0f70576fc5) +- ๐ŸŽ›๏ธ **Filtering the admin model list by where a model comes from.** The models page in the admin settings can now be narrowed to the base models a connection offers or to the ones built in the workspace, alongside the filters for enabled, disabled, visible and hidden. [Commit](https://github.com/open-webui/open-webui/commit/9e634c0c56e0a060717f1e24a11b082daf664036) +- โšก **Searching without holding up the server.** Searching the text of chats and knowledge now runs beside the rest of the server rather than in front of it, so a long search no longer keeps other requests waiting. [#29621](https://github.com/open-webui/open-webui/pull/29621) +- ๐Ÿ”ข **Knowledge listings come back in an order you asked for.** The `ls`, `tree` and `find` commands a model runs over a knowledge base now sort by name, and take `-t`, `-S` and `-r` for newest first, largest first and reversed, combinable as in a shell; `ls -t` was accepted and quietly dropped before, so the model was handed whatever order the database gave and read it as newest first. [#29840](https://github.com/open-webui/open-webui/pull/29840) +- ๐Ÿชช **Backends can tell an API key from a browser session.** Where user info headers are forwarded, a request to an OpenAI or Ollama connection now carries `X-OpenWebUI-Auth-Type`, saying whether the person behind it signed in through the browser or called with an API key, and `{{AUTH_TYPE}}` can be put in a connection's custom headers; the header's name is set with `FORWARD_USER_INFO_HEADER_AUTH_TYPE`. [Commit](https://github.com/open-webui/open-webui/commit/ee46e2664ab23bacc536fed21c06ab19067d695b) +- ๐Ÿ’ก **The first follow-up waits in the message box.** Once a reply has finished, the first of the follow-up questions it suggests now sits greyed inside the empty message box as well as under the reply: Tab writes it out, and typing anything of your own clears it away. [Commit](https://github.com/open-webui/open-webui/commit/7aaa4a692e949724913834efc47c57572042703b) +- ๐Ÿ”„ **General improvements.** Various improvements were implemented across the application to enhance performance, stability, and security, among them a quieter log: saving the retrieval settings no longer reports the reranking model as changed when it was not, and a picture service that cannot be reached is noted in a line rather than a stack trace, and the model list places itself against the window through the same machinery as the rest of the interface. [Commit](https://github.com/open-webui/open-webui/commit/f1c803d36bae9d429eb630ad26853c9d939262b5), [Commit](https://github.com/open-webui/open-webui/commit/f80ef8bd), [#29922](https://github.com/open-webui/open-webui/pull/29922), [Commit](https://github.com/open-webui/open-webui/commit/a910b0d8f6e552790e76b93b65b8c6fb2582082d), [Commit](https://github.com/open-webui/open-webui/commit/5bb321de06d290735de5ddef9fa9211d61abb4f9) +- ๐ŸŒ **Translation updates.** Translations for Japanese, Traditional Chinese, Korean, Finnish, Russian, Ukrainian, German, Spanish, Portuguese (Brazil), Arabic, Arabic (Bahrain), Azerbaijani, Bulgarian, Bengali, Tibetan, Bosnian, Catalan, Cebuano, Czech, Danish, Basque, Croatian and Dutch were enhanced and expanded, and text that had been fixed in English, from the headings grouping the settings pages to labels and messages across the admin pages, the workspace and notifications, now takes its wording from the interface language. [Commit](https://github.com/open-webui/open-webui/commit/cffd734a1847593bb04c5b5a54d08daf3de0f614), [Commit](https://github.com/open-webui/open-webui/commit/006f95ee595a4d1d63b705c517f1c64cf9ebc676), [Commit](https://github.com/open-webui/open-webui/commit/f677fdbf5074e07216d9bb18d6934f3cfabb5839), [Commit](https://github.com/open-webui/open-webui/commit/237b11c6d944e083445e4ef53f5947b40bb80c6c), [Commit](https://github.com/open-webui/open-webui/commit/8aa25dd3585fe38062d2205231a440db31e330f3), [Commit](https://github.com/open-webui/open-webui/commit/9a4b6431), [#29794](https://github.com/open-webui/open-webui/pull/29794), [#29795](https://github.com/open-webui/open-webui/pull/29795), [#29798](https://github.com/open-webui/open-webui/pull/29798), [Commit](https://github.com/open-webui/open-webui/commit/4948842bea27914e8e8fc9f6e027f1e9c689eaa3), [#29870](https://github.com/open-webui/open-webui/pull/29870), [#29885](https://github.com/open-webui/open-webui/pull/29885) + +### Fixed + +- ๐Ÿ›ก๏ธ **Security Advisory**: This release includes security and access-control fixes. We recommend updating production deployments at your earliest convenience. Not all security fixes in this version may be enumerated in the fixed section. Some may be withheld for a short time to give administrators time to upgrade. [Advisories](https://github.com/open-webui/open-webui/security) +- ๐Ÿ”‘ **Tokens stay out of logs.** A failure part way through signing in with an identity provider no longer writes the credentials it was handed into the application log, recording the provider and the error it reported instead. [#29709](https://github.com/open-webui/open-webui/pull/29709) +- ๐Ÿ”’ **Listing one connection's models is for administrators again.** The endpoints that list the models on a single Ollama or OpenAI connection could be reached by a signed-in account of any role, and now check the caller's role. [#29619](https://github.com/open-webui/open-webui/pull/29619) +- ๐Ÿช **Cookies reach only the connections told to receive them.** A model connection, tool server or terminal server authenticating as the signed-in person was handed this instance's browser cookies along with the request; that now happens only where the connection's new Forward cookies switch is turned on, which an instance relying on it has to do after upgrading. [Commit](https://github.com/open-webui/open-webui/commit/b71744b17823f7a3a9a64cb363e79a7164ed5b23), [Commit](https://github.com/open-webui/open-webui/commit/3cda47cdb449aac970426f0929c9e5f8bb8bd807), [Commit](https://github.com/open-webui/open-webui/commit/f9f815c86220f809fad5ee1300c44f55dea74c79) +- ๐Ÿ—’๏ธ **A note edit survives leaving the page.** A note's title and its attachments save a moment after they change, and leaving the note inside that moment dropped the save, so the notes list kept showing the old title until the page was reloaded; the pending save now finishes before the next page opens. [#29745](https://github.com/open-webui/open-webui/pull/29745), [#29744](https://github.com/open-webui/open-webui/issues/29744) +- ๐Ÿ“‹ **Pasting into a note lands where you put it.** A plain paste replaced more of the note than was selected, and a paste into a code block broke out of the block instead of going inside it; both now land exactly where they were dropped. [Commit](https://github.com/open-webui/open-webui/commit/d8f27e745bd31c89efa25cbe0f41bb0f70576fc5) +- ๐ŸŒ **A web address someone else types stays as they typed it.** In a note two people are writing at once, a plain web address arriving from the other editor was turned into a link on your screen but not on theirs; it is now left as written. [Commit](https://github.com/open-webui/open-webui/commit/d8f27e745bd31c89efa25cbe0f41bb0f70576fc5) +- ๐Ÿ“‘ **Documents pulled through Tika 4 keep their shape.** Where document extraction runs against a Tika server on version 4, the text now comes back as Markdown rather than a flat run of characters, so headings, lists and tables survive into what the model reads. [Commit](https://github.com/open-webui/open-webui/commit/ba34bee2d17e1c00238c85a8aab1a11a60db164e) +- โณ **Sign-in sessions last as long as the token behind them.** A session with an identity provider was measured by whichever of its two tokens expired first, so where the identity token was the shorter it was renewed early and dropped whenever that renewal failed; it now follows the token it actually calls with, and the shorter one is still respected where an integration is handed it. [Commit](https://github.com/open-webui/open-webui/commit/aaaf26fb8ede28854dd660b11b85ba6bafe64007) +- ๐Ÿงฉ **Tool steps stay in a finished reply.** A reply that called tools showed each step as it ran, then lost them the moment the reply completed, because the provider's closing message replaced everything on screen rather than joining it; the closing message is now merged into what is already there, and a tool call is no longer mistaken for its own result. [Commit](https://github.com/open-webui/open-webui/commit/e1bfefdf9f8f2012cecfc7d81079bd6fff147932), [Commit](https://github.com/open-webui/open-webui/commit/31b272d3c93b87636c920f2aa68d6caaa07ae79a) +- ๐Ÿ™‹ **Answering in your own words lets you send.** Where the last question a model asks is answered by typing into the other field rather than picking an option, the button that sends the answers stayed greyed out however much was filled in; it now follows what has been entered. [#29494](https://github.com/open-webui/open-webui/pull/29494), [#29311](https://github.com/open-webui/open-webui/issues/29311) +- ๐ŸŽš๏ธ **Settings you may change save even where others are barred.** An account without permission to change the interface settings had every save through the personal settings refused outright, so its system prompt, notifications, audio, keyboard shortcuts and pinned models could not be kept either, however explicitly they were allowed; the interface settings it may not touch are now left as they are and everything else saves. [Commit](https://github.com/open-webui/open-webui/commit/98a920168e2eea435ac15e1ad3d679946631e41d) +- ๐Ÿ—œ๏ธ **Saving one setting no longer rewrites the rest.** Every save sent the whole settings object back, so whatever the page happened to be holding was written into the account, another tab's older copy included, and a default an administrator changed afterwards never reached anyone who had saved anything; only the settings actually changed are stored now, and clearing the default system prompt clears it rather than leaving the old one behind. [Commit](https://github.com/open-webui/open-webui/commit/98a920168e2eea435ac15e1ad3d679946631e41d) +- โš ๏ธ **A settings save that fails says so.** Settings that could not be saved were shown as saved anyway until the page was reloaded, because the interface stored them locally without waiting on the server; a failure now raises an error and leaves the panel as it was. [Commit](https://github.com/open-webui/open-webui/commit/98a920168e2eea435ac15e1ad3d679946631e41d) +- ๐Ÿ”  **Menu text follows the interface scale.** The entries in the menus that drop down across the interface, among them the account menu and the menus on a chat, were pinned to a fixed size and stayed put while the menu around them grew; they now scale with the rest of the interface. [#29493](https://github.com/open-webui/open-webui/pull/29493), [#29488](https://github.com/open-webui/open-webui/issues/29488) +- ๐Ÿชž **Account menu rows light up as one.** An entry in the account menu that carries a pin button beside it, among them Workspace, Notes, Calendar and Automations, highlighted only under the link and left the rest of the row plain, in a shade that did not match the other menus either; the whole row now lights up in the shared colour, in high contrast as well, and a long label no longer pushes the pin out of the menu. [Commit](https://github.com/open-webui/open-webui/commit/e723dcda58f638a5da2398743d22d3e5854042bf) +- ๐Ÿ”ฒ **Shift-clicking files adds to what is already picked.** Holding Shift over a file in the terminal's file browser threw away the rest of the selection and kept only the new stretch, and clicking a file already picked could not take it back out; a range now joins what is selected, and clicking through a selected file removes its range. [Commit](https://github.com/open-webui/open-webui/commit/f80ef8bd), [Commit](https://github.com/open-webui/open-webui/commit/4cc0d48b), [Commit](https://github.com/open-webui/open-webui/commit/674760bf) +- ๐Ÿ›Ÿ **Attaching a file no longer writes over one already there.** Attaching a file to a message on an instance that puts attachments in a terminal's working directory replaced whatever file of that name was sitting there; the upload now takes the next free name, `report (1).pdf` beside `report.pdf`, and the attachment shows the name it was saved under. Two uploads arriving at the same moment from different browsers can still land on the same name. [Commit](https://github.com/open-webui/open-webui/commit/d70053e44993f271d534fb87d2b40724b028fca2) +- ๐Ÿ“› **An upload that fails says so.** A file that could not be written to the terminal passed in silence and the browser refreshed as though it had arrived, in a directory that may no longer have been the one on screen; a failure now names itself, and the listing is only reread where it is still the one you are looking at. [Commit](https://github.com/open-webui/open-webui/commit/f80ef8bd), [Commit](https://github.com/open-webui/open-webui/commit/4cc0d48b), [Commit](https://github.com/open-webui/open-webui/commit/674760bf) +- ๐ŸŽฏ **A question carried in a link is sent once it is written.** Opening a chat from a link holding a question sent it before the box had it, so a question naming a variable went off with the variable unfilled; the send now waits for the text to be in place and filled in. [Commit](https://github.com/open-webui/open-webui/commit/3808eace6c2beb1904f0f04fdd443ec544f94acb), [Commit](https://github.com/open-webui/open-webui/commit/a23b579233276e40159eb615917b9aeb7d5ed5c9) +- ๐Ÿ“œ **A long list of tasks keeps to its own corner.** The list of steps a model works through ran as long as it needed and pushed the rest of the reply down the page; it now stops at a quarter of the window's height and scrolls within itself. [Commit](https://github.com/open-webui/open-webui/commit/307b9b9133f0c7ad899f4b76226059da6f3177eb) +- โŽ‹ **Closing a dialog closes the one on top.** The shortcut for closing a dialog always shut the settings window, whichever dialog was actually in front, so a dialog opened from within settings took both away at once; each dialog now answers the shortcut for itself, as it already did for the escape key. [#29830](https://github.com/open-webui/open-webui/pull/29830), [#29817](https://github.com/open-webui/open-webui/issues/29817) +- ๐Ÿ”ƒ **A tab left open through an update reloads itself.** A tab still running the previous build met an error page after the server was updated instead of loading the new one, because every image built from Docker carried the same version stamp; the stamp now follows the build, and a stale tab reloads as it was meant to. [#29832](https://github.com/open-webui/open-webui/pull/29832), [#29831](https://github.com/open-webui/open-webui/issues/29831) +- ๐Ÿ“Œ **Code headings stay at the top in channels.** In a thread or the pinned messages of a channel, the bar naming a piece of code hung below the top of the panel and floated over the code as it scrolled, and its corners spilled past the rounded block; it now sits flush at the top, clipped to the block, in Firefox as much as anywhere else. [#29836](https://github.com/open-webui/open-webui/pull/29836), [#29835](https://github.com/open-webui/open-webui/issues/29835) +- ๐Ÿ“จ **Proxied replies stop arriving with doubled headers.** A response passed back from a terminal server, or from an OpenAI or Ollama connection, carried that server's own `Server` and `Date` headers alongside the ones this instance sets, so a reverse proxy in front of Open WebUI logged a duplicate header line for every one, filling gigabytes of error log a day where a terminal's ports are polled or replies are streamed; those headers are now dropped along with the encoding headers already being dropped. [#29841](https://github.com/open-webui/open-webui/pull/29841), [#29824](https://github.com/open-webui/open-webui/issues/29824), [#29843](https://github.com/open-webui/open-webui/pull/29843) +- โ›“๏ธ **A link naming a tool that is not there opens without it.** Opening a chat from a link whose `tools` or `tool-ids` parameter names a tool that no longer exists, or that the account cannot see, kept that id in the selection and sent it with the message; ids matching no tool the account has are now dropped and the rest of the link works as before. [#29803](https://github.com/open-webui/open-webui/pull/29803) +- ๐Ÿšซ **A model that will not open stops blaming your permissions.** Opening a workspace model for editing by an id that cannot be loaded, whether the model is gone, the id is wrong or the request failed, sent you back to the model list with "You do not have permission to edit this model", pointing at permissions for something that was never a permission problem; that message now appears only where the model loaded and you really may not edit it. [#29694](https://github.com/open-webui/open-webui/pull/29694), [#29629](https://github.com/open-webui/open-webui/issues/29629) +- ๐Ÿงต **A notification about a thread reply opens the thread.** Clicking the notification for a reply written inside a thread dropped you at the bottom of the channel with the thread still shut and the reply nowhere in sight; it now opens the thread the reply belongs to. [#29856](https://github.com/open-webui/open-webui/pull/29856), [#29855](https://github.com/open-webui/open-webui/issues/29855) +- ๐Ÿ”ฝ **Dropdown arrows stop sitting on the text.** In the dropdowns drawn no wider than what is in them, among them the provider on a new connection, how a group shares, and the read or write level beside a group or a person, the arrow overlapped the last characters of the longest choice; there is now room for it. [#29866](https://github.com/open-webui/open-webui/pull/29866), [#29865](https://github.com/open-webui/open-webui/issues/29865) +- ๐ŸงŠ **Replies from vLLM and LiteLLM stop arriving mangled.** The header filter on the OpenAI and Ollama connections compared names in title case only, so an upstream that writes them in lower case, as anything served by uvicorn does, had nothing stripped at all, `Content-Encoding` included, and a desktop or programmatic client then failed trying to decompress a body the server had already decoded. Names are now compared without regard to case. [#29843](https://github.com/open-webui/open-webui/pull/29843) +- ๐Ÿ›‘ **Stopping a chat stops everything running in it.** Where a chat had more than one task in flight, stopping it, deleting it, or closing a note being worked on could stop the first and leave the rest running to the end, both because a task that had already finished ended the round early and because the list being worked through was rewritten underneath it as each one was cleared away; every task is now stopped in turn, so a reply that was calling tools stops calling them rather than running on to its own limit. Instances sharing their state through Redis were not affected. [Commit](https://github.com/open-webui/open-webui/commit/e35b907f737e625b900b3a03d61890f67ab0c4b0), [#29844](https://github.com/open-webui/open-webui/pull/29844), [#29816](https://github.com/open-webui/open-webui/issues/29816) +- ๐Ÿ–Š๏ธ **Code in a channel model reply behaves like code anywhere else.** Where a model answers in a channel with structured output, the code inside it was drawn as plain highlighted text rather than in the editor every other message uses, so it could not be edited in place and a diff in it could not be opened for editing; it now renders the same way as everywhere else. [#29861](https://github.com/open-webui/open-webui/pull/29861) +- ๐Ÿงฝ **Deleting a folder in a knowledge base takes its contents with it.** Deleting a folder without moving what was in it up a level dropped the files from the listing but left their text in the search index and the files themselves in storage, so a model went on retrieving and citing pages from a folder that was no longer there; the text is now removed with the folder, and a file no other knowledge base holds is deleted with it unless file retention is switched on. [Commit](https://github.com/open-webui/open-webui/commit/17dbc6f001aeea25ae1df528cb79bb272eca4a77) +- โฐ **An automation's schedule is read as it was written.** A schedule that puts the time in `DTSTART`, as a hand-written rule normally does, or that attaches a time zone to it, was listed as running at midnight and opened in the editor set to nine in the morning, so the automations page told you the wrong hour and saving the automation again moved when it actually ran; the hour and minute in `DTSTART` are now used wherever the rule names none of its own. [Commit](https://github.com/open-webui/open-webui/commit/540467b90a430e47e536c20710878b342de659fb) +- ๐Ÿ“ฃ **A mention of a model with an awkward ID shows as a chip.** A mention whose ID carried anything beyond letters, digits and a little punctuation, such as the brackets in some workspace model IDs, stayed on screen as the raw `<@โ€ฆ>` text both in the box you type in and in the message once sent; any ID without a space in it is now drawn as a chip. [#29864](https://github.com/open-webui/open-webui/pull/29864) +- ๐Ÿ”” **A notification target you name yourself stays reachable.** A webhook target given a name of your own containing a space, a slash or anything else outside letters, digits, dashes and underscores was stored exactly as typed, and could afterwards not be edited, deleted, made the default or tested, because the name no longer matched the address the interface calls; a name you type is now tidied the same way an automatic one always was. [#29947](https://github.com/open-webui/open-webui/pull/29947) +- ๐Ÿช› **Every tool on an MCP server is offered.** A server that hands its tools back a page at a time had only the first page read, so the rest were never offered to a model; the whole list is now collected before the tools are built. [Commit](https://github.com/open-webui/open-webui/commit/ffae4116a8d58a820f1770c41c69dafe4d51c881) +- ๐Ÿ’ญ **Claude Code keeps working past the first turn.** An Anthropic client talking to `/api/v1/messages` sends the assistant's earlier thinking back with every follow-up, and since 0.11.0 those blocks were passed on to an OpenAI-compatible backend as a content part it has no name for, so a strict server such as NVIDIA Dynamo turned the whole conversation down on its second turn. The blocks Open WebUI writes itself are now left out again, while signed ones are kept so a gateway forwarding to Anthropic still has what it needs. [#29849](https://github.com/open-webui/open-webui/pull/29849), [#29799](https://github.com/open-webui/open-webui/issues/29799) +- ๐Ÿ—จ๏ธ **A model answering in a channel is given its terminal.** A model with a terminal chosen in the workspace had that choice honoured in a chat but dropped where it answered in a channel or ran as a channel automation, so it worked without one; it now carries the same terminal everywhere, alongside the tools, filters and features it already carried. [Commit](https://github.com/open-webui/open-webui/commit/c78ad89934095c4e42e3f059d400a24fe5681de2) +- ๐Ÿ”ค **Custom headers survive a name with an accent.** The custom headers a connection sends are encoded once the values are filled in, so a person's name or group carrying anything beyond plain ASCII, a line break included, no longer breaks the request or reaches the other end as something else. [Commit](https://github.com/open-webui/open-webui/commit/7a4a4b93dca34f8ce0c481b180d3eea23797e984) +- ๐Ÿ†Ž **Right-click spelling corrections work again in Chrome.** Picking a suggestion from the browser's own spelling menu in the message box did nothing, or put the misspelling straight back, because a highlight meant for the notes editor was being drawn over the selection and rebuilding the text underneath it, taking the browser's spelling marks with it; that highlight is now kept out of the message box and only drawn where the editor is not in use. [#29952](https://github.com/open-webui/open-webui/pull/29952), [#29944](https://github.com/open-webui/open-webui/issues/29944) +- ๐Ÿณ **A service name without a dot is accepted again.** With local web fetching turned on, an address pointing at a name on the same network, `http://apprise:8000` and the like, was still refused as invalid, which left the setting useless for the container names most instances actually use; such a name is now accepted where the setting allows it. [#29945](https://github.com/open-webui/open-webui/pull/29945), [#28161](https://github.com/open-webui/open-webui/issues/28161) +- ๐Ÿชง **Text that only looks like a skill is left alone.** Something written as `<$fh>` in a message, as Perl and other languages do, was taken for a mention of a skill and quietly removed before the model saw it, and drawn on screen as a chip; only mentions naming a skill that exists and is turned on are treated as mentions now. [Commit](https://github.com/open-webui/open-webui/commit/0edd731c7422870aa109fd0b758c6d68c06655da) +- ๐Ÿซฅ **Webhook pictures obey the setting that stops picture forwarding.** Turning `ENABLE_PROFILE_IMAGE_URL_FORWARDING` off stops browsers being sent on to outside picture addresses, and a channel webhook's picture was sent on regardless; it now serves the built-in picture like the rest. [#29889](https://github.com/open-webui/open-webui/pull/29889) +- ๐ŸชŸ **The statistics window listens only to the community site.** The window that shares chat statistics with the community accepted requests from any page that opened it and answered to anywhere; it now reads and replies only where the community site is at the other end. [#29918](https://github.com/open-webui/open-webui/pull/29918) +- ๐Ÿงฏ **Reading a web page leaves the log alone.** Fetching a page through the browser-driven loader filled the log with tracebacks where the page closed while it was still pulling pieces of itself, as sites behind Cloudflare and similar do; those requests are now let go of before the page closes. [#29325](https://github.com/open-webui/open-webui/pull/29325), [#28869](https://github.com/open-webui/open-webui/issues/28869) +- ๐Ÿ“ค **Exporting tools stops at what you may edit.** Exporting all tools at once returned every tool the account could see, the source of a tool shared for reading included; it now returns only the tools it may edit, matching the single-tool export and the way models already export. [#29310](https://github.com/open-webui/open-webui/pull/29310) +- ๐Ÿ” **Model pictures follow model access.** The picture belonging to a model is now shown only to people who can see that model, where anyone signed in could fetch it and tell an existing model from an unknown one by which picture came back. [#29700](https://github.com/open-webui/open-webui/pull/29700) +- ๐Ÿšช **Webhook pictures follow channel access.** The picture belonging to a channel webhook is now shown only to people with access to that channel, where anyone signed in could fetch it or be sent on to wherever it pointed, and it is refused outright where channels are turned off. [#29703](https://github.com/open-webui/open-webui/pull/29703) +- ๐Ÿ“Ž **Safer Word document previews.** Previewing a Word document no longer renders an HTML sub-document embedded inside it, and a link in one opens only where it points at a web address, a mail address or a telephone number. [#29699](https://github.com/open-webui/open-webui/pull/29699) +- ๐Ÿšฆ **Citation links go to the web only.** A source attached to a reply now opens only where it points at a web address, falling back to the panel that shows the source rather than following anything else. [#29701](https://github.com/open-webui/open-webui/pull/29701) +- ๐Ÿ **Saving a tool or function.** Saving a tool or function in the admin pages no longer fails with a missing module error from the built-in code formatter, which was not installing everything it needed. [#29503](https://github.com/open-webui/open-webui/pull/29503) +- ๐Ÿ› ๏ธ **Tool servers accept what they are sent.** A tool that writes through an address carrying part of its input no longer has that part repeated in the body of the request as well, which servers checking their input strictly turned away, so those calls now go through. [#29717](https://github.com/open-webui/open-webui/pull/29717), [#29716](https://github.com/open-webui/open-webui/issues/29716) +- ๐ŸŽ **Answers survive on Apple Silicon.** Asking a question that searches a knowledge base with a locally run reranking model no longer takes the whole server down on a Mac, losing the answer and the connection with it. [#29735](https://github.com/open-webui/open-webui/pull/29735), [#29722](https://github.com/open-webui/open-webui/issues/29722) +- ๐Ÿ“š **Web results stop being cited.** Pages a web search only listed are no longer offered to the model as things to cite, which had it attaching a result id to text from a different result and the citations panel resolving that to a title that looked right. [#29631](https://github.com/open-webui/open-webui/pull/29631), [#29627](https://github.com/open-webui/open-webui/issues/29627) +- ๐Ÿ”ผ **Honest version checks.** An instance that cannot reach the release listing now says the check failed, instead of reporting whatever it is running as the newest version and recording nothing about it. [#29626](https://github.com/open-webui/open-webui/pull/29626), [#29580](https://github.com/open-webui/open-webui/issues/29580) +- ๐ŸŸ๏ธ **Arena models report their errors.** A message to an arena model whose provider answers with an error now shows that error in the chat, where it used to fail on something unrelated and leave the real reason unsaid, and titles and tags no longer break the same way. [#29662](https://github.com/open-webui/open-webui/pull/29662), [#29658](https://github.com/open-webui/open-webui/issues/29658) +- ๐Ÿณ๏ธ **Nameless tool calls fail once.** A model endpoint that sends a tool call with no name at all now has that call fail on the spot, rather than the missing name being kept, stored with the message and sent back on the next turn for the endpoint to reject. [#29690](https://github.com/open-webui/open-webui/pull/29690), [#29686](https://github.com/open-webui/open-webui/issues/29686) +- ๐Ÿงน **Direct connections stop leaking listeners.** A server talking to a direct connection no longer leaves a listener behind for every request that ends any way but a clean finish, which grew without limit while a connection kept failing. [#29509](https://github.com/open-webui/open-webui/pull/29509) +- ๐Ÿš€ **Refreshing the model list costs less.** Where several servers share their state through Redis, the whole model registry was written out again on every refresh, because the countdown Ollama attaches to a model it holds in memory moved each time. That value is now kept out of the stored copy, and still reported by the API, so the registry is written only when the models themselves change. [Commit](https://github.com/open-webui/open-webui/commit/649c012ecf308a994ea180127f7f8f94d0aec311) +- โœ๏ธ **Continuing a reply keeps the text it already wrote.** Asking for the rest of a cut-off reply in a temporary chat replaced what was on screen with only the new text, because the message being continued was read back from the saved chat it did not have. It is now taken from the request before the model is called, the continuation joins the same message instead of arriving as a second one, on a connection whose provider is set to llama.cpp the model is told to carry on from the text it is handed rather than repeat it back, opening the result in the message editor no longer shows a line break where the two halves meet, and, where haptic feedback is switched on, a continuation buzzes as it streams like any other reply. [Commit](https://github.com/open-webui/open-webui/commit/77d2000eb79e1cb6ae2004d40e8cca8c9e754cd0), [Commit](https://github.com/open-webui/open-webui/commit/57fc344873edc0db9e9f7ff3e9fb167cd80e3ef2), [Commit](https://github.com/open-webui/open-webui/commit/7eefeef4f17118f81c87acb464ad562803a6f26c), [Commit](https://github.com/open-webui/open-webui/commit/d418840aa9c4b77f613308cdaa4f2c6a062a8715), [Commit](https://github.com/open-webui/open-webui/commit/3795d5b29253d4b8d7a0adbab457c7317c40f3c6), [Commit](https://github.com/open-webui/open-webui/commit/57acc2b68f2f9e40b53aa7e609fdd52a4b0d15c4) +- ๐ŸŽ๏ธ **Reading a page full of media is about four times faster.** The browser-driven loader pulled every image, video and font a page referenced down through the server before any text was extracted, so a page carrying a few dozen audio players took ten seconds or timed out. Those requests are now dropped before they are made, and the same page comes back in under three seconds, having pulled 4 MB where it used to pull 55. [#29742](https://github.com/open-webui/open-webui/pull/29742), [#29741](https://github.com/open-webui/open-webui/issues/29741) +- ๐Ÿ“ **Starting a note from search.** Starting a note from the search box now works when you are already on the notes page, keeps the whole of what you typed including characters such as ampersands and hashes, and no longer makes a further note each time the browser back button is pressed. [#29645](https://github.com/open-webui/open-webui/pull/29645), [#29642](https://github.com/open-webui/open-webui/issues/29642) +- ๐Ÿ“ฑ **Replies show on iPhone and iPad.** An assistant reply no longer comes up blank in a home screen app, an in-app browser or a desktop-class window on Apple devices, where the check that avoided the drawing fault only recognised Safari itself. [#29734](https://github.com/open-webui/open-webui/pull/29734), [#29688](https://github.com/open-webui/open-webui/issues/29688), [#26712](https://github.com/open-webui/open-webui/issues/26712) +- ๐Ÿ“Š **Relevance shown for a lone source.** A reply drawing on a single source now shows how relevant that source is, where the figure appeared only once a second source joined it and so looked as though it came and went. [#29647](https://github.com/open-webui/open-webui/pull/29647), [#29646](https://github.com/open-webui/open-webui/issues/29646) +- ๐Ÿ”ง **Arduino sketches upload to knowledge.** A sketch file now reaches the plain text reader like the C++ and header files beside it, rather than being handed to a document extraction server that could make nothing of it and failing the upload. [#29673](https://github.com/open-webui/open-webui/pull/29673), [#29670](https://github.com/open-webui/open-webui/issues/29670) +- ๐Ÿ“„ **Uploaded text kept as written.** A file whose text contains escape sequences such as the one standing for a non-breaking space is now stored and read by the model exactly as it was written, rather than having some of them rewritten depending on where in the file they sat. [#29736](https://github.com/open-webui/open-webui/pull/29736), [#29732](https://github.com/open-webui/open-webui/issues/29732) +- ๐Ÿ”ฆ **Readable slash command labels.** The entries in the slash command menu no longer show as white text on a white background in the light theme. [#29512](https://github.com/open-webui/open-webui/pull/29512), [#29510](https://github.com/open-webui/open-webui/issues/29510) +- โŒจ๏ธ **Arrows stay as you typed them.** A sequence such as three hyphens after a less-than sign is now shown as the characters it is made of rather than drawn as an arrow, which had text look changed when it never was. [#29595](https://github.com/open-webui/open-webui/pull/29595), [#29594](https://github.com/open-webui/open-webui/issues/29594) +- ๐Ÿ–Œ๏ธ **Editing an image you uploaded.** An image already held by Open WebUI can now be used with image editing, where fetching its own link back over the network could fail on a private network or without a sign-in. [Commit](https://github.com/open-webui/open-webui/commit/50413f34824ea49d5b94d3a97f3fe4bb2e881e38) +- ๐ŸŽจ **A tidier attach webpage dialog.** The row holding the Add button no longer carries a grey band of its own between the address box and the button, matching every other dialog. [#29664](https://github.com/open-webui/open-webui/pull/29664), [#29663](https://github.com/open-webui/open-webui/issues/29663) +- ๐Ÿ–ฑ๏ธ **A plain note date.** The date under a note title no longer shows a pointing hand or announces itself as something to press, having never done anything when clicked. [#29708](https://github.com/open-webui/open-webui/pull/29708) +- ๐Ÿ‘๏ธ **Compact hover previews in Safari.** Holding over a chat in the sidebar shows the small preview every other browser shows, rather than one laid out at the width and spacing of a full conversation. [#29734](https://github.com/open-webui/open-webui/pull/29734) + +### Changed + +- ๐Ÿชถ **Slim starts with nothing configured.** The slim image leaves out the local models and the libraries around them, and still starts and holds a conversation on its defaults; the features that leaned on those models each need an external service of their own. [Commit](https://github.com/open-webui/open-webui/commit/cb942bb94c8dc7941336088fb3392e2398ff56c1) +- ๐Ÿ—„๏ธ **Slim refuses to start on another database.** The slim image runs on SQLite, its default, or on PostgreSQL; pointed at MySQL, MariaDB or another engine, or started with AWS RDS IAM logins switched on, it stops with an error instead of starting, and those deployments need the standard image. [Commit](https://github.com/open-webui/open-webui/commit/d27aa72ab4a7b5632b4ad49e8467081ad3d7ebb4) +- ๐Ÿ“ **Slim refuses to start on cloud file storage.** The slim image keeps files on local storage, its default; configured for an S3, Google Cloud or Azure bucket, it stops with an error instead of starting, and those deployments need the standard image. [Commit](https://github.com/open-webui/open-webui/commit/d27aa72ab4a7b5632b4ad49e8467081ad3d7ebb4) +- ๐Ÿงฎ **Slim searches only through pgvector.** Knowledge search on the slim image needs PostgreSQL with pgvector. Configured for another vector store the instance still starts, and the failure arrives the first time something is searched rather than at startup. [Commit](https://github.com/open-webui/open-webui/commit/cb942bb94c8dc7941336088fb3392e2398ff56c1), [Commit](https://github.com/open-webui/open-webui/commit/d27aa72ab4a7b5632b4ad49e8467081ad3d7ebb4) +- ๐Ÿง  **Slim needs an external embedding service.** The slim image carries no embedding or reranking model of its own, so knowledge needs one of the external embedding engines, OpenAI, Ollama or Azure OpenAI, and reranking needs an external reranker; where none is configured, results fall back to plain cosine scoring, which ranks them less well. [Commit](https://github.com/open-webui/open-webui/commit/cb942bb94c8dc7941336088fb3392e2398ff56c1) +- โœ‚๏ธ **Slim splits documents without a tokenizer.** Splitting a document along a downloaded tokenizer is unavailable on the slim image, which leaves splitting by character or by token count. [Commit](https://github.com/open-webui/open-webui/commit/cb942bb94c8dc7941336088fb3392e2398ff56c1) +- ๐Ÿ“ƒ **Slim reads only plain text on its own.** The slim image reads text, Markdown, CSV, HTML and XML files as they are; uploading a PDF, a Word file or a presentation fails unless one of the external document extractors is configured. [Commit](https://github.com/open-webui/open-webui/commit/cb942bb94c8dc7941336088fb3392e2398ff56c1) +- ๐ŸŽ™๏ธ **Slim needs an external speech service.** The slim image carries neither local Whisper nor local voices: an instance configured for them still starts, but speech to text and text to speech fail when they are used until an external engine is set, and the audio settings refuse a switch back to the local ones. [Commit](https://github.com/open-webui/open-webui/commit/cb942bb94c8dc7941336088fb3392e2398ff56c1) +- ๐Ÿ•ธ๏ธ **Slim reads less from pages that need JavaScript.** The slim image carries no headless browser, so a web page is fetched over plain HTTP or through an external loader, and a page that draws itself with JavaScript comes back with less of its content than on the standard image. [Commit](https://github.com/open-webui/open-webui/commit/cb942bb94c8dc7941336088fb3392e2398ff56c1), [Commit](https://github.com/open-webui/open-webui/commit/d27aa72ab4a7b5632b4ad49e8467081ad3d7ebb4) +- ๐Ÿ”Ž **Slim leaves out DuckDuckGo search.** DDGS, the one web search provider that needs no key of its own, is not carried in the slim image: it is greyed out in the admin web search settings, refused where an instance is switched over to it, and reports itself unavailable where it is already selected, so web search on slim needs a provider with a key. [Commit](https://github.com/open-webui/open-webui/commit/0fa4dea5ff64ea663f162d07c9a1175c39e4aad0) +- ๐Ÿ“ฅ **Slim pulls the code interpreter's packages from a CDN.** The slim image carries the Python runtime that runs code in the browser but not the packages it draws on, so the browser downloads numpy, pandas, matplotlib, scikit-learn and the rest from `cdn.jsdelivr.net` the first time code imports them, which means the code interpreter needs outbound access from the browser and stops working where that is blocked. [Commit](https://github.com/open-webui/open-webui/commit/98fcb844e1b19f7dd6289af26273cdec5447dc52) +- ๐Ÿงฐ **Slim installs no requirement from a git address.** The slim image no longer carries git, so a tool or function whose requirements point at a `git+https://` address fails to install and needs the standard image or a published package. [Commit](https://github.com/open-webui/open-webui/commit/30eed1251301f74e0dfeaad09c41e81320f790fc) +- ๐Ÿงพ **Tools importing packages they never declared stop working.** Packages that sat in the image only by accident, among them nltk, pymongo, the Google Drive client and the Gemini SDK, are no longer installed, so a tool or function importing one stops working on upgrade until it names the package in its own requirements; an instance that cannot reach the package index needs the package built into the image instead. [#29725](https://github.com/open-webui/open-webui/pull/29725), [#29726](https://github.com/open-webui/open-webui/pull/29726), [Commit](https://github.com/open-webui/open-webui/commit/a1c02098aa2687c72482a59117efe643b785df51) +- ๐Ÿ†” **A model's ID may no longer hold a space.** Creating or saving a workspace model whose ID contains a space or a tab is now refused in the editor and through the API, and such a model is skipped when models are imported. A model already stored with whitespace in its ID goes on answering, but it can no longer be saved or have its access changed until it is recreated under an ID without one. [Commit](https://github.com/open-webui/open-webui/commit/8a19e2f867063256bb2836649e2fe80af41ef748) +- ๐Ÿ–‡๏ธ **A link is drawn only where it points at the web.** A link in a reply, a citation or a web search result is now rendered only where it points at a web address, a mail address, a telephone number or somewhere inside this instance; anything else, an `ftp://` address or an application link such as `obsidian://` or `vscode://` among them, is shown as the text it is. Two old oddities go with it: a source written as `HTTP://` now becomes a link, and a filename merely containing the letters http no longer becomes one that leads nowhere. [#29890](https://github.com/open-webui/open-webui/pull/29890) +- ๐Ÿ”— **Default suggestions answer with an object.** `POST /api/v1/configs/suggestions` now answers with an object holding the suggestions and their per-language wording, in place of the bare list it returned before, so anything calling it directly has to read the new shape. [Commit](https://github.com/open-webui/open-webui/commit/7b6562e3358956ec71eed05352538a646d047734) +- ๐Ÿงท **Personal settings are written a field at a time.** `POST /api/v1/users/user/settings/update` now patches the settings named in it rather than replacing the whole interface object: a field left out keeps its value, a field sent as null goes back to the administrator's default, and anything writing settings directly has to follow suit. [Commit](https://github.com/open-webui/open-webui/commit/98a920168e2eea435ac15e1ad3d679946631e41d) +- ๐Ÿชต **A refused model says why in the log.** A request turned away with "Model not found" now writes a warning naming the account, the model and the reason it was refused, whether the model is not registered, the account holds no grant on it, or a base model behind it is out of reach, while the message the caller sees stays as vague as before. [Commit](https://github.com/open-webui/open-webui/commit/f5fcf4c89fb27ed39825875d573446fa84aa2a5b) + ## [0.11.3] - 2026-08-31 ### Added