Skip to Content
博客Tauri 2 开发实战

Tauri 2 开发实战:从零构建一个带 AI 的桌面笔记应用

为什么越来越多开发者选择 Tauri 作为 Electron 替代方案来构建跨平台桌面应用?一个数据可以参考:同样的笔记应用,Electron 打包 90MB+,Tauri 只需要 8MB

本文分享 JD Notes  的开发经验——一个基于 Tauri 2 + React 的桌面笔记应用,集成了 AI 助手、MCP Server、SQLite 存储等功能。


为什么选择 Tauri 2?

Tauri vs Electron 对比

维度ElectronTauri 2
打包体积80-150 MB3-10 MB
内存占用300-500 MB80-150 MB
后端语言Node.jsRust
渲染引擎自带 Chromium系统 WebView
安全性一般高(权限控制细粒度)
生态成熟度成熟快速发展中

Tauri 的核心优势: 使用系统自带的 WebView(Windows 上是 Edge WebView2),不捆绑 Chromium,所以体积和内存都远优于 Electron。后端使用 Rust,性能和安全性更好。

Tauri 2 相比 1.x 的改进

  • 移动端支持 — 同一套代码可以编译到 iOS 和 Android
  • 插件系统重构 — 官方维护的插件生态更完善
  • IPC 改进 — 前后端通信更高效
  • 安全模型升级 — 更细粒度的权限控制

技术架构

JD Notes 的技术栈:

┌─────────────────────────────────────┐ │ 前端 (WebView) │ │ React 19 + TypeScript + TailwindCSS │ │ TipTap 编辑器 + CodeMirror │ │ Framer Motion 动画 │ ├─────────────────────────────────────┤ │ Tauri IPC Bridge │ ├─────────────────────────────────────┤ │ 后端 (Rust) │ │ SQLite (tauri-plugin-sql) │ │ MCP Server (rmcp) │ │ 文件系统 / 通知 / 更新器 │ └─────────────────────────────────────┘

关键技术选型

功能选择原因
富文本编辑TipTap基于 ProseMirror,扩展性强,React 集成好
代码高亮CodeMirror编辑器级别的代码支持,不只是高亮
数据库SQLite本地存储方案,通过 tauri-plugin-sql
样式TailwindCSS 4原子化 CSS,开发效率高
动画Framer Motion声明式动画,和 React 集成完美
AI 通信fetch + streaming直接调用 OpenAI 兼容 API
MCPrmcp (Rust)Rust 原生 MCP SDK

核心功能实现

1. SQLite 数据存储

Tauri 通过 tauri-plugin-sql 提供 SQLite 支持。前端可以直接执行 SQL:

import Database from '@tauri-apps/plugin-sql' // 获取数据库连接 const db = await Database.load('sqlite:notes.db') // 查询 const notes = await db.select('SELECT * FROM notes WHERE is_deleted = 0') // 插入 await db.execute( 'INSERT INTO notes (title, content) VALUES (?, ?)', [title, content] )

优点: 比 IndexedDB 性能好得多,支持复杂查询,数据文件可以直接备份。

2. AI 多模型集成

JD Notes 支持多种 AI Provider(包括 GPT-5、Claude 4、DeepSeek V4、Gemini 3 等 2026 年主流模型),统一封装为相同的接口:

// 所有 Provider 都遵循 OpenAI 兼容的 Chat Completions 格式 const response = await fetch(apiUrl, { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}` }, body: JSON.stringify({ model: modelName, messages: [{ role: 'user', content: prompt }], stream: true, }), }) // 流式读取响应 const reader = response.body.getReader()

关键设计决策:所有 AI 调用都在前端完成,不经过 Rust 后端。因为 AI API 调用本身就是 HTTPS 请求,不需要 Rust 的性能优势,前端直接调用更简单。

3. MCP Server

MCP Server 是在 Rust 后端实现的,使用 rmcp crate:

// 启动 MCP HTTP Server let server = HttpServer::new(move || { App::new().service(mcp_endpoint) }) .bind("127.0.0.1:19230")?;

MCP Server 提供三个工具(create_note、append_note、update_note),让 Claude Code、Cursor 等 AI Agent 工具可以直接操作笔记数据库,构建高效的知识管理工作流。

4. 自动更新

使用 tauri-plugin-updater,配合 GitHub Releases 实现自动更新:

// tauri.conf.json { "plugins": { "updater": { "endpoints": [ "https://github.com/zexadev/jdnotes/releases/latest/download/latest.json" ] } } }

每次发版上传一个 latest.json,包含版本号、签名和下载地址,应用启动时自动检查更新。


开发中踩过的坑

坑 1:WebView 兼容性

Tauri 使用系统 WebView,不同系统版本的 WebView 行为可能不同。比如 Windows 10 早期版本的 Edge WebView2 对某些 CSS 特性支持不完整。

解决方案: 避免使用太新的 CSS 特性,充分测试不同系统版本。

坑 2:Rust 学习曲线

如果你没有 Rust 经验,后端开发会有一定学习成本。不过对于简单的桌面应用,大部分逻辑在前端完成,Rust 后端只需要处理数据库和系统调用。

建议: 先从 Tauri 官方模板开始,逐步学习需要的 Rust 知识。

坑 3:打包签名

Tauri 的更新器需要签名才能工作。需要生成签名密钥对,构建时设置环境变量。

# 生成密钥 tauri signer generate -w ./keys/app.key # 构建时设置 TAURI_SIGNING_PRIVATE_KEY=... pnpm tauri build

性能数据

JD Notes 的实际性能数据:

指标数值
安装包大小8.3 MB
冷启动时间不到 1 秒
内存占用(空闲)~80 MB
内存占用(编辑中)~120 MB
构建时间~60 秒

相比 Electron 应用动辄 300MB+ 的内存占用,Tauri 的优势非常明显。


适合用 Tauri 的项目

Tauri 适合:

  • 工具类应用(笔记、编辑器、文件管理)
  • 需要本地数据存储的应用
  • 对体积和性能有要求的应用
  • 有 Web 前端经验的团队

Tauri 不太适合:

  • 需要深度操作系统集成的应用(用原生开发更好)
  • 团队完全没有 Rust 经验且不愿学习

总结

Tauri 2 是 2026 年 Rust 桌面应用开发的主流框架之一。如果你已经有 React/Vue 前端经验,用 Tauri 可以快速构建出体积小、性能好的跨平台桌面应用。配合 Claude Code 等 AI Agent 工具进行开发,可以进一步提升开发效率。

JD Notes 是一个用 Tauri 2 构建的真实项目,完整代码开源在 GitHub ,欢迎参考和贡献。


想体验 Tauri 构建的应用?下载 JD Notes  感受 8MB 安装包的轻量体验。

Last updated on