Tauri 介绍:用系统 WebView 构建跨平台桌面应用的框架
本文写于 2026 年 10 月,介绍 Tauri 的设计思路、能力边界与当前版本现状。
一句话: Tauri 是一个用「Web 前端 + Rust 后端」构建桌面(以及移动)应用的框架。它不打包浏览器内核,而是调用操作系统自带的 WebView,因此安装包通常只有几 MB。
它想解决什么问题
Electron 让「用 Web 技术写桌面应用」成为主流,代价是每个应用都要打包一份 Chromium 和 Node.js——安装包动辄 100–200 MB,一个空窗口也要吃掉几百 MB 内存。对用户是磁盘和内存,对开发者是分发体积。
Tauri 换了个思路:界面仍然是 HTML / CSS / JS,但渲染交给操作系统自带的 WebView,后端换成 Rust 编译出的原生二进制。
架构
前端(任意框架:React / Vue / Svelte / 甚至原生 HTML+JS)
↕ IPC(消息传递)
Rust 后端(#[tauri::command] / invoke)
↕
WRY —— WebView 抽象层
TAO —— 窗口 / 菜单 / 托盘(winit 的 fork)
↓
Windows: WebView2 | macOS: WKWebView | Linux: WebKitGTK
几个实现细节值得记住:
tauri.conf.json在编译期被读入,前端资源被嵌入、哈希、压缩进最终二进制;- 不发布运行时,产物就是编译出的 Rust 二进制,逆向成本随之上升;
- 前端与后端通过消息传递通信(
invoke/ 命令 / 事件),你可以只写 Rust 后端 + 任意前端,完全不装 Node 也能开工; - 不需要 Node 端做代理层,后端就是真正的原生代码,可以直接调系统 API、接本地数据库、开子进程。
和 Electron 比,差别在哪
| Electron | Tauri | |
|---|---|---|
| 渲染内核 | 每个应用自带一份 Chromium | 用系统 WebView(WebView2 / WKWebView / WebKitGTK) |
| 后端语言 | Node.js | Rust |
| 安装包 | 100–200 MB 量级 | 几 MB 量级(官方举例 3 MB 对比 200 MB / 600 MB) |
| 内存占用 | 每个应用一份内核,偏高 | 共享系统内核,偏低 |
| 渲染一致性 | 各平台完全一致 | 依赖系统 WebView 版本,会有差异 |
| 移动端 | 无官方方案 | 2.0 起官方支持 iOS / Android |
| 生态 | 极大(完整 npm) | 较小,但常见需求都有插件 |
它能做什么
- 窗口与桌面集成:多窗口、无边框窗口、系统托盘、菜单、全局快捷键、文件拖放;
- 系统能力(插件形式):通知、剪贴板、文件对话框、HTTP 请求、调用外部命令、自动启动、日志、单实例…;
- 分发链路自带:bundler 直接出
msi/nsis/dmg/AppImage/deb等格式,配代码签名与内置更新器; - 一套代码多端:2.0 之后同一套前端可以同时跑桌面和 iOS / Android;
- 插件体系:官方
tauri-plugin-*一整套,社区还有 awesome-tauri 名单。
安全模型
2.x 用 capabilities / permissions:可以精确到「哪个窗口能用哪条命令」,而不是笼统地开一大片系统权限(1.x 的 allowlist 已被取代)。Tauri 在 1.0 之前做过独立第三方安全审计(Radically Open Security),另有 Isolation Pattern 把前端与核心隔开。对于「前端页面可能被 XSS」这类风险,它比自带内核的方案更容易收敛爆炸半径。
版本演进
| 版本 | 时间 | 关键变化 |
|---|---|---|
| 1.0 | 2022-06 | 首个稳定版,仅桌面(Windows / macOS / Linux) |
| 2.0 | 2024-10 | 「移动端更新」:+ iOS/Android、API 插件化、权限细粒度化 |
| 2.12 | 2026-09 | 目前最大的一次 2.x 更新:正式放弃 Windows 7、MSRV 提到 1.90 |
当前主线是 2.12.x,1.x 已进入维护状态;新项目不要从 1.0 起步。
上手
npm create tauri-app@latest # 或 cargo create-tauri-app
cd my-app
npm run tauri dev # 开发模式
npm run tauri build # 出安装包
前置条件:Rust 工具链;Windows 需要 WebView2 运行时(Win11 自带,Win10 需安装);Linux 需要 webkit2gtk 等系统依赖。
什么时候该用,什么时候别用
适合:对安装包体积、内存占用敏感的工具类应用;需要同时覆盖 Windows / macOS / Linux(乃至移动端)而人力有限;团队愿意接受 Rust。
不适合:要求各平台渲染行为完全一致(系统 WebView 差异会咬人);必须自带内核对渲染有极致控制(那 Electron / CEF 更合适);团队完全没有 Rust 经验且交付时间很紧。