All Versions
Latest Version
Avg Release Cycle
63 days
Latest Release
636 days ago

Changelog History
Page 1

  • v1.27 Changes

    September 01, 2022

    πŸ“„ Docs

    • - an overview of hledger's error messages.

    • πŸ“„ Rewrite/consolidate cost and conversion docs.

    • πŸ†• New template for github releases, with improved install instructions for binaries.

    • βž• Add modern windows binary install instructions. (Lazar Lazarov, Simon Michael)

    • πŸ›  Fix tables of contents in developer documentation. (Alex Hirzel)

    • ⚑️ Update ACHIEVEMENTS. (Alex Hirzel)

    • Corrected the extension for the CREDITS file. (Pranesh Prakash)

    • πŸ›  Fix broken link in bin/ (David D Lowe)


    • βž• Add example for capital one credit cards CSV. (max thomas)

    πŸ–¨ Process

    • Revive github projects, set up shortcut url

    • πŸ‘· Many cleanups and improvements to the CI test and binary-generating github actions. The CI tests for master now also include hledger-lib's doctests.

    • πŸ“¦ All packages now disallow name shadowing in their code.

    • πŸ‘‰ make scc gives a modern report of code line counts.

    • βœ… make ghci-unit-test loads hledger-lib unit tests in GHCI.

  • v1.26 Changes

    June 04, 2022


    • πŸ“‡ renamed to hledger-simplebal

    • βž• added hledger-git, hledger-pijul

    • fin (and bin) scripts show available scripts and their help

    • πŸ“‡ renamed to bashrc

    • πŸ–¨ Get hledger-print-location working. (Stephen Morgan)

    πŸ“„ Docs

    • README cleanup, inspired by feedback from README reviewer Lars Wirzenius.

    • Clearer sponsoring info and more complete sponsor lists on website and README.

    • The new repo keeps track of our public finances (on Open Collective, Liberapay etc.)


    • invoice: calculate dates accurately on last days of month

    πŸ–¨ Process

    • πŸ— Stackage nightly and GHC 9.2 are now the default for dev builds.

    • CI workflows:

      • Workflows and binaries have more consistent naming, mentioning platform and architecture.
      • The main test workflow is now linux-x64-test, replacing push and pull. It runs for both pushes and pull requests, and generates binaries on every run.
      • Pushes/merges to master, including Simon's, are required to have passed linux-x64-test on another github branch first.
      • Mac and Windows binaries are now stripped also (if applicable).
    • πŸ— make buildtimes, make buildtimes-cabal show GHC codegen times.

  • v1.25 Changes

    March 04, 2022


    • now also installs Pavan Rikhi's hledger-stockquotes tool.

    • The bin/hledger-number addon was added.

    • πŸ“„ The bin/hledger-check-fancyassertions addon now shows docs in --help.

    • A new invoice-making script was added: examples/invoicing/invoice-script/invoice

    πŸ–¨ Process/tools

    • πŸš€ The RELEASING doc and release process has been updated, and a new helper script added: tools/releaseprep. make hackageupload now only works from a branch named VERSION-branch or VERSION-release. Ie, making releases from master is no longer allowed, a release branch is always required,

    • πŸ‘• CI: The commitlint check is more robust, and now runs only in the push to master and pull request workflows, and not eg when building release binaries. linux-x64 binaries are now built with ghc 9.0, not 8.10. Workflow, branch, and binary names have been improved.

    • πŸ’» make ghci-ui/make ghcid-ui now use older ghc 8.10 to avoid ghc 9.0-triggered failures.

    • πŸ‘ hls support: The hie.yaml added to help hls work on mac m1 has been moved out of the way, since it probably makes things worse on other architectures.

  • v1.24.1 Changes

    December 10, 2021

    πŸ“„ Docs

    • More platform notes for setting LEDGER_FILE.

    • πŸ‘ Clarify which commands support which output formats and data layouts.

    • Note that hyphenated field names are allowed in CSV rules.

    • πŸ›  Fix some table layouts in non-HTML docs.

  • v1.24 Changes

    December 01, 2021


    • πŸ“œ bin/hledger-check-fancyassertions.hs: fix ugly assertion parse errors. (ShrykeWindgrace)

    • ⚑️ bin/hledger-check-tagfiles.hs: Update description, clarify wording. (Pranesh Prakash)

    πŸ“„ Docs

    • πŸ—„ Account types: prioritise the short one-letter names, hide the deprecated legacy syntax.

    • Directives: a more compact and accurate overview.

    • examples/templates/basic: A new starter file set, and a place to collect them.

    • πŸ”¦ Expose more developer docs as separate web pages: CHANGELOGS, COMMITS, RELEASING, etc.

    • πŸ›  Fix a link to developer workflows. (Joaquin "Florius" Azcarate)

    πŸ–¨ Process

    • PR template: Fix our github PR template to use proper comment syntax, and link to more relevant docs. (toonn)

    • cabal.project: Drop obsolete compatibility comment. (#1365, toonn)

    • ⬆️ Bump default stackage snapshot to one avoiding buggy happy version.

    • bin/changelog: a new helper making changelog edits more pleasant.

    • πŸ‘‰ make throughput{,-dev,-EXE}: reports transactions per second for a range of file sizes with the hledger in PATH, hledger dev build, or named hledger executable.

    • πŸ— make install-as-FOO: build executables and save as bin/hledger*-FOO

    • perf: for comparative benchmarking with Ledger.

    • πŸ‘• CI: commitlint: be more forgiving when we can't figure out recent commits (don't check any).

    • πŸ‘• CI: commitlint: recognise any commit starting with β€˜Merge’ as a merge commit (and ignore it). (Stephen Morgan)

  • v1.23 Changes

    September 21, 2021


    • The bin/hledger-check-fancyassertions.hs addon script, allowing more complex balance assertions, works again. (#1464, Stephen Morgan)

    • πŸ‘• Many code cleanups suggested by hlint (Stephen Morgan)

    πŸ“„ Docs:

    • βž• Added a public to the hledger repo and website.

    • ⚑️ Website updates:

      • Reorganised site content.
      • Improved page tables of contents.
      • Content fixes.
      • New docs: Currency conversion. hledger and Beancount/GnuCash/Ledger/Quicken.
    • πŸ†• New examples: systemd and nginx configs for hledger-web (Alan Young)


    • make site-watch works again

    • make list-commits and make showauthors show those things.

    • πŸ— Shake cabalfiles now uses (and requires) hpack in $PATH, to avoid building. It should be the version that's in the current stack release, to avoid commit conflicts.

    • πŸ”Š shake: changelogs: A leading semicolon now means "skip most CI steps", not "omit from changelog".

    • ci: most steps are skipped if commit message begins with ;.

    • 0️⃣ hledger developers now use GHC 9.0/stackage nightly by default. (#1503)

    • βœ… Our doctests are disabled with GHC 9 for now to work around an upstream bug. (#1503, #1615)

    • πŸ‘• bin/commitlint is a new tool for hledger developers which checks and describes new commit conventions which simplify maintenance of change docs and releasing. It can be run locally while developing, manually or as a pre-commit hook (ln -sf ../../bin/commitling .git/hooks/commit-msg), and is also run by our CI workflows to check pull requests., (#1602)

  • v1.22 Changes

    July 03, 2021


    • 🐧 We now provide static executables for GNU/Linux on x64 (amd64) and arm32v7 architectures. These are more portable and more likely to work on your linux system than the dynamic Ubuntu executables we have been providing. These will also be useful for users. (#1571) (Garret McGraw)

    • πŸ‘ GHC 9.0 is now officially supported, and GHC 8.0, 8.2, 8.4 are not; building hledger now requires GHC 8.6 or greater.

    πŸ“„ Docs:

    • πŸ“‡ The info manuals now have the proper metadata so you or your packager can install them with install-info and they will appear in info's Directory. We also provide a dir file making it easy for developers to see the latest dev manuals in their info Directory. (#1585) (Damien Cassou, Simon Michael)


    • The hledger IRC channels (, moved to

    • The hledger Matrix room (, is now on at least equal "official" footing with the IRC channel.

    • ⬆️ I upgraded the matrix room to a newer version of the Matrix protocol. This effectively splits it into an old (read only) room and a new room. If you are joined to the old room, you might not have noticed; in your matrix client, please follow the link to the new room, ie

    • I briefly bridged the IRC and matrix rooms, because having two chats (four if we consider #plaintextaccounting) is a pain. I hope to try the experiment again at some point.

  • v1.21 Changes

    March 10, 2021
    • ⚑️ roi has a new cookbook doc, and example files have been updated. (Dmitry Astapov)

    • Example CSV rules for the Daedalus wallet have been added.

    • 0️⃣ The default stackage resolver/GHC version has been bumped to lts-17.4/ghc-8.10.4.

    • tools/generatejournal now includes more commodities and prices in generated journals. (Stephen Morgan)

    • βœ… Our functional tests now also run on BSD. (#1434, Felix Van der Jeugt)

    • βž• Addon scripts in bin/ have been updated for latest hledger API (Stephen Morgan).

    • βž• Addon scripts are now compiled as part of our CI tests, and always with the same version of hledger source they were shipped with. We now require script users to check out the hledger source tree and run the scripts (or, bin/ from there. This keeps users and tests in sync, making things more reliable for everyone. (#1453)

    • Last but not least, hledger's bash completions (provided in ./shell-completions/) have been thoroughly updated (#1404, #1410, Vladimir Zhelezov).

    "This was supposed to be just a fix for #1404 but upon visiting the source several issues became apparent and that is why the commit grew a bit more than expected. A complete list of changes below:

    • Fix #1404. No more orphaned temporary directories. Commands, options, etc. that used to be stored in there are included at build-time as here documents in the source.

    • Fix artifacts in /tmp after build. Upon fixing the above I became aware that the build itself was leaving behind a heap of artifacts in /tmp that were not taken care of with a make clean. Fixed by using temporary files and directories in the build directory. Makefile and build scripts adjusted.

    • Produce command aliases. Regular expressions in build scripts changed to produce all command aliases except single letter ones (see below)

    • Do not propose single letters completions. It is simply not useful and adds a lot of noise. It makes completion slower as well because you need to hit yes on the prompt: Display all 200 possibilities? (y or n) now excludes those.

    • Query filters simplified. Keep only the prefix of the filter with the colon in query-filters.txt. This change has two reasons:

    • Single letter completions are not useful (see above). It allows for completion suggestions specific to each Bonus reason: it's a completion engine, not a user manual. Fix completion impacts on global environment The completion script was making a couple of changes to the global environment which had an impact for the rest of the shell session.

    • set -o pipefail: the change is hidden from the user and could lead to subtle errors throughout the shell session. COMP_WORDBREAKS=" ": this affects subsequent completions for us and other programs too. I exclude the colon : from its value and use compopt -o filenames to handle escaping of special characters for us. I would like to find a solution without messing with COMP_WORDBREAKS but it is not straight forward.

    • Fix hiding of legit subcommands. Completion was hiding all possibilities if a subcommand happens to be the prefix of another. On typing balance, one should be proposed balancesheet and balancesheetequity as well.

    • Return early. Try to complete depending on the current context and return immediately if successful. Keep completion list relevant and as short as possible.

    • Context aware completion

      Add handlers for option parameter completion, see _hledger_compreply_optarg() Add handlers for query filters:, see _hledger_compreply_query() Use --file and --rules-file arguments when proposing completions for the above, see _hledger() Propose only top level accounts at first. Again, keep it short and focused. Custom compgen wrapper compgen is fairly complicated. There is no way to feed it a word list with literals. It will mangle your input in so many ways that we cannot trust it. To work around this several wrappers are used: _hledger_compgen() works with _hledger_quote_by_ref() to process and escape newline separated input which is then fed to compgen and finally in COMPREPLY through _hledger_compreply() and _hledger_compreply_append(). It sounds messy and I guess it is, I would like to find a more straight forward way to do it. I think it is still a way better and safer interface with readline than trying to grep our way through.

    • Replace declare with local. Again, this script is sourced by the shell -- keep variable scopes as narrow as possible. Oops, they are actually synonymous when used in a function but local declares our intentions explicitly.

    • Use compopt -o nosort. Often I resort to using it to keep different groups of completions together. Whether this is more ergonomic or not is subjective. But our input lists are already sorted at build-time so why not. Sort manually query-filters.txt when editing it.

    • Remove irrelevant comments. And add some new ones :)

    I think that is all. Give it a spin, try to abuse it, in and outside of quotes, with some funky accounts, payees, tags, whatever, and tell me where it breaks or behaves unexpectedly."

  • v1.20.4

    January 29, 2021
  • v1.20.3 Changes

    January 14, 2021
    • The run/compile instructions for add-on scripts in bin/ have been updated. The scripts now use stack runghc and are tested (manually with make functest for now) with the corresponding hledger source, not the hledger on stackage.