数据模型
- Beancount
- 严格且显式 —— 声明的账户、强制平衡、批次和成本基础
- hledger
- 灵活且宽容 —— 兼容 Ledger,账户动态创建
两者都是纯文本复式记账账本,可以用 Git 进行版本控制。区别在于契合度:严格的模型配合 Web 生态,或者快速、自包含的命令行。
Beancount
账户必须显式声明,每笔交易必须平衡,批次和成本基础是一等公民。错误在解析时就会暴露 —— 在影响你的报告之前。
hledger
hledger 兼容 Ledger 的格式,可以动态创建账户,甚至能推断平衡分录。上手更快,纪律性取决于你自己。
Beancount
在 Fava 精美的仪表盘中探索你的账簿 —— 交互式图表、报表、持仓和 BQL 查询控制台 —— 并有 bean-check 验证每次编辑。
hledger
丰富的内置终端报告、hledger-ui TUI 和 hledger-web 用于轻量级浏览和录入 —— 无需额外服务。
Beancount
用 Python 编写导入器和插件,用类似 SQL 的 BQL 查询分录。自动化存在于可审查、可测试的代码中。
hledger
声明式 CSV 导入规则和可组合的 CLI 命令可直接融入 Unix 管道 —— 快速自动化,无需 Python。
Beancount
每种货币或证券都公开携带单位、成本和价格 —— 精确的资本利得和多币种跟踪,可逐行审计。
hledger
hledger 以更温和的模型覆盖日常多币种和简单的投资跟踪 —— 足以满足许多个人投资组合。
Beancount
自行托管 Fava,或让 beancount.io 处理托管,包括银行同步、原生移动应用和帮助分类和草拟分录的 AI 助手。
hledger
安装一个预构建的单一二进制文件,你的账本保留在你的机器上。hledger-web 覆盖移动浏览器;无需依赖云账户。
Beancount
Beancount 和 Fava 永远免费。可选的 beancount.io 计划增加托管、同步、移动和 AI 功能 —— 无论哪种方式,账本都是可移植的。
hledger
hledger 的所有功能 —— 报告、TUI、Web UI、CSV 导入 —— 都免费包含在一个工具中。没有付费层级;也不需要。
同一家族,诚实对比:当你想要一个快速、自包含且能从单一二进制文件完成所有工作的工具时,hledger 是更好的选择。
资产负债表、损益表、现金流量表和多期对比都是内置命令 —— 无需 Web 服务器、无需查询语言、无需设置。
用 Haskell 编写,hledger 瞬间启动,并在处理大型账簿时保持快速 —— 每秒处理数万笔交易,内存占用适中。
声明式规则文件将银行 CSV 导出转换为整洁的日记分录 —— 无需编写或维护 Python 导入器。
没有数据库、没有服务器、没有账户。一个二进制文件加上你的文本文件就是整个堆栈 —— 备份、同步和移动都非常简单。
逐项对比,没有营销话术。
| 方面 | Beancount | hledger |
|---|---|---|
| 数据模型 | 严格且显式 —— 声明的账户、强制平衡、批次和成本基础 | 灵活且宽容 —— 兼容 Ledger,账户动态创建 |
| 主要界面 | Fava Web UI、CLI 验证、编辑器工具 | 内置 CLI 报告、hledger-ui TUI、hledger-web |
| 性能 | 基于 Python;v3 增加了 C++ 核心以提高速度 | Haskell —— 速度非常快,即使在非常大的账簿上也是如此 |
| 报告 | 交互式 Fava 图表加类似 SQL 的 BQL 查询 | 丰富的内置终端报告和多期视图 |
| 导入 | Python 导入器生态;beancount.io 上的托管银行同步 | 使用声明式规则文件的内置 CSV 导入 |
| 投资 | 严格的批次、成本基础和多币种 | 适用于日常投资组合的简单商品处理 |
| 设置 | 需要 Python;显式的账户声明 | 单一预构建二进制文件;宽容的解析器 |
| 移动端 | 原生 beancount.io 应用;Fava 的响应式 Web UI | 移动浏览器中的 hledger-web;第三方应用 |
Web 仪表盘、BQL 查询和原生移动应用 —— 背后都是一个纯文本账本。










两个项目都不对软件收费,并且都让你的账簿以纯文本形式存在。选择的是工作流程,而不是钱包。
两个账本都是纯文本,因此你的数据永远不会被锁定。用相同的交易样本测试每个账本,然后投入 —— 或者两者都保留。
在两个工具中输入相同的近期交易:导入一张报表,对账,并在每个工具中生成你最重要的报告。
简单的日记账很容易适应,hledger 可以导出为 Beancount 格式。高级成本、元数据和指令功能值得仔细审查一遍。
很多人这样做:用 hledger 进行快速录入和日常命令行检查,用 Beancount 加 Fava 进行更深入的视觉分析。纯文本使得拆分很容易。
……你想要 Fava 的交互式 Web 仪表盘、用于投资的严格批次和成本基础跟踪、基于 Python 的导入器和自定义分析,以及一个强制正确性的严格系统 —— 并在 beancount.io 上提供可选的托管同步、移动应用和 AI。
……你生活在命令行中,想要快速、内置的文本报告、一个宽容的格式以便快速上手、单一二进制安装、以及强大的多期报告 —— 并有稳定、定期发布的版本支持。
两者都是优秀、成熟、积极维护的开源项目,并且都让你的数据以纯文本形式保持可移植。最公平的测试是用你自己的交易在每个工具中做一个小样本 —— 与你产生共鸣的工作流程就是正确的选择。
是的。Beancount 要求显式声明账户,并采用更正式的数据模型,而 hledger 则有意接受更灵活的 Ledger 风格日记账格式,并能推断一些缺失信息。
Beancount 配合 Fava 提供更丰富的图形化分析体验。hledger 在快速终端报告方面更强,并包含 hledger-ui 和 hledger-web,适合偏好文本或轻量级网页界面的用户。
它们的格式有重叠但不完全相同。简单的日记账通常可以调整或导出,而高级的成本、元数据和指令功能通常需要转换和审查。
Beancount 对基于 Python 的导入器和插件有吸引力;hledger 对 Shell 流水线、CSV 规则和快速命令行报告有吸引力。更好的选择取决于你想要维护的语言和工作流程。