Ledger
A plain-text personal finance tool with no accounts, no sync, and no opinions.
- Year
- 2025
- Status
- Maintained
- Role
- Author
- Built with
- Go, SQLite, plain text
Ledger reads a text file and tells you where the money went. It does not connect to a bank, does not run a server, and does not know your name. About nine hundred people use it, which for a tool with no marketing and a text-file interface feels like a lot.
Why plain text
Because the file outlives the program. Everything I have used for this in the last decade has either shut down, been acquired, or changed its export format, and in each case the thing that survived was whatever I had already written down in a form a human could read.
2026-08-04 groceries -42.10 EUR
2026-08-04 coffee -3.60 EUR
2026-08-05 invoice #118 2400.00 EURThat is the whole format. Three columns and a date. Anything more expressive turned out to be a category system in disguise, and category systems are personal enough that shipping one is a small act of aggression.
The one clever thing
Ledger keeps a SQLite index beside the file and rebuilds it when the file changes. Queries are instant on a decade of history, and if the index is deleted nothing is lost. Every piece of state that is not the text file is a cache, and the program is allowed to throw a cache away.
What I would change
The command names. I chose them in an evening and they are inconsistent in a way that is now impossible to fix without breaking nine hundred people's shell aliases.