Beancount is a personal finance software that writes code

Beancount is a free and open-source double-entry accounting software that manages finances, generates reports, and views data through a web interface through a concise plain text file. You can download the latest stable version (V3) from GitHub, check out the official documentation on beancount.github.io/docs, and ask questions on the mailing list.
The core value of using this software is: to achieve flexible financial management with version control and automation capabilities, while ensuring data privacy and no vendor binding risks; It helps you accurately track expenses, assets, and budgets, saving you time and cost on financial accounting.

In most bookkeeping software, bookkeeping is a behavior that “just feels right”.
 Beancount is the opposite – it believes that if the account is unfair, it must be wrong.

This is a project that treats “accounting” as a “formal system”.

Beancount

Beancount is an open-source plain text double-entry accounting system.
It’s not a bookkeeping app in the traditional sense, but more like:

A “language” for describing financial facts + a rigorous verification engine.

You record every transaction in a text file, and Beancount checks them logically like a compiler.

Use “text” for accounting?

In the world of Beancount:

  • A ledger is .beancount a document
  • Documents are the only “source of truth”
  • It does not rely on databases, vendors, or cloud services

The benefits of this are very straightforward:

  • It is still readable ten years later
  • History can be managed with Git
  • Auditable, rollbackable, and comparable
  • There is no “the account is gone after software upgrade”

This is a typical engineer thinking:

If data is important, it shouldn’t be locked in a black box.

Double-form bookkeeping is mandatory and self-consistent

Beancount strictly follows the principle of double-entry bookkeeping:

Each inflow of money must correspond to the outflow of another money.

A simplest example:

2025-01-01 * "Lunch"
 Expenses:Food 35 CNY
 Assets:Cash

The meaning is clear:

  • Food expenditure increased by $35
  • The cash account will be reduced by 35 yuan accordingly

If these two sides do not match, Beancount will directly report an error and refuse to load the ledger.

This makes bookkeeping from “handwriting” to a thing that must be logically self-consistent.

Accounts are not “categorized”, but structured

In Beancount, everything is an account, and it’s a tree:

Assets:Cash
Assets:Bank:ICBC
Income:Salary
Expenses:Food
Expenses:Rent
Equity:Opening-Balances

This is closer to the “chart of accounts” in a real accounting system than a simple classification of labels.

Once the structure is determined, you will find:

  • Financial situation can be derived
  • The report is not “calculated”, but “necessarily established”

Uses:

Ideal for:

  • Programmer, user with engineering background
  • Multi-account/multi-currency/investment record requirements
  • There are requirements for accuracy and traceability
  • People who want to maintain their personal financial system for a long time

Visualization?

Beancount is responsible for “truth” but does not force you to just look at the text.

The most used pairing in the community is Fava:

  • Web interface to browse the ledger
  • income and expenditure statements, asset curves
  • Multi-currency and investment views

Beancount ensures that the logic is correct in the background, and Fava is responsible for “translating the results” into words.

Github:https://github.com/beancount/beancount
Tubing:

Scroll to Top