
Open WebUI v0.9.3 (and v0.9.4) is out — massive performance wins, message editing finally fixed
Open WebUI v0.9.3 (and v0.9.4 hotfix) is out — massive performance wins, message editing finally fixed
The big stuff
🚀 Massive performance improvements to loading
- Chat history maps now load from normalized message records, slashing overhead on long conversations.
- Prompt list and prompt-tag pages load much faster for non-admin users — accessible prompts are now filtered in a single DB query instead of doing per-prompt permission checks. If you've got a large prompt library, this one is going to feel huge.
- Per-user memory lookups and deletions are also way faster at scale (memory user filter is now indexed).
✏️ Assistant response editing and continuation — finally fixed You can now edit and restructure assistant output items from a dedicated editor view and continue generating from the edited state with full prior context preserved. This includes reasoning blocks, tool calls, and text content — meaning you can edit the model's reasoning content too (depending on provider). Long overdue and a game-changer for iterating on outputs.
Other notable additions
- 🔄 Replaceable tool embed updates — Pipes and Tools can now overwrite previously emitted rich-UI embeds in-place via a
replaceflag. Live dashboards and progress panels that update without stacking duplicates are now a thing. - 🔇 Voice Mode mute control — Dedicated mute toggle with an "M" shortcut and auto-unmute after assistant playback. No more accidental interruptions from background noise.
- 🗑️ Delete from conversation menu — Delete the current conversation directly from the chat menu without searching the full chat list.
- ⬆️ Scroll to Top shortcut — Long conversations get a Scroll to Top action in the chat menu.
- 🧭 Unified model unload controls — Admins can unload running models from the model selector (Ollama and llama.cpp show loaded-state indicators).
- 👥
{{USER_GROUPS}}prompt variable — System and template prompts now expand to the user's group memberships, so prompts can adapt to role/access context automatically. - 🔎 Brave LLM Context as a new web search provider with configurable context token budget.
- 🧮 LaTeX copy shortcut — Click rendered LaTeX to copy the raw formula.
- 🎙️ STT file extension controls — Admins can configure which audio extensions are accepted for speech-to-text uploads.
- 🛂 MCP OAuth server URL setting — Static OAuth tool server setups can define a separate OAuth server URL for cases where auth endpoints are hosted separately.
- 🔐 Public chat sharing permission control — Admins can control whether users are allowed to create publicly shareable chats.
- 🚀 Smarter function dependency installs — Already-preinstalled deps are now skipped, improving startup speed.
Notable fixes worth calling out
- Chat input no longer gets stuck by unrelated background tasks after a response completes.
- Regeneration loading locks that previously stuck chats in permanent loading are now repaired.
- Chat settings and chat controls now autosave properly — system prompts and parameters are no longer lost when refreshing or navigating away before sending.
- Knowledge collections selected via the chat input selector now persist after reloads and chat switches.
- Non-blocking STT processing — speech-to-text no longer blocks the server event loop, so other users stay responsive under concurrent load.
- Streaming token analytics are now accurate across Responses API and OpenAI-compatible providers.
- Several security hardening fixes: sanitized spreadsheet HTML previews, blocked untrusted external image URLs, validated webhook avatar URLs.
⚠️ Important upgrade note
This release includes database schema changes. Back up your database before upgrading in production. If you're running multi-worker, multi-server, or load-balanced — all instances must be updated simultaneously. Rolling updates aren't supported and will fail due to schema incompatibility.
Full release notes: https://github.com/open-webui/open-webui/releases