News

OpenCode Desktop:为优化用户体验,正式转向Electron框架

OpenCode Desktop:为优化用户体验,正式转向Electron框架

OpenCode团队近期宣布,其桌面应用OpenCode Desktop已基于Electron完成重构,并将逐步停止Tauri版本的发布。此项决策并非轻率做出,也并非因为Electron或Tauri孰优孰劣,而是Electron能更好地契合OpenCode的特定应用场景。

要理解这一转变,首先需要了解OpenCode的运作模式。OpenCode采用客户端-服务器架构,所有组件均使用TypeScript编写。客户端,如文本用户界面(TUI)和网页用户界面(Web UI),通过HTTP与服务器通信。服务器负责执行AI智能体循环、与大型语言模型(LLMs)交互以及管理SQLite数据库。通常,用户需要手动运行opencode serve命令来启动服务器。然而,为了提供更简化的体验,让用户只需下载并运行一个应用即可,OpenCode Desktop应运而生。

最初,OpenCode选择了Tauri作为Web UI和CLI的轻量级包装器。应用启动时,捆绑的CLI会自动运行opencode serve,为Web UI提供本地服务器连接。这使得团队能够发布一个体积小巧、功能齐全且基本可在所有操作系统上运行的应用。

然而,随着时间推移,团队遇到了几个问题。首要问题是,Tauri在macOS和Linux上使用WebKit渲染应用,其性能不仅不如Chromium,还存在一些细微的不一致性,尤其是在样式方面。这直接影响了OpenCode在所有平台上提供一致用户体验的能力,而性能的降低也使得日常使用体验不佳。尽管Tauri正在努力通过CEF支持Chromium,但其稳定性仍不确定。

第二个问题是运行CLI本身。它会影响应用的启动时间,并偶尔出现启动失败的情况(尤其是在Windows上)。虽然这本身不是决定性因素,但当团队计划从Bun迁移到Node(出于其他原因)时,直接在Electron内置的Node进程中运行服务器代码的想法变得极具吸引力。

综合考虑这些问题后,OpenCode团队决定转向Electron。由于UI设计之初就考虑了可移植性,因此将UI迁移到Electron上相对容易。早期Electron版本仍然捆绑CLI,因为它依赖于Bun特有的API。最终,团队移除了所有Bun特有API,使得服务器代码可以直接在Node环境中运行。这意味着任何依赖Bun特有API的插件将无法在更新的桌面版本中运行,更多细节将在OpenCode 2.0中公布。

目前,OpenCode Desktop同时提供Tauri和Electron版本。Electron版本将很快成为直接下载和测试版应用内更新的默认选项,并最终推广至所有通用版本。

↗ 阅读原文