HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
hledgerorg
hledger
Haskell2016–2025
hledgerorg / hledger

hledger

Robust, fast, intuitive plain text accounting tool with CLI, TUI and web interfaces.

8Distinct people
17Mentions
0Explicit recommenders
4.8KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

Robust, fast, intuitive plain text accounting tool with CLI, TUI and web interfaces.

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 3:56:07 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year17 dated mentions

Observed mentions: 2016-08-02 17:34:11 UTC to 2025-09-04 09:55:40 UTC.

012342016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20162017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 4 mentions; 0 submissions, 4 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20202021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 2 mentions; 2 submissions, 0 comments2025

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC101
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC000
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC202
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC404
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC101
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC202
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC101
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC202
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC202
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC220

What Hacker News says

17 sources
> My major gripe with hledger and other plaintext accounting systems: setting up the correct rules (regex for your expenses) takes too much time as it involves: > a) defining the regexes/categories) for dozens to hundreds of expense descriptions (e.g. walmart, gas station xyz) We don't usually do it all up front; it's easier to build up your rules over time, improving them a little each time you download. > b) "recompiling" your hledger journals after every rule change It's not required (see my other comment). > c) checking for negative and positive errors (expense description was not matched OR too many different expenses were matched) For the not matched case: hledger's fallback category is "expenses:unknown" (and inflows are "income:unknown"). I usually watch for those, with something like watchexec -- 'hledger import *.csv --dry-run
Read the rest
| tail +2 | hledger -f- -I print unknown' and tweak rules until there are no unknowns, before importing. For the other - I guess I have a similar answer - if you're not certain of your rules, preview the conversion and tweak them, before finalising it. > This process is much faster in a spreadsheet application. IMHO the journal format of hledger and other plaintext accounts apps is too verbose. You can keep your data in CSV/TSV instead of journal. This could be better for spreadsheet interop. I think a more compact, but still readable journal format would be interesting (something between CSV and current journal format). I agree some things are much easier in a spreadsheet (and also, vice versa). > it would be a great relief if someone started a Github repository with expense texts used when you e.g. pay at Carrefour in Italy or Walmart in the USA with your debit card. People could submit those descriptions from the CSV exports of their bank accounts. Please do, I would love to see it! However, wouldn't it be a really huge list of text patterns/regexps, with 0.1% of them useful to any one person ? Perhaps region-specific collections could work. https://github.com/simonmichael/hledger/tree/master/examples... is hledger's collection of CSV rules; these cover the basics of CSV conversion, but not the expense categorising. > Another annoyance in Europe is that there is no API connection for open source apps to bank account statements, you always rely on manual CSV exports. Ha! It's not better in the US at least (except, by giving up your bank credentials to third parties). We are usually envying your APIs over there.
In Eventually consistent plain text accounting
For anyone interested (though to compare you really need to work with them over a period of time): Here's a fairly simple thousand line Makefile: https://github.com/simonmichael/hledger/blob/2d35b1051/Makef... (and https://github.com/simonmichael/hledger/blob/2d35b1051/Makef...) that was converted to a Justfile: https://github.com/simonmichael/hledger/blob/43c93eb37/Justf... And here's a more powerful kind of makefile using a full programming language: https://github.com/simonmichael/hledger/blob/43c93eb37/Shake... And here are two multicommand shell scripts: https://github.com/simonmichael/hledger/blob/43c93eb37/bin/f... https://github.com/simonmichael/hledger/blob/43c93eb37/bin/t... that were converted to a justfile: https://github.com/simonmichael/hledger/blob/43c93eb37/bin/j...
In Show HN: Making GNU Make a better Task Runner
I can offer this (warning, crufty real-world scripts ahead!): these make files and bash script (https://github.com/simonmichael/hledger/blob/137d825/Makefil..., https://github.com/simonmichael/hledger/blob/137d825/Makefil..., https://github.com/simonmichael/hledger/blob/a3c300b/bake) were replaced by this roughly equivalent Justfile (https://github.com/simonmichael/hledger/blob/137d825/Justfil...) (some old things were commented out, some new things were added). I'm only a few weeks in, and just has its own learning curve, but I'm very pleased overall. Cognitive load is down, usability is up, robustness is up. ("After many years with make and plain shell ... for scripting, just is better enough, and the goal of clean consolidated efficient project automation is so valuable, that I am relying on it even though it's not installed by defaul
Read the rest
t.")
In Show HN: Just.sh – compiler that turns Justfiles into portable shell scripts
I have tried some similar things. I like your approach and write-up a lot! You asked about tools. Well, from the "when you have a hammer" department.. you could use plain text accounting tools for some quick reporting wins. Some examples: If you have a.dat: 2020-05-28 18:41 Eat Pizza 2020-05-29 09:00 Slept with the window open 2020-05-29 09:00 Headaches This is close enough to hledger's timedot format to do some reporting. Each line is interpreted as an empty transaction, which you could query by date or description: $ hledger -f timedot:a.dat print 2020-05-28 * 18:41 Eat Pizza 2020-05-29 * 09:00 Slept with the window open 2020-05-29 * 09:00 Headaches $ hledger -f timedot:a.dat print date:2020/5/28 2020-05-28 * 18:41 Eat Pizza $ hledger -f timedot:a.dat print desc:eat 2020-05-28 * 18:41 Eat Pizza You cou
Read the rest
ld transform your data to a plain text accounting format, with quantities. Eg, make it TSV: $ perl -pe '$c=0; $c++ while $c < 2 && s/ /\t/' a.dat > c.tsv $ cat c.tsv 2020-05-28 18:41 Eat Pizza 2020-05-29 09:00 Slept with the window open 2020-05-29 09:00 Headaches and use hledger CSV conversion rules to customise and enrich it: $ cat c.tsv.rules fields date, time, description # save the time as a tag comment time:%time # count each item as one "event" by default account1 (events) amount1 1 # special cases if pizza account1 (food) amount1 200 cal Now you have a (single entry) accounting journal: $ hledger -f c.tsv print 2020-05-28 Eat Pizza ; time:18:41 (food) 200 cal 2020-05-29 Slept with the window open ; time:09:00 (events) 1 2020-05-29 Headaches ; time:09:00 (events) 1 Allowing quantity reports: $ hledger -f c.tsv balance -MATS cur:cal Balance changes in 2020-05: || May Total Average ======++=========================== food || 200 cal 200 cal 200 cal ------++--------------------------- || 200 cal 200 cal 200 cal $ hledger -f c.tsv activity -D desc:headache 2020-05-28 2020-05-29 * $ hledger-bar -v -f c.tsv cur:cal 2020-05 200 ++ $ hledger-ui --all -f c.tsv # explore with a TUI More at https://github.com/simonmichael/hledger/tree/master/examples...
In A Syntax for Self-Tracking (2020)
A few more: https://github.com/simonmichael/quickbench - Easily time one or more commands with one or more executables and show tabular results https://github.com/simonmichael/shelltestrunner - Easy, repeatable testing of CLI programs/commands https://github.com/simonmichael/hledger - Robust, fast, intuitive plain text accounting tool with CLI, TUI and web interfaces https://github.com/haskell-game/fungen - A lightweight, cross-platform, OpenGL-based 2D game engine in Haskell https://haskell-game.dev - a small selection of the many games written in Haskell https://haskell-via-sokoban.nomeata.de - Haskell via Sokoban https://lhbg-book.link - Learn Haskell by building a blog generator https://github.com/input-output-hk - the Cardano blockchain and Daedalus wallet https://github.com/jgm/pandoc - Universal markup converter (already mentioned
Read the rest
above) https://github.com/simplex-chat/simplex-chat - secure messaging platform https://www.libhunt.com/l/haskell - more projects...
In Dhall: A Gateway Drug to Haskell
What I mean is: - "The developers decided not to implement lot-based tracking" seems a misunderstanding. Perhaps "the developers have dragged their heels on exactly replicating Ledger's handling of lots" is more accurate (and I could justify that!). - we have never had sophisticated valuation/investment features, but there's a bunch of work in progress on this area right now; more flexible valuation (https://github.com/simonmichael/hledger/issues/329) is a current focus and needs testers.. And, right now it should be possible to manage lots manually, similar to http://rantsideasstuff.com/posts/2018/07/01-tracking-investm... . It's a manual process in Ledger too after all. Let's chat in #hledger if you'd like.
In Hledger: Robust Plain Text Accounting
hledger is mostly compatible with ledger. It's fairly mature and has been around for a long time. They have a comparison on their site: https://github.com/simonmichael/hledger/wiki/FAQ#features It also has a nice web interface out of the box: http://hledger.org/hledger-web.html The author of hledger is also behind the plain text accounting site: https://plaintextaccounting.org/ For me, the primary benefit is I could build hledger but not ledger. I don't know if they've fixed it, but building ledger was not easy.
In An Emacs major mode for Hledger

Showing the 15 most recent of 17 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.