数据模型
- Beancount
- 严格且显式 —— 声明的账户、强制平衡、批次和成本基础
- Ledger CLI
- 灵活的日记账 —— 隐式账户、报告时表达式
Ledger 和 Beancount 是一家人:纯文本的复式记账簿,用 Git 进行版本控制。区别在于契合度 —— Beancount 的严格模型和 Web 生态,或者 Ledger 原始快速、灵活的命令行。
Beancount
账户必须显式声明,每笔交易必须平衡,批次和成本基础是一等公民。错误在解析时就会暴露 —— 在影响你的报告之前。
Ledger CLI
Ledger 的紧凑日记账隐式创建账户,并能推断平衡金额。启动时仪式感最少,纪律性取决于你的约定。
Beancount
在 Fava 精美的仪表盘中探索你的账簿 —— 交互式图表、报表、持仓和 BQL 查询控制台 —— 并有 bean-check 验证每次编辑。
Ledger CLI
`ledger` 命令通过富有表现力的标志和值表达式塑造余额、登记簿和自定义格式报告 —— 加上以 Emacs ledger-mode 为首的编辑器支持。
Beancount
用 Python 编写导入器和插件,用类似 SQL 的 BQL 查询分录。自动化存在于可审查、可测试的代码中。
Ledger CLI
自动交易、定期分录和报告时表达式与 Shell 脚本和管道自然配合 —— 输出设计为可组合的。
Beancount
每种货币或证券都公开携带单位、成本和价格 —— 精确的资本利得和多币种跟踪,可逐行审计。
Ledger CLI
Ledger 用简洁的注释和强大的估值表达式跟踪成本和价格 —— 灵活,每个报告由其评估规则塑造。
Beancount
自行托管 Fava,或让 beancount.io 处理托管,包括银行同步、原生移动应用和帮助分类和草拟分录的 AI 助手。
Ledger CLI
一个编译好的 C++ 二进制文件在你的机器上就是整个堆栈。社区界面存在,但无需依赖云账户。
Beancount
Beancount 和 Fava 永远免费。可选的 beancount.io 计划增加托管、同步、移动和 AI 功能 —— 无论哪种方式,账本都是可移植的。
Ledger CLI
Ledger 的所有功能 —— 解析、报告、表达式、检查 —— 都免费提供,就像过去二十多年一样。没有付费层级;也不需要。
同一家族,诚实对比:当你想要纯文本会计中最快速、最富有表现力的终端报告时,Ledger 仍然是更好的选择。
Ledger 编译好的 C++ 引擎以较低的开销解析和报告非常大的账簿 —— 是生态系统中原始速度的基准。
值表达式、谓词和自定义格式让有经验的用户无需离开命令行就能回答复杂的问题。
原始的纯文本会计工具,拥有数十年的稳定习惯、广泛的编辑器支持 —— 以 Emacs ledger-mode 为首 —— 以及大量的示例。
无需账户声明,无需必需的指令 —— 账户在第一次过账时出现,平衡金额可以推断。从一个空文件开始。
逐项对比,没有营销话术。
| 方面 | Beancount | Ledger CLI |
|---|---|---|
| 数据模型 | 严格且显式 —— 声明的账户、强制平衡、批次和成本基础 | 灵活的日记账 —— 隐式账户、报告时表达式 |
| 主要界面 | Fava Web UI、CLI 验证、编辑器工具 | `ledger` CLI;编辑器集成和社区前端 |
| 性能 | 基于 Python;对于大多数个人和小型企业文件来说足够快 | 编译好的 C++ —— 原始速度的基准,即使在非常大的账簿上也是如此 |
| 报告 | 交互式 Fava 图表加类似 SQL 的 BQL 查询 | 功能极其强大的报告表达式、过滤器和格式 |
| 导入 | Python 导入器框架;beancount.io 上的托管银行同步 | 外部脚本、转换器和命令管道 |
| 投资 | 显式的批次、成本基础和多币种 | 紧凑的批次语法,带有强大的估值表达式 |
| 设置 | 需要 Python;显式的账户声明 | 单一编译好的二进制文件;最少的语法即可开始 |
| 移动端 | 原生 beancount.io 应用;Fava 的响应式 Web UI | 社区前端和导出的报告 |
Web 仪表盘、BQL 查询和原生移动应用 —— 背后都是一个纯文本账本。










Ledger 和 Beancount 都免费,并且让你的账簿以纯文本形式存在。选择的是工作流程,而不是钱包。
两个账本都是纯文本,因此你的数据永远不会被锁定。用相同的交易样本测试每个账本;如果你要迁移,ledger2beancount 加上余额检查会完成繁重的工作。
在两个工具中输入相同的近期交易:导入一张报表,对账,并在每个工具中重现你最重要的报告。
社区转换器能处理大部分 Ledger 日记账。添加 Beancount 的 `open` 指令,并手动审查成本、价格、虚拟分录和自动交易。
比较两个系统之间按账户、商品和日期的余额,添加对账日余额断言,并运行 bean-check。将源日记账和转换脚本置于版本控制之下。
……你优先考虑显式验证、结构化的投资和商品跟踪、Python 可扩展性、导入器工作流程以及 Fava 的 Web 界面 —— 并在 beancount.io 上提供可选的托管银行同步、移动应用和 AI。
……你优先考虑原始速度、紧凑语法和成熟的终端报告,并希望会计工作保留在 Unix 工作流程中 —— 特别是如果你已经熟悉它的表达式语言。
Ledger 证明了纯文本会计是可行的;Beancount 收紧了模型并围绕它发展了一个生态。两者都是免费的,都让你的数据保持可移植 —— 用你自己的交易在每个工具中做一个小样本,保留那个能让日常工作和故障恢复都更清晰的那个。
Ledger 强调紧凑灵活的日记账和强大的命令行报告。Beancount 使用更正式的指令模型,具有明确的账户和商品生命周期、更强的验证原语,以及围绕解析和扩展账本设计的 Python 生态系统。
可以。ledger2beancount 项目可以转换大部分 Ledger 日记账,但复杂的自动交易、表达式、虚拟分录、批次语法和自定义约定需要人工审核。在将转换结果视为权威数据前,请核对余额和投资。
对于非常大的日记账,Ledger 的编译型 C++ 引擎通常在原始命令行速度上更具优势。对于许多个人和小型企业文件来说,Beancount 的速度足够快,其权衡之处在于提供了更丰富的验证和 Python 集成模型,而非追求最大化的报告吞吐量。
不。它们共享复式记账理念和可读的日记账,但日期、交易标记、账户声明、成本、价格、元数据和自动化功能都不同。简单的条目易于翻译;完整的账本并不总是可以直接兼容。
Beancount 通过 Fava 提供了更强大且广泛使用的 Web 界面,包括日记账、报表、图表、持仓和查询。Ledger 主要是一个命令行程序,通常依赖社区界面或导出的报告进行可视化。