Beancount
FreeYour ledger is a text file — and it belongs in Git
Plain-text double-entry accounting. The ledger is a human-readable text file, validated and queried by command-line tools, with the companion Fava providing a web reporting interface. The format is open and permanently readable, version-controllable with Git and scriptable in bulk.
Why we picked it
Beancount belongs to the plain-text accounting school. A ledger entry looks like this:
2026-08-14 * "Supermarket" "Groceries"
Expenses:Food:Groceries 128.50 USD
Assets:Bank:Checking
That is all — a date, a description, and a few account-and-amount lines. The entire ledger is one
.beancount text file.
That brings a chain of advantages, especially for programmers:
- It goes into Git. Every entry is a commit, the history of what changed and when is plainly visible, and mistakes can be reverted. No database-backed finance app offers this.
- The format stays readable forever. In twenty years, when nothing can open some proprietary ledger format, a text file is still a text file.
- Scripts can process it. Bulk imports, automatic categorization and custom reports are a few lines of Python away.
- Validation is strict. It implements proper double-entry, errors out when the books do not balance, and supports assorted account-level assertions.
The companion Fava is effectively mandatory: a web interface that renders the text ledger into balance sheets, income statements, net worth curves and charts across dimensions. With it, day-to-day review no longer happens in a terminal.
To be clear about:
- The barrier is among the highest on this site. You must be willing to keep books in a text editor, understand double-entry, and ideally know some command line and Python. It is not for everyone.
- There is no mobile app. Jotting an expense on a phone is not something it does; the common workaround is capturing roughly elsewhere and tidying up at the computer.
- Upstream releases are infrequent. Distribution is mainly through PyPI and the repository carries few tagged releases, with development tracked through branches instead. That is the project's long-standing style; the functionality itself is stable.
hledger and Ledger are the two older siblings in the same school — same idea, slightly different syntax — and worth comparing before you commit.