- 难度
- 较难
- 适合
- 进阶
- 主要语言
- TypeScript
- GitHub
- ★ 28.0k
- 许可证
- MIT
- 快照日期
- 2026年8月9日
先判断要不要学
这个项目值得拆什么?
Actual Budget 是一个 local-first 个人财务工具,核心数据和业务逻辑可在本地运行,并通过同步服务在设备间传递变更。它是包含核心引擎、Web/桌面端、Electron、移动端、CRDT、同步服务和文档的成熟 monorepo。这个案例的学习价值在于拆解数据所有权与复杂工程边界,而不是让新手一天内复制完整产品。
- 01
它将 local-first 从口号变成可阅读的本地数据库、同步协议、冲突处理和服务端代码。
- 02
预算、账户、交易、报表与规则等完整产品域,适合学习成熟产品如何长期组织业务代码。
- 03
同一核心能力服务于浏览器、Electron、移动端与 API,能观察共享逻辑与平台适配的分界。
可以学什么
不只是看代码,而是找到产品的骨架
- 学产品结构
- 学数据库
- 学完整项目组织
- 学界面
- 学部署
local-first 不等于只有本地存储
对照核心数据库、CRDT 时间戳与 Merkle 结构、客户端同步和 sync-server,理解离线可用与跨设备同步是两个相关但独立的问题。
packages/loot-core/src/server/db · packages/loot-core/src/server/sync · packages/crdt/src/crdt · packages/sync-server/src/app-sync.ts核心业务与平台适配
从 loot-core 的 platform imports 和多个客户端包出发,观察文件系统、SQLite、网络连接等能力如何在浏览器、Electron 和 API 环境中被替换。
packages/loot-core/package.json · packages/loot-core/src/platform · packages/desktop-client · packages/desktop-electron成熟财务产品的领域分区
通过 accounts、budget、transactions、rules、reports 等目录,学习如何让复杂业务能力在服务层、查询层和 UI 中保持可定位性。
packages/loot-core/src/server/budget · packages/loot-core/src/server/transactions · packages/loot-core/src/server/rules · packages/loot-core/src/server/reports · packages/desktop-client/src/budget · packages/desktop-client/src/transactions三段学习路径
从理解、修改到做出你的版本
建立 local-first 与仓库分层的正确心智模型
- 阅读 README 的 Getting Started 和 Code structure
- 在根 package.json 列出主要客户端与服务启动命令
- 对照 loot-core、crdt、desktop-client 和 sync-server 的责任
完成标志:画出本地数据、核心业务、界面和同步服务的四层关系。
沿一个预算数字完成小范围走读
- 选择一个预算页的显示字段
- 从 desktop-client/src/budget 找到查询或动作调用
- 在 loot-core 中定位对应业务与 SQL 实现
- 阅读相邻测试并记录其不变量
完成标志:得到一张某个预算值从本地数据到界面的追踪笔记。
用小实验理解离线变更与同步冲突
- 仅运行浏览器客户端与本地测试环境
- 为一个简化账户字段添加变更与测试
- 用两个独立测试实例模拟并发编辑
- 对照 CRDT 测试解释最终结果并补充一个冲突用例
完成标志:产出一个不触及真实财务数据的双实例同步实验和解释。
评分解释
每一分都要说清楚为什么
官方提供多种安装与自托管方式,但从代码复刻核心产品的成本很高。
README 和社区文档给出包边界,目录领域命名清晰;但精确走读仍需较强工程能力。
可建立 local-first 与成熟工程认知,但只适合有基础的学习者做小切片。
个人财务主要领域、多端客户端、同步、导入与自托管都已具备。
适合学习如何让 AI 在成熟仓库中小步改动,但不适合把整个产品作为快速生成目标。
仓库未归档、核对时有当日推送,并有测试、代码审查指南和社区文档。
local-first 财务、CRDT 同步与多平台核心共享组合,具有显著的学习差异化。