hledger, haskell
October 18, 2013

Introducing hledger!

Now that this blog is up, I should work on a better introduction to hledger.

hledger is a program I wrote to answer the question “what’s happening with my money?”, without stressful bugs, data loss risks, or unnecessary complexity. In this post I’ll tell you why I started it, and tomorrow I’ll try to describe it concisely.

hledger’s origins

Accounting and personal finance software is a popular and crowded field - lately I find a new one every time I look - but around 2007 there were fewer options for me. For years I had been using Quicken, GnuCash and others and finding them frustratingly buggy, complex, untrustworthy, hard to install, slow to use, and/or slow to improve. Already stressed out about money, I needed my tools to inspire confidence and be enjoyable to use.

Most recently I had been using ledger, John Wiegley’s command-line accounting tool. This was a breath of fresh air. Combining a human-readable text file format and a command line reporting tool, ledger gave me transparency, confidence in my data, scriptability, and a much simpler and less cluttered user experience - if I was willing to accept a lower level, more minimal feature set and learn more about double entry accounting. I was.

All was not perfect though. Over time ledger remained hampered by frequent bugs, outdated documentation, and being written in a language I found unappealing to learn and which I felt was suboptimal for growing ledger. C++ ? No thank you, I was investing my spare hours in Haskell.

John wasn’t (then!) interested moving away from C++. So I started experimenting with hledger, a Haskell rewrite of ledger. I had several reasons:

I needed a robust, documented, tailored-to-my-needs, justifiable-to-spend-time-on version of ledger.

I wanted to answer the question “how well would a Haskell version of ledger work ?” Which was not yet clear, as there weren’t many real-world Haskell applications yet. I felt it would be a pretty good fit and test case.

I thought the interesting world of ledger and scriptable text-based accounting should be opened up to Haskell programmers.

I thought that hacking on a practical tool which I’d use daily would be a good driver for my Haskell studies.

Last but not least, building my own financial tool was a way to help motivate myself to keep my bookkeeping current and to regularly work on my finances. This was something I tended to avoid, so anything to make it more fun and interesting seemed like a good strategy. (Or possibly, an elaborate escape from looking squarely at bank statements or however it is normal people do it… ?)

And still more… I hoped for my next spare-time project to become self-sustaining, with some kind of funding model or an associated commercial product or service. I strongly intended that the project would at least pay its costs, and if it led to a new side business, even better. I have not yet reached this goal, but this was another reason to choose a money-related project, which I figured had more potential to provide real value to people.

Anyway, that’s why I started hledger, which has since grown into a useful free software project with 20+ code contributors. In the next post I’ll describe what it is in more detail.