Ledger is so simple it’s amazing!
I’ve been through many money manager applications: GnuCash, MoneyLover, Firefly, YNAB (briefly). I’ve even tried to build my own, but was too lazy.
They all lacked something that I really wanted (MoneyLover, Firefly), or were too expensive for me (YNAB), finicky/problematic (MoneyLover) or difficult for me to use across all my devices (GnuCash).
Before Ledger I thought Firefly would be the one: it’s a FOSS laravel application, which is something I have loads of experience with, so I figured if it can’t do what I want right now, I’ll just make it do what I want. I never got around to that, and, now, I’ve fallen in love with something else.
Why, though? What’s so great about Ledger?
Naturally, it’s FOSS, but like I said it’s simple. So simple, that I can show how it works right now:
Open a text file, and type this into it:
2019/07/11 Amazon
expenses:gatorade 500
assets:wallet -500
That’s a transaction in ledger. That may not seem like much, and it isn’t. Ledger truly shines when you get the CLI tool, that allows you to perform queries on your ledger file. Like show your balance with ledger -f ledger.txt bal
.
That’s still not a lot, admitidely, but there’s more. Ledger allows for handling your commodities instead of just money. Think of it this way: you bought a Gatorade somewhere, and paid for it with some money. The exchanged one commodity for another. In other words, the transaction above can now look like this:
2019/07/11 Amazon
expenses:gatorade 1 Gatorade
assets:wallet -500 GYD
You can read that as “Bought 1 Gatorade for 500 Guyana Dollars”. What that allows you to do, now, is a two things:
- Keep track of how many Gatorade you’ve bought
- Keep track of the price of Gatorade over time (more on that later)
- Do silly things like calculate how many Gatorades you can buy with the money in your wallet (
ledger -f ledger.txt bal wal -X Gatorade
)
This feature is something I’ve wanted to be able to do forever, and none of the other applications I’ve used have included it.
Since ledger is a double-entry system, your transactions can get even fancier. Say your friend helped you pay for the Gatorade. Now your transaction looks like this:
2019/07/11 Amazon
expenses:gatorade 1 Gatorade
liabilities:debt:Joe -200 GYD
assets:wallet -300 GYD
This will now allow you to see how much you owe Joe, without having to do multiple transactions, like some applications would have you do.
Now comes the part that’s usually hardest, or costs money: using ledger on multiple devices. With Firefly, this meant running a relational database somewhere (costs money), or with GnuCash this meant synchronizing their database file across devices, finding an application on each operating system that’ll open it and allow me to add stuff to it… you see my dilema. With Ledger this is comically simple since it’s a text file:
- Sync across my devices with anything from Google Drive to Syncthing to some custom S3 solution.
- Put it in git (this is what I did, because that let’s me do some other cool stuff).
Since it’s just text, it’s editable from basically anywhere, so making entries isn’t much of a problem anywhere.
Now, you may be thinking it sounds rather annoying to have to edit a text file on my phone. What happens if I’m in the middle of something, and just want to make a quick entry?
That’s where the community comes in: See, I’m not the only crazy person out here. I’m far from the smartest, too. Ledger, and what’s called “plain text accounting” is already popular enough that there’s a subreddit and a website, not to mention the ledger website has exceptional documentation on how much you can do: https://www.ledger-cli.org/3.0/doc/ledger3.html.
There are a couple Android and iOS apps out there, and countless ports or forks to choose from, as well as some nice web options.
One more thing!
Something I’ve wanted to do, but haven’t been able to: keep track of my taxes. More specifically, keep track of how much I owe the tax-man when I get paid for something, and then keep track of how much I can deduct when I buy stuff. Ledger can do it, rather easily. See an explanation here: https://www.ledger-cli.org/3.0/doc/ledger3.html#Concrete-Example-of-Automated-Transactions