概览
功能完备的 Tauri 2 桌面启动模板,内置认证、计费、设置、更新、系统钥匙串安全存储与能力受限的 IPC。
Tauri 模板是一套功能完备、clone-and-ship 的桌面启动模板,面向需要在 Windows、macOS 与 Linux 上发布商业应用的团队。它预置了真实桌面产品的高频基础设施 ——认证、可搜索的设置中心、自动更新管线、带脱敏的日志、Creem 计费、系统钥匙串安全存储、 能力受限的 IPC、打包,以及一键改名——你只需替换品牌、页面和业务逻辑即可发布。
保留 Rust 核心与类型化的命令边界,把默认品牌、演示界面和产品逻辑替换成你自己的。
"功能完备" 表示模板提供真实的桌面应用基础设施,不表示可以不经审查直接上线。 部分界面是 Example、Opt-in slot 或 Removable demo,发布前应按你的产品改造或删除。
Tauri 还是 Electron?
本模板是 Soar Electron 启动模板的 Tauri 对应版本:相同的前端技术栈、相同的产品界面, 以及相同的 Supabase + Creem 后端。差异只在桌面层。
| 关注点 | Electron 版 | 本模板 |
|---|---|---|
| 原生运行时 | 打包的 Chromium + Node 主进程 | Rust 核心 + 系统 webview(安装包更小、内存更低) |
| 安全边界 | contextBridge preload 脚本 | 声明式能力 ACL——按窗口授权,绝不使用通配 |
| IPC 类型 | 手写 Zod schema | tauri-specta 编译期推导类型,提交的 src/lib/bindings.ts 由 CI 检测漂移 |
| 安全存储 | Electron safeStorage | 通过 Rust keyring crate 使用系统钥匙串 |
如果两者你都拥有,Supabase 计费 schema 与 Edge Functions 是共享的——一套后端即可服务两端。 需要对比时可查看 Electron 根目录。
技术栈
| 层级 | 选择 |
|---|---|
| 原生运行时 | Tauri 2(Rust),单个系统 webview 窗口 |
| UI 运行时 | React 19、React Router 7(HashRouter,懒加载路由) |
| 语言与构建 | TypeScript 5.8、Vite 7 |
| 样式 | Tailwind CSS 4 + tw-animate-css、shadcn/ui(Radix、CVA、cmdk、sonner) |
| 应用状态 | zustand 5、TanStack Query 5、react-hook-form、zod 4 |
| 后端客户端 | supabase-js 2,带类型化数据库访问 |
| 更新 | tauri-plugin-updater,基于 minisign 签名的静态更新源 |
| 可观测性 | tauri-plugin-log + Rust 脱敏,可选 Sentry(Rust crate + @sentry/browser) |
| 本地化 | i18next / react-i18next,英文和简体中文 |
| 测试 | Vitest 4,以及独立的 WebdriverIO + tauri-driver e2e 套件 |
| 工具链 | pnpm 11.1.3、ESLint、Prettier、tauri-specta 代码生成、一键改名 |
功能状态
本根目录统一使用这些状态标签:
- Integrated — 已接入应用,默认可用。
- Flag-gated — 整个子系统由构建期开关剥离或隐藏;每页会说明默认值。
- Opt-in slot — 在配置且用户开启之前保持关闭。
- Example — 可运行的演示代码,供替换为你的产品逻辑。
- Removable demo — 以
[template-demo]标记的评估界面,由 Showcase 删除清单覆盖。
| 领域 | 状态 | 范围 |
|---|---|---|
| Shell 与 IPC | Integrated | Rust 核心 + 沙箱 webview、15 个类型化命令、tauri-specta 绑定带 CI 漂移检测、能力 ACL、受控外链导航 |
| 桌面界面 | Integrated | 无边框自定义标题栏、TS 构建的原生菜单 + 托盘、命令面板、窗口状态持久化、日志、脱敏诊断 |
| 设置 | Integrated | 版本化 tauri-plugin-store JSON 存储、前向迁移、备份导入/导出、搜索、主题、语言、代理、存储、通知、快捷键 |
| 认证 | Flag-gated | VITE_AUTH_ENABLED 默认开;Supabase 邮箱/密码,会话存于系统钥匙串 |
| 数据示例 | Example | Todos、profile、头像上传是可复制的范式;需要设置文档中的 Supabase schema |
| 计费 | Flag-gated | VITE_BILLING_ENABLED 默认关;Creem 结账、客户门户、许可证模式与 <FeatureGate> 仅在配置后启用 |
| 隐私插槽 | Opt-in slot | Rust 与 webview 的 Sentry;模板提供供应商无关的分析配置与授权界面,但在你实现 provider 前,传输层仍是 no-op scaffold |
| 自动更新 | Flag-gated | VITE_AUTO_UPDATE_ENABLED 默认开;后台检查是另一项运行时开关,默认关 |
| Showcase 目录 | Removable demo | 能力目录、组件画廊与演示路由,位于 VITE_SHOWCASE_ENABLED 与 [template-demo] 标记之后 |
| 分发 | Integrated | Windows NSIS + MSI、macOS DMG、Linux AppImage/deb/rpm、env 驱动的签名/公证、minisign 签名更新源 |
| 开发体验 | Integrated | pnpm dev、质量门禁脚本、就近测试、类型化 IPC、一键改名 |
应用界面地图
webview 是一个位于无边框桌面外壳内的 React SPA(HashRouter):
- 侧边栏布局 — 首页、展示(26 项能力目录 + 组件画廊 + 实时演示)、日志、帮助、 更新、账户、设置、关于,以及启用计费时的订阅。
- 认证 — 登录、注册、忘记密码、重置密码页面在外壳之外渲染。
- 设置中心 — 目前 8 个可搜索标签:通用、外观、通知、快捷键、代理、存储、更新、高级。
- 账户页 — 独立的
/account路由,承载已登录用户的资料与头像流程。 - 关于 — 带复制按钮的脱敏诊断。
- 命令面板 —
Cmd/Ctrl+K打开路由动作、设置快捷项,以及启用演示层时的展示动作。 - 引导门 — 首启引导;设置了
EULA_URL时可加入可选的 EULA 门。
当 VITE_AUTH_ENABLED 开启(默认)时,webview 会在挂载前校验
VITE_SUPABASE_URL 与 VITE_SUPABASE_PUBLISHABLE_KEY。.env.example 中的占位值
可通过校验,因此你能立即浏览外壳——但真正的认证、资料、头像、todos 与计费流程
需要一个 Supabase 项目。
品牌默认值
在你评估模板期间,身份刻意保持直白:Soar Tauri、soar-tauri:// 深链协议,以及
com.soarstarter.tauri bundle 标识符。前端模块从
shared/constants.ts 导入这些值;pnpm rebrand 会在该文件、
tauri.conf.json、Cargo.toml 与 package.json 之间同步它已知的字段。
原生元数据和钥匙串身份中仍需手动处理的项目见品牌定制页面。
从这里开始
从 clone 到可分发桌面应用的最快路径:
