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 经验且交付时间很紧。

参考