Tauri 2.0 Release Candidate
我们非常自豪地最终宣布推出 Tauri 新主要版本的首个候选发布版。
经过半年多的 Beta 版本,以及一年多的 Alpha 版本之后,我们终于认为 Tauri 2 已稳定,并且不再预计会有重大更改。
我们希望使用相对较短的候选发布版时间范围,以专注于我们的文档和重要的错误修复,这些错误修复是由我们出色的社区和工作组成员报告的。
在本帖末尾可以找到简化的 TL;DR。
The Road to Stable and Beyond
通过此候选发布版,我们希望传达我们对稳定版本的期望和时间表。
我们已经被无数次问到“Wen Tauri 2.0?”,并且总是给出广泛的答案。尤其是在开源项目中,过度承诺可能是快速耗尽开发人员和维护人员精力或导致失望的采用者发表愤怒评论的快捷方式。
这是漫长的 Alpha 和 Beta 阶段的原因之一,也是我们等待发布候选版本的原因,因为我们力求把事情做好并使其易于使用。
另一个原因是我们在过度承诺这个主要版本时犯了一个错误,即“移动端作为一等公民”,并且在过去的几个月中意识到,我们只能自己构建移动端的基础,并且需要与社区和我们的采用者一起迭代才能使其正确。
这并不意味着移动端已损坏且不受支持。我们在官方插件仓库中拥有移动插件,并且已经看到开发人员使用 Tauri 在 Android 和 iOS 上构建了很酷的应用程序。
我们的合作伙伴 CrabNebula 还向我们提供了关于开发人员在为客户构建或支持移动应用程序时开发体验有多么容易(或复杂)的反馈。他们甚至贡献了多个移动插件(NFC、条形码扫描器、生物识别、触觉反馈、地理定位),作为他们工作的一部分。
我们看到了移动端开发体验的改进空间,并且我们承认并非我们所有的桌面功能和插件都已移植或在移动端上可用。
这导致我们说我们不想提高 Tauri 2.0 将成为 “移动端作为一等公民” 版本的期望,但我们想明确表示,您现在可以使用 Tauri 开发生产就绪的移动应用程序。
在此候选发布版之后,您可以从稳定版中期待的是
- 更清晰和全面的文档
- 更少的阻止高效使用的严重错误
我们计划在 8 月底发布 2.0 的稳定版本。在撰写本文时,这将允许大约 4 周的候选发布周期。
稳定版本发布后,我们的重点将转移到尽可能提供功能对等性并改进移动端的开发流程。这将在 Tauri 的次要版本中实现。
功能对等性和插件开发将与 Tauri 的主要版本对齐,但在很大程度上将独立于 Tauri 核心功能,并在我们的 plugin-workspace 仓库中进行。
开发人员体验对我们来说是一个非常重要的话题。如果您有改进建议或想自行改进现状,请随时通过 PR、问题或在我们 Discord 服务器上的友好对话与我们联系。
Breaking Changes
在我们进入“不再有重大更改”的预期阶段之前,我们讨论并计划了一些我们认为必要的重大更改。
这些更改影响了很多开发人员,因此我们希望将它们捆绑在一起,并尽可能轻松地从最新的 Beta 版升级到候选发布版或稳定版。
对于应用程序开发人员,我们在权限中引用核心插件的方式上进行了重大更改。
您应该能够从最新的 Beta 版自动迁移到候选发布版。为了成功迁移,您必须确保您使用的是最新版本(RC 而不是 Beta 版)的 Tauri CLI。
否则,请阅读下面的详细部分 below,其中解释了更改以及如何手动迁移。
对于 Tauri 作为库的下游使用者或摆弄 Tauri 内部结构的应用程序开发人员,我们有一个更大的 重构,您应该查看一下。
Tauri Core Plugins
在 Tauri 2.0 中,我们将 1.x 的大多数核心功能迁移到单独的插件中,这使我们能够独立于 Tauri 的核心对这些功能进行迭代,并降低了首次贡献者在功能方面的门槛。
此迁移还包括将某些功能保留在 Tauri 内部作为伪插件。完全限定的插件需要实现 Plugin Trait
,并且需要是遵循 tauri-plugin-<plugin name>
命名方案的单独 crate。对于核心插件,第二个条件是不可能的,因为我们会在 Tauri 上产生循环依赖。因此,我们创建了伪插件,这些插件始终由 Tauri 本身初始化,并且仅实现插件 trait。例如,window
、path
或 webview
。现在,在您的 Tauri 应用程序的 capabilities 中,以下列方式允许使用这些插件
..."permissions": [ "path:default", "event:default", "window:default", "app:default", "image:default", "resources:default", "menu:default", "tray:default"]...
这有多个问题
- 任何具有冲突名称的插件 crate 都会破坏我们的构建过程(例如
tauri-plugin-window
crate)和我们的用于添加插件的 cli(例如cargo tauri add window
) - 我们无法使用任何已被现有插件使用的核心伪插件命名(例如,如果我们将来想创建
tauri-plugin-mobile-core
并且它已被使用,我们将遇到第一个问题) - 对于开发人员来说,在查看 capabilities 时,不清楚什么是核心插件,什么是专用插件
我们的方法是为核心插件使用固定的命名空间,该命名空间已记录在案并由 Tauri 核心强制执行。所有以 core:
开头或插件名称为 core
的插件现在都被视为核心伪插件,并且只有在它们位于 Tauri 代码库中时才会被初始化。
这将对所有启用 Tauri 核心功能的 capabilities 造成重大更改。上面的示例将更改为如下所示
..."permissions": [ "core:path:default", "core:event:default", "core:window:default", "core:app:default", "core:image:default", "core:resources:default", "core:menu:default", "core:tray:default"]...
我们还添加了一个新的特殊 core:default
权限集,其中将包含所有核心插件的所有默认权限,因此您可以简化 capabilities 配置中的权限样板代码。
..."permissions": [ "core:default"]...
我们认为核心默认暴露在合理安全且默认情况下启用是安全的,在前端受到攻击的情况下影响有限。
要从最新的 Beta 版本迁移,您需要在 capabilities 中将所有核心权限标识符都加上 core:
前缀,或者切换到 core:default
权限并删除旧的核心插件标识符。
Development Server for Mobile
我们对内置开发服务器的网络暴露引入了更改 PR #10437 和 PR #10456。通过 Tauri CLI 2.0.0-rc.0 版本中发布的更改,当以 Android 和 iOS 为目标时,我们可以连接到在 localhost 上运行的开发服务器(以前这仅在开发桌面应用程序时才有可能)。
这意味着您不再需要将您的开发服务器暴露在公共网络上。
Rust API Surface Refactor
通过多个工作组成员的协同努力,我们部分更改了我们的 Rust API 暴露。这仅影响我们 Rust API 的使用者,并且应该对 Tauri 应用程序开发人员没有重大更改影响。
这是由最近的安全公告 CVE-2024-35222 驱动的,因为修复程序需要向直接公开的结构引入其他字段,并对某些项目和内部使用造成了重大更改。
我们得出的结论是,这种过度暴露将来会阻碍我们,并会导致不必要的重大更改,因此我们决定从 Beta 版到 RC 版将是我们实现这一目标的最后机会,直到我们开始 Tauri 3.0 的道路。
我们减少了旨在供内部使用的公共暴露组件的数量。此外,我们将公共暴露的结构设为非穷举的,或者将它们转换为公开构建器模式或构造函数。在某些情况下,我们添加了一个新的 extend
字段,以便将来进行动态添加。最后,我们确保记录 Tauri 的哪些模块被认为是不稳定的。
这将帮助我们提供(安全)修复或更改,而不会破坏被认为是稳定的接口。
请仔细查看 #10158 pull request 中引入和讨论的更改。
External Security Audit
在这方面,我们已经沉默了一段时间,因为我们一直忙于修复和讨论在 Beta 版本期间发现的问题。
我们从未将 2 Beta 版本宣传为生产就绪,但意识到有些应用程序已部署到生产环境。这导致我们宣布并分发了针对其中一项发现的安全补丁 (CVE-2024-35222),该补丁也由 Tauri 社区成员独立发现。
所有其他发现都在多个 Beta 版本中修复,但我们没有为这些发现创建公告。我们得出的结论是,全面的预警可以等到候选发布版,因为这些发现主要影响开发阶段或没有严重的严重性。
在候选发布版中,我们将把完整的报告添加到我们的仓库中。请花时间阅读报告,并了解更多关于 @gronke 和 @pcwizz(来自 RadicallyOpenSecurity)的杰出工作。
整个审核由 NLNet 的优秀人士资助,我们非常感谢能够处于获得全额资助的外部安全审核的特权地位。
Call to Action
以上所有主题都有一个共同的主题。如果没有社区、我们的工作组和其他致力于改善现状的运动的持续支持,这些都不可能实现。
在我们发布 Tauri 2.0 之前,我们想确保 您 的声音被听到,您的 PR 得到确认,并且文档对 您 有帮助,以便您可以构建下一代跨平台应用程序。
目前,我们在 Github 上的工作组中有 30 多人,但在我们的 Discord 中有更多人参与。这些出色的人员大部分都在业余时间从事 Tauri 的工作,极少数例外。我们目前看到许多问题、PR 和讨论未解决且开放的时间比我们希望的要长。
为了改善这种情况,我们请 您 参与 Tauri 项目。我们有各种情况可以接受即使是最微小的贡献。
如果您熟悉 Tauri 并且在您的旅程中已经使用过它,请花时间查看 Github Discussions、Github Issues 和我们的 Discord Support。也许您已经解决了您的 Tauri 新手伙伴现在正在经历的问题。
如果您认为您看到的这些问题中的某些问题是通用的,并且应该记录在某个地方,那么我们的官方 文档 中可能有一个完美的位置。
要贡献改进或添加内容,我们欢迎在 tauri-docs 仓库中提交 PR。请确保您已阅读 贡献指南。
如果您能够理解并将当前的文档翻译成您的母语,我们感谢对我们的文档进行 内容翻译。
如果您关注我们的项目已经有一段时间了,但从未做出过贡献,我们很乐意了解是什么阻止了您这样做以及我们如何改进这一点。请在我们的 Discord 或我们的 Github Discussions 中与我们联系。
Too Long Didn’t Read
- Tauri 2.0 候选发布版现已发布!
- 需要从 Beta 版进行一些迁移。查看
tauri migrate
。 - 2.0 的外部安全审核在 here 可用
- 所有发现均已修复,修复已验证
- 文档是我们稳定版本发布之前的重点
- Tauri 正在寻找更多贡献者和社区参与
© 2025 Tauri 贡献者。CC-BY / MIT