6,044 stars · GPL-2.0-only (read from /blob/master/COPYING; stock GPLv2 text PLUS a hand-written line from the author narrowing it: 'This is a GNU GPL "v2 only" license. This is not a GNU GPL "v2 or any later version" license.' —Martin Blais) · no GitHub releases at all; PyPI 3.2.3 (2026-05-05) is the version to trust · Track this in Scout
Double-entry bookkeeping written as a plain text file, with a command-line program that checks it and reports on it.
▶Repo detailsthe review · specs · pros & cons · install
What it is
Beancount defines a small written language for recording money moving between accounts, and ships a Python program that reads the file, refuses it if it does not balance, and produces balance sheets and income statements. Double-entry means every amount is recorded twice, once leaving one account and once arriving in another, which is what makes the arithmetic self-checking.
What it is good for. Anyone whose books matter in ten years. A text file can be read by anything, kept in version control so every change has a history, and checked by a program you write yourself. It suits a one-person business, a freelancer, or anyone who has lost data to an accounting product that shut down or raised its price.
- ⚠ Its licence file is the most interesting thing in this edition. It is the plain GNU General Public License version 2, and then it adds the author's own line: "This is a GNU GPL 'v2 only' license. This is not a GNU GPL 'v2 or any later version' license." — Martin Blais. That is a deliberate decision, stated by hand, where almost every other project says "or later".
- The file format has barely changed in twenty years, and plain text in version control means you can see exactly who changed which number and when.
- It refuses to load a file that does not balance. An accounting mistake stops the program rather than producing a quietly wrong report.
- Version 3 deliberately removed the parts people liked looking at. The web screen and many of the extra tools now live in separate projects, so a usable setup means installing more than one thing. Fava is the usual companion and it is not included.
- Everything is typed. There is no import wizard and no bank connection, so a month of card transactions is a month of typing or a script you write.
- ⚠ The "version 2 only" licence is a genuine trap if you plan to build something on top: code under version 2 only cannot legally be combined with code under version 3, and a great deal of modern open-source code is version 3.
- It publishes no GitHub releases at all — its releases page says "There aren't any releases here." That is a determination and not a gap: versions are published to the Python package index instead, where 3.2.3 is dated 5 May 2026. Code last moved on 23 August 2026, and there are 207 waiting problems.
- ledger/ledger
The same plain-text double-entry idea and the oldest of the three; written in C++ so it is faster, but it has no Python interface and needs compiling or a system package.
Track this in Scout - plaintextaccounting/hledger
The same model and a nearly compatible file format, and it ships a command line, a terminal screen and a web screen in the box rather than as separate projects, but extending it means Haskell.
Track this in Scout
firefly-iii/firefly-iiiCovered in Edition 28. The same double-entry bookkeeping but as a web application with a database and forms, which is easier to use every day and puts the data inside somebody's schema rather than a file you can read.
Track this in Scout
pip install beancount
