Skip to content
Robust command-line/curses/web plaintext accounting tools, a Haskell rewrite of Ledger.
Branch: master
Clone or download
simonmichael speed up -V/--value by converting reports, not the journal (#999)
Instead of converting all journal amounts to value early on, we now
convert just the report amounts to value, before rendering.

This was basically how it originally worked (for the balance command),
but now it's built in to the four basic reports used by print,
register, balance and their variants - Entries, Postings, Balance,
MultiBalance - each of which now has its own xxValue helper.

This should mostly fix -V's performance when there are many
transactions and prices (the price lookups could still be optimised),
and allow more flexibility for report-specific value calculations.

|                                          || hledger.999.pre | hledger.999.1sort | hledger.999.after-report |
| -f examples/1000x1000x10.journal bal -V  ||            1.08 |              0.96 |                     0.76 |
| -f examples/2000x1000x10.journal bal -V  ||            1.65 |              1.05 |                     0.73 |
| -f examples/3000x1000x10.journal bal -V  ||            2.43 |              1.58 |                     0.84 |
| -f examples/4000x1000x10.journal bal -V  ||            4.39 |              1.96 |                     0.93 |
| -f examples/5000x1000x10.journal bal -V  ||            7.75 |              2.99 |                     1.07 |
| -f examples/6000x1000x10.journal bal -V  ||           11.21 |              3.72 |                     1.16 |
| -f examples/7000x1000x10.journal bal -V  ||           16.91 |              4.72 |                     1.19 |
| -f examples/8000x1000x10.journal bal -V  ||           27.10 |              9.83 |                     1.40 |
| -f examples/9000x1000x10.journal bal -V  ||           39.73 |             15.00 |                     1.51 |
| -f examples/10000x1000x10.journal bal -V ||           50.72 |             25.61 |                     2.15 |

There's one new limitation, not yet resolved: -V once again can pick a
valuation date in the future, if no report end date is specified and
the journal has future-dated transactions. We prefer to avoid that,
but reports currently are pure and don't have access to today's date.
Latest commit c23fc8b Apr 24, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.sandstorm Add --capabilities-header to Jun 24, 2018
bin smooth: smoothes out irregular transactions (experimental addon) Jul 16, 2018
docker package: added helper scripts in docker/ Jan 31, 2019
examples tests: update i18n test journals, i18n tests Apr 20, 2019
hledger-api ; propagate dev version bump Mar 21, 2019
hledger-install install: bump versions Mar 20, 2019
hledger-web ; propagate dev version bump Mar 21, 2019
hledger speed up -V/--value by converting reports, not the journal (#999) Apr 24, 2019
site ;site: update cookbook links Apr 6, 2019
tests speed up -V/--value by converting reports, not the journal (#999) Apr 24, 2019
tools tools: generatejournal: start from a fixed year, not last year Apr 20, 2019
.appveyor.yml appveyor: note 7z docs Mar 10, 2019
.ci .ci: track generated md files as well May 21, 2018
.ctags tools: remove some more hakyll-std traces May 9, 2018
.dockerignore package: added Dockerfile Jan 30, 2019
.editorconfig fix datepicker not closing, linting Dec 30, 2017
.ghci tools: .ghci file to control prompt Mar 29, 2017
.gitignore Add upper bound on 'statistics'; broaden .gitignore Oct 22, 2018
.hlint.yaml refactor: lib: hlint cleanups Feb 14, 2019
.mailmap doc: use consistent spelling of Mykola Orliuk Mar 27, 2017 tools: travis: note occasional breakage on PRs Oct 16, 2017
.travis.yml travis: enable web, api Mar 10, 2019
.version bump version to 1.13 Feb 2, 2019 ; merge latest changelogs Mar 20, 2019 doc: add a README for the functional tests, linked from contrib guide Apr 19, 2019
LICENSE add LICENSE Oct 1, 2008
azure-pipelines.yml tools: make bench: disable slowest 10k-txn benchmarks by default Dec 5, 2017 cabal-install: do a cabal update Feb 17, 2018
cabal.project disregard over-specified version constraints in brick and config-ini Oct 24, 2018
dev.hs collect some langage pragmas in dev.hs Feb 21, 2019
stack-ghc8.0.yaml ui: fix build issues with older brick/snapshots, require brick 0.23+ Feb 2, 2019
stack-ghc8.2.yaml stack: use latest easytest 0.2.1 with all GHCs Oct 24, 2018
stack-ghc8.4.yaml stack: use latest easytest 0.2.1 with all GHCs Oct 24, 2018
stack.yaml bump default stack.yaml to nightly-2019-03-09 / ghc 8.6.4 Mar 9, 2019


lightweight, portable, dependable accounting tools

hledger is a computer program for easily tracking money, time, or other commodities, on unix, mac and windows (and web-capable mobile devices, to some extent).

It is first a command-line tool, but there are also curses-style and web interfaces, and a Haskell library ( for building your own programs and scripts (hledger is written in Haskell). hledger was inspired by and is largely compatible with Ledger. hledger is free software available under the GNU General Public License v3+.

hledger aims to help both computer experts and regular folks to gain clarity and control in their finances and time management, but currently it is a bit more suited to techies. I use it every day to:

  • track spending and income
  • see time reports by day/week/month/project
  • get accurate numbers for client billing and tax filing
  • track invoices

Though limited in features, hledger is lightweight, usable and reliable. For some, it is a simpler, less distracting, more future-proof alternative to Quicken or GnuCash.

For more, see



Support us with a monthly donation and help us continue our activities. [Become a backer]


Become a sponsor and get your logo on our README on Github with a link to your site. [Become a sponsor]


OpenCollective OpenCollective bountysource github issues

on hackage on stackage nightly on stackage lts on stackage lts 7

travis build status appveyor windows build status

You can’t perform that action at this time.