架构(Architecture)

介绍(Introduction)

Tauri 是一个 多语言(polyglot)且通用的应用开发工具包, 具有高度的可组合性,可以让工程师构建各种类型的应用程序。

Tauri 通过 Rust 工具链 + WebView 渲染 HTML 的方式构建应用程序。

一个 Tauri 应用通常包含:

  • JavaScript API
  • Rust API

WebView 可以通过 消息传递(message passing)机制 与系统交互。

开发者可以:

  • 扩展默认 API
  • 编写自己的系统功能
  • WebView 前端Rust 后端 连接起来。 ([Tauri][1])

Tauri 应用还支持:

  • 系统托盘(System Tray)
  • 自动更新
  • OS 原生管理方式

由于 Tauri 使用 操作系统自带的 WebView,因此应用体积非常小。

同时:

Tauri 的最终程序是 Rust 编译后的二进制文件, 因此 不会携带额外运行时(runtime)

这也是 Tauri 应用体积小且 逆向难度较高 的原因之一。 ([Tauri][1])


Tauri 不是什么(What Tauri is Not)

不是轻量内核封装

Tauri 不是一个轻量级 kernel wrapper

它直接使用底层库:

  • WRY
  • TAO

来完成与操作系统的交互。 ([Tauri][1])


不是虚拟机

Tauri 不是 VM 或虚拟化环境

它只是一个 构建 WebView 应用的工具包。 ([Tauri][1])


核心生态系统(Core Ecosystem)

Tauri 的核心架构由多个 Rust crate 组成。


tauri

tauri 是整个系统的 核心 crate

它负责:

  • 集成运行时
  • 宏(macros)
  • 工具库
  • API

编译阶段

  • 读取 tauri.conf.json
  • 解析配置
  • 生成应用配置

运行阶段

  • 注入脚本(polyfill 等)
  • 提供系统 API
  • 管理应用更新。 ([Tauri][1])

tauri-runtime

tauri-runtime 是:

Tauri 与 WebView 库之间的胶水层(Glue Layer)


tauri-macros

提供 Rust 宏,用于生成:

  • command handler
  • context
  • 命令注册代码

底层依赖:

tauri-codegen

tauri-utils

公共工具库,提供:

  • 配置文件解析
  • 平台识别
  • CSP 注入
  • 资源管理等功能。 ([Tauri][1])

tauri-build

tauri-build编译阶段工作。

它会:

  • 应用宏
  • 配置 Cargo
  • 准备构建环境。 ([Tauri][1])

tauri-codegen

负责:

  • 嵌入应用资源
  • 生成代码
  • 解析 tauri.conf.json

同时会:

  • 打包图标
  • 压缩资源
  • 生成 Config 结构体。 ([Tauri][1])

tauri-runtime-wry

这是 WRY runtime 的实现层

负责系统级功能,例如:

  • 打印
  • 显示器检测
  • 窗口管理。 ([Tauri][1])

Tauri 工具链(Tauri Tooling)

Tauri 还提供一整套工具。


JavaScript / TypeScript API

这是一个 TypeScript 库,用于:

  • 在前端导入 API
  • 调用 Rust 后端功能
  • 监听系统事件

该库提供:

  • CommonJS(cjs)
  • ES Modules(esm)

它通过 WebView 消息通信 实现前后端交互。 ([Tauri][1])


Bundler(打包工具)

一个 Rust / Shell 工具,用于:

  • 构建应用
  • 生成平台安装包

当前支持:

  • Windows
  • macOS
  • Linux

未来支持:

  • Mobile。 ([Tauri][1])

cli.rs

一个 Rust 编写的 CLI 程序

提供:

  • 项目开发
  • 构建
  • 打包
  • 运行等功能。 ([Tauri][1])

cli.js

JavaScript 包装器:

  • 基于 napi-rs
  • 用于生成 npm CLI。 ([Tauri][1])

create-tauri-app

用于:

快速创建 Tauri 项目模板。 ([Tauri][1])


上游组件(Upstream Crates)

Tauri 维护两个核心底层库:


TAO

TAO 是:

跨平台窗口管理库(Windowing Library)

支持:

  • Windows
  • macOS
  • Linux
  • iOS
  • Android

负责:

  • 创建窗口
  • 系统托盘
  • 菜单
  • 生命周期管理。 ([DevTools Guide][2])

WRY

WRY 是:

跨平台 WebView 渲染库

负责:

  • WebView 创建
  • JS 执行
  • IPC 消息通信
  • 自定义协议。 ([DevTools Guide][2])

插件(Plugins)

Tauri 插件通常提供三部分:

1️⃣ Rust 功能实现 2️⃣ 应用集成接口 3️⃣ JavaScript API

示例插件:

  • tauri-plugin-fs
  • tauri-plugin-sql
  • tauri-plugin-stronghold。 ([Tauri][1])

Tauri 架构总结

Tauri 实际是 四层架构

Application (你的应用)
    ↓
Tauri Core
    ↓
WRY (WebView)
    ↓
TAO (Window / OS API)
    ↓
Operating System

或者更常见的开发视角:

Frontend (Vue / React / HTML)
        ↓
Tauri JS API
        ↓
IPC
        ↓
Rust Backend
        ↓
OS API

其中最关键的是:

IPC(Inter-Process Communication)通信桥

前端通过:

invoke()

调用 Rust 函数执行系统操作。 ([DevTools Guide][2])


一句话理解 Tauri 架构

可以把 Tauri 理解为:

Web UI
   +
Rust Native Backend
   +
OS WebView

而不是:

Chromium Runtime (Electron)

所以:

框架 UI Runtime
Electron Web Chromium
Tauri Web OS WebView

💡结合你现在在做的 IM 多端客户端, 理解这页 Architecture 后会得出一个非常关键的工程结论:

Tauri 其实是三层系统:

UI (Vue / React)
Core (Rust)
OS (TAO + WRY)

这就是为什么:

  • Web UI 可以 100%复用
  • Desktop / Mobile 只换 Container

参考资料