Account creation times are stored in whole seconds. On Postgres, a user created in the same second as the first admin, which is normal when a script sets up an instance, could be picked as the primary admin. Other admins could then demote or delete the real first admin, nobody could edit, lock or delete that user, and pending users were shown that user as the admin contact. An admin account now wins a same-second tie against a regular one.
Picking Settings from the user menu with the keyboard left the focus on the menu item, which disappears as the menu closes. When Settings closed, the focus went back to that removed item, so it was lost and the next Tab started over at the top of the page. The menu now gives the focus back to the user menu button when it closes after an item is picked, the same as when it is closed with Escape, so closing Settings returns there.
Fixes#32017
When an OpenAI-compatible speech-to-text engine or Deepgram rejected a recording, the error shown after dictating only gave the HTTP status, such as "429 Too Many Requests", and the engine's own reason, such as "Quota exceeded" or "Invalid credentials.", was lost. The error now shows that reason. When the engine sends no reason, the HTTP status is shown as before.
Fixes#32009
With Datalab Marker as the content extraction engine, every file upload it processed failed on pip and source installs with `Permission denied: '/app'`, because Open WebUI saved a copy of the extracted text under `/app`, a folder that only exists inside the Docker image. That copy now goes to the uploads folder inside `DATA_DIR`, so extraction works on any install. Docker installs with the default data directory keep the same location.
Fixes#32025
Since the recent change that keeps a history of function and tool edits, saving a new function or tool whose Valves (its admin settings, such as an API key) have a required field with no default was refused with "Current Valves are incompatible with this code: ... Field required", because a new one has no Valves set yet. Editing the code to add a new required field failed the same way. Missing required fields no longer block saving, so the function or tool can be installed first and its Valves filled in afterwards, as before that change. Saved Valves that have the wrong type for the new code are still rejected.
Fixes#32145
Pasting an image into a note a moment after another change to that note was saved could lose the image. The note page got the result of the earlier save back after the paste and took over its older, empty list of attached files, so the image was saved without its file. After a reload it showed as a grey placeholder and was missing from the PDF export. The note page now keeps its own attached files while it still has a change waiting to be saved.
Fixes#32123
Stopping a reply did stop it, but the page kept showing it as still generating: the Stop button stayed and the next message was never answered. The same happened when sending a queued message right away with Send now. After the reply was marked finished, the page put back an older copy of it that was still marked as generating. Stopped replies now show as finished again, the Send button returns and the next message gets an answer.
Fixes#32081
In a new chat the reply sometimes stayed blank and looked like it was still generating, with the loading animation and the Stop button, even though the answer was complete on the server. Reloading the page showed it. It happened when the chat's new title arrived while the reply was still coming in: refreshing the chat list with the new title replaced the finished answer with a blank one. A title or tag update no longer overwrites the reply, so the finished answer shows as soon as it is done.
Fixes#32091
With Kagi as the web search engine, any entry in the Domain Filter List made every search fail with "'SearchResult' object has no attribute 'get'", so the model got no search results. The Domain Filter List now works with Kagi the same way it does with the other search engines, and the remaining results reach the model.
Fixes#32004
Screen readers announced the Response Splitting dropdown in Admin Settings > Audio without a name. It is now announced as "Select how to split message text for TTS requests". Nothing changes visually.
Fixes#32010
With Perplexity Search as the web search engine, the Domain Filter List had no effect: blocked domains still showed up in the results the model got, and an allowlist let every result through. The filter now applies to Perplexity Search results as it does for the other search engines.
Fixes#32005
When a skill was saved several times within one second, its version history in the skill editor listed those versions in a shuffled order. This happens when a model edits a skill several times in one reply, or when an import replaces a skill right after it was created. Each new version now gets a save time at least one second later than the one before it, so the history keeps the order the versions were saved in. During such a burst, the shown save time runs ahead by about one second per extra save.
Fixes#32134
Exporting feedback as CSV from Admin Settings > Evaluations > Feedback left the chat_id column empty on every row. Each row now holds the ID of the chat the feedback was given in, the same ID that appears in the chat's URL.
Fixes#32021
Turning on Browser Notifications in a browser that blocks them showed an error, but the switch stayed on even though nothing was saved. The switch now turns back off when the browser denies permission.
Fixes#32024
When an admin changed a group's permissions, members who had the app open saw Workspace show up or vanish in their user menu right away, but the sidebar kept its Workspace entry as it was until they reloaded the page. The Notes, Calendar and Automations entries in the sidebar had the same problem. The sidebar now follows the change right away, like the user menu.
Fixes#32020
Pressing an action button whose function rewrites the reply, as the action docs describe, stored the new text with the chat but the chat kept showing the old reply, right away and after a reload. The reply now shows the new text, and its thinking and tool call sections stay visible. The action gets the reply as one text, so when the reply had text both before and after a tool call, all of it is replaced by the new text, shown after the tool calls.
Fixes#32023
Searching Workspace > Skills only matched a skill's original name, description and id, so typing the German name given to a skill in its editor found nothing, even with the interface in German. The search now also matches the names and descriptions translated in the skill editor, in any language, so both the translated and the original name find the skill, as the Translations page in the docs says.
Fixes#32018
When a chat is named after its first message (title generation off, or the automatic title is blank), a message that starts with a skill picked by typing $ in the message box gave the chat a title like `<$tides-1234|Tides> when is high tide`. The title now shows each picked skill by its name, so the sidebar reads "Tides when is high tide".
Fixes#32019
On a phone, swiping right on a channel message to reply to it also opened the sidebar, which slid over the channel and covered the message. A swipe on a message now only starts the reply. On messages that cannot be replied to, for example in a read-only channel, the same swipe still opens the sidebar.
Fixes#32016
On a narrow phone screen, the Download choices in the chat header menu, in a chat's menu in the sidebar and in the note menu opened to the left of the menu, past the edge of the screen, with their labels cut off. When there is no room for them on either side of the menu, they now open over the menu, fully on screen. Where there is room beside the menu, they open as before.
Fixes#32015
The create menu's content is moved to document.body by Dropdown, which
puts its Create link outside the element where SvelteKit handles link
clicks, so the browser followed the link as a full page load. A plain
click now prevents the default and navigates with goto, the same way the
Create button and the user menu links do; modified clicks still open the
link in a new tab or window.
Select always placed its list on the requested side, so a list opened
near the bottom of the window (such as the model selector's filter
list) ran off the screen. It now flips to the other side when the
requested side is too short and the other side has more room, the same
check the shared Dropdown already uses.
Create and publish Docker images with specific build args / build (map[arch:linux/arm64 runner:ubuntu-24.04-arm], map[build_args:USE_OLLAMA=true free_disk:false name:ollama suffix:-ollama]) (push) Has been cancelled
Create and publish Docker images with specific build args / build (map[arch:linux/arm64 runner:ubuntu-24.04-arm], map[build_args:USE_SLIM=true free_disk:false name:slim suffix:-slim]) (push) Has been cancelled
Create and publish Docker images with specific build args / build (map[arch:linux/amd64 runner:ubuntu-latest], map[build_args: free_disk:false name:main suffix:]) (push) Has been cancelled
Create and publish Docker images with specific build args / build (map[arch:linux/amd64 runner:ubuntu-latest], map[build_args:USE_CUDA=true
USE_CUDA_VER=cu126
free_disk:true name:cuda126 suffix:-cuda126]) (push) Has been cancelled
Create and publish Docker images with specific build args / build (map[arch:linux/amd64 runner:ubuntu-latest], map[build_args:USE_CUDA=true free_disk:true name:cuda suffix:-cuda]) (push) Has been cancelled
Create and publish Docker images with specific build args / build (map[arch:linux/amd64 runner:ubuntu-latest], map[build_args:USE_OLLAMA=true free_disk:false name:ollama suffix:-ollama]) (push) Has been cancelled
Create and publish Docker images with specific build args / build (map[arch:linux/amd64 runner:ubuntu-latest], map[build_args:USE_SLIM=true free_disk:false name:slim suffix:-slim]) (push) Has been cancelled
Create and publish Docker images with specific build args / build (map[arch:linux/arm64 runner:ubuntu-24.04-arm], map[build_args: free_disk:false name:main suffix:]) (push) Has been cancelled
Create and publish Docker images with specific build args / build (map[arch:linux/arm64 runner:ubuntu-24.04-arm], map[build_args:USE_CUDA=true
USE_CUDA_VER=cu126
free_disk:true name:cuda126 suffix:-cuda126]) (push) Has been cancelled
Create and publish Docker images with specific build args / build (map[arch:linux/arm64 runner:ubuntu-24.04-arm], map[build_args:USE_CUDA=true free_disk:true name:cuda suffix:-cuda]) (push) Has been cancelled