我继续用 Rust 做 Rustzen,不是为了证明它在每个场景里都更快。真正影响选择的是三类约束:资源和错误边界能否说清楚,部署时要维护多少外部状态,以及隔一段时间回到仓库后还能不能找到真实入口。

rustzen-admin 是这些约束的一份工程参考:Rust / Axum 后端、React 前端、SQLite-first 存储、清楚的仓库文档,以及尽量少的部署依赖。它验证的是 Rust + React 能否成为个人和小团队项目的工程起点,不要求其他产品接入一个中央平台。

项目地址:rustzen/rustzen-admin

资源和错误边界

Rust 会迫使很多边界提前变得明确:数据归谁所有,错误从哪里返回,异步任务何时结束,资源由谁释放,unsafe 和 FFI 被限制在哪一层。编译器不能替我设计系统,却会让含糊的设计更早暴露。

对个人项目来说,这种约束有时会拖慢第一版。类型、生命周期和错误处理都需要多花时间。但当项目进入维护阶段,我更愿意面对编译期问题,而不是把同一批边界错误留到运行时排查。

部署依赖

很多个人工具、桌面工具和轻量后台,并不需要从 PostgreSQL、Redis、消息队列和多服务部署开始。

对适合本地存储的项目,我会先考虑 SQLite、明确的配置文件和固定数据目录;只需要服务端的工具,也可以优先保持单进程。这个选择不是因为 SQLite 能替代所有数据库,而是它减少了当前项目必须维护的外部状态。

能在一个进程里说清楚的功能,我不会先拆成多个服务;数据量和并发需求还没有出现时,也不提前为它们搭一套复杂基础设施。等约束真的变化,再根据证据扩展,比一开始把所有可能性都铺开更稳。

仓库里的确定性

Rustzen 使用 AI 辅助开发,但“AI-friendly”不意味着把代码改成某种固定目录或降低技术复杂度。真正有用的是仓库里的确定性:

这些约束不仅服务 AI,也减少我隔一段时间回到项目时重新理解上下文的成本。模型仍然会猜,但仓库越清楚,猜测能够影响的范围越小。

rustzen-admin 现在是什么

rustzen-admin 目前更像 Rustzen 系列的工程底座和参考实现,而不是所有产品必须依赖的中央平台。

Zen Clear、Rustzen Zipper 和 Rustzen Clipboard 可以按各自需要借鉴错误处理、发布流程和文档结构;SQLite 只适用于确实需要本地存储的项目。只有真正重复、已经有多个消费者的能力,才值得继续抽取。

Rust 的学习和编译成本、跨平台桌面集成、发布与签名,仍然都要处理。对这些项目来说,我接受这些成本,换取更明确的数据、资源和部署边界。