最近写了个项目叫 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 2 | Electron |
|---|---|---|
| 后端语言 | Rust | Node.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
如果你也经常写桌面小工具,可以看看。框架这东西,自己用着舒服就行,不追求大而全。够用就好。