open-webui v0.9.0 版本更新介绍
发布日期: 2026-04-21
版本号: v0.9.0
此次更新带来了多项重要功能和改进。首先需注意,本次版本包含数据库架构变更,强烈建议在生产环境升级前备份数据库,且多实例部署必须同步更新。新功能方面,推出了适用于Mac、Windows和Linux的官方桌面应用,支持本地运行或连接远程实例,并提供全局浮动聊天栏、离线支持等特性。新增了定时聊天自动化功能,用户可设置AI定期执行任务,如每日摘要或定期报告,并可在聊天中直接管理自动化流程。日历工作空间现已集成,支持事件管理、重复计划和提醒功能,同时增强了自动化调度限制和任务管理工具。此外,还改进了Azure和Ollama的响应支持、文件附件管理、模型终端选择、文本转语音和语音识别优化,以及Emoji支持、移动端滑动回复、屏幕常亮语音录制等交互体验。性能方面,大幅优化了异步处理、文件存储、流式响应、聊天历史记忆管理和多项查询效率,显著提升了响应速度和资源利用率。安全方面,加强了OAuth 2.1支持、SSL处理、权限控制、数据清理和跨域策略等多项防护措施。修复了包括模型描述XSS防护、内存搜索过滤、共享聊天分析一致性、导航安全性、错误处理、权限执行及多种界面和功能问题,全面提升了稳定性和用户体验。总体而言,本次更新增强了功能多样性、系统性能与安全性,同时保持了向后兼容性。
更新内容 (中文)
[!CAUTION] ⚠️ 数据库迁移: 此版本包含数据库架构变更;我们强烈建议在生产环境升级前备份数据库及所有关联数据。如果您运行的是多工作进程、多服务器或负载均衡部署,所有实例必须同时更新,不支持滚动更新,否则会因架构不兼容导致应用程序故障。
新增功能
- 🖥️ 官方Open WebUI桌面应用。 Open WebUI现已作为原生桌面应用程序提供,适用于Mac、Windows和Linux。无需Docker、无需终端、无需设置。可在本地运行Open WebUI而无需任何服务器设置,或连接到您现有的远程Open WebUI实例。从侧边栏可即时切换多个服务器。配备系统级浮动聊天栏(macOS上为Shift+Cmd+I,Windows/Linux上为Shift+Ctrl+I)、系统级按键对话、首次启动后的离线支持、自动更新和零遥测。#8262, 桌面应用
- 🤖 计划聊天自动化。 您现在可以安排AI按定期任务自动运行:每日摘要、定期报告以及其他任何您需要记住去请求的事项。从自动化页面或直接在聊天中创建和管理自动化,拥有完整的运行历史记录和手动触发控制。#23303, 提交, 提交, 提交, 提交
- 🧰 聊天中的自动化工具。 当启用自动化访问权限时,内置聊天工具现在可以直接在对话中创建、更新、列出、暂停和删除计划的自动化。提交
- ⏱️ 自动化调度限制。 管理员现在可以设置 “AUTOMATION_MAX_COUNT” 和 “AUTOMATION_MIN_INTERVAL”,以限制每个非管理员用户可以创建多少个自动化,并防止过于频繁的调度导致系统过载。提交
- 📋 任务管理工具。 AI模型现在可以在聊天对话中创建、更新和跟踪任务,将复杂请求分解为可管理的步骤,并提供实时状态更新。提交
- 🗓️ 日历工作区和事件管理。 Open WebUI现在拥有完整的日历工作区。创建和管理事件,设置定期计划,通过应用内通知或浏览器通知获取提醒,并将计划的自动化与日历一起查看。#23880
- 🔔 日历提醒和警报。 日历事件现在支持从无警报到开始前一小时的提醒选项,即将到来的警报通过应用内通知、浏览器通知和可选的Webhook发送,同时避免重复发送。提交
- ⚙️ 调度器提醒配置。 管理员现在可以使用 “SCHEDULER_POLL_INTERVAL” 和 “CALENDAR_ALERT_LOOKAHEAD_MINUTES” 配置日历提醒处理,而现有的 “AUTOMATION_POLL_INTERVAL” 设置继续作为旧版回退方案工作。提交
- ☁️ Azure响应支持。 Azure OpenAI连接现在支持较新的 “/openai/v1” 格式,使聊天、响应和代理调用能够正确处理该端点样式。#23484
- 🤖 Ollama响应支持。 Ollama代理现在支持响应API,允许客户端直接通过Open WebUI使用 “/v1/responses” 与Ollama托管的模型交互。#23483
- 🧩 响应工具输出渲染。 响应API流程中的内置工具输出现在渲染更加一致,使下游聊天输出更易于解释。提交, #23482
- 🔎 响应引用可见性。 响应API流程现在更一致地发出引用源,使链接的参考文献更容易在聊天输出中保留和显示。提交, #23774
- 📎 附加先前上传的文件。 聊天输入菜单现在包含一个“文件”选项卡,用于浏览和附加先前上传的文件,无需重新上传您已经共享的文件。提交
- 🧷 默认模型终端选择。 工作区模型编辑器现在可以预选一个“打开终端”连接,因此新聊天会自动启动并准备好使用模型配置的终端。提交, #23605
- 🎙️ Mistral TTS支持。 Mistral现在可以用作文本转语音提供商,管理员可设置API密钥、基础URL、语音和模型选择。提交
- 🎧 STT预处理旁路选项。 管理员现在可以启用 “AUDIO_STT_SKIP_PREPROCESSING”,将音频文件直接发送到语音转文本后端,在受限部署中,大型上传时可减少内存和CPU消耗,从而提高转录性能和稳定性。#23661
- 🗑️ 管理员模型删除。 管理员现在可以直接从模型选择器菜单中删除Ollama模型,从而更轻松地清理未使用或不需要的模型。提交
- 🔌 用于本地和持久化聊天的后端出口过滤器。 管道和函数出口过滤器现在在后端完成流程中可靠地运行,适用于持久化聊天和临时本地聊天。#3237, 提交
- 🎨 表情符号短代码支持。 在聊天输入中输入冒号现在会打开表情符号建议菜单,使得使用 :wave: 等短代码插入表情符号变得更加容易。提交
- 📌 最近使用的表情符号。 表情符号选择器现在将您最近使用的表情符号显示在顶部,使您能更快找到常用表情符号。提交
- 👆 移动端滑动回复。 向右滑动消息现在会触发回复,使得在触控设备上通过自然手势进行回复变得更加容易。提交
- 📱 屏幕常亮语音录制。 语音录制现在在活跃口述期间保持屏幕常亮,并在可见性变化后安全地重新获取唤醒锁,有助于防止长时间转录在移动设备上被中断。#23145
- 🔔 未读聊天指示器。 侧边栏聊天现在显示未读状态,并在打开时标记为已读,使您更容易发现有新活动的对话。提交
- 🔌 WebSocket重连状态反馈。 Open WebUI现在在实时连接断开时发出警告,并在重连时确认,同时避免在首次页面加载时显示重连消息。提交
- 📍 侧边栏固定笔记。 笔记现在可以固定到侧边栏以便快速访问,您也可以直接从固定笔记部分创建新笔记。提交, 提交
- 🗂️ 模型选择器焦点。 模型选择器现在仅在其打开时重置搜索,使弹出窗口感觉更可预测,同时仍然自动聚焦搜索字段。提交
- 🗂️ 模型选择器布局。 模型选择器现在作为自定义弹出窗口表现得更可预测,完成.playground使用更简单的模型选择器以便于选择。提交
- 🎚️ 活动过滤器阀门快捷方式。 活动过滤器徽章现在直接在聊天输入区域中显示阀门配置,因此在对话期间可以更快地调整过滤器。提交, #23811, #23813
- 🎨 主题更新。 其他窗口现在可以直接更新应用程序主题,当主题更改从外部触发时保持界面同步。提交
- 🚀 异步性能和响应性改进。 核心后端数据库和请求路径现在在整个应用程序中异步运行,在并发负载下大幅提高了响应性和性能,并减少了繁忙活动期间的请求阻塞。提交, 提交
- ⚡ 抽屉性能和内存优化。 通过在拆卸时移除过时的键盘监听器,抽屉交互现在即使在长时间会话中也能保持更流畅,这减少了内存增长并避免了累积的事件处理开销。#23724
- 🚀 聊天历史记录内存裁剪。 长对话现在无论包含多少消息都能保持响应。屏幕外的消息会自动卸载,并在您滚动时重新加载,从而在桌面和移动设备上保持低内存使用量和平滑的UI。#23067, 提交, 提交
- 🧵 异步文件和知识处理性能。 文件处理、知识重新索引和频道消息辅助路径现在始终等待异步操作,防止跳过处理步骤并提高索引和工具响应的可靠性及性能。提交
- 🚀 持久化聊天载荷效率。 持久化聊天现在使用服务器端历史记录加载,而不是重复发送完整消息载荷,从而提高了多模态性能并减少了跨设备陈旧历史覆盖风险。#19064, 提交, 提交
- 🧵 非阻塞文件存储操作。 上传、读取、转录和删除文件现在将存储I/O卸载到后台线程,使应用程序在文件密集型工作流期间保持响应。提交
- 🏎️ 流式响应性能。 流式响应现在在单一步骤中处理每个输出行,而不是两个单独的yield,减少了异步开销并提高了长时间运行生成期间的响应性。#23266
- 🔎 更快的提及解析。 包含类似HTML内容、文件路径或工具输出的聊天文本现在能更高效地解析提及,这有助于在包含许多 ‘<’ 字符的消息中保持键入和渲染的响应性。#23551
- 🧪 代码块渲染性能。 代码块现在重用共享的HTML反转义助手,减少了在聊天中显示编码输出时的额外浏览器工作。#23553
- 🚀 内联代码渲染性能。 流式响应中的内联代码令牌现在使用轻量级CSS动画淡入,使聊天输出感觉更平滑,同时减少了快速令牌更新期间的界面开销。#23258
- 🎞️ 流式文本令牌动画性能。 流式文本令牌现在使用轻量级CSS介绍动画,使输出感觉更平滑,同时减少了过渡开销并防止令牌在生成完成时淡出。#23257
- 🎯 模板令牌扫描优化。 当没有模板标记时,流式响应现在会跳过不必要的令牌替换处理,减少了每次更新的开销,并在快速生成期间保持聊天输出更平滑。#23161
- 🔬 中文文本处理保护性能。 不包含中文字符的流式响应现在会跳过不必要的中文格式处理检查,减少了每次更新的开销,并在快速生成期间保持输出更平滑。#23162
- 🧠 HTML实体解码性能。 流式文本解码现在避免了为HTML实体处理而重复进行文档解析,减少了内存抖动并提高了令牌密集型聊天输出中的响应性。#23165
- 🏷️ 聊天标题更新性能。 聊天标题更新现在在单个数据库操作中运行,而不是多次往返,从而提高了响应性并减少了标题生成或重命名时的开销。#23214
- 📂 更快的聊天列表查询性能。 聊天和文件夹列表现在通过仅获取侧边栏视图所需的字段来更高效地加载,从而提高了浏览大型对话历史记录时的响应性。提交
- 📈 侧边栏内存优化。 侧边栏聊天项目现在使用共享的拖动预览资源和更安全的监听器清理,减少了内存增长,并在长时间会话中使大型聊天列表更响应。#23209
- 🧠 图像查看器内存优化。 查看图像和SVG现在使用的内存显著减少且速度更快,即使在长时间会话中浏览大量媒体文件,也能保持应用程序快速响应。#23236
- 📡 优化的用户活动跟踪性能。 用户活动更新现在使用单个数据库查询而不是多个操作,从而提高了所有经过身份验证的请求的响应时间。#23215
- 👥 更快的频道线程作者加载。 频道线程响应现在通过单个批处理查询加载作者详细信息,减少了数据库开销并提高了具有多个参与者的线程中的响应性。#23795
- 💨 优化的共享聊天删除。 通过仅加载必要数据,按用户删除共享聊天现在更快且内存效率更高。#23216
- 🗃️ 更快的聊天标签加载。 聊天标签查找现在仅加载所需的元数据,而不是完整的聊天载荷,从而提高了具有大型历史记录的聊天的响应性。#23798
- 📎 更快的聊天文件去重。 将文件附加到聊天消息现在能更高效地检查重复项,从而减少了处理较大文件列表时的开销。#23800
- 📈 更快的消息差异检查。 聊天消息和状态更新现在在流式传输期间能更高效地比较内容,使活动对话感觉更平滑、更响应。#23370
- ⚖️ 更快的深度相等检查。 聊天消息更新、模型选择、笔记编辑、代码块刷新和富文本状态比较现在使用深度相等检查,减少了不必要的UI工作并提高了活动会话中的响应性。#23845
- 🏃 更快的访问权限更新。 更新知识项的访问授权现在以更少的后端开销完成,使权限更改应用得更快。#23799
- 🧹 Mermaid渲染清理性能。 Mermaid图表现在总是在失败后清理临时渲染元素,减少了DOM积累并使重复渲染随时间更稳定。#23727
- 🖼️ 模型图像查找效率。 模型配置文件图像请求现在重用当前请求数据库会话,减少了每次请求的开销并提高了响应效率。#23796
- 👤 用户端点查询减少。 基于会话的用户设置和状态端点现在避免了冗余的用户重新获取,在保持行为的同时减少了不必要的数据库负载。#23794
- 🚦 更快的启动性能。 Open WebUI现在仅在macOS上检查Torch MPS支持,避免在其他平台上进行不必要的启动工作。#23438
- 🛡️ Redis超时一致性。 Redis连接现在在标准和集群设置中都遵守 “REDIS_SOCKET_CONNECT_TIMEOUT” 设置,有助于在Redis不可达时工作进程更快失败。#23572
- 🧰 AIOHTTP池控制。 管理员现在可以使用 “AIOHTTP_POOL_CONNECTIONS”、“AIOHTTP_POOL_CONNECTIONS_PER_HOST” 和 “AIOHTTP_POOL_DNS_TTL” 来调整共享的出站HTTP连接行为,以便在高并发下获得更好的控制。提交
- ⏱️ MCP工具服务器超时配置。 管理员现在可以通过 AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER 环境变量配置MCP工具服务器连接的请求超时。提交
- 🎫 静态OAuth工具认证。 工具服务器认证现在对 “oauth_2.1” 和 “oauth_2.1_static” 连接类型都能可靠工作,因此在聊天请求期间可以正确检测和转发基于OAuth的工具访问。提交
- 🗄️ 可配置的存储本地缓存。 管理员现在可以使用 “STORAGE_LOCAL_CACHE” 设置禁用云支持上传的持久性本地缓存,通过在处理后清理临时上传副本来减少本地磁盘使用量。提交
- 🚪 反向通道注销。 OpenID Connect提供商现在可以通过 “ENABLE_OAUTH_BACKCHANNEL_LOGOUT” 设置触发集中注销,帮助管理员更可靠地在连接的设备上使用户会话失效。提交
- 🛡️ 扩展的安头部控制。 管理员现在可以配置额外的浏览器安全标头,包括 “CONTENT_SECURITY_POLICY_REPORT_ONLY”、“CROSS_ORIGIN_EMBEDDER_POLICY”、“CROSS_ORIGIN_OPENER_POLICY” 和 “CROSS_ORIGIN_RESOURCE_POLICY”,以实现更严格、更灵活的部署加固。提交
- 🖼️ 图像MIME回退选项。 管理员现在可以启用 “ENABLE_IMAGE_CONTENT_TYPE_EXTENSION_FALLBACK”,以便在MIME元数据缺失时,图像到base64转换仍可通过文件扩展名检测常见图像类型,从而提高最小容器镜像和旧文件记录的兼容性。提交
- 🛡️ 公共共享权限。 公共频道、模型、笔记、提示和工具现在更一致地遵守允许的访问授权,帮助管理员更安全地控制谁可以共享内容。提交
- 🆔 通过ID查找技能。 技能说明现在包含每个技能的ID,技能查看器现在可以通过不区分大小写的方式按ID查找技能,因此附加的技能在聊天中识别更可靠。提交
- 🏷️ 源上下文元数据。 检索源上下文现在包含每个源的资源类型和资源ID元数据,帮助下游模型工作流在处理过程中保留更丰富的源标识。提交
- 🗂️ 反馈过滤。 管理员现在可以按模型过滤反馈历史记录,并仅导出所需的反馈。提交
- 📤 CSV反馈导出。 反馈历史记录现在可以导出为JSON或CSV,使得在电子表格工具中分析反馈变得更加容易。提交
- 📝 可选的GET审计日志记录。 当需要更完整的请求可见性时,管理员现在可以通过 “ENABLE_AUDIT_GET_REQUESTS” 设置启用对GET请求的审计。提交
- 🕒 模型访问更新。 更改模型的访问授权现在会更新其时间戳,因此最近修改的模型更容易找到并正确排序。提交
- 💬 排队消息处理。 排队的聊天消息现在可以更可靠地发送,而不会过早推进队列,从而保持后续提示按预期顺序进行。提交
- 🔒 渲染内容安全。 占位符描述和待处理账户通知现在以更安全的清理顺序渲染Markdown,减少了在这些视图中出现不安全HTML的风险。提交
- 🛡️ 更安全的占位符渲染。 聊天占位符描述和待处理账户通知现在更一致地清理渲染的Markdown,减少了这些视图中显示不安全内容的风险。提交
- 🧮 使用分析准确性。 令牌使用量现在在聊天消息保存之前进行了规范化,因此模型和用户使用情况报告在OpenAI兼容提供商之间保持准确。提交
- 🧩 更丰富的Anthropic工具结果。 兼容Anthropic的工具调用现在保留了更多工具结果内容类型,包括图像和结构化搜索或文档输出,因此模型可以使用更完整的工具上下文,而不是仅接收纯文本片段。#23188, 提交
- 🖼️ ComfyUI请求可靠性。 ComfyUI图像生成和编辑现在使用具有连贯SSL处理的共享异步连接,使图像上传和工作流运行在并发负载下更可靠。提交
- 🎛️ 重排序批量大小控制。 管理员现在可以在文档设置中设置 “RAG_RERANKING_BATCH_SIZE” 来控制重排序工作负载大小,以帮助平衡部署的检索速度和资源使用。提交
- 🔗 共享聊天访问控制。 您现在可以通过授予特定用户或组访问权限来控制谁可以访问共享聊天,而不是与任何拥有链接的人共享。
- 🔄 一般改进。 在应用程序中实施了多项改进以增强性能、稳定性和安全性。
- 🌐 翻译更新。 增强并扩展了爱尔兰语、加泰罗尼亚语、德语、简体中文、印地语和葡萄牙语(巴西)的翻译。
修复问题
- 🛡️ 模型描述XSS保护。 聊天占位符中显示的模型描述现在在渲染前进行了清理,防止恶意链接执行脚本,有助于保护用户会话免遭接管。#23621
- 🧠 内存搜索过滤。 内存搜索现在可以正确按查询文本过滤,而不是返回不相关的结果。提交, #23826
- 📊 共享聊天分析一致性。 使用情况和消息计数分析现在在常规和共享聊天中一致地计算助手活动,提高了模型、用户、聊天和基于时间的报告视图的准确性。提交
- 🧭 更安全的进行中聊天导航。 发送消息不再会在响应完成前切换对话时覆盖您的活动聊天或导致重复的后台通知。提交
- 🗣️ 管道错误详情可见性。 管道入口和出口故障现在更可靠地在聊天错误消息中保留和显示提供商错误详情,使故障排除请求失败变得清晰得多。提交
- 📨 共享聊天事件路由。 消息更新和发送事件现在针对聊天所有者的事件频道,因此共享聊天接收正确的实时更新,而不是将事件路由给操作用户。提交
- 🔐 一致的出站SSL处理。 用于工具、函数、终端、webhook、检索加载器、音频提供商发现和OpenAI兼容嵌入调用的外部请求现在一致地应用配置的SSL客户端设置,提高了需要自定义证书或验证行为的部署的可靠性。提交, 提交
- 🖼️ 图像SSL设置支持。 图像生成现在遵守配置的SSL会话设置,防止在严格证书环境中出现可避免的连接故障。提交, #23777
- 🗂️ 文件夹所有权分配加固。 文件夹创建和更新输入现在会拒绝意外的额外字段,防止客户端通过批量分配载荷覆盖受保护的值(如所有权)。#23648
- 🔐 知识文件删除所有权检查。 拥有知识库写入权限的协作者现在无法永久删除他们不拥有的文件,防止跨其他链接聊天和知识库的意外文件删除。提交, #23636
- 🗑️ 知识删除可靠性。 现在可以通过ID可靠地删除知识库而不会出现意外失败。提交, #23776, #23814
- 🔐 OAuth 2.1 PKCE强制实施。 OAuth 2.1提供商现在默认使用S256 PKCE,即使发现元数据省略了支持的质询方法,从而防止与默认需要PKCE的提供商登录失败。#23667, 提交
- 🔐 静态OAuth范围处理。 静态OAuth凭证流现在优先考虑管理员定义的范围,并更可靠地处理OAuth 2.1静态流行为。提交, #23668, #23696, #23783
- 🔐 静态OAuth工具注册可靠性。 静态OAuth工具服务器注册现在可以更可靠地解析和使用保存的管理员凭证,防止在提供有效客户端凭证时出现注册失败。#23670, 提交, 提交
- ⏳ OAuth令牌过期回退。 OAuth会话现在即使在提供商省略 “expires_in” 或 “expires_at” 时也总是存储安全的过期值,因此令牌刷新检查继续工作,工具调用稍后因意外授权错误而失败的可能性降低。#23669, 提交
- 🔑 Anthropic x-api-key模型访问。 兼容Anthropic的客户端现在可以在所有相关API路由中使用 “x-api-key” 标头进行身份验证,因此诸如GET “/api/v1/models” 之类的模型列表请求不再因未授权错误而失败。#23319, 提交
- 🔑 SSO密码选项可见性。 当密码更改访问被禁用时,账户设置现在隐藏密码更改控件,避免了以SSO为重点的设置出现误导性的密码选项。#15292, 提交
- 🔑 打开终端MCP身份验证。 打开终端MCP工具调用现在在调用内部路由时包含配置的API密钥,防止命令如文件读取和命令执行时出现未授权错误。#106
- 🧯 提供商错误冻结恢复。 基于任务的聊天请求现在通过正常的故障处理显示提供商HTTP错误,因此内容过滤器和其他上游4xx响应不再使聊天卡在永久加载状态。#23663, 提交
- 🔄 即时出口过滤器更新。 由出口过滤器修改的助手消息现在在流式传输完成后立即正确显示,无需页面刷新。#23829
- 🌊 中间件取消可靠性。 长时间运行的请求现在通过防止中间件级取消中断进行中的数据库和嵌入工作来更可靠地完成,减少了当连接提前关闭时意外故障和嘈杂的错误日志。#23709
- 🚦 异步向量搜索响应性。 文件处理、内存更新和知识检索在向量数据库操作期间不再阻塞服务器事件循环,因此其他聊天和请求在索引或搜索运行时保持响应。#23706
- 🗒️ 笔记聊天llama.cpp兼容性。 笔记AI聊天不再发送可能与启用了推理的llama.cpp响应冲突的空助手预填充消息,防止笔记对话中出现即时400错误。提交, #23703
- 🧩 Ollama思考字段保留。 由过滤器修改的消息现在在发送到模型时保留Ollama “thinking” 字段,因此推理感知工作流和基于自定义过滤器的透传设置可靠工作。提交, #22508
- 🧾 推理内容保留。 助手工具调用消息现在跨轮次保留推理内容,提高了推理密集型模型工作流的可靠性。提交, #23175, #23742
- 🧭 新聊天的后台任务范围。 聊天标题和自动标签生成现在仅在新对话的第一条消息上运行,并且仅在多模型响应中运行一次,防止在后续流程中出现重复或错误触发的后台任务。提交
- 📚 频道文档上下文保留。 频道对话现在保留并加载正确的存储消息历史记录,因此模型响应可以更可靠地使用上传和检索的文档上下文。#23686, 提交, 提交
- ⏳ 中断响应恢复。 助手占位符消息现在以不完整状态开始,并在中断的生成后更安全地恢复,防止刷新或丢弃请求后出现静默的空回复。#23176, 提交, 提交
- 🧰 大型工具结果渲染。 工具调用详情现在在聊天中可靠地显示大型结果载荷,而不是间歇性地为空白的较大工具响应显示空输出。#18743, 提交
- 🧼 空字节文档清理。 PDF和其他文档提取现在在pgvector写入之前清理空字节和无效代理字符,防止PostgreSQL上传失败并允许受影响的文件成功索引。#22992, 提交
- 📝 知识文本编辑器稳定性。 知识“添加文本内容”对话框现在使用纯文本编辑器,避免了当前富文本编辑器问题,并保持起草行为与现有知识编辑流程一致。提交
- 🎤 STT SSL设置一致性。 语音和相关出站媒体请求现在一致地使用共享的异步HTTP会话并遵守配置的SSL验证设置,提高了与自签名部署的兼容性。#23672, 提交
- 🎙️ Mistral语音输入格式。 Mistral语音转文本请求现在使用正确的聊天补全音频输入格式以提高兼容性。提交, #23822
- 🖼️ 可选图像大小参数。 当未配置大小时,图像生成不再发送 “size” 字段,提高了拒绝不支持大小参数的提供商的兼容性。#23611, 提交
- 🔎 FireCrawl超时可靠性。 FireCrawl网页加载现在对单URL获取使用直接抓取请求和改进的超时处理,减少了本地FireCrawl设置的空结果和过早超时失败。#23411, 提交
- 🖱️ 自定义操作图标拖放防止。 聊天响应中自定义用户添加的操作图标不再被意外拖动,因此点击和悬停交互与内置操作图标行为一致。#23412
- 🖼️ 图像URL转换可靠性。 将图像URL发送给AI模型不再因 “cannot pickle ‘coroutine’ object” 错误而失败,因此图像输入在请求处理期间现在可以可靠地转换为base64。#23685
- 📂 频道输入菜单关闭。 在工作区频道中,选择“上传文件”或“捕获”后,消息输入下拉菜单现在会立即关闭,匹配正常聊天输入行为,并防止菜单不必要地保持打开状态。#23684
- 📋 剪贴板复制滚动稳定性。 使用备用剪贴板方法复制内容不再在焦点期间触发不必要的页面滚动,使您的当前阅读位置保持稳定。提交
- 🖼️ 配置文件图像URL验证。 配置文件保存现在接受有效的Open WebUI配置文件图像路径、受信任的外部HTTP(S)头像URL和安全的光栅数据图像格式,同时拒绝可能被滥用的不安全URL模式。#23389
- 👤 部分用户配置文件更新。 用户更新API请求现在可以仅修改您提供的字段,因此管理员在更改单个设置(如角色)时不再需要重新提交未更改的姓名、电子邮件和配置文件图像值。#23424, 提交
- 🚨 提供商SSE错误可见性。 带有流式内容类型返回的提供商失败现在作为适当的API错误显示并清晰记录,因此诸如上下文窗口限制之类的问题在聊天生成期间不再静默失败。#23379
- 🧵 排队提示竞争防止。 聊天请求队列现在防止相同聊天的重叠处理,避免了当多个队列处理触发器紧靠在一起触发时出现重复的队列处理。#23181, 提交
- 🛑 取消事件传递可靠性。 取消的聊天处理现在仅在事件发射器可用时安全地发出任务取消和错误事件,而提供商HTTP错误现在也通过任务取消处理路由,因此聊天从阻塞加载状态更可靠地恢复。#23663, 提交, 提交
- 🔑 OIDC密钥轮换恢复。 在签名失败后,OIDC登录现在使用刷新的提供商签名密钥重试令牌授权,因此登录在身份提供商密钥轮换后无需服务重启即可自动恢复。#23582, 提交
- 🌍 非ASCII标签过滤。 提示和模型标签过滤器现在在SQLite和PostgreSQL中更可靠地处理非拉丁标签,因此像西里尔文这样的标签值在工作区列表中返回预期项目。#23381, #23427, 提交
- 🏷️ 提示标签查询准确性。 提示标签过滤现在使用JSON元素感知查询,因此基于标签的查找返回正确的提示。提交, #23386
- 🗃️ SQLite异步池兼容性。 SQLite异步数据库设置不再强制使用显式队列池类,避免了SQLite部署中的池配置冲突。提交
- 🧠 知识嵌入死锁预防。 知识文件处理现在在工作线程中运行阻塞的向量保存工作,同时保持异步状态更新可靠,防止文件处理在长时间的嵌入操作期间停滞。提交, 提交
- 🤖 自动化工作进程异步数据库处理。 自动化认领和运行记录现在一致地使用异步数据库会话,提高了计划自动化的工作人员稳定性。提交
- 🕒 自动化时区调度。 计划的自动化现在使用该用户保存的时区计算每个用户的下次运行时间,防止由服务器时间回退引起的运行漂移。提交
- 🔎 笔记搜索匹配。 笔记搜索现在可以更可靠地处理多词和带连字符的查询,因此从部分短语搜索中更容易找到相关的笔记和片段。提交
- 📐 显示数学渲染。 聊天Markdown现在正确识别并将 “$$…$$” 表达式渲染为显示数学,提高了多行和转义KaTeX内容的可靠性,同时防止格式错误的定界符干扰消息渲染。#23526, 提交
- 🚫 LDAP空密码拒绝。 LDAP登录现在在绑定尝试前拒绝空或仅含空格的密码,防止在宽松的LDAP服务器配置上通过未认证的简单绑定行为授予访问权限。#23633
- 🌐 IPv6 SSRF地址阻止。 URL验证现在对IPv4和IPv6使用标准IP地址检查,防止通过IPv6主机名解析绕过私有、回环、链路本地、保留和映射地址的SSRF。#23453
- 🔒 API密钥端点限制绕过。 无论密钥是通过授权标头、cookie还是 “x-api-key” 发送,API密钥端点限制现在都强制执行,防止通过替代密钥传输路径绕过。#23637
- 🔐 频道共享权限强制执行。 频道创建和更新现在对公共共享强制执行允许的访问授权规则,防止未经授权的群组频道通配符共享。#23638
- 🛑 套接字角色失效。 当用户被降级或删除时,套接字会话现在会自动断开连接,防止过时的管理员权限持续到重新连接。#23642
- 🛂 工具服务器访问检查。 工具列表现在正确等待服务器访问检查,防止用户看到他们无权使用的服务器支持的工具。提交
- 🛑 任务端点访问控制。 全局任务列表和直接任务停止端点现在仅限管理员,而普通用户只能通过范围化的聊天端点停止自己的聊天任务。#23454
- 🧱 Redis缓存键隔离。 工具服务器和终端服务器缓存条目现在包含Redis键前缀,防止共享一个Redis数据库的多个Open WebUI实例覆盖彼此的缓存连接数据。#23649
- 🧠 客户端会话泄漏预防。 出站提供商请求现在使用具有更安全响应清理和关闭处理的共享会话池,防止aiohttp会话积累并减少重并发API流量期间的内存增长。#23540, 提交
- 🧩 工具枚举值处理。 工具模式生成现在安全地将枚举值作为字符串处理,防止当OpenAPI参数包含非字符串枚举条目时失败。#23597, 提交
- 🧷 响应模型访问控制。 兼容OpenAI的响应端点现在强制执行每个模型的权限,防止非管理员用户访问他们不允许使用的模型。#23481
- 🛡️ 集合处理端点权限。 集合处理端点现在对Web和文本处理请求强制执行集合所有权检查。提交, #23634
- 📚 知识查询访问强制执行。 知识库集合查询现在在返回结果之前阻止未经授权的枚举并要求读取权限。提交, #23635, #23452
- 🔍 RAG集合查询权限。 向量搜索集合查询现在在返回检索结果之前强制执行访问检查。提交, #23627
- 🔗 链式基础模型访问检查。 链式基础模型执行现在强制执行每个模型的访问规则以防止未经授权的模型使用。提交, 提交, #23647
- ✍️ 协作文档写入检查。 协作文档更新现在在接受更改之前需要适当的写入权限。提交, 提交, #23624
- 📥 模型导入所有权验证。 模型导入现在强制执行所有权和访问授权检查以防止未经授权的导入。提交, #23628
- 🚫 非活跃成员频道访问。 停用的群组成员现在无法通过直接API调用读取或写入频道内容,因此频道权限现在与活跃成员状态匹配。#23623
- 🎛️ Ollama端点模型权限。 受限模型现在在Ollama show、generate、embed和embeddings端点上受到保护,防止经过身份验证的用户在没有读取权限的情况下使用私有模型。#23631
- 🧭 Azure部署路径验证。 Azure模型名称现在在请求URL构建之前进行验证和安全编码,防止路径遍历尝试到达非预期的Azure端点。#23629
- 👥 私有频道成员列表访问。 标准频道成员列表现在需要适当的读取权限,防止未经授权的用户通过直接API调用枚举私有频道的成员。#23625
- 🌀 工具服务器模式递归安全。 工具服务器OpenAPI转换现在安全地处理循环请求模式引用,防止转换崩溃并确保一个错误的工具服务器规范不会破坏整个工具服务器列表。#23588, 提交
- 🧱 更安全的文件路径处理。 文件上传、转录缓存和模型下载路径现在使用更安全的路径构建助手,以减少路径解析风险并提高跨平台路径安全性。提交
- 🧾 提示保存错误反馈。 保存提示编辑现在如果保存失败会显示清晰的错误通知,因此失败的更新可见而不是在编辑器流程中静默失败。提交
- 🧾 工具调用JSON渲染。 工具调用参数和结构化结果现在渲染为纯格式化JSON块,而不是markdown代码围栏,防止格式怪癖并使工具输出更容易一致阅读。提交
- 👥 首个用户管理员竞争保护。 并发的首次LDAP或OAuth注册现在无法创建多个管理员账户,因此在初始设置期间只有真正的第一个账户被提升。#23626
- 🔒 SCIM令牌检查。 SCIM身份验证现在以更安全的方式比较令牌,有助于防止基于时间的令牌猜测攻击。#23577
- 🔒 更安全的文件访问检查。 HTML文件预览现在将缺失或非管理员所有者视为不可访问,防止意外访问不应显示的文件。提交
- 🖼️ ComfyUI请求挂起。 对ComfyUI的并发图像生成和编辑请求现在可靠地完成,而不是在同一个用户同时启动多个请求时卡住。#23592, #23591
- 🧭 权限感知的内置工具。 内置工具现在一致地尊重用户的内存、网络搜索、图像生成、代码解释器、笔记、频道和自动化功能权限,防止工具暴露给没有访问权限的用户。提交
- 🛑 中断MCP清理稳定性。 中断的MCP工具调用不再留下可能将容器CPU使用率推高至100%的失控清理行为,使实例在取消或断开连接后保持稳定。#23143
- 🚪 OAuth重定向URI可靠性。 OAuth登录重定向现在更一致地使用提供商客户端元数据,防止反向代理后的错误HTTP回调URL,并提高了飞书等提供商的登录可靠性。#23203, #23128
- 🌐 OAuth重定向处理。 OAuth提供商令牌交换现在自动跟随重定向,提高了与重定向令牌端点请求的身份提供商的登录可靠性。#23409, 提交
- ☁️ OneDrive选择器重定向处理。 OneDrive文件选择器身份验证现在使用当前应用程序源作为重定向URI,提高了从部署环境启动选择器时的登录可靠性。#23450, 提交
- 🍪 OAuth会话cookie持久化。 OIDC登录现在正确设置 “oauth_session_id” cookie,因此 “system_oauth” 连接可以按预期将用户OAuth令牌转发给上游提供商。#23251, #23250
- 🔑 OAuth会话cookie处理。 OAuth回调处理现在不会在未定义的cookie过期数据上失败,因此OAuth会话cookie在登录后正确存储。#23207, #23197
- 🔏 Ollama SSL处理。 Ollama模型管理和文件上传现在遵守配置的SSL验证设置,因此在禁用SSL验证时自签名证书可以工作。#23503, 提交
- 🛡️ OAuth头像URL验证。 OAuth登录现在在获取配置文件图片URL之前进行验证,防止无效的图像链接导致登录时错误。#23356
- 🔑 用户邀请令牌过期。 新用户邀请登录现在遵守配置的 “JWT_EXPIRES_IN” 设置,因此注册令牌按预期过期,而不是使用默认生命周期。#23576
- 🚪 频道访问检查。 频道操作现在在检查访问时验证当前用户,提高了跨频道视图和消息操作的权限强制执行。提交
- 📣 频道消息查找。 当发送者账户缺失时,频道消息详细信息和固定现在更可靠地工作,避免这些视图中的失败。提交
- 📌 固定webhook消息处理。 即使webhook配置文件数据缺失,查看固定的webhook消息现在也能可靠工作,防止频道固定消息对话框中的服务器错误和前端崩溃。#23414
- 🛡️ 笔记编辑权限强制执行。 笔记保存现在需要写入权限而不是读取权限,防止未经授权的用户修改笔记,同时保留预期的协作权限。提交
- 🗂️ 归档聊天菜单可见性。 用户菜单中的“已归档聊天”选项现在对所有用户可靠显示,因此非管理员账户可以一致地访问归档的对话。提交
- 💾 错误消息持久化。 流式传输期间发生的LLM错误现在即使在连接断开时也会保存到数据库,因此用户在重新连接时可以看到出了什么问题。#23231
- 🚫 缺失消息完成保护。 聊天完成最终处理现在跳过没有消息标识符的无效请求,防止由罕见的前端并发时序引起的不必要错误通知。#23184
- 🧠 活动消息完成准确性。 在生成期间切换聊天或刷新不再过早标记当前流式传输的助手消息为已完成,因此思考块和操作按钮在正确的时间出现。#23171
- 📞 通话覆盖层可见性。 来电事件现在可靠地打开通话覆盖层和控件,防止通话界面短暂出现然后消失的情况。提交
- 💬 提示提交处理。 聊天消息现在在发送提示时更可靠地保留附加文件,包括排队的消息和共享提示操作。提交
- 🧾 提示变量表单保存。 提示变量表单现在可靠保存,没有运行时错误或无响应的保存操作,因此在应用带有变量的提示模板时,输入值和占位符正常工作。#23225, #23480
- 🛟 任务模型回退安全性。 任务路由现在安全地处理缺失的默认模型条目,防止当先前选择的模型不再可用时出现任务执行失败。#23169
- 📊 使用统计保留。 后续生成不再覆盖现有的令牌使用字段,因此存储的使用统计对于主响应保持准确。#23152
- 📝 编写块解析可靠性。 当存在标头或额外内联文本时, “:::writing” 块现在解析更可靠,防止格式错误的渲染和重复的输出伪影。#23174
- 🧾 代码块换行可靠性。 提交的代码块中的空行现在更可靠地保留,而不是被折叠。提交, #20302, #23451
- ✂️ 引用间距清理。 当模型禁用引用时,引用标记及其剩余间距现在一起被移除,因此标点符号和复制文本保持干净格式。#23141
- 🧰 管道工具访问。 管道函数现在在 工具 中接收内置和MCP工具,因此在启用时可以使用Web搜索和代码执行等工具。#23365
- 📚 批处理文件处理数据库处理。 批量知识文件处理现在一致地使用活动数据库会话,防止在文件所有权检查和更新写入期间因缺少数据库上下文而导致的失败。#23137
- ⚙️ 默认模型参数加载。 “DEFAULT_MODEL_PARAMS” 环境变量现在被正确解析和应用,因此默认生成设置被可靠遵守,而不是在启动时被忽略。#23223
- 🔧 Web搜索设置保存可靠性。 保存Web搜索配置现在可以正常工作而没有服务器错误,因此管理员可以从管理界面成功更新 “WEB_FETCH_MAX_CONTENT_LENGTH” 和相关检索设置。提交, #23127
- 🔍 Web搜索结果计数。 内置的 search_web 工具现在遵守管理员配置的“搜索结果计数”设置,而不是在使用本机功能调用模式时始终返回5个结果。#23488, #23485
- 🖼️ 打开终端文件响应处理。 打开终端工具响应现在在用户端连接中保留二进制内容类型,因此图像和非文本文件读取可以一致工作,而不是被迫转换为纯文本。#23125
- 🖥️ 终端标签大小写。 聊天输入中的终端名称现在完全按存储的方式显示,而不是自动大写,因此域样式服务器名称正确显示。#23518
- 🖼️ Gravatar配置文件照片保存。 Gravatar配置文件图像现在可以从账户设置成功保存,具有更清晰的验证和错误处理,而不是以通用对象错误失败。#23156
- 🪟 详细信息展开偏好。 工具调用详细信息组现在遵守“始终展开详细信息”聊天设置,因此在该偏好启用时它们默认以展开状态打开。#23262, #23255
- 🖱️ 快速侧边栏操作保护。 聊天侧边栏中的归档和删除操作现在在请求进行中时忽略重复点击,防止重复请求和堆叠的错误通知。#23172
- 📲 移动模型选择器定位。 移动模型选择器下拉菜单现在应用受限的视口宽度和左偏移,防止溢出并使模型选择在小屏幕上更容易。#23310
- 🔽 任务列表切换图标。 任务列表折叠按钮现在显示正确的箭头方向,使任务部分一眼就能更轻松地展开和折叠。提交, #23354
- ➕ 附件菜单自动关闭。 聊天附件菜单现在在选择上传操作(如文件上传、相机捕获、网络附加、Google Drive或OneDrive)后立即关闭,防止菜单在屏幕上残留。提交, #23320
- 🧹 每聊天草稿清除。 已发送消息草稿现在使用活动聊天键清除,因此发送的文本在刷新后不会重新出现在输入中。提交, #23296
- ✉️ 上下文感知的输入操作按钮。 当文本或文件在生成期间存在时,输入现在显示发送操作,而对于真正空输入状态则保留停止控件,以避免操作混淆。提交, #23306
- 📉 Pyodide提示缓存稳定性。 Pyodide代码解释器上下文现在附加到系统提示而不是用户消息,从而保持跨轮次的稳定前缀缓存,并减少长本机工具调用聊天中的重复令牌成本。#23269
- 🧪 临时聊天出口过滤。 出口过滤器现在更可靠地处理临时聊天,保留助手输出和使用数据,以便在启用过滤器管道时本地聊天响应保持一致。提交
变更内容
- ⚠️ 数据库迁移: 此版本包含数据库架构变更;我们强烈建议在生产环境升级前备份数据库及所有关联数据。如果您运行的是多工作进程、多服务器或负载均衡部署,所有实例必须同时更新,不支持滚动更新,否则会因架构不兼容导致应用程序故障。
- 🧨 插件异步迁移要求。 用于工具、函数和管道的自定义插件在升级后可能需要迁移到新的异步后端签名,因此插件维护者应更新处理器和数据库调用模式以兼容,并遵循0.9.0插件迁移指南。迁移指南
- 🔄 自动化终端源。 自动化现在使用所选模型上配置的终端,而不是单独的按自动化终端选择器,保持聊天和计划运行之间的终端行为一致。提交
- 🚧 OpenAI透传现在默认为启用。 直接OpenAI通配符代理请求现在默认禁用,需要启用 “ENABLE_OPENAI_API_PASSTHROUGH”,因此依赖透传的部署在升级后必须明确将其打开。#23640
- 🗄️ SQLite WAL默认启用。 SQLite部署现在默认启用预写日志记录,无需手动配置即可改善并发读写行为。提交
更新内容 (原始)
[!CAUTION] ⚠️ Database Migrations: This release includes database schema changes; we strongly recommend backing up your database and all associated data before upgrading in production environments. If you are running a multi-worker, multi-server, or load-balanced deployment, all instances must be updated simultaneously, rolling updates are not supported and will cause application failures due to schema incompatibility.
Added
- 🖥️ Official Open WebUI Desktop App. Open WebUI is now available as a native desktop app for Mac, Windows, and Linux. No Docker, no terminal, no setup. Runs Open WebUI locally without any server setup, or connects to your existing remote Open WebUI instances. Switch between multiple servers instantly from the sidebar. Comes with a system-wide floating chat bar (Shift+Cmd+I on macOS, Shift+Ctrl+I on Windows/Linux), system-wide push-to-talk, offline support after first launch, automatic updates, and zero telemetry. #8262, Desktop
- 🤖 Scheduled chat automations. You can now schedule the AI to run tasks automatically on a recurring basis: daily digests, periodic reports, anything you’d otherwise need to remember to ask for. Create and manage automations from the Automations page or directly in chat, with full run history and manual trigger controls. #23303, Commit, Commit, Commit, Commit
- 🧰 Automation tools in chat. Built-in chat tools can now create, update, list, pause, and delete scheduled automations directly in conversation when automation access is enabled. Commit
- ⏱️ Automation scheduling limits. Administrators can now set “AUTOMATION_MAX_COUNT” and “AUTOMATION_MIN_INTERVAL” to limit how many automations each non-admin user can create and prevent overly frequent schedules that could overload the system. Commit
- 📋 Task management tool. AI models can now create, update, and track tasks within a chat conversation, breaking down complex requests into manageable steps with real-time status updates. Commit
- 🗓️ Calendar workspace and event management. Open WebUI now has a full Calendar workspace. Create and manage events, set up recurring schedules, get reminders via in-app toasts or browser notifications, and see your scheduled automations alongside your calendar. #23880
- 🔔 Calendar reminders and alerts. Calendar events now support reminder options from no alert up to one hour before start time, with upcoming alerts delivered through in-app toasts, browser notifications, and optional webhooks while avoiding duplicate sends. Commit
- ⚙️ Scheduler reminder configuration. Administrators can now configure calendar reminder processing with “SCHEDULER_POLL_INTERVAL” and “CALENDAR_ALERT_LOOKAHEAD_MINUTES”, while existing “AUTOMATION_POLL_INTERVAL” setups continue to work as a legacy fallback. Commit
- ☁️ Azure responses support. Azure OpenAI connections now support the newer “/openai/v1” format, enabling chat, responses, and proxy calls to work correctly with that endpoint style. #23484
- 🤖 Ollama responses support. The Ollama proxy now supports the Responses API, letting clients use “/v1/responses” directly with Ollama-hosted models through Open WebUI. #23483
- 🧩 Responses tool output rendering. Built-in tool outputs in Responses API flows now render more consistently so downstream chat output is easier to interpret. Commit, #23482
- 🔎 Responses citation visibility. Responses API flows now emit citation sources more consistently, making linked references easier to preserve and display in chat output. Commit, #23774
- 📎 Attach previously uploaded files. The chat input menu now includes a Files tab for browsing and attaching previously uploaded files, eliminating the need to re-upload files you have already shared. Commit
- 🧷 Default model terminal selection. Workspace model editors can now preselect an Open Terminal connection, so new chats automatically start with the model’s configured terminal ready to use. Commit, #23605
- 🎙️ Mistral TTS support. Mistral can now be used as a text-to-speech provider, with admin settings for the API key, base URL, voices, and model selection. Commit
- 🎧 STT preprocessing bypass option. Administrators can now enable “AUDIO_STT_SKIP_PREPROCESSING” to send audio files directly to the speech-to-text backend, reducing memory and CPU consumption during large uploads for better transcription performance and stability on constrained deployments. #23661
- 🗑️ Admin model deletion. Administrators can now delete Ollama models directly from the model selector menu, making it easier to clean up unused or unwanted models. Commit
- 🔌 Backend outlet filters for local and persisted chats. Pipeline and function outlet filters now run reliably in backend completion flows for persisted chats and temporary local chats. #3237, Commit
- 🎨 Emoji shortcode support. Typing a colon in the chat input now opens an emoji suggestion menu, making it easier to insert emojis using shortcodes like :wave:. Commit
- 📌 Recently used emojis. The emoji picker now shows your most recently used emojis at the top, making it faster to find emojis you use often. Commit
- 👆 Swipe to reply on mobile. Swiping right on a message now triggers a reply, making it easier to respond on touch devices with a natural gesture. Commit
- 📱 Screen-awake voice recording. Voice recording now keeps the screen awake during active dictation and safely re-acquires wake lock after visibility changes, helping prevent long transcriptions from being cut off on mobile devices. #23145
- 🔔 Unread chat indicators. Sidebar chats now show unread status and are marked as read when opened, making it easier to spot conversations with new activity. Commit
- 🔌 WebSocket reconnect status feedback. Open WebUI now warns when the real-time connection drops and confirms when it reconnects, while avoiding a reconnect message on the initial page load. Commit
- 📍 Pinned notes in sidebar. Notes can now be pinned to the sidebar for quick access, and you can also create a new note directly from the pinned notes section. Commit, Commit
- 🗂️ Model selector focus. The model selector now resets its search only when it opens, making the popup feel more predictable while still focusing the search field automatically. Commit
- 🗂️ Model selector layout. The model selector now behaves more predictably as a custom popup, and the completions playground uses a simpler model picker for easier selection. Commit
- 🎚️ Active filter valve shortcut. Active filter badges now expose valve configuration directly in the chat input area, so filter tuning is faster during conversations. Commit, #23811, #23813
- 🎨 Theme updates. Other windows can now update the app theme directly, keeping the interface in sync when theme changes are triggered externally. Commit
- 🚀 Async performance and responsiveness improvements. The core backend database and request paths now run asynchronously across the application, massively improving responsiveness and performance under concurrent load and reducing request blocking during heavy activity. Commit, Commit
- ⚡ Drawer performance and memory optimization. Drawer interactions now stay smoother over long sessions by removing stale keyboard listeners on teardown, which reduces memory growth and avoids accumulated event handling overhead. #23724
- 🚀 Chat history memory culling. Long conversations now stay responsive no matter how many messages they contain. Off-screen messages are unloaded automatically and reloaded as you scroll, keeping memory usage low and the UI smooth on both desktop and mobile. #23067, Commit, Commit
- 🧵 Async file and knowledge processing performance. File processing, knowledge reindexing, and channel message helper paths now consistently await async operations, preventing skipped processing steps and improving reliability and performance of indexing and tool responses. Commit
- 🚀 Persistent chat payload efficiency. Persisted chats now use server-side history loading instead of repeatedly resending full message payloads, improving multimodal performance and reducing stale-history overwrite risk across devices. #19064, Commit, Commit
- 🧵 Non-blocking file storage operations. Uploading, reading, transcribing, and deleting files now offloads storage I/O to background threads, keeping the application responsive during file-heavy workflows. Commit
- 🏎️ Streaming response performance. Streaming responses now process each output line in a single step instead of two separate yields, reducing async overhead and improving responsiveness during long-running generations. #23266
- 🔎 Faster mention parsing. Chat text with HTML-like content, file paths, or tool output now parses mentions more efficiently, which helps keep typing and rendering responsive in messages that contain many ‘<’ characters. #23551
- 🧪 Code block rendering performance. Code blocks now reuse a shared HTML unescape helper, reducing extra browser work when displaying encoded output in chat. #23553
- 🚀 Inline code rendering performance. Inline code tokens in streaming responses now fade in with a lightweight CSS animation, making chat output feel smoother while reducing interface overhead during rapid token updates. #23258
- 🎞️ Streaming text token animation performance. Streaming text tokens now use a lightweight CSS intro animation, making output feel smoother while reducing transition overhead and preventing tokens from fading out when generation completes. #23257
- 🎯 Template token scan optimization. Streaming responses now skip unnecessary token-replacement processing when no template markers are present, reducing per-update overhead and keeping chat output smoother during rapid generation. #23161
- 🔬 Chinese text processing guard performance. Streaming responses without Chinese characters now skip unnecessary Chinese-format processing checks, reducing per-update overhead and keeping output smoother during rapid generation. #23162
- 🧠 HTML entity decode performance. Streaming text decoding now avoids repeated document parsing for HTML entity handling, reducing memory churn and improving responsiveness in token-heavy chat output. #23165
- 🏷️ Chat title update performance. Chat title updates now run in a single database operation instead of multiple round trips, improving responsiveness and reducing overhead when titles are generated or renamed. #23214
- 📂 Faster chat list queries performance. Chat and folder lists now load more efficiently by fetching only the fields needed for sidebar views, improving responsiveness when browsing large conversation histories. Commit
- 📈 Sidebar memory optimization. Sidebar chat items now use shared drag-preview resources and safer listener cleanup, reducing memory growth and keeping large chat lists more responsive during long sessions. #23209
- 🧠 Image viewer memory optimization. Viewing images and SVGs now uses significantly less memory and performs faster, keeping the application snappy and responsive even when browsing through many media files during extended sessions. #23236
- 📡 Optimized user activity tracking performance. User activity updates now use a single database query instead of multiple operations, improving response times across all authenticated requests. #23215
- 👥 Faster channel thread author loading. Channel thread responses now load author details in a single batch query, reducing database overhead and improving responsiveness in threads with many participants. #23795
- 💨 Optimized shared chat deletion. Deleting shared chats by user is now faster and more memory-efficient by only loading necessary data. #23216
- 🗃️ Faster chat tag loading. Chat tag lookups now load only the metadata needed instead of full chat payloads, improving responsiveness for chats with large histories. #23798
- 📎 Faster chat file deduplication. Attaching files to chat messages now checks duplicates more efficiently, reducing overhead when handling larger file lists. #23800
- 📈 Faster message diff checks. Chat message and status updates now compare content more efficiently during streaming, making active conversations feel smoother and more responsive. #23370
- ⚖️ Faster deep equality checks. Chat message updates, model selection, note editing, code block refreshes, and rich text state comparisons now use deep equality checks that reduce unnecessary UI work and improve responsiveness in active sessions. #23845
- 🏃 Faster knowledge access updates. Updating access grants for knowledge items now completes with less backend overhead, making permission changes apply more quickly. #23799
- 🧹 Mermaid render cleanup performance. Mermaid diagrams now always clean up temporary render elements after failures, reducing DOM buildup and keeping repeated rendering more stable over time. #23727
- 🖼️ Model image lookup efficiency. Model profile image requests now reuse the current request database session, reducing per-request overhead and improving response efficiency. #23796
- 👤 User endpoint query reduction. Session-based user settings and status endpoints now avoid redundant user re-fetches, reducing unnecessary database load while preserving behavior. #23794
- 🚦 Faster startup performance. Open WebUI now checks for Torch MPS support only on macOS, avoiding unnecessary startup work on other platforms. #23438
- 🛡️ Redis timeout consistency. Redis connections now honor the “REDIS_SOCKET_CONNECT_TIMEOUT” setting across standard and cluster setups, helping workers fail faster when Redis is unreachable. #23572
- 🧰 AIOHTTP pool controls. Administrators can now tune shared outbound HTTP connection behavior with “AIOHTTP_POOL_CONNECTIONS”, “AIOHTTP_POOL_CONNECTIONS_PER_HOST”, and “AIOHTTP_POOL_DNS_TTL” for better control under high concurrency. Commit
- ⏱️ MCP tool server timeout configuration. Administrators can now configure request timeouts for MCP tool server connections via the AIOHTTP_CLIENT_TIMEOUT_TOOL_SERVER environment variable. Commit
- 🎫 Static OAuth tool authentication. Tool server authentication now works reliably for both “oauth_2.1” and “oauth_2.1_static” connection types, so OAuth-backed tool access is correctly detected and forwarded during chat requests. Commit
- 🗄️ Configurable storage local cache. Administrators can now disable persistent local caching for cloud-backed uploads with the “STORAGE_LOCAL_CACHE” setting, reducing local disk usage by cleaning temporary upload copies after processing. Commit
- 🚪 Back-channel logout. OpenID Connect providers can now trigger centralized logout through the “ENABLE_OAUTH_BACKCHANNEL_LOGOUT” setting, helping administrators invalidate user sessions more reliably across connected devices. Commit
- 🛡️ Expanded security header controls. Administrators can now configure additional browser security headers, including “CONTENT_SECURITY_POLICY_REPORT_ONLY”, “CROSS_ORIGIN_EMBEDDER_POLICY”, “CROSS_ORIGIN_OPENER_POLICY”, and “CROSS_ORIGIN_RESOURCE_POLICY”, for stricter and more flexible deployment hardening. Commit
- 🖼️ Image MIME fallback option. Administrators can now enable “ENABLE_IMAGE_CONTENT_TYPE_EXTENSION_FALLBACK” so image-to-base64 conversion can still detect common image types by file extension when MIME metadata is missing, improving compatibility on minimal container images and older file records. Commit
- 🛡️ Public sharing permissions. Public channels, models, notes, prompts, and tools now respect allowed access grants more consistently, helping administrators control who can share content more safely. Commit
- 🆔 Skill lookup by ID. Skill instructions now include each skill’s ID, and the skill viewer now finds skills by ID in a case-insensitive way so attached skills are identified more reliably in chats. Commit
- 🏷️ Source context metadata. Retrieval source context now includes each source’s resource type and resource ID metadata, helping downstream model workflows preserve richer source identity during processing. Commit
- 🗂️ Feedback filtering. Administrators can now filter feedback history by model and export only the feedback they need. Commit
- 📤 CSV feedback export. Feedback history can now be exported as either JSON or CSV, making it easier to analyze feedback in spreadsheet tools. Commit
- 📝 Optional GET audit logging. Administrators can now enable auditing for GET requests with the “ENABLE_AUDIT_GET_REQUESTS” setting when they need fuller request visibility. Commit
- 🕒 Model access updates. Changing a model’s access grants now updates its timestamp, so recently modified models stay easier to find and sort correctly. Commit
- 💬 Queued message handling. Queued chat messages now send more reliably without advancing the queue too early, keeping follow-up prompts in the intended order. Commit
- 🔒 Rendered content safety. Placeholder descriptions and the pending account notice now render markdown with safer sanitization ordering, reducing the risk of unsafe HTML appearing in these views. Commit
- 🛡️ Safer placeholder rendering. Chat placeholder descriptions and the pending account notice now sanitize rendered markdown more consistently, reducing the risk of unsafe content being shown in these views. Commit
- 🧮 Usage analytics accuracy. Token usage is now normalized before chat messages are saved, so model and user usage reports stay accurate across OpenAI-compatible providers. Commit
- 🧩 Richer Anthropic tool results. Anthropic-compatible tool calls now preserve more tool result content types, including images and structured search or document outputs, so models can use fuller tool context instead of receiving only plain text fragments. #23188, Commit
- 🖼️ ComfyUI request reliability. ComfyUI image generation and editing now use shared async connections with consistent SSL handling, making image uploads and workflow runs more reliable under concurrent load. Commit
- 🎛️ Reranking batch size control. Administrators can now set “RAG_RERANKING_BATCH_SIZE” in Documents settings to control reranking workload size, helping balance retrieval speed and resource usage for their deployment. Commit
- 🔗 Shared chat access controls. You can now control who has access to a shared chat by granting access to specific users or groups, instead of sharing with anyone who has the link.
- 🔄 General improvements. Various improvements were implemented across the application to enhance performance, stability, and security.
- 🌐 Translation updates. Translations for Irish, Catalan, German, Simplified Chinese, Hindi, and Portuguese (Brazil) were enhanced and expanded.
Fixed
- 🛡️ Model description XSS protection. Model descriptions shown in chat placeholders are now sanitized before rendering, preventing malicious links from executing scripts and helping protect user sessions from takeover. #23621
- 🧠 Memory search filtering. Memory search now correctly filters by the query text instead of returning unrelated results. Commit, #23826
- 📊 Shared chat analytics consistency. Usage and message-count analytics now count assistant activity consistently across regular and shared chats, improving accuracy in model, user, chat, and time-based reporting views. Commit
- 🧭 Safer in-flight chat navigation. Sending a message no longer overwrites your active chat or causes duplicate background notifications when you switch conversations before a response finishes. Commit
- 🗣️ Pipeline error detail visibility. Pipeline inlet and outlet failures now preserve and surface provider error details more reliably in chat error messages, making troubleshooting failed requests much clearer. Commit
- 📨 Shared chat event routing. Message update and send events now target the chat owner’s event channel, so shared chats receive the correct real-time updates instead of routing events to the acting user. Commit
- 🔐 Consistent outbound SSL handling. External requests for tools, functions, terminals, webhooks, retrieval loaders, audio provider discovery, and OpenAI-compatible embedding calls now consistently apply the configured SSL client setting, improving reliability for deployments that require custom certificate or verification behavior. Commit, Commit
- 🖼️ Image SSL setting support. Image generation now respects the configured SSL session setting, preventing avoidable connection failures in strict certificate environments. Commit, #23777
- 🗂️ Folder ownership assignment hardening. Folder create and update inputs now reject unexpected extra fields, preventing clients from overriding protected values like ownership through mass-assignment payloads. #23648
- 🔐 Knowledge file deletion ownership checks. Collaborators with knowledge base write access can no longer permanently delete files they do not own, preventing unintended file removal across other linked chats and knowledge bases. Commit, #23636
- 🗑️ Knowledge deletion reliability. Deleting a knowledge base by ID now completes reliably without unexpected failures. Commit, #23776, #23814
- 🔐 OAuth 2.1 PKCE enforcement. OAuth 2.1 providers now default to S256 PKCE even when discovery metadata omits supported challenge methods, preventing login failures with providers that require PKCE by default. #23667, Commit
- 🔐 Static OAuth scope handling. Static OAuth credential flows now prioritize administrator-defined scopes and handle OAuth 2.1 static flow behavior more reliably. Commit, #23668, #23696, #23783
- 🔐 Static OAuth tool registration reliability. Static OAuth tool server registration now resolves and uses saved admin credentials more reliably, preventing registration failures when valid client credentials are provided. #23670, Commit, Commit
- ⏳ OAuth token expiry fallback. OAuth sessions now always store a safe expiry value even when providers omit “expires_in” or “expires_at”, so token refresh checks continue working and tool calls are less likely to fail later with unexpected authorization errors. #23669, Commit
- 🔑 Anthropic x-api-key model access. Anthropic-compatible clients can now authenticate with the “x-api-key” header across all relevant API routes, so model listing requests like GET “/api/v1/models” no longer fail with unauthorized errors. #23319, Commit
- 🔑 SSO password option visibility. Account settings now hide password change controls when password-change access is disabled, avoiding misleading password options for SSO-focused setups. #15292, Commit
- 🔑 Open Terminal MCP authentication. Open Terminal MCP tool calls now include the configured API key when calling internal routes, preventing unauthorized errors for commands like file reads and command execution. #106
- 🧯 Provider error freeze recovery. Task-based chat requests now surface provider HTTP errors through normal failure handling, so content-filter and other upstream 4xx responses no longer leave chats stuck in a perpetual loading state. #23663, Commit
- 🔄 Immediate outlet filter updates. Assistant messages modified by outlet filters now appear correctly as soon as streaming completes, without requiring a page refresh. #23829
- 🌊 Middleware cancellation reliability. Long-running requests now complete more reliably by preventing middleware-level cancellations from interrupting in-flight database and embedding work, reducing unexpected failures and noisy error logs when connections close early. #23709
- 🚦 Async vector search responsiveness. File processing, memory updates, and knowledge retrieval no longer block the server event loop during vector database operations, so other chats and requests stay responsive while indexing or search is running. #23706
- 🗒️ Notes chat llama.cpp compatibility. Notes AI chat no longer sends empty assistant prefill messages that can conflict with reasoning-enabled llama.cpp responses, preventing immediate 400 errors in Notes conversations. Commit, #23703
- 🧩 Ollama thinking field preservation. Messages modified by filters now keep the Ollama “thinking” field when sent to the model, so reasoning-aware workflows and custom filter-based passthrough setups work reliably. Commit, #22508
- 🧾 Reasoning content preservation. Assistant tool-call messages now retain reasoning content across turns, improving reliability for reasoning-heavy model workflows. Commit, #23175, #23742
- 🧭 Background task scoping for new chats. Chat title and auto-tag generation now run only for the first message of a new conversation and only once in multi-model responses, preventing duplicate or incorrectly triggered background tasks in follow-up flows. Commit
- 📚 Channel document context retention. Channel conversations now preserve and load the correct stored message history so model responses can use uploaded and retrieved document context more reliably. #23686, Commit, Commit
- ⏳ Interrupted response recovery. Assistant placeholder messages now start as incomplete and recover more safely after interrupted generations, preventing silent empty replies after refreshes or dropped requests. #23176, Commit, Commit
- 🧰 Large tool result rendering. Tool call details now display large result payloads reliably in chat instead of intermittently showing empty output for bigger tool responses. #18743, Commit
- 🧼 Null-byte document sanitization. PDF and other document ingests now sanitize null bytes and invalid surrogate characters before pgvector writes, preventing PostgreSQL upload failures and allowing affected files to index successfully. #22992, Commit
- 📝 Knowledge text editor stability. The Knowledge “Add Text Content” modal now uses a plain text editor, avoiding current rich text editor issues and keeping drafting behavior consistent with existing knowledge editing flows. Commit
- 🎤 STT SSL setting consistency. Speech and related outbound media requests now consistently use shared async HTTP sessions and honor the configured SSL verification setting, improving compatibility with self-signed deployments. #23672, Commit
- 🎙️ Mistral speech input format. Mistral speech-to-text requests now use the correct chat-completions audio input format for better compatibility. Commit, #23822
- 🖼️ Optional image size parameter. Image generation no longer sends the “size” field when no size is configured, improving compatibility with providers that reject unsupported size arguments. #23611, Commit
- 🔎 FireCrawl timeout reliability. FireCrawl web loading now uses direct scrape requests and improved timeout handling for single-URL fetches, reducing empty results and premature timeout failures with local FireCrawl setups. #23411, Commit
- 🖱️ Custom action icon drag prevention. Custom user-added action icons in chat responses are no longer accidentally draggable, so clicks and hover interactions behave consistently with built-in action icons. #23412
- 🖼️ Image URL conversion reliability. Sending image URLs to AI models no longer fails with “cannot pickle ‘coroutine’ object” errors, so image inputs now convert to base64 reliably during request processing. #23685
- 📂 Channel input menu dismissal. In Workspace Channels, the message input dropdown now closes immediately after selecting “Upload Files” or “Capture”, matching normal chat input behavior and preventing the menu from staying open unnecessarily. #23684
- 📋 Clipboard copy scroll stability. Copying content with the fallback clipboard method no longer triggers unwanted page scrolling during focus, keeping your current reading position stable. Commit
- 🖼️ Profile image URL validation. Profile saves now accept valid Open WebUI profile-image paths, trusted external HTTP(S) avatar URLs, and safe raster data-image formats while rejecting unsafe URL patterns that could be abused. #23389
- 👤 Partial user profile updates. User update API requests can now modify only the fields you provide, so administrators no longer need to resubmit unchanged name, email, and profile image values when changing a single setting like role. #23424, Commit
- 🚨 Provider SSE error visibility. Provider failures returned with streaming content types are now surfaced as proper API errors and logged clearly, so issues like context-window limits no longer fail silently during chat generation. #23379
- 🧵 Queued prompt race prevention. Chat request queues now prevent overlapping processing for the same chat, avoiding duplicate queue handling when multiple queue-processing triggers fire close together. #23181, Commit
- 🛑 Cancellation event delivery reliability. Cancelled chat processing now safely emits task-cancel and error events only when an event emitter is available, while provider HTTP errors now also route through task-cancel handling so chats recover from blocked-loading states more reliably. #23663, Commit, Commit
- 🔑 OIDC key-rotation recovery. OIDC login now retries token authorization with refreshed provider signing keys after a bad-signature failure, so logins recover automatically after identity-provider key rotation without requiring a service restart. #23582, Commit
- 🌍 Non-ASCII tag filtering. Prompt and model tag filters now handle non-Latin tags more reliably across SQLite and PostgreSQL, so tags like Cyrillic values return the expected items in Workspace lists. #23381, #23427, Commit
- 🏷️ Prompt tag query accuracy. Prompt tag filtering now uses JSON-element-aware queries so tag-based lookups return the correct prompts. Commit, #23386
- 🗃️ SQLite async pool compatibility. SQLite async database setup no longer forces an explicit queue pool class, avoiding pool configuration conflicts in SQLite deployments. Commit
- 🧠 Knowledge embedding deadlock prevention. Knowledge file processing now runs blocking vector-save work in a worker thread while keeping async status updates reliable, preventing file processing from stalling during long embedding operations. Commit, Commit
- 🤖 Automation worker async DB handling. Automation claiming and run recording now use async database sessions consistently, improving worker stability for scheduled automations. Commit
- 🕒 Automation timezone scheduling. Scheduled automations now calculate each user’s next run time using that user’s saved timezone, preventing run drift caused by server-time fallback. Commit
- 🔎 Notes search matching. Notes search now handles multi-word and hyphenated queries more reliably, so relevant notes and snippets are easier to find from partial phrase searches. Commit
- 📐 Display math rendering. Chat markdown now correctly recognizes and renders “$$…$$” expressions as display math, improving reliability for multiline and escaped KaTeX content while keeping malformed delimiters from disrupting message rendering. #23526, Commit
- 🚫 LDAP empty-password rejection. LDAP login now rejects empty or whitespace-only passwords before bind attempts, preventing unauthenticated simple-bind behavior from granting access on permissive LDAP server configurations. #23633
- 🌐 IPv6 SSRF address blocking. URL validation now uses standard IP address checks for both IPv4 and IPv6, preventing private, loopback, link-local, reserved, and mapped-address SSRF bypasses through IPv6 hostname resolution. #23453
- 🔒 API key endpoint restriction bypass. API key endpoint restrictions are now enforced regardless of whether the key is sent through Authorization headers, cookies, or “x-api-key”, preventing bypass through alternate key transport paths. #23637
- 🔐 Channel sharing permission enforcement. Channel creation and updates now enforce allowed access grant rules for public sharing, preventing unauthorized wildcard sharing on group channels. #23638
- 🛑 Socket role invalidation. Socket sessions now disconnect automatically when a user is demoted or deleted, preventing stale admin privileges from persisting until reconnect. #23642
- 🛂 Tool server access checks. Tool listing now correctly awaits server access checks, preventing users from seeing server-backed tools they do not have permission to use. Commit
- 🛑 Task endpoint access control. Global task listing and direct task stop endpoints are now restricted to administrators, while regular users can stop only their own chat tasks through a scoped chat endpoint. #23454
- 🧱 Redis cache key isolation. Tool server and terminal server cache entries now include the Redis key prefix, preventing multiple Open WebUI instances that share one Redis database from overwriting each other’s cached connection data. #23649
- 🧠 Client session leak prevention. Outbound provider requests now use a shared session pool with safer response cleanup and shutdown handling, preventing aiohttp session buildup and reducing memory growth during heavy concurrent API traffic. #23540, Commit
- 🧩 Tool enum value handling. Tool schema generation now safely handles enum values as strings, preventing failures when OpenAPI parameters include non-string enum entries. #23597, Commit
- 🧷 Responses model access control. The OpenAI-compatible Responses endpoint now enforces per-model permissions, preventing non-admin users from accessing models they are not allowed to use. #23481
- 🛡️ Collection process endpoint permissions. Collection processing endpoints now enforce collection ownership checks for web and text processing requests. Commit, #23634
- 📚 Knowledge query access enforcement. Knowledge-base collection queries now block unauthorized enumeration and require read access before returning results. Commit, #23635, #23452
- 🔍 RAG collection query permissions. Vector search collection queries now enforce access checks before retrieval results are returned. Commit, #23627
- 🔗 Chained base model access checks. Chained base model execution now enforces per-model access rules to prevent unauthorized model usage. Commit, Commit, #23647
- ✍️ Collaborative document write checks. Collaborative document updates now require proper write permission before changes are accepted. Commit, Commit, #23624
- 📥 Model import ownership validation. Model import now enforces ownership and access grant checks to prevent unauthorized imports. Commit, #23628
- 🚫 Inactive member channel access. Deactivated group members can no longer read or write channel content through direct API calls, so channel permissions now match active membership status. #23623
- 🎛️ Ollama endpoint model permissions. Restricted models are now protected on Ollama show, generate, embed, and embeddings endpoints, preventing authenticated users from using private models without read access. #23631
- 🧭 Azure deployment path validation. Azure model names are now validated and safely encoded before request URL construction, preventing path traversal attempts from reaching unintended Azure endpoints. #23629
- 👥 Private channel member list access. Standard channel member lists now require proper read permission, preventing unauthorized users from enumerating members of private channels by direct API calls. #23625
- 🌀 Tool server schema recursion safety. Tool server OpenAPI conversion now handles circular request schema references safely, preventing conversion crashes and ensuring one bad tool server spec does not break the full tool server list. #23588, Commit
- 🧱 Safer file path handling. File upload, transcription cache, and model download paths now use safer path construction helpers to reduce path parsing risks and improve cross-platform path safety. Commit
- 🧾 Prompt save error feedback. Saving prompt edits now shows a clear error toast if the save fails, so failed updates are visible instead of silently failing in the editor flow. Commit
- 🧾 Tool call JSON rendering. Tool call arguments and structured results now render as plain formatted JSON blocks instead of markdown code fences, preventing formatting quirks and making tool output easier to read consistently. Commit
- 👥 First-user admin race protection. Concurrent first-time LDAP or OAuth registrations can no longer create multiple admin accounts, so only the true first account is promoted during initial setup. #23626
- 🔒 SCIM token checks. SCIM authentication now compares tokens in a safer way, helping prevent timing-based token guessing attacks. #23577
- 🔒 Safer file access checks. HTML file previews now treat missing or non-admin owners as inaccessible, preventing accidental access to files that should not be shown. Commit
- 🖼️ ComfyUI request hangs. Concurrent image generation and editing requests to ComfyUI now complete reliably instead of getting stuck when the same user starts multiple requests at once. #23592, #23591
- 🧭 Permission-aware built-in tools. Built-in tools now consistently respect user feature permissions for memories, web search, image generation, code interpreter, notes, channels, and automations, preventing tools from being exposed to users without access. Commit
- 🛑 Interrupted MCP cleanup stability. Interrupted MCP tool calls no longer leave runaway cleanup behavior that can drive container CPU usage to 100%, keeping instances stable after cancellations or dropped connections. #23143
- 🚪 OAuth redirect URI reliability. OAuth login redirects now use provider client metadata more consistently, preventing incorrect HTTP callback URLs behind reverse proxies and improving sign-in reliability for providers such as Feishu. #23203, #23128
- 🌐 OAuth redirect handling. OAuth provider token exchange now follows redirects automatically, improving sign-in reliability with identity providers that redirect token endpoint requests. #23409, Commit
- ☁️ OneDrive picker redirect handling. OneDrive file picker authentication now uses the current app origin as the redirect URI, improving sign-in reliability when launching the picker from deployed environments. #23450, Commit
- 🍪 OAuth session cookie persistence. OIDC sign-in now correctly sets the “oauth_session_id” cookie, so “system_oauth” connections can forward user OAuth tokens to upstream providers as expected. #23251, #23250
- 🔑 OAuth session cookie handling. OAuth callback processing no longer fails on undefined cookie expiry data, so OAuth session cookies are stored correctly after sign-in. #23207, #23197
- 🔏 Ollama SSL handling. Ollama model management and file uploads now respect the configured SSL verification setting, so self-signed certificates work when SSL verification is disabled. #23503, Commit
- 🛡️ OAuth avatar URL validation. OAuth sign-in now validates profile picture URLs before fetching them, preventing invalid image links from causing login-time errors. #23356
- 🔑 User invite token expiry. New user invite logins now respect the configured “JWT_EXPIRES_IN” setting, so signup tokens expire as expected instead of using the default lifetime. #23576
- 🚪 Channel access checks. Channel actions now verify the current user when checking access, improving permission enforcement across channel views and message actions. Commit
- 📣 Channel message lookups. Channel message details and pinning now work more reliably when the sender account is missing, avoiding failures in those views. Commit
- 📌 Pinned webhook message handling. Viewing pinned webhook messages now works reliably even when webhook profile data is missing, preventing server errors and frontend crashes in channel pinned message dialogs. #23414
- 🛡️ Note edit permission enforcement. Note saving now requires write access instead of read access, preventing unauthorized users from modifying notes while preserving expected collaboration permissions. Commit
- 🗂️ Archived chats menu visibility. The ‘Archived Chats’ option in the user menu is now shown reliably for all users, so non-admin accounts can consistently access archived conversations. Commit
- 💾 Error message persistence. LLM errors that occur during streaming are now saved to the database even if the connection drops, so users can see what went wrong when they reconnect. #23231
- 🚫 Missing message completion guard. Chat completion finalization now skips invalid requests without a message identifier, preventing unnecessary error toasts caused by rare frontend concurrency timing. #23184
- 🧠 Active message completion accuracy. Switching chats or refreshing during generation no longer marks the currently streaming assistant message as finished too early, so thinking blocks and action buttons appear at the correct time. #23171
- 📞 Call overlay visibility. Incoming call events now open the call overlay and controls reliably, preventing cases where the call interface briefly appeared and then disappeared. Commit
- 💬 Prompt submission handling. Chat messages now preserve attached files more reliably when prompts are sent, including queued messages and shared prompt actions. Commit
- 🧾 Prompt variable form saving. Prompt variable forms now save reliably without runtime errors or an unresponsive save action, so input values and placeholders work correctly when applying prompt templates with variables. #23225, #23480
- 🛟 Task model fallback safety. Task routing now handles missing default model entries safely, preventing task execution failures when the previously selected model is no longer available. #23169
- 📊 Usage statistic preservation. Follow-up generation no longer overwrites existing token usage fields, so stored usage statistics remain accurate for the main response. #23152
- 📝 Writing block parsing reliability. “:::writing” blocks now parse more reliably when headers or extra inline text are present, preventing malformed rendering and duplicate output artifacts. #23174
- 🧾 Code block line break reliability. Blank lines in submitted code blocks are now preserved more reliably instead of being collapsed. Commit, #20302, #23451
- ✂️ Citation spacing cleanup. When citations are disabled for a model, citation markers and their leftover spacing are now removed together so punctuation and copied text remain cleanly formatted. #23141
- 🧰 Pipe tool access. Pipe functions now receive built-in and MCP tools in tools, so tools like Web Search and code execution are available when enabled. #23365
- 📚 Batch file processing database handling. Batch knowledge file processing now consistently uses the active database session, preventing failures caused by missing database context during file ownership checks and update writes. #23137
- ⚙️ Default model parameter loading. The “DEFAULT_MODEL_PARAMS” environment variable is now parsed and applied correctly, so default generation settings are honored reliably without being ignored at startup. #23223
- 🔧 Web search settings save reliability. Saving web search configuration now works without server errors, so administrators can update “WEB_FETCH_MAX_CONTENT_LENGTH” and related retrieval settings successfully from the admin interface. Commit, #23127
- 🔍 Web search result count. The built-in search_web tool now respects the admin-configured “Search Result Count” setting instead of always returning 5 results when using Native Function Calling mode. #23488, #23485
- 🖼️ Open Terminal file response handling. Open Terminal tool responses now preserve binary content types in user-side connections, so image and non-text file reads work consistently instead of being forced into plain text. #23125
- 🖥️ Terminal label casing. Terminal names in the chat input now display exactly as stored instead of being automatically capitalized, so domain-style server names appear correctly. #23518
- 🖼️ Gravatar profile photo saving. Gravatar profile images can now be saved successfully from account settings, with clearer validation and error handling instead of failing with generic object errors. #23156
- 🪟 Details expansion preference. Tool call detail groups now honor the ‘Always Expand Details’ chat setting, so they open expanded by default when that preference is enabled. #23262, #23255
- 🖱️ Rapid sidebar action protection. Archive and delete actions in the chat sidebar now ignore repeated clicks while a request is in progress, preventing duplicate requests and stacked error toasts. #23172
- 📲 Mobile model selector positioning. The mobile model selector dropdown now applies a constrained viewport width and left offset, preventing overflow and making model selection easier on small screens. #23310
- 🔽 Task list toggle icons. The task list collapse button now shows the correct arrow direction, making task sections easier to expand and collapse at a glance. Commit, #23354
- ➕ Attachment menu auto-close. The chat attachment menu now closes immediately after selecting upload actions like file upload, camera capture, web attach, Google Drive, or OneDrive, preventing the menu from lingering on screen. Commit, #23320
- 🧹 Per-chat draft clearing. Sent message drafts are now cleared using the active chat key, so sent text no longer reappears in the input after a refresh. Commit, #23296
- ✉️ Context-aware input action button. The input now shows the send action when text or files are present during generation, while keeping stop controls for truly empty input states to avoid action confusion. Commit, #23306
- 📉 Pyodide prompt cache stability. Pyodide code interpreter context is now appended to the system prompt instead of user messages, preserving stable prefix caching across turns and reducing repeated token costs in long native tool-calling chats. #23269
- 🧪 Temp chat outlet filtering. Outlet filters now process temporary chats more reliably, preserving assistant output and usage data so local chat responses stay consistent when filter pipelines are enabled. Commit
Changed
- ⚠️ Database Migrations: This release includes database schema changes; we strongly recommend backing up your database and all associated data before upgrading in production environments. If you are running a multi-worker, multi-server, or load-balanced deployment, all instances must be updated simultaneously, rolling updates are not supported and will cause application failures due to schema incompatibility.
- 🧨 Plugin async migration required. Custom plugins for Tools, Functions, and Pipelines may require migration to the new async backend signatures after upgrading, so plugin maintainers should update handlers and database call patterns for compatibility and follow the 0.9.0 plugin migration guide. Migration Guide
- 🔄 Automation terminal source. Automations now use the terminal configured on the selected model instead of a separate per-automation terminal picker, keeping terminal behavior consistent between chat and scheduled runs. Commit
- 🚧 OpenAI passthrough now opt-in. Direct OpenAI catch-all proxy requests are now disabled by default and require enabling “ENABLE_OPENAI_API_PASSTHROUGH”, so deployments relying on passthrough must explicitly turn it on after upgrading. #23640
- 🗄️ SQLite WAL default enabled. SQLite deployments now default to enabling write-ahead logging, improving concurrent read and write behavior without requiring manual configuration. Commit