George Supreeth

Back to Ledger

I

remember reading about the story of a person called Kenge of the Mbuti people of Africa. When the anthropologist Turnbull took Kenge out of the forests and onto a vast, open plain for the first time, something interesting happened.

Kenge pointed to a distant herd of grazing buffalo and asked Turnbull what type of insects they were. When Turnbull told him they were buffalo, Kenge thought it was a joke. As they drove closer, the buffalo grew in size and Kenge became terrified. He could not process how the animals seemed to be expanding in size.

I learned this was because the Mbuti live in such a dense rain forest, their vision is rarely required to focus on anything beyond a few yards away. A vast plain was incomprehensible.

I’ve been using a variety of different programs to manage my personal finances, and when I discovered Ledger, I may have felt a similar shift in perspective.

Ledger is a plain text accounting application, and I used it for a little while some years ago. It didn’t last because I need to share data on our household finances with my wife, and since that would mean she would have to learn Ledger on the Command line or (gasp!) Emacs, I stopped using it after a couple of months.

We reverted to Homebank for a little while. The monthly ordeal of downloading bank statement CSVs and converting them into Homebank format CSVs for import became too much and so we went back to the stone age: Google Sheets.

Then I remembered Ledger, it was already on my system and so I imported a few months of data and I can’t tell you what a pleasure it is to work with an open, plain text format.

Gnucash and Homebank are great software, and they served me well over the years, at least whenever I tried to maintain my books in them. The GUI however makes them so easy to use that the convenience obscures how certain ideas work. Double entry accounting for example. The idea that the value of any transaction has to balance because money comes from somewhere and goes somewhere else. Using Ledger makes it transparent and obvious with every transaction I make.

Here for example, is a typical transaction1 in ledger.

2026/02/08 * Chocolate Cake
Assets:Cash ₹-100.00
Expenses:Food ₹100.00

I spent some money on chocolate cake and I paid cash for it. So ₹100 is withdrawn from my cash and ₹100 worth of chocolate cake is deposited into my belly. Yum!

Ledger does not do any book-keeping. I have to do this, using plain text files and ledger uses that data to provide reports. This means I have to manually reconcile local data against my bank’s copy of the data, and so I have to review every single transaction myself.

This would have brought me back to where I started except… LLMs. I’ve been using Google’s Gemini over the past few months to generate a huge bunch of helpers, and some of them were for Ledger. Here are some examples:

I love the experience so far, stepping out of a dense GUI out onto a sparse, plain-text file. A little scary at first, but pretty soon the flexibility and ease of use overrides any other concern.

I also love how perfectly personal finance and book-keeping fits into my workflow in Emacs. I can interlink transactions with bills, and tasks, and the calendar and important news from RSS feeds on personal finance and then email my wife our financial reports and our list of personal finance todos - all in one place.

Most of all, Ledger, I think, is making book-keeping fun. I didn’t think that could ever happen.

Notes


  1. This is not how Ledger transactions are formatted. I can’t get Hugo to properly show the indentations and spacing that is required by Ledger. See the manual for examples ↩︎

#Tools #Plaintext