Money · Edition No. 39 · 3 Oct 2026

beancount/beancount

Double-entry bookkeeping written as a plain text file, with a command-line program that checks it and reports on it.

← MoneyRead the whole edition →

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.

Stars6,044
LicenceGPL-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)
Latestno GitHub releases at all; PyPI 3.2.3 (2026-05-05) is the version to trust
Good
  • ⚠ 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.
Watch for
  • 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.
Similar repositories
  • 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-iii

    Covered 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
Install
pip install beancount
Screenshots
beancount/beancount: GitHub preview card

Get the next edition in your inbox

A dozen repositories, opened and checked. The licence read, the last release dated, and the ones that did not make it named with the reason. It is the half most lists leave out.

No tracking pixels. One click to leave. The archive stays free either way.

We use your address to send the edition and nothing else. Confirm by email, leave in one click. How we handle it.