跳转到主要内容

Beancount 社区配置、插件与工作流

浏览社区中真实的 Beancount 记账配置与工作流实践:插件、Fava 仪表盘、GitHub 项目,以及面向不同场景定制的完整账本示例。

真实世界中的 Beancount 配置

引言​

Beancount 是一个多才多艺的纯文本会计系统,它的用户将它塑造成了适应各种现实需求的样子。在这个社区展示中,我们呈现了一些匿名化的例子,展示不同的人如何构建和使用他们的 Beancount 会计工作流——从自由职业者和小企业主,到个人理财爱好者。这些例子突显了一些有创意的做法,比如用元数据给交易打标签、用自定义脚本自动化账本更新、处理多种货币、预算与预测,以及通过插件或集成(比如 Fava 网页界面)扩展 Beancount。目标是启发和告知会计师、开发者以及懂财务的用户,让他们了解 Beancount 灵活的系统能做到什么。

关于同一工具集群的持续更新的概览,请参阅 Beancount v3:有什么新东西?、你应该知道的必备 Beancount 原生插件、Beancount 生态系统 和 Beancount 的技术优势。

在 beancount.io 上苹果公司公开 Beancount 账本的利润表,包含净利润图表以及收入和支出细分

界面示例: 许多 Beancount 用户依赖 Fava——一个开源网页仪表盘——或 beancount.io 上的托管等价物来可视化他们的财务。这些工具把 Beancount 账本变成交互式报告和图表。例如,这个利润表视图按类别和时间细分收入和支出,让你快速总览钱的来龙去脉。用户可以按时间、账户或标签过滤这个视图,深入查看特定项目或时间段。这类可视化让纯文本数据更易读,让用户一眼就能发现趋势和异常。

每个 Beancount 配置都是独一无二的,但有一些共同的主题浮现出来。下面,我们深入三个场景——一个自由职业者、一个小企业主和一个个人理财高级用户——看看他们如何组织账户并利用 Beancount 的功能。所有个人细节都已移除或泛化,只聚焦于技巧和配置。

自由职业者:项目标记和发票追踪​

我们的第一个例子是一位自由职业顾问,他使用 Beancount 作为其业务财务的支柱。这位自由职业者的账本经过组织,按项目跟踪收入和支出,并管理多个客户的发票。他们在资产下为每个客户设置了专门的应收账款(A/R)账户,这有助于区分谁欠了什么。当他们完成一个项目并向客户开票时,他们记录一笔交易,借记客户的 A/R 账户,贷记收入账户。例如,一张新发票可能记录为:

2025-08-01 * "Project X Completed" ^INV-0001
    Assets:AccountsReceivable:ClientA   5,000 USD
    Income:Consulting                   -5,000 USD

这里的 ^INV-0001 记号是一个_链接_(Beancount 内置的元数据功能),用来给这笔交易打上发票号的标签。当客户支付该发票的部分或全部款项时,付款交易会包含相同的 ^INV-0001 链接,把两笔记录关联起来。这种关联让把付款分配到特定发票并查看未结余额变得很容易。正如一位社区成员所解释的,你可以用这类标签或链接在发票记录和付款记录上标记部分付款——比如一张 30 美元发票上的 20 美元付款。通过查询账本中该发票链接,自由职业者可以立刻看到发票已付了多少、还剩多少未结。

除了链接,这位自由职业者还大量使用标签进行分类。Beancount 中的标签是以 # 为前缀的标签,可以标记交易以便日后过滤。这位用户给每笔可向客户计费的支出打上项目代码标签,比如 #ProjectX,并给可报销的支出打上 #Reimbursable。例如,如果他们为一个客户项目购买机票,支出记录可能包含 #ProjectX #Reimbursable。这种做法允许按标签生成按项目或客户的报告。项目结束后,自由职业者可以运行查询,列出该项目的所有 #Reimbursable 支出,确保他们向客户逐笔开票。一位 Beancount 用户指出,给出差旅支出打标签有助于发现任何未报销的部分——理想情况下,当客户的所有退款都收到后,一次出差的支出净额应为 0 美元。这突显了打标签结合 Beancount 的查询能力,如何为管理可计费支出的自由职业者提供额外一层的监督。

为了管理未结付款的状态,我们的自由职业者使用一种特殊约定来处理待收款项。他们给任何尚未完全付清的发票交易打上 #UNRESOLVED 标签。Beancount(和 Fava)并不强制这个标签,但这是一个社区确立的模式,用来标记等待结算的交易。例如,在客户 A 付清全部 5,000 美元之前,上面那张发票交易会包含 #UNRESOLVED。通过按该标签过滤,自由职业者可以随时列出所有未结发票。一旦收到并应用付款(录入相应的 A/R 交易),他们就移除或忽略 #UNRESOLVED 标签,该客户的应收账户就会归零。这个系统确保没有发票“被遗漏”。它本质上是一份用纯文本做的账龄报告——如果某个 A/R 仍然非零且被标记为未解决,那就需要关注。

因为自由职业者经常处理多种支付方式,有时还有多种货币,Beancount 配置可以无缝地适应这些。在我们的例子里,这位顾问可能向一些客户以美元开票,向另一些以欧元开票。多货币处理在 Beancount 中很直接:任何账户都可以持有多种商品(货币被当作商品处理)。自由职业者可以为每种货币保留单独的子账户(比如 Assets:AccountsReceivable:ClientA:EUR 对比 ...:USD),或者干脆在同一个账户下以适当的货币记账。Beancount 会自动按货币跟踪余额。一位用户强调,“Beancount 可以跟踪任何货币的数量,无论是美元还是一个股票代码”,全都在一个账本里,这有多好。我们的自由职业者利用这一点,在需要为报告换算货币时,用 price 指令记录汇率。一旦录入了周期性汇率或市场价格,他们就可以生成一份换算成本位币的收入报告。

最后,这位自由职业者将 Beancount 账本与实际工具集成,来简化工作流。例如,他们用文档元数据把每张发票的 PDF 副本附加到账本上。一条典型的发票付款记录可能像这样:

2025-08-30 * "ClientA" "Payment for INV-0001" ^INV-0001
    Assets:Bank:Checking       5,000 USD
    Assets:AccountsReceivable:ClientA  -5,000 USD
    document: "Invoices/ClientA/INV-0001.pdf"

Beancount 的 document 指令或元数据允许把文件与记录关联起来,Fava 会为这些附件显示超链接。这意味着自由职业者(或他们的会计师)可以直接从账本报告点击查看原始发票 PDF,确保备份文档易于访问。这位自由职业者还使用 Fava 的报告来监控业务:通过按客户过滤利润表或资产负债表,她可以看到每个客户的盈利能力,并检查所有项目是否都已付清。总之,这位自由职业者的 Beancount 系统展示了大量使用标签和链接来管理基于项目的会计。它把纯文本账本变成了一个强大的自由职业会计工具,对项目支出、多货币收入和发票状态都有清晰的可见性。

自由职业者配置中的关键做法: 使用标签按项目或用途对交易分组、用唯一 ID 链接发票和付款、用 #UNRESOLVED 标签标记未结应收款、把发票文档附加到账本记录以供参考,以及利用 Beancount 的多货币支持轻松地向国际客户开票。所有这些都通过纯文本记录加几个辅助工具实现,展示了 Beancount 中元数据的力量。

小企业:自动化与多币种会计​

接下来,我们看看一位小企业主——具体来说是一位创业公司创始人——他采用 Beancount 来管理公司账目。小企业的需求与自由职业者类似(发票、支出、多货币),但往往规模更大,更强调自动化、一致性和协作。在这个例子里,这位创始人技术娴熟,构建了一个高度自动化的 Beancount 工作流来尽量减少手动记账。在评估了 QuickBooks 等传统会计软件后,他们选择了 Beancount 的纯文本方法,以保留对数据的完全控制。几年间,他们迭代开发了自定义工具,实现了 95% 自动化的记账流程。

自动导入和对账: 最初的挑战之一是把来自各种来源(银行账户、信用卡、支付处理商)的交易导入账本。这位用户没有手动输入每笔交易,而是设置了导入脚本来获取数据并转换成 Beancount 格式。他们为每个金融机构的 CSV 或 API 格式编写了自定义 Python 导入器,这样只需一条命令就能拉取新交易并追加到账本。例如,使用 beangulp 导入器,这位创始人可以运行一个脚本,扫描下载文件夹里的新对账单并输出为 Beancount 记录。另一位用户 Rhyd Lewis 描述了类似的配置,他为每家银行准备了单独的导入脚本,可以通过一条简单命令(使用 Justfile)调用它们来更新账本。我们的小企业主也一样——所有银行交易、信用卡刷卡,甚至 PayPal 或 Stripe 交易都被自动获取并添加到账本中,并用适当的账户分类。

即使这些记录是自动添加的,为了确保数据完整性,他们在每次提交前验证账本,并使用 Beancount 的插件。例如,启用 beancount.plugins.noduplicates 插件来防止意外重复导入同一笔交易,而 beancount.plugins.nounused 会标记任何没有记录的账户(有助于清理过时的账户)。我们推荐用 bea check 来完成这个验证步骤。这位创始人还使用一个社区格式化工具(比如 beancount-black)来保持账本文件风格一致。这很重要,因为有了大量自动编辑,统一的风格让差异对比和审计更容易。事实上,这位创始人把账本放在 Git 仓库里,像对待代码变更一样对待账本更新。每一批新导入的交易都成为一次 Git 提交,他们可以查看差异,看改变了什么。在一张截图里,他们展示了 Git 历史,其中一笔“Costco”的信用卡交易从待处理状态变成已清算,全程无需人工干预。版本控制提供了审计轨迹:他们可以确切看到一笔交易何时被添加或修改,甚至在导入错误时回滚更改。这是一个把软件开发最佳实践(如源代码控制)带入会计记录的绝佳例子。

多货币和国际交易: 小企业经常以多种货币交易——例如,一家创业公司可能有美元支出,但也收到欧元付款,或持有一个英镑银行账户。我们的展示公司使用 Beancount 的多货币功能把所有这一切整合到一个账本里。他们为每种货币开设了单独的账户(比如 Assets:Bank:Checking:USD 和 Assets:Bank:Checking:EUR),这是一种常见做法。不过,即使不同货币共享一个账户,Beancount 也会分别跟踪每种货币的余额,并要求交易按货币平衡。这位创始人经常运行估值报告,查看公司总余额换算成本位币后的情况。由于 Beancount 支持价格查询,他用一个定时的报价获取脚本,为汇率(以及任何投资的市场价格)设置了每日价格源。结果是,他随时可以生成一份以美元计的资产负债表,其中包含按最新汇率换算的欧元账户。社区成员指出,在账本式会计中处理多货币很简单——你只需以给定货币添加交易,并按需记录汇率。例如,一位用户分享了一个通过中间账户把美元换成欧元再换成加元的例子,作为在 Beancount 中管理货币兑换的一种方式。在我们的例子里,这家小企业不一定在交易中兑换货币(他们保留原生货币),而是用报告来整合。这种灵活性在创业公司全球扩张时至关重要。

自定义脚本和扩展: 并非创始人需要的一切都开箱即用,所以他们用自定义插件扩展了 Beancount。随着时间推移,他们最终写了一个解析器库、一个格式化工具和一个基于规则的交易导入器,并把其中许多作为开源包发布。例如,他们构建了一个基于规则的导入引擎,使用 YAML 配置来自动分类交易。这份配置的一个片段展示了特定收款人或描述(比如“Comcast”或“PG&E”)如何被映射到某些支出账户和叙述,这样当它们出现在银行流水中时,就能生成正确的 Beancount 记录,无需手动编辑。这本质上是一个自定义自动化,用来实时应用记账规则(用于水电费、订阅等)。另一个插件确保账本始终保持平衡和格式化。所有这些工具都在创始人摄取新数据时作为工作流的一部分运行。结果是一个“自我更新”的账本,只需极少干预,这位创始人说,作为一个痴迷自动化的开发者,这给他带来“纯粹的快乐”。

安全和可访问性也是考量因素。这位创始人希望他的财务团队(甚至他的配偶,作为监督者)能轻松查看账目。为此,他在云端设置了一个私有的 Fava 部署。每当他向私有 Git 仓库推送新的账本提交时,一个 CI 流水线(使用 GitHub Actions 和 AWS Elastic Beanstalk)就会部署一个更新后的 Fava 实例。网页界面在密码之后(使用带基本认证的 Nginx 代理),所以只有授权人员才能看到。这样,最新的财务报表总是可以通过浏览器仪表盘访问,无需在本地安装任何东西。下面的架构图说明了这个配置:Beancount 文件和必要的配置连同 Fava 一起打包进一个 Docker 镜像,在 AWS 上提供服务,前面有 Cloudflare 负责安全。

flowchart LR
    A[Edit ledger locally] --> B[Push to private Git repo]
    B --> C[CI builds Docker image<br/>Fava + Nginx basic auth]
    C --> D[Deploy to AWS<br/>Elastic Beanstalk]
    D --> E[Cloudflare proxy]
    E --> F[Owner & team view<br/>reports in browser]

在云端自动化 Beancount: 用户在本地更新账本文件并推送到 Git;一个 Docker 容器(包含 Fava 和用于认证的 Nginx)被构建并部署到 AWS Beanstalk 服务器,Cloudflare 充当代理。结果是一个安全的网页门户,小企业的财务数据可以随时随地被(所有者或团队)实时访问。这个高级配置展示了小企业如何将 Beancount 与现代云工具集成,在获得便利的同时不放弃数据所有权。

在日常使用中,这位小企业主的重点是异常处理,而不是数据录入。每个月,他会简要审阅自动导入的交易(使用 Git 差异或 Fava 的日记视图),捕捉任何未分类或错误的记录。他还使用 Beancount 的余额断言来对账账户。例如,在录入所有六月交易后,他可能会加一个余额检查,确认银行账户的期末余额与对账单相符;如果不符,Beancount 会报错,表明有东西遗漏或录入错误。这确保账目保持准确。

小企业配置中的关键做法: 通过自定义导入器和脚本实现高度自动化(让账本“95% 自动化”)、使用版本控制实现审计轨迹和协作、用价格源进行多货币会计估值,以及部署 Fava 以便轻松、可共享地访问财务报告。小企业场景展示了 Beancount 在工程投入下能达到多远——把会计变成一个很大程度上自动化的流水线,同时保持透明度和灵活性。即使你不是程序员,也可以通过使用社区插件(用于格式化、重复检测等)和采用鼓励频繁审阅和备份的纯文本工作流,获得其中许多好处。

个人理财爱好者:预算与自定义分析​

我们最后的展示是一位个人理财爱好者——一个用 Beancount 以高度细节管理家庭财务和投资的人。这位用户以会计师的严谨和数据分析师的好奇心对待个人财务。结果是一个 Beancount 账本,不仅跟踪每一分钱,还作为预算、预测和分析实验的基础。

组织个人账本: 许多人一开始为所有账户用一个 Beancount 文件,这位爱好者也不例外。他们维护一个主账本(比如 main.beancount),包含所有账户(银行账户、信用卡、贷款、投资组合等)和交易。随着时间推移,他们引入了一些结构,拆分出不同部分——例如,他们有一个用于开户/销户的文件,以及用于年度交易的单独文件——这些被包含进主文件。这种模块化组织让浏览多年的数据更容易(可以把旧年份归档到单独文件里),同时在逻辑上仍然是一个账本。社区论坛上另一位个人用户描述了类似的布局:一个主文件按类别包含其他文件(比如 Income.beancount、Expenses.beancount、Investments.beancount)。我们的爱好者目前保持简单:一个文件跨设备同步。

说到同步,因为是个人理财,这位用户想随时随地记录交易。他们使用一个叫 Beancount Mobile 的手机应用快速在途中添加记录(比如在商店里当场记录一笔现金支出)。账本文件通过云同步(这里用的是 Syncthing)共享,这样他们的手机、笔记本电脑和一台 VPS(服务器)都有最新副本。在电脑上,他们更喜欢用 Emacs 配合 beancount-mode 舒适地编辑,享受语法高亮。这个配置确保无论他们在书桌前还是在外出途中,都能立即记录交易,避免忘记任何东西。这是一个为个人便利调整技术工具的绝佳例子——实际上是构建了一个自托管的商业预算应用替代品。

用标签和元数据进行细粒度跟踪: 这位用户利用标签在账户表之外给数据增加第二个维度。对于常规预算类别,账户就够了(他们有 Expenses:Groceries、Expenses:Rent 等账户),但对于像_事件_或_目标_这样的跨领域主题,他们使用标签。例如,他们给所有与家居翻新项目相关的交易打上 #HomeReno 标签,无论是从五金店买木材(支出)还是收到制造商的返利(收入)。这样,他们可以轻松生成一份项目总成本报告,而不会让这些支出被孤立在不同账户下。一位 Reddit 用户通过给家居项目支出打上 #garage-improvement 或 #lighting-improvement 之类的标签展示了这种方法,让通过 Beancount 查询过滤和汇总这些支出变得轻而易举。我们的爱好者对度假(#ItalyTrip2025)、大额购物和一次性事件也这样做。

元数据(交易上的键值对)也用于一些特定目的。例如,他们给大额支出加上 location: ... 元数据来跟踪在哪里花的钱,或者加上 note: ... 作为收款人和叙述之外的额外上下文。在一些情况下,他们甚至创建自定义元数据字段来帮助预测。一个例子是给某些经常性支出加上 budget: X 和 frequency: monthly——这个想法灵感来自 Beancount 邮件列表上的一次讨论,一位用户把预算预测存储在每笔支出的元数据里。这些元数据字段不影响 Beancount 的核心,但这位爱好者写了一个小 Python 脚本读取它们,把实际支出与预算预测做比较。这是使用 Fava 内置预算(下面描述)的替代方案,展示了元数据可以如何被弯折以顺从用户意愿。正如 Beancount 的创造者所指出的,元数据“只是为你[在自定义脚本中使用]而存在——Beancount 解析它但自己会忽略它”。简而言之,这位用户不怕用额外信息扩展账本来辅助个人分析。

用 Beancount 做预算: 这位用户的主要目标之一是坚持月度预算。他们之前使用一个预算应用(YNAB),想复刻它的一些信封预算概念。在 Beancount 里有几种做预算的方式,但最简单的是使用 Fava 的**预算指令**。我们的爱好者在账本里添加 budget 记录,像这样:

2025-01-01 custom "budget" Expenses:Groceries   "monthly" 500 USD
2025-01-01 custom "budget" Expenses:DiningOut   "monthly" 200 USD
2025-01-01 custom "budget" Expenses:Travel      "yearly" 3000 USD

每一行为一个账户(类别)在一段时间内设置预算。Fava 随后在网页界面显示预算与实际对比条形图,让用户看到,比如这个月他们在杂货上花了 480 美元,预算 500 美元,可能在餐饮上花了 220 美元(超预算)。这位爱好者定期查看 Fava 的利润表和支出报告,它们同时显示月度总计和预算目标。Fava 方便地把每日/每周预算汇总到适当的时间跨度。通过用 Fava UI 做这件事,用户不需要单独的电子表格来做预算;全都整合在一起了。(他们也尝试过一种更自动化的“信封”系统,在每月初把钱转到虚拟账户里,正如论坛上建议的,但发现自定义预算指令更容易维护。)

对于预测,除了预算,他们还关注即将到来的账单。一些社区成员构建了生成未来交易的插件,用于订阅或贷款摊销计划,但这位用户选择了更简单的方法:他们在账本里维护一个单独的部分,包含已知项目的未来日期交易(比如下个月的房租,或即将到来的一笔年度保险付款)。这些留在账本里但不影响今天的余额,一旦日期到来、交易变成当前的,它就充当提醒(他们会按需调整金额以匹配实际收费)。这有点取巧,但无需复杂工具就能预测现金流。

投资跟踪和多商品会计: 作为一个理财爱好者,这位用户还用 Beancount 整合投资账户——股票、共同基金和加密货币——与现金账户一起。他们有经纪账户,其持仓(比如 AAPL、GOOG 等股票)在 Beancount 中作为商品记录。例如,买入 10 股苹果会是一笔记录,贷记经纪现金,借记一个资产账户,以 10 AAPL 作为商品数量。Beancount 处理任何商品的能力在这里非常有用;你可以自由混合货币和股票。正如一位用户指出的,“Beancount 可以跟踪任何货币的数量,无论是美元还是一个股票代码”,这比往往不能很好支持股票持仓的个人理财应用是一大改进。我们的爱好者用一个每夜运行的 cron 任务获取所有证券和外汇的最新市场价格。每晚 4 点,一个脚本获取价格(来自 Yahoo Finance 或其他来源)并追加当天的价格记录到账本。这样,下次他们打开 Fava 或运行报告时,就能看到最新的投资组合价值,甚至投资表现随时间的变化。整个净值,横跨银行账户、退休基金和加密钱包,都呈现在一个统一视图里。这对数据驱动的投资者来说是梦想成真:无需登录多个平台就能看到全貌。他们本质上构建了一个由 Beancount 驱动的个人财务仪表盘。

分析和集成: 真正让这位个人理财高级用户与众不同的是,他们一旦数据进入 Beancount 就如何_分析_它。所有交易都在一个 SQLite 数据库里(Beancount 可以通过其内置查询语言查询数据,类似 SQL),用户可以自定义分析。他们写 Python 脚本来回答诸如“我杂货支出的 3 个月移动平均是多少?”或“今年的水电费支出与去年相比如何?”一个脚本查询账本中特定标签,把结果输出到 Pandas dataframe 做进一步数字运算。因为账本是纯文本,他们还用 Jupyter notebook 尝试不同的可视化(超出 Fava 提供的范围)。例如,他们在 Python 里聚合 Beancount 数据,用 Matplotlib 制作了月度储蓄率的自定义条形图。这种即席分析之所以可能,只因为 Beancount 让数据保持可访问和机器可读。正如一位用户所说,提取数据是小事一桩——“我有一个 Python 脚本用查询语言从 Beancount 拉数据,然后我用 pandas dataframe 把数据整理成报告”。我们的爱好者有一个这样的小脚本仓库,用于年度财务回顾。

当然,并非一切都需要编码——大部分时候,他们依赖 Fava 内置的图表。Fava 提供净值折线图、收入对支出趋势,甚至树状图细分(如前所示),都只需点击一下。这位用户欣赏自 2018 年以来整个财务历史都可查询、可审计。例如,如果他们想知道“过去 5 年我在汽车维修上花了多少”,他们可以在 Fava 里写个快速查询或过滤器得到答案,而不用翻收据。这种赋权正是吸引他们使用 Beancount 的原因:对数据的完全所有权和无限的分析灵活性。额外的好处是,纯文本账本面向未来——如果需要,它可以被版本控制、迁移,甚至被其他工具解析。与闭源应用不同,没有失去财务历史访问权的风险。

个人配置中的关键做法: 利用移动和桌面工具方便地录入数据、用标签和自定义元数据跟踪生活事件和跨类别分组、通过 Fava 的 budget 指令实施预算以设定持续支出目标、在同一账本里跟踪投资和多种货币(带自动价格更新),以及通过直接查询账本数据进行自定义分析。这个案例表明,稍微配置一下,即使个人理财爱好者也能达到通常只有企业才有的洞察和控制水平——同时让事情对技术娴熟的用户保持有趣和吸引人。

对于这些例子中价格获取脚本的托管等价物,请使用 实时价格。选择支持的资产和估值货币,然后把生成的 include 添加到你的托管账本。本地 Fava 配置仍然需要本地价格文件。自动价格更新估值数据;它们不会改变这些配置中的交易或批次成本。

结论​

在这些社区例子里,一个清晰的主题是 Beancount 的灵活性使高度个性化的会计系统成为可能。 社区里的高级用户利用简单的文本文件构建出在能力上可与商业软件媲美、却又为他们的工作流量身定制的解决方案。自由职业者给记录打标签和链接,轻松管理客户项目和发票。小企业主用脚本消除乏味的记账任务,并把 Beancount 与现代基础设施集成,实现始终更新的财务数据。个人理财爱好者把账本当作预算、投资和决策的单一真相来源,用标签和工具增强它,回答关于自己钱的几乎任何问题。所有这一切都在保持纯文本会计核心优势的同时实现:透明、可审计,以及对个人数据的控制。

Beancount 社区还产出了一个丰富的插件和集成生态系统。从用于输入的编辑器模式和手机应用,到用于可视化的 Fava 网页界面,再到 GitHub 上无数的导入器和实用工具,有资源满足几乎每一种需求。用户经常在论坛和博客上分享他们的账本配置,让其他人可以学习和采纳最佳实践。重要的是,由于人类可读的格式,敏感信息可以保持私密(或轻松删改后分享)——正如我们在这个展示中所做的。上面的例子表明,无论你是一个自由职业开发者、一个创业公司创始人,还是一个个人理财极客,你都可以让 Beancount 顺从你的意愿。通过有创意地使用标签和元数据、尽可能自动化、处理多货币交易、用预算做规划,以及通过插件扩展,社区不断推动纯文本可能性的边界。结果是专业级的会计账本,维护起来也很有趣,让用户对自己的财务既有清晰度又有控制力。

来源:https://beancount.io/zh/docs/community-showcase