最近写了个项目叫 PocketArk,是一个基于 Tauri 的桌面应用基础框架。写这个东西的动机其实很简单——我受够了每次写桌面工具都要从头搭项目结构这件事。

为什么要做这个

之前写过一个叫 ProjectEnc 的工具,用来做 C# 程序的合并、加密和打包。用着用着就觉得,每次想加个小功能,或者写个新的小工具,都得重新建项目、配环境、写托盘图标、处理更新、搞设置面板……烦不胜烦。

后来又写了 ZeroChat,E2E 加密聊天工具。又是一轮从零开始。

我寻思着,这些东西——托盘图标、开机自启、全局快捷键、设置面板、在线更新、日志、错误处理——每个桌面应用都得有,但每次都要重写一遍,这不是在重复造轮子吗?

于是就想:能不能搞一个框架出来,把这些通用的东西都封装好,我只需要专注于写每个工具的具体逻辑就行?

PocketArk 是什么

一句话概括:可复用的桌面应用基础框架

基于 Tauri 2 + Vue 3 + TypeScript + Tailwind 4。核心设计目标就一个——新增一个工具的成本尽可能低

具体来说,框架帮你搞定了这些东西:

  • 导航和路由 — 工具注册后自动出现在侧栏
  • 启停管理 — 每个工具可以独立启动和停止
  • 设置面板 — 工具可以有自己的配置页面
  • 数据库 — SQLite,Drizzle ORM 对象化查询,不用手写 SQL
  • 日志 — 前端和 Rust 统一日志管道
  • 错误处理 — 统一错误管道,自动 toast 提示
  • 系统集成 — 托盘、开机自启、全局快捷键
  • 在线更新 — 内置更新机制,配置服务器地址就能用

框架代码只引用、不修改。你新增一个工具,就是往 plugins/ 目录里加一个文件夹,写好 plugin.json 和你的 Vue 页面就行了。

怎么用

最快的方式:

git clone https://github.com/hmilyld/PocketArk.git
cd PocketArk
pnpm install
pnpm create-plugin   # 交互式生成插件骨架
pnpm tauri dev       # 启动开发

或者手动来:复制 plugins/_template 目录,改改 plugin.json 里的 id 和名称,写好你的 Vue 页面,完事。

构建期会自动扫描 plugins/ 目录,前端(导航/路由/标题)和后端(Rust 命令/迁移)都不需要手动注册。这点我觉得是最重要的——框架帮你做了”胶水”的工作,你只管写逻辑。

技术选型

为什么选 Tauri 而不是 Electron?

对比项Tauri 2Electron
后端语言RustNode.js
包体积几 MB几十 MB 起步
内存占用
系统集成原生需要额外插件
学习曲线陡(Rust)

说实话,Rust 的学习曲线确实陡一些。但包体积和内存占用的差距是实实在在的——一个简单的工具,Tauri 打出来可能就 5MB,Electron 随便就 80MB 起步。对于我这种喜欢写小工具的人来说,这个差距很重要。

前端选 Vue 3 而不是 React,纯粹是个人偏好。Vue 的 Composition API 写起来顺手,Pinia 做状态管理也够简洁。加上 Tailwind 4 和 shadcn-vue,UI 开发效率挺高的。

仓库结构

仓库本身就是”框架 + 示例”:

  • _template — 脚手架模板
  • hello-world — 教学示例,展示了多功能插件的写法
  • system — 系统工具(数据维护,前端-only)

想做自己的软件:clone 后 pnpm scaffold,按 START.md 走完就行。个人工具放进”本地层”,方便以后跟上游同步更新。

目前的状态

这个项目目前还在早期阶段,刚写完框架核心和几个示例插件。文档也刚搭好,用 Astro + Starlight 做的,支持中英双语。

GitHub 地址:https://github.com/hmilyld/PocketArk

文档站:https://pocketark.hmilyld.com

如果你也经常写桌面小工具,可以看看。框架这东西,自己用着舒服就行,不追求大而全。够用就好。