基于Rust构建轻量级桌面应用工具-Tauri


Tauri 是一个桌面 UI 框架,可让开发者使用每个平台的 Webview 技术栈为所有主要桌面操作系统构建应用程序,目前支持 Windows/macOS/Linux 等平台。开发者通过它几乎可以为任何可编译为 HTML、JS 和 CSS 的前端框架来构建桌面 UI。核心库采用 Rust 编写,使用 Tauri 开发的应用程序的后端是一个基于 Rust 的二进制文件,带有一个前端可以与之交互的 API,通过 JS Api 调用后台接口。采用MIT或ApacheV2.0双协议授权方式。
Tauri is a framework for building tiny, blazingly fast binaries for all major desktop platforms. Developers can integrate any front-end framework that compiles to HTML, JS and CSS for building their user interface. The backend of the application is a rust-sourced binary with an API that the front-end can interact with.

Tauri为所有主要桌面平台构建小巧、快速的二进制文件。开发人员可以集成任何可编译为 HTML、JS 和 CSS 的前端框架,以构建其用户界面。应用程序的后端是一个基于 Rust 的二进制文件,带有一个前端可以与之交互的 API。Tauri 应用程序的用户界面目前在 macOS 和 Windows 上利用 tao 作为窗口处理库,在 Linux 上通过 Tauri 团队孵化和维护的 WRY 利用 WebKit、Windows 上的 WebView2 和 Linux 上的 WebKitGTK 创建一个统一的系统 webview(和其他好东西,如菜单和任务栏)接口。
特性:
无本地主机
安全模式的自定义协议
动态超前编译(dAoT)与功能树摇动
功能性地址空间布局随机化
运行时对函数名和信息进行 OTP salting
CSP 注入
最新版本:1
2023年5月上旬发布的1.3版本变化包括安全改进、引入新功能和修复重要错误。
引入 NSIS:Tauri CLI 现在可以使用 NSIS 创建 Windows 应用程序安装包。这个新的 bundle target 目前作为一项实验性功能在 macOS 和 Linux 上可用,因此开发者可以交叉编译 Windows 安装程序。NSIS 的文档将很快发布。
外部 API 访问:开发团队表示,这是迄今为止最具影响力和最耗时的 PR。此 PR 为应用程序引入了一种简化的方式,允许外部域访问 Tauri IPC 层 ,并且使用主要影响 Tauri 应用程序的安全模型。安全影响取决于暴露的特性、启用的 Tauri 命令和对方的能力。有人将这项新功能比喻为在没有启用任何安全功能的情况下驾驶非常快的赛车,并敦促开发者非常非常仔细地考虑他们是否真的需要这种暴露。
浏览器参数 (Browser Arguments):由于某些 webview 功能未启用或无法访问,社区引入了向 webview 进程添加额外参数的可能性,该进程在新窗口中创建。此功能在 window 端点中暴露给前端。开发团队发现这种暴露风险很高,因为大多数 webview 具有非常有影响力的功能和标志,可以通过进程参数允许授权。
更多详情查看发行公告。
Tauri v2 首个 Beta 已于2024年2月上旬发布,新版本添加了对移动端(iOS 和 Android)的支持。其发行公告写道:“Tauri v2 是支持跨平台开发的一个重大里程碑,开发桌面和移动应用程序从未如此简单。你可以将现有的桌面程序无缝迁移到移动设备,并获得原生 API 和 Tauri CLI 的出色开发者体验”。新特性如下:
改进 IPC与支持多 Webview,实现多个窗口 API
新增菜单和托盘图标 JavaScript APIs、原生上下文菜单
移动端原生 API 目前支持通知、对话框、NFC、条形码读取、生物识别、剪贴板和深度链接 (deep link)
最新版本:2
v2.0 稳定版已于2024年10月上旬正式发布,主要新特性和改进如下:
移动支持:添加了对 iOS 和 Android 的支持。
多 WebView 支持:支持在应用中使用多个 WebView,通过不稳定特性标志启用。
rustls-tls 特性标志:添加了对 rustls TLS backend 的支持。
窗口阴影选项:创建 WebView 窗口时添加了设置窗口阴影的选项。
IPC 模块:添加了新的 IPC 模块,支持原始数据传输。
文件系统模块:添加了新的文件系统模块和 API。
自动启动:支持应用在系统启动时自动启动。
条形码扫描器:允许移动应用使用相机扫描条形码。
生物识别:在 Android 和 iOS 上提示用户进行生物识别验证。
剪贴板访问:读取和写入系统剪贴板。
命令行界面:解析命令行界面的参数。
深度链接:将 Tauri 应用程序设置为 URL 的默认处理程序。
对话框:打开和保存文件的原生系统对话框。
全局快捷键:注册全局快捷键。
HTTP 客户端:使用 Rust 编写的 HTTP 客户端。
本地主机:在生产应用程序中使用本地主机服务器。
日志记录:可配置的日志记录。
NFC:在 Android 和 iOS 上读取和写入 NFC 标签。
通知:向用户发送原生通知。
操作系统信息:读取操作系统信息。
持久作用域:在文件系统上持久化运行时作用域更改。
定位器:将窗口移动到常见位置。
进程访问:访问当前进程。
Shell:访问系统 Shell,使用默认应用程序管理文件和 URL,并生成子进程。
单实例:确保 Tauri 应用只有一个实例在运行。
SQL:为前端提供了与 SQL 数据库通信的接口。
存储:持久化键值存储。
加密数据库:提供加密、安全的数据库。
系统托盘:添加了系统托盘支持。
自动更新:为 Tauri 应用程序提供应用内更新。
文件上传:通过 HTTP 上传文件。
WebSocket:使用 Rust 客户端在 JavaScript 中打开 WebSocket 连接。
窗口自定义:自定义窗口状态,包括窗口大小和位置。
v2.0的核心优势
1. 真正的跨平台统一开发
Tauri v2.0 扩展了对移动端的支持,解决了以往桌面与移动端需要分别使用不同框架(如 Electron + React Native)的复杂性。一套代码即可构建适配桌面(Windows、macOS、Linux)与移动端(iOS、Android)的应用程序。应用场景:
1).开发需要同时覆盖 PC 和移动端的工具型应用。
2).适配多屏设备,如平板、折叠屏和三折屏手机。
这一优势对小型企业、独立开发者尤其具有吸引力,可显著降低开发和维护成本。此外,随着折叠屏手机和平板市场的快速增长,多端统一适配已经成为提升产品竞争力的重要环节。
2. 极致轻量
Electron 最大的缺点在于其“臃肿”的内核设计:每个 Electron 应用都捆绑了一个完整的 Chromium 内核,导致包体积动辄超过 100MB,且运行时内存占用高。Tauri v2.0 提供了完全不同的解决方案:
1).利用原生 WebView 渲染: 无需内嵌浏览器内核,大幅缩减了包体积。
2).Rust 编译后端: Rust 提供高效的内存管理和极快的运行性能,生成轻量级的二进制文件。
真实案例:某 NoSQL 数据库客户端在从 Electron 迁移到 Tauri 后,包体积从 200MB+ 降至 10MB,运行效率显著提升,用户体验得到极大改善。这种体积和性能上的提升对资源有限的设备尤为重要,例如内存较小的嵌入式设备和老旧系统。
3. 安全性更强
Rust 的内存安全特性使得 Tauri 的后端更加稳定和安全。Tauri 2.0 在此基础上加入了多项安全优化:
1).细粒度权限控制:开发者可以精确管理应用的权限,杜绝过度授权。
2).改进的前后端通信:重构后的通信机制进一步减少了潜在的安全漏洞。
3).安全审计机制:Tauri 在框架层面提供了完整的安全审计支持。
与 Electron 基于 Node.js 的架构相比,Tauri 的安全性优势尤为突出,尤其在需要处理敏感数据的企业应用中更具竞争力。
4. 插件生态的崛起
v2.0 将部分核心功能模块化,推出了插件系统,允许开发者根据实际需求自由安装所需的功能插件。这种设计不仅减少了无用依赖,也显著提升了开发的灵活性。插件的优点:
1).按需加载:减少冗余依赖,降低包体积。
2).丰富的扩展能力:社区开发的插件大幅增强了框架的功能。
通过插件生态,开发者不仅可以像搭积木一样定制应用程序,还能通过共享和扩展插件推动整个社区的发展。
与 V1 的升级对比
相比 Tauri V1,Tauri 2.0 带来了以下显著升级:
1).全平台支持:从仅支持桌面端扩展为支持桌面和移动端。
2).插件生态:引入插件化设计,提升开发灵活性。
3).安全性提升:引入更细粒度的权限管理和安全审计。
4).开发体验优化:支持热重载功能,加快开发和调试过程。
这些改进让 v2.0 成为真正意义上的跨平台统一开发框架。
与传统框架的对比
Tauri v2.0 的出现使其成为桌面与移动端统一开发的强大选择。那么它与 Electron、WPF 和 QT 等传统框架相比有哪些不同?
小结:
Tauri 2.0:适合需要轻量化、全端统一开发的应用。
Electron:适合快速开发桌面端工具,但性能和资源占用问题明显。
WPF:适合 Windows 平台下复杂的企业级应用。
QT:高性能需求和工业级应用的最佳选择。
Tauri 和 Electron 的代表性应用
基于 Electron 的经典应用
VSCode:全球使用量最高的代码编辑器。
Slack:流行的企业协作工具。
Figma:专业的在线设计软件。
Discord:语音与聊天平台。
Trello:敏捷项目管理工具。
基于 Tauri 的优秀应用
DocKit:轻量级跨平台 NoSQL 数据库客户端。
Volt:高效的开源桌面聊天工具。
Impersonate:基于 Tauri 的用户切换安全工具。
尽管 Electron 应用生态更加成熟,但 Tauri 以其更轻量、更高效的特性正在快速吸引开发者和新项目。Tauri v2.0 的发布为跨平台开发树立了新标准。相比 Electron,其轻量化的包体积、强大的性能和全面的安全性使其成为一股不可忽视的力量。而相比于传统桌面开发工具如 WPF 和 QT,Tauri 更加现代化,适合小型团队和独立开发者的实际需求。在寻找高效、轻量、安全的开发框架时,Tauri v2.0 是一个值得尝试的选择。无论是桌面工具还是多端统一应用,Tauri 都能帮助开发者打造更好的软件体验。一起告别 Electron 的臃肿,拥抱 v2.0 的轻量与高效!
更多更新详情查看发行公告。
项目主页:https://github.com/tauri-apps/tauri
Tauri is a framework for building tiny, blazingly fast binaries for all major desktop platforms. Developers can integrate any front-end framework that compiles to HTML, JS and CSS for building their user interface. The backend of the application is a rust-sourced binary with an API that the front-end can interact with.

Tauri为所有主要桌面平台构建小巧、快速的二进制文件。开发人员可以集成任何可编译为 HTML、JS 和 CSS 的前端框架,以构建其用户界面。应用程序的后端是一个基于 Rust 的二进制文件,带有一个前端可以与之交互的 API。Tauri 应用程序的用户界面目前在 macOS 和 Windows 上利用 tao 作为窗口处理库,在 Linux 上通过 Tauri 团队孵化和维护的 WRY 利用 WebKit、Windows 上的 WebView2 和 Linux 上的 WebKitGTK 创建一个统一的系统 webview(和其他好东西,如菜单和任务栏)接口。
特性:
无本地主机
安全模式的自定义协议
动态超前编译(dAoT)与功能树摇动
功能性地址空间布局随机化
运行时对函数名和信息进行 OTP salting
CSP 注入
最新版本:1
2023年5月上旬发布的1.3版本变化包括安全改进、引入新功能和修复重要错误。
引入 NSIS:Tauri CLI 现在可以使用 NSIS 创建 Windows 应用程序安装包。这个新的 bundle target 目前作为一项实验性功能在 macOS 和 Linux 上可用,因此开发者可以交叉编译 Windows 安装程序。NSIS 的文档将很快发布。
外部 API 访问:开发团队表示,这是迄今为止最具影响力和最耗时的 PR。此 PR 为应用程序引入了一种简化的方式,允许外部域访问 Tauri IPC 层 ,并且使用主要影响 Tauri 应用程序的安全模型。安全影响取决于暴露的特性、启用的 Tauri 命令和对方的能力。有人将这项新功能比喻为在没有启用任何安全功能的情况下驾驶非常快的赛车,并敦促开发者非常非常仔细地考虑他们是否真的需要这种暴露。
浏览器参数 (Browser Arguments):由于某些 webview 功能未启用或无法访问,社区引入了向 webview 进程添加额外参数的可能性,该进程在新窗口中创建。此功能在 window 端点中暴露给前端。开发团队发现这种暴露风险很高,因为大多数 webview 具有非常有影响力的功能和标志,可以通过进程参数允许授权。
更多详情查看发行公告。
Tauri v2 首个 Beta 已于2024年2月上旬发布,新版本添加了对移动端(iOS 和 Android)的支持。其发行公告写道:“Tauri v2 是支持跨平台开发的一个重大里程碑,开发桌面和移动应用程序从未如此简单。你可以将现有的桌面程序无缝迁移到移动设备,并获得原生 API 和 Tauri CLI 的出色开发者体验”。新特性如下:
改进 IPC与支持多 Webview,实现多个窗口 API
新增菜单和托盘图标 JavaScript APIs、原生上下文菜单
移动端原生 API 目前支持通知、对话框、NFC、条形码读取、生物识别、剪贴板和深度链接 (deep link)
最新版本:2
v2.0 稳定版已于2024年10月上旬正式发布,主要新特性和改进如下:
移动支持:添加了对 iOS 和 Android 的支持。
多 WebView 支持:支持在应用中使用多个 WebView,通过不稳定特性标志启用。
rustls-tls 特性标志:添加了对 rustls TLS backend 的支持。
窗口阴影选项:创建 WebView 窗口时添加了设置窗口阴影的选项。
IPC 模块:添加了新的 IPC 模块,支持原始数据传输。
文件系统模块:添加了新的文件系统模块和 API。
自动启动:支持应用在系统启动时自动启动。
条形码扫描器:允许移动应用使用相机扫描条形码。
生物识别:在 Android 和 iOS 上提示用户进行生物识别验证。
剪贴板访问:读取和写入系统剪贴板。
命令行界面:解析命令行界面的参数。
深度链接:将 Tauri 应用程序设置为 URL 的默认处理程序。
对话框:打开和保存文件的原生系统对话框。
全局快捷键:注册全局快捷键。
HTTP 客户端:使用 Rust 编写的 HTTP 客户端。
本地主机:在生产应用程序中使用本地主机服务器。
日志记录:可配置的日志记录。
NFC:在 Android 和 iOS 上读取和写入 NFC 标签。
通知:向用户发送原生通知。
操作系统信息:读取操作系统信息。
持久作用域:在文件系统上持久化运行时作用域更改。
定位器:将窗口移动到常见位置。
进程访问:访问当前进程。
Shell:访问系统 Shell,使用默认应用程序管理文件和 URL,并生成子进程。
单实例:确保 Tauri 应用只有一个实例在运行。
SQL:为前端提供了与 SQL 数据库通信的接口。
存储:持久化键值存储。
加密数据库:提供加密、安全的数据库。
系统托盘:添加了系统托盘支持。
自动更新:为 Tauri 应用程序提供应用内更新。
文件上传:通过 HTTP 上传文件。
WebSocket:使用 Rust 客户端在 JavaScript 中打开 WebSocket 连接。
窗口自定义:自定义窗口状态,包括窗口大小和位置。
v2.0的核心优势
1. 真正的跨平台统一开发
Tauri v2.0 扩展了对移动端的支持,解决了以往桌面与移动端需要分别使用不同框架(如 Electron + React Native)的复杂性。一套代码即可构建适配桌面(Windows、macOS、Linux)与移动端(iOS、Android)的应用程序。应用场景:
1).开发需要同时覆盖 PC 和移动端的工具型应用。
2).适配多屏设备,如平板、折叠屏和三折屏手机。
这一优势对小型企业、独立开发者尤其具有吸引力,可显著降低开发和维护成本。此外,随着折叠屏手机和平板市场的快速增长,多端统一适配已经成为提升产品竞争力的重要环节。
2. 极致轻量
Electron 最大的缺点在于其“臃肿”的内核设计:每个 Electron 应用都捆绑了一个完整的 Chromium 内核,导致包体积动辄超过 100MB,且运行时内存占用高。Tauri v2.0 提供了完全不同的解决方案:
1).利用原生 WebView 渲染: 无需内嵌浏览器内核,大幅缩减了包体积。
2).Rust 编译后端: Rust 提供高效的内存管理和极快的运行性能,生成轻量级的二进制文件。
真实案例:某 NoSQL 数据库客户端在从 Electron 迁移到 Tauri 后,包体积从 200MB+ 降至 10MB,运行效率显著提升,用户体验得到极大改善。这种体积和性能上的提升对资源有限的设备尤为重要,例如内存较小的嵌入式设备和老旧系统。
3. 安全性更强
Rust 的内存安全特性使得 Tauri 的后端更加稳定和安全。Tauri 2.0 在此基础上加入了多项安全优化:
1).细粒度权限控制:开发者可以精确管理应用的权限,杜绝过度授权。
2).改进的前后端通信:重构后的通信机制进一步减少了潜在的安全漏洞。
3).安全审计机制:Tauri 在框架层面提供了完整的安全审计支持。
与 Electron 基于 Node.js 的架构相比,Tauri 的安全性优势尤为突出,尤其在需要处理敏感数据的企业应用中更具竞争力。
4. 插件生态的崛起
v2.0 将部分核心功能模块化,推出了插件系统,允许开发者根据实际需求自由安装所需的功能插件。这种设计不仅减少了无用依赖,也显著提升了开发的灵活性。插件的优点:
1).按需加载:减少冗余依赖,降低包体积。
2).丰富的扩展能力:社区开发的插件大幅增强了框架的功能。
通过插件生态,开发者不仅可以像搭积木一样定制应用程序,还能通过共享和扩展插件推动整个社区的发展。
与 V1 的升级对比
相比 Tauri V1,Tauri 2.0 带来了以下显著升级:
1).全平台支持:从仅支持桌面端扩展为支持桌面和移动端。
2).插件生态:引入插件化设计,提升开发灵活性。
3).安全性提升:引入更细粒度的权限管理和安全审计。
4).开发体验优化:支持热重载功能,加快开发和调试过程。
这些改进让 v2.0 成为真正意义上的跨平台统一开发框架。
与传统框架的对比
Tauri v2.0 的出现使其成为桌面与移动端统一开发的强大选择。那么它与 Electron、WPF 和 QT 等传统框架相比有哪些不同?
特性 | Tauri 2.0 | Electron | WPF | QT |
跨平台支持 | 桌面(Windows、macOS、Linux)+ 移动端(iOS、Android) | 桌面端(Windows、macOS、Linux) | Windows 平台为主,跨平台能力弱 | 跨平台,覆盖桌面与嵌入式 |
包体积 | 极小(~10MB) | 较大(>100MB) | 中等 | 中等 |
性能 | 高效(Rust 后端 + 原生 WebView) | 中等 | 中等(基于 DirectX 渲染) | 优异(基于 C++ 的高效内存管理) |
安全性 | 强(内存安全 + 权限控制) | 一般(Node.js 环境) | 中等 | 强 |
学习曲线 | 低(前端开发者友好) | 低(前端友好) | 中(需要 XAML 和 MVVM 框架) | 高(C++ 与 QT 信号槽机制复杂) |
小结:
Tauri 2.0:适合需要轻量化、全端统一开发的应用。
Electron:适合快速开发桌面端工具,但性能和资源占用问题明显。
WPF:适合 Windows 平台下复杂的企业级应用。
QT:高性能需求和工业级应用的最佳选择。
Tauri 和 Electron 的代表性应用
基于 Electron 的经典应用
VSCode:全球使用量最高的代码编辑器。
Slack:流行的企业协作工具。
Figma:专业的在线设计软件。
Discord:语音与聊天平台。
Trello:敏捷项目管理工具。
基于 Tauri 的优秀应用
DocKit:轻量级跨平台 NoSQL 数据库客户端。
Volt:高效的开源桌面聊天工具。
Impersonate:基于 Tauri 的用户切换安全工具。
尽管 Electron 应用生态更加成熟,但 Tauri 以其更轻量、更高效的特性正在快速吸引开发者和新项目。Tauri v2.0 的发布为跨平台开发树立了新标准。相比 Electron,其轻量化的包体积、强大的性能和全面的安全性使其成为一股不可忽视的力量。而相比于传统桌面开发工具如 WPF 和 QT,Tauri 更加现代化,适合小型团队和独立开发者的实际需求。在寻找高效、轻量、安全的开发框架时,Tauri v2.0 是一个值得尝试的选择。无论是桌面工具还是多端统一应用,Tauri 都能帮助开发者打造更好的软件体验。一起告别 Electron 的臃肿,拥抱 v2.0 的轻量与高效!
更多更新详情查看发行公告。
项目主页:https://github.com/tauri-apps/tauri