
今天,我们正式发布 Wails v3 Beta。
Wails 让 Go 开发者能够使用他们已经熟悉的 Web 前端工具构建桌面应用,并使用各平台的原生 WebView,而不是嵌入式浏览器。v3 是一次重大进步:它为应用提供了更直接的 API、更清晰的构建模型,并为人们一直希望 Wails 支持的桌面应用奠定了更好的基础。
这是 Beta 版本,并非最终的3.0版本。桌面 API 已经稳定,也已有团队在生产环境中使用 v3,但您仍应在部署前进行全面测试。我们将利用 Beta 阶段与社区共同发现最后的兼容性和工作流问题。Wails v2 仍是当前的稳定版本,并将继续获得修复。
Beta 阶段的文档
在 Beta 阶段,我们将英文文档作为权威来源持续维护,同时对 API 和工作流进行最终验证。现阶段我们不接受翻译 PR。待文档足够稳定、译者无需反复应对变更后,我们将在正式发布前恢复翻译工作。
v3 包含的内容
- 明确的应用和窗口 API,包括一等的多窗口支持
- 通过静态源代码分析生成更丰富 TypeScript 绑定的 Go 服务,并保留注释和有意义的参数名称
- 可将前端资源和脚本与后端 API 一并打包的服务——这是可安装、功能更丰富的插件的基础
- 基于 Taskfile、清晰可见且可供检查、扩展和调试的构建系统
- 服务器构建,可在没有原生桌面窗口的情况下运行同一应用及其服务
- 在受支持的平台上,为 Intel、Apple Silicon、amd64 和 arm64 架构上的 macOS、Windows 和 Linux 提供现代桌面支持
- 针对 iOS 和 Android 的实验性移动端支持,可供探索,但不在桌面 Beta 版的兼容性承诺范围内
为什么推出 v3
Wails v2 让使用现代 Web 前端构建 Go 应用变得简单直接。它为该项目以及众多应用提供了良好支持。但它采用单窗口、上下文驱动的运行时和严格管理的构建流程,使一些常见的桌面开发工作变得比应有的更困难。
v3 从不同的模型出发。应用、窗口、服务、事件和平台能力都是显式对象。这样一来,随着应用不断发展,框架更容易理解;多窗口等功能也成为应用模型中的常规组成部分,而不再是变通方案。
新增内容
为实际桌面软件打造的应用 API
v3 以显式的应用生命周期取代了 v2 的wails.Run(...)配置方式。您需要创建应用、注册服务、创建窗口,并与负责您所需行为的对象进行交互。
这消除了大量隐式的上下文传递。窗口操作归属于窗口,应用范围的操作归属于应用。这种模型对于多窗口应用更为自然,也更适合测试和维护较大的代码库。
在 Alpha 阶段使用过 v3 的用户反馈极为积极。开发者尤其认可这种显式模型:它让代码更易理解、所有权更清晰,也让复杂的桌面应用能够在不受框架掣肘的情况下继续发展。
一等的多窗口支持
多窗口是 v3 的核心能力。窗口拥有各自的生命周期,可以在运行时创建、管理和关闭。因此,需要编辑器、检查器、偏好设置、工具窗口或多个独立 UI 部分的桌面软件,现在有了一条更清晰的实现路径。
服务与生成的绑定
Go 服务取代了旧的绑定模型。它们让应用逻辑保持为普通 Go 代码,并明确划分与前端之间的边界。生成的绑定采用反映应用及其服务的结构,使暴露给前端的 API 更容易查找和使用。
v3 使用静态源代码分析生成这些绑定。这意味着生成器可以保留开发者写入代码的信息,包括注释和有意义的参数名称,而不是通过反射探查已经构建好的程序。由此得到的前端 API 更丰富、更实用,生成过程也更容易理解和维护。
服务还可以将前端资源和脚本与其 Go 代码一同挂载。这样,一项能力的所有组成部分便有了统一归属:后端 API、所需的 JavaScript 或 UI,以及与宿主应用的集成点。这为开箱即用地提供丰富功能的 Wails 插件创造了条件——安装插件、挂载其服务,然后使用该功能——无需自行拼装零散的绑定和前端依赖。通用插件系统不属于本次 Beta 的范围,但 v3 让这一方向变得切实可行,这是 v2 绑定模型无法做到的。
可检查和调整的构建系统
v3 让项目的构建结构清晰可见。项目不再将所有构建决策隐藏在单个命令中,而是采用常规布局和基于 Taskfile 的构建配置,可与应用一起理解、扩展和调试。
更强大的跨平台桌面基础
此 Beta 版支持 amd64 和 arm64 架构的 Windows、Intel 和 Apple Silicon 架构的 macOS,以及 amd64 和 arm64 架构的 Linux。GTK4 与 WebKitGTK 6.0是默认的 Linux 技术栈;在整个 v3.0系列中,GTK3 仍可作为旧版选项使用。移动端支持令人期待,但仍处于实验阶段,不属于桌面 Beta 版的兼容性承诺范围。
此版本还包含让日常使用体验更加可靠所需的改进:更完善的平台行为、更强大的窗口模型、更清晰的诊断信息,以及带有校验和与来源证明的发布产物。
从 v2 迁移
v3 是新的主版本,迁移需要真正进行移植,而不仅仅是更改版本号。主要的概念变化包括应用和窗口生命周期、用服务取代绑定到上下文的绑定、用直接的应用和窗口 API 取代 v2 运行时包,以及重新生成前端绑定。
我们发布了v2 到 v3 迁移指南,其中逐步介绍了这些变化,并包含功能对应表和测试检查清单。该手动指南是此 Beta 版支持的迁移路径。请不要期望每个 v2 项目都能无需审查便完成转换:请测试迁移结果,有意识地移植运行时调用,并在新应用准备就绪前继续保留 v2。
我们也在评估一款实验性的迁移助手。它不属于此次 beta 版本;只有在使用具有代表性的真实 v2 项目对其完成验证后,我们才会推荐使用。
坦诚谈谈这段历程
首个 v3 alpha 标签发布于2023年1月18日。alpha 阶段持续了很长时间,不能只含糊地一笔带过。
在此期间,项目发生了巨大变化。2021 年 9 月,首个面向 Windows 的 Wails v2 beta 版发布时,该仓库约有 4000 个 star。到 2022 年 9 月 v2 发布时,这一数字约为 10300。如今已超过 35000。这种增长是一种荣幸,但也改变了妥善维护项目的方式:更多用户依赖发布决策,更多贡献者需要清晰的参与途径,而更多工作也转向了提高项目的可预测性,而不再只是添加下一个功能。
我并非总能像这种增长所要求的那样迅速、清晰地调整我们的流程。这是我的责任。解决办法不是许下宏大承诺,也不是让每项决策都充满繁文缛节;而是更清楚地说明哪些内容受到支持、哪些属于实验性质、决策如何制定,以及我们接下来要做什么。
这项工作从此次 beta 开始。我们现在为 beta、候选发布版和正式发布(GA)设定了明确的里程碑,作出了更清晰的兼容性承诺,更新了安全策略,并为公共行为变更和新增功能建立了 WEP(Wails Enhancement Proposal,Wails 增强提案)流程。随着 Wails 的发展,我们将继续完善路线图并审视项目治理。我们的目标是让项目更值得信赖、更便于贡献,而不是让它更难推进。
我们还将重新启用 Wails subreddit,并在 v3 迈向正式发布的过程中积极维护它,使其成为另一个开展实践讨论、提出问题和提供反馈的平台。
安装并试用 beta 版本
版本发布后,使用以下命令安装最新的 v3 CLI:
go install github.com/wailsapp/wails/v3/cmd/wails3@latest
创建项目之前,请运行引导式设置向导。它会检查你的本地开发环境,并帮助配置 Wails 所需的依赖项:
wails3 setup

创建项目
一切准备就绪后,使用以下命令创建项目:
wails3 init
- 文档:https://v3.wails.io/
- 迁移指南:https://v3.wails.io/migration/v2-to-v3/
- Reddit:https://www.reddit.com/r/wails/
- 发行说明:版本占位符
如果你发现了可复现的 bug,请提交报告,并附上 wails3 doctor 的输出;如有可能,还请提供最小示例。如果你想提议新增功能或更改公共行为,请发起一份 WEP PR 草案,而不要创建功能请求 issue。这两种途径都有助于我们作出清晰回应,并推动 beta 阶段持续进展。
致谢
正是因为有人测试尚未完成的构建、报告棘手的 bug、翻译文档、回答问题、贡献代码,并不断推动项目变得更好,Wails v3 才得以诞生。谢谢大家。
我们还要向陪伴 Wails 走过这段漫长过渡期的赞助者致以格外诚挚的感谢。你们的支持不仅维持了项目运转,还让我们有机会持续投入时间改进架构、工具、测试和文档,从而推动项目加速迈向 v3。每一位测试者和贡献者都帮助塑造了这个版本,而赞助者则让我们能够给予这些工作应有的重视。
此次 beta 诚邀你帮助我们妥善完成 v3。请试用它、用它进行构建、告诉我们它会在哪里出问题,并帮助我们以审慎而迅速的方式迈向 3.0。