跳到内容
Tauri

Tauri 2.0 发布候选版

我们非常自豪地宣布 Tauri 新主要版本的第一个发布候选版本。

经过半年多的 Beta 版本和一年多的 Alpha 版本之后,我们终于达到了 Tauri 2 稳定化的阶段,并且不再预期会有重大变更。

我们希望利用相对较短的发布候选阶段,专注于文档和重要的错误修复,这些错误已由我们出色的社区和工作组成员报告。

本帖末尾提供了简化的太长不看

通过此发布候选版本,我们希望传达对稳定版发布的预期和时间表。

我们曾无数次被问到“Tauri 2.0 什么时候出?,并总是给出宽泛的回答。特别是在开源项目中,过度承诺可能会导致开发者和维护者迅速倦怠,或者引来失望的采用者愤怒的评论。

这是 Alpha 和 Beta 阶段持续时间较长,以及我们等待发布候选版本的原因之一,因为我们力求把事情做得正确且易于使用。

另一个原因是,我们错误地承诺这个主要版本将“移动端作为一等公民”,并在过去几个月意识到,我们只能自己构建移动端的基础,需要与社区和我们的采用者一起迭代才能做到最好。

这并不意味着移动端是坏的或不受支持的。我们的官方插件仓库中有移动端插件,并且我们看到有开发者使用 Tauri 在 Android 和 iOS 上构建了很酷的应用程序。

我们的合作伙伴 CrabNebula 也向我们提供了关于他们在为客户构建或支持移动应用程序时的开发者体验(简单或复杂)的反馈。他们甚至在工作中贡献了多个移动端插件(NFC条形码扫描器生物识别触觉反馈地理定位)。

我们看到移动端开发体验还有改进空间,并且我们承认并非所有桌面功能和插件都已移植或在移动端可用。

这使得我们不得不说,我们不想提高对 Tauri 2.0 将成为“移动端作为一等公民”的发布版本的期望,但我们想明确表示,您现在就可以使用 Tauri 开发生产就绪的移动应用程序。

在此发布候选版本之后,您可以从稳定版中期待:

  • 更清晰、更全面的文档
  • 更少的阻碍生产性使用的严重错误

我们计划在八月底发布 2.0 的稳定版。截至撰写本文时,这将允许大约 4 周的发布候选周期。

稳定版发布后,我们的重点将转向尽可能提供功能对等性并改进移动开发流程。这将在 Tauri 的次要版本中进行。

功能对等性和插件开发将与 Tauri 的主要版本保持一致,但主要独立于 Tauri 核心功能,并将在我们的 plugin-workspace 仓库中进行。

开发者体验对我们来说是一个非常重要的主题。如果您有改进建议或想自行改善现状,请随时通过 PR、issues 或在我们 Discord 服务器上的友好交流联系我们。

在我们进入“不再有重大变更”的预期阶段之前,我们已经讨论并计划了一些从我们角度来看必要的重大变更。

这些更改会影响大量开发者,因此我们希望将它们捆绑在一起,并尽可能无痛地从最新的 Beta 版本升级到发布候选版本或稳定版。

对于应用程序开发者,我们在权限中引用核心插件的方式发生了重大变更。

您应该能够从最新的 beta 版本自动迁移到发布候选版本。为此,您必须确保使用的是 Tauri CLI 的最新版本(RC 而非 beta)。

否则,请阅读以下详细部分,其中解释了更改以及如何手动迁移。

对于 Tauri 库的下游消费者或正在研究 Tauri 内部的应用程序开发人员,我们有一个更大的重构,您应该查看一下。

Tauri 2.0 中,我们已将 1.x 的大部分核心功能迁移到独立的插件中,这使得我们能够独立于 Tauri 核心进行迭代,并降低了首次贡献者在功能方面的门槛。

此次迁移还包括将一些功能保留在 Tauri 内部作为伪插件。完全合格的插件需要实现 Plugin Trait,并且需要是遵循 tauri-plugin-<plugin name> 命名方案的独立 crate。对于核心插件,第二个条件是不可能的,因为我们会在 Tauri 上产生循环依赖。因此我们创建了伪插件,它们始终由 Tauri 本身初始化,并且只实现插件 trait。例如 windowpathwebview。目前,这些在 Tauri 应用程序的功能中允许以下方式

...
"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,而它已被使用,我们将遇到第一个问题)
  • 在查看功能时,开发者不清楚什么是核心插件,什么是专用插件

我们的方法是为核心插件使用一个固定的命名空间,该命名空间由 Tauri 核心记录和强制执行。所有以 core: 开头或插件名称为 core 的插件现在都被视为核心伪插件,并且只有在 Tauri 代码库中才会被初始化。

这将导致所有启用 Tauri 核心功能的权限发生重大变更。上面的示例将更改为如下所示:

...
"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 权限集,其中将包含所有核心插件的所有默认权限,这样您就可以简化功能配置中的权限样板代码。

...
"permissions": [
"core:default"
]
...

我们认为核心默认暴露是相当安全可靠的,可以默认启用,在前端受损的情况下影响有限。

要从最新 Beta 版本迁移,您需要将功能中的所有核心权限标识符前置 core:,或者切换到 core:default 权限并删除旧的核心插件标识符。

我们对内置开发服务器的网络暴露进行了更改:PR #10437PR #10456。通过 Tauri CLI 2.0.0-rc.0 版本中发布的更改,我们可以在针对 Android 和 iOS 时连接到在 localhost 上运行的开发服务器(以前这仅在开发桌面应用程序时才可能)。

这意味着您不再需要将开发服务器暴露在公共网络上。

通过多个工作组成员的协同努力,我们部分更改了 Rust API 的暴露方式。这仅影响我们 Rust API 的消费者,对 Tauri 应用程序开发者应该没有重大变更影响。

这源于最近的安全咨询 CVE-2024-35222,因为修复需要向直接公开的结构引入额外字段,并导致某些项目和内部使用中出现重大变更。

我们得出结论,这种过度暴露将来会阻碍我们,并导致不必要的重大更改,因此我们决定从 beta 版本到 RC 版本将是我们实施此更改的最后机会,直到我们开始 Tauri 3.0 的开发之路。

我们减少了公开暴露的、用于内部使用的组件数量。此外,我们将公开暴露的结构要么设置为不可穷尽,要么转换为公开构建器模式或构造函数。在某些情况下,我们添加了一个新的 extend 字段,以允许将来动态添加。最后,我们确保记录 Tauri 的哪些模块被认为是不稳定的。

这将帮助我们在不破坏被认为是稳定的接口的情况下提供(安全)修复或更改。

请仔细查看 #10158 拉取请求中引入和讨论的更改。

我们在这方面一直保持沉默,因为我们一直忙于修复和讨论 Beta 版本中发现的问题。

我们从未将版本 2 Beta 版本宣传为生产就绪,但我们知道有一些应用程序已部署到生产环境。这导致我们宣布并分发了针对其中一个发现 (CVE-2024-35222) 的安全补丁,该补丁也由 Tauri 社区成员独立发现。

所有其他发现都在多个 Beta 版本中修复,但我们没有为此创建咨询。我们得出结论,可以等到发布候选版本再全面公开,因为这些发现主要影响开发阶段或没有严重性。

通过发布候选版本,我们将完整报告添加到我们的仓库中。请花时间阅读报告,并了解更多关于 @gronke@pcwizz 来自 RadicallyOpenSecurity 的出色工作。

整个审计由 NLNet 的优秀团队资助,我们非常感谢能够获得全额资助的外部安全审计。

上述所有主题都共享一个共同的主题。如果没有社区、我们的工作组以及其他致力于改善现状的运动的持续支持,这些都将是不可能实现的。

在发布 Tauri 2.0 之前,我们希望确保倾听您的声音,认可您的 PR,并且文档对**您**有用,以便您可以构建下一代跨平台应用程序。

目前,我们的 Github 工作组有 30 多人,甚至更多人参与到我们的 Discord 中。这些优秀的人员大多在业余时间从事 Tauri 的工作,只有极少数例外。我们目前看到许多问题、PR 和讨论未解决并长时间开放,这超出了我们的预期。

为了改善这种情况,我们恳请**您**参与 Tauri 项目。在各种情况下,我们都能接受即使是微小的贡献。

如果您熟悉 Tauri 并且在您的旅程中已经使用过它,请花时间查看 Github 讨论Github Issues 和我们的 Discord 支持。也许您已经解决了 Tauri 新手现在正在遇到的问题。

如果您认为您所看到的一些问题是普遍性的,并且应该在某个地方记录下来,那么我们的官方文档中可能就是最适合的地方。

为了贡献改进或新增内容,我们欢迎 tauri-docs 仓库中的 PR。请务必阅读贡献指南

如果您有能力理解并将当前文档翻译成您的母语,我们非常感谢对我们文档的内容翻译

如果您关注我们的项目已有一段时间但从未做出贡献,我们很乐意了解是什么阻碍了您,以及我们如何改进这一点。请在我们的 DiscordGithub Discussions 中联系我们。


© 2025 Tauri 贡献者。CC-BY / MIT