Release notes
Valuation fix, improved HTML and FODS output, multiple depths, terminal pagination, robust export to Beancount, ...
hledger 1.41
Breaking changes
-
Accounts named "equity:conversion", "equity:trading", or "equity:trade(s)", which are detected as type
V
/Conversion
, will now revert to typeE
/Equity
instead if any other account has been declared as typeV
/Conversion
. -
When built with ghc 9.10.1, hledger shows two extra newlines after any error message.
Fixes
-
A somewhat severe, though hopefully rare, valuation bug has been fixed. In certain circumstances, values could be calculated inaccurately, because of display-rounding occurring inappropriately during calculations. #2254
Specifically: when there was no direct P price for the target commodity, so that hledger had to convert via a chain of prices, and if all of those price amounts had too few decimal places, then the result could be inaccurate. An example:
P 2000-01-01 A 10.5 B P 2000-01-01 B 100.5 C 2000-01-01 (a) 100 A $ hledger-1.40 print -X C 2000-01-01 (a) 105520 C ; wrong $ hledger-1.41 print -X C 2000-01-01 (a) 105525 C ; right
-
bs
/bse
/cf
/is
's HTML output no longer includes excess heading cells, andbs
/bse
's HTML output no longer shows an inappropriate Total heading with-T
. (balancesheet
does not support-T
.)
(Henning Thielemann) -
Balance commands' HTML, CSV and FODS output now show tree mode properly indented (using no-break spaces).
(Henning Thielemann) -
In the HTML output of
bs
/bse
/cf
/is
reports, Net amounts in the Net row are now formatted like the others.
(Bas van Dijk) -
In
bs
/bse
/cf
/is
HTML output, some unnecessary TH cells have been fixed.
#2225 (Henning Thielemann) -
The
print
command now ignores a depth limit entirely.
Previously, a depth limit caused it to show only transactions referencing accounts as deep or deeper than that. -
In the
roi
command, a division by zero error (when all assets were sold) has been fixed.
#2281 (Dmitry Astapov) -
In a multi-line comment generated by CSV rules, tags on all lines now work (ie, can be matched). Posting dates in comments generated from CSV also now work.
#2241 -
hledger's bash shell completions are now up to date with the latest CLI.
#986 -
When showing output with a pager, if
$PAGER
is set to something not found in PATH, we now ignore it instead of raising an error. -
hledger --color=yes | less -R
now shows bold headings as you'd expect.
Features
-
The
print
,register
andaregister
commands now support HTML and FODS output, and thebs
/bse
/cf
/is
commands now support FODS output. This means all of the "STANDARD REPORTS" commands, and thebalance
command, now support text, HTML, CSV, TSV, or FODS output.
(Henning Thielemann) -
When generating HTML output with the register or balance commands, the
--base-url
option will add hyperlinks to hledger-web, allowing you to view the detailed transactions if you have hledger-web running.
(Henning Thielemann) -
Reports can now specify different display depths for certain accounts, rather than showing all accounts with the same depth limit. Multiple
--depth=ACCTREGEX=DEPTH
options (ordepth:ACCTREGEX=DEPTH
arguments can be used. For example, this will clip all accounts matching "assets" to depth 3, all accounts matching "expenses" to depth 2, and all other accounts to depth 1:--depth assets=3 --depth expenses=2 --depth 1
(Stephen Morgan, #2292) -
In unix-like environments, hledger now uses a pager (
$PAGER
,less
, ormore
) for all large terminal output, not just for help. You can override this with the new--pager
option. The pager is expected to handle hledger's ANSI colour output (unless you disable that). Ifless
is used, it will be configured automatically, or you can override this by setting options in aHLEDGER_LESS
environment variable. -
The
print
command'sbeancount
output is now much more Beancount-compatible #2295. Other than using--alias
to provide the top-level account names Beancount requires, you should rarely have to do anything special to produce a journal thatbean-check
accepts. hledger will automatically adjust problematic names, encode unsupported characters, and so on. See hledger: Beancount output for the full details.This supersedes the
ledger2beancount
tool, and makes using Beancount tools, especially Fava, practical for hledger users. In many cases this should just work:hledger [ALIASES] print -o tmp.beancount; fava tmp.beancount
Improvements
-
if
blocks in CSV rules now allow& !
(AND NOT) on the same line. -
When reading
.latest
files, whitespace is now ignored, and any date parse failure is reported with the file and line number. -
In journal format, P directives now require a space after the first symbol, preventing surprises like
P 2024-10-31 a0 1
parsed asP 2024-10-31 a 01
.
#2280 -
aregister
has a new--heading=YN
option, for disabling the report heading. (Henning Thielemann) -
aregister
now supports the--invert
and--cumulative
flags, like theregister
command. (Henning Thielemann) -
The balance commands' HTML and FODS output now shows table borders consistently.
(Henning Thielemann) -
In the balance commands' HTML output, row headings now span multiple rows when appropriate, rather than being repeated.
(Henning Thielemann) -
Balance commands now support
--transpose
when generating HTML output.
(Henning Thielemann) -
The
balance
command's--layout=tidy
now affects HTML and FODS output at least to some extent (not just CSV output). And it always disables the totals row. (Henning Thielemann) -
The
balance
command's FODS output now picks a report title based on the report mode: "Balance Report", "Multi-period Balance Report", or "Budget Report". (Henning Thielemann) -
balance
andaregister
's HTML output will now use a hledger.css file if present, likebs
/bse
/cf
/is
. -
bs
/bse
/cf
/is
now support the--count
(postings count) report type, likebalance
. -
The balance commands' options help has had some cleanup.
-
The error messages from
check accounts
andcheck recentassertions
are now clearer. -
The
check commodities
command now also checks commodities used in P directives. #2280 -
The
commodities
command now also list commodities mentioned in P directives. #2280 -
All of hledger's internal hidden (but searchable) tags can now be made visible by
print --verbose-tags
, which is useful for troubleshooting--infer-equity
,
--infer-costs
, and the detection of redundant costs and conversion postings. Also,- Some hidden tags have been renamed for clarity:
_modified
is now_modified-transaction
,
_cost-matched
is now_cost-posting
,
_conversion-matched
is now_conversion-posting
. - The
generated-posting:
tag added by--infer-equity
is now valueless. - The
modified-transaction:
tag added by--auto
now appears on its own line.
- Some hidden tags have been renamed for clarity:
-
Using the
-NUM
shortcut (for--depth NUM
) in a config file now works. -
Setting the
--color
option in a config file now works (except it does not affect--debug
output, currently). -
The
--color
option's suggested values are nowyes
/y
,no
/n
, orauto
/a
.always
andnever
are no longer documented, though still supported. -
More compact and informative
--debug=2
output during valuation. Market prices are now shown using one line each, the known prices are listed, and the status of--infer-market-prices
is shown.
#2287 -
More informative
--debug=7
output from CSV rules. -
The hledger packages have a new
debug
build flag. Builds made with ghc 9.10+ and this flag will show some kind of stack trace if the program exits with an error. (These will improve in future ghc versions.) -
Disabled the unused
ghcdebug
build flag and ghc-debug support, for now. -
Allow megaparsec 9.7.
-
ghc 9.10 / base 4.20 are now supported.
Docs
- Windows: added tips for setting
LEDGER_FILE
(Amadeusz Wieczorek, hledger_site#119) - csv: if blocks: explain matchers and field names better #2289
- import: rewrite; rename "date skipping" to "overlap detection"
- import: added tips for first import
- assertions: mention their behaviour with posting status
- journal: rewrite the Tags section
- pager: note that
help -p TOPIC
uses less; link to less FAQ - query types: updates, add headings, mention tag:'s infix matching
- Regular expressions: note possible RTL/bidi limitation (?)
- Special characters: rewrite, more precision, mention some Windows differences
- Output formats: expand, document beancount and FODS output
- Text output: expand/consolidate terminal topics
- FODS output: describe the advantages over CSV (Henning Thielemann)
- Debug output: note that the --debug option doesn't work in config files.
- bal: improve --layout doc
- bal: also mention hledger.css and text encoding in balance doc
- html: note safari text encoding issue
- timedot: mention the common journal+timedot file setup #2238
- Install, manual: new shell completions doc. #986
- Config files: rewrite #2231
- examples/csv: an example of YNAB 4 data, and RTL text, with a workaround
- examples: hledger2beancount.conf
Scripts/addons
- bin/*: remove obsolete _FLAGS markers from --help
- examples/csv/csv-hledger-1.py: a python-based CSV converter script
API
- Hledger.Utils.IO's ansi color helpers now respect the --color option.
- Hledger.Utils.IO.rgb' now takes Float arguments instead of Word8.
- Hledger.Cli.Commands.Balance: export budgetReportAs* functions, for use in scripts.
(Dmitry Astapov)
hledger-ui 1.41
Breaking changes
- When built with ghc 9.10.1, error messages are displayed with two extra trailing newlines.
Fixes
-
V (value) and C (cost) toggle keys once again reset each other as they should
(broken since 1.21).
(Gal Lakovnik Gorenec, #2284) -
Bash shell completions are now up to date. #986
Features
Improvements
-
Allow clipping depth to be configured per account (until adjusted in app, at least).
(Stephen Morgan, #2292) -
Added helix as a supported editor for the
e
key. (amano.kenji) -
Added --pager and --color options as in hledger, affecting command line help. Also --color=no forces use of the "terminal" theme.
-
Added a new
debug
build flag. Builds made with ghc 9.10+ and this flag will show some kind of partial stack trace if the program exits with an error. These will improve in future ghc versions. -
Disabled the unused
ghcdebug
build flag and ghc-debug support, for now. -
Allow megaparsec 9.7.
-
Allow brick 2.5, 2.6.
-
Avoid brick 2.3.2, which doesn't build on windows.
-
ghc 9.10 / base 4.20 are now supported.
Docs
- Mention that period navigation uses standard periods #2293
- Install, manual: new shell completions doc. #986
hledger-web 1.41
Breaking changes
- When built with ghc 9.10.1, error messages are displayed with two extra trailing newlines.
Fixes
-
Autocompletions now work in newly created account fields. #2215
-
Bash shell completions are now up to date. #986
Features
Improvements
-
Added --pager and --color options as in hledger, affecting command line help.
-
Added a new
debug
build flag. Builds made with ghc 9.10+ and this flag will show some kind of partial stack trace if the program exits with an error. These will improve in future ghc versions. -
Disabled the unused
ghcdebug
build flag and ghc-debug support, for now. -
allow megaparsec 9.7
-
ghc 9.10 / base 4.20 are now supported.
Docs
- Install, manual: new shell completions doc. #986
project changes 1.41
Docs
- REGRESSIONS: new table format; updates.
- CODE: notes on the use of haddock #2222
- Simplify github bug report template
- Add man pages and info manuals to the release bindists on github
Scripts/addons
- Fixed build errors in all bin/ scripts. (Dmitry Astapov)
- hledger-install: fix installation of hledger-ui
Infrastructure/Misc
- GHC 9.10 is now the default for dev builds and most github workflows.
- Add consistent greppable summaries to all workflows; various other improvements
- Add bash shell completion script to the release bindists (#2223, gesh/hseg, Simon Michael)
- tools/gtree: -u shows untracked files, -I adds ignored files.
- just doctest: pass through doctest arg(s).
credits 1.41
Simon Michael (@simonmichael),
Henning Thielemann (@thielema),
Dmitry Astapov (@adept),
Stephen Morgan (@Xitian9),
Bas van Dijk (@basvandijk),
Gal Lakovnik Gorenec,
amano.kenji,
gesh.
How to install
For all install options, see hledger.org: Install.
You can install hledger from most package managers (but check for a green badge indicating it's up to date).
Or you can build it from source yourself.
Or you can install up to date binaries from this page, by following the appropriate instructions below.
If you find problems with these instructions, please let us know.
GNU/Linux, 64-bit Intel
At the command line:
cd /usr/local/bin
curl -LOC- https://github.com/simonmichael/hledger/releases/download/1.41/hledger-linux-x64.zip
(unzip -p hledger-linux-x64.zip | tar xf -) && rm hledger-linux-x64.zip
cd
hledger --version; hledger-ui --version; hledger-web --version # should show 1.41
Mac, 64-bit ARM or Intel
In a terminal window (don't use your web browser to download, it won't authorise the binaries):
-
For ARM macs:
cd /usr/local/bin curl -LOC- https://github.com/simonmichael/hledger/releases/download/1.41/hledger-mac-arm64.zip (unzip -p hledger-mac-arm64.zip | tar xf -) && rm hledger-mac-arm64.zip cd hledger --version; hledger-ui --version; hledger-web --version # should show 1.41
-
For Intel macs:
cd /usr/local/bin curl -LOC- https://github.com/simonmichael/hledger/releases/download/1.41/hledger-mac-x64.tar.gz (unzip -p hledger-mac-x64.tar.gz | tar xf -) && rm -f hledger-mac-x64.zip cd hledger --version; hledger-ui --version; hledger-web --version # should show 1.41
Windows, 64-bit ARM or Intel
In a powershell window (press WINDOWS-R
, powershell
, ENTER
):
-
Make a place to keep installed binaries. You only need to do this once, not for every release:
mkdir -force $HOME\bin >$null $ENV:PATH += ";"+$HOME+"\bin" [Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", [EnvironmentVariableTarget]::User)+";"+$HOME+"\bin", [EnvironmentVariableTarget]::User)
-
Download and install the release binaries:
cd $HOME\bin curl https://github.com/simonmichael/hledger/releases/download/1.41/hledger-windows-x64.zip -OutFile hledger-windows-x64.zip Expand-Archive hledger-windows-x64.zip -DestinationPath . -Force cd $HOME hledger --version; hledger-ui --version; hledger-web --version # should show 1.41
-
Ensure a default journal file exists, and without a problematic encoding.
This will allow you to start hledger-web by double-clicking on its icon if you wish.out-file -append -encoding ascii $HOME/.hledger.journal
(I'm not sure why "ascii" is needed here - hledger likes utf8 and understands utf8 BOM headers,
but the state of our unicode support on Windows
is really unknown, your feedback is welcome.)
Windows 7, 64-bit Intel
These instructions have not been tested recently, please let us know if they work for you:
- click hledger-windows-x64.zip below
- choose Open with Windows Explorer, OK
- click Extract all files
- choose a destination folder - ideally one that appears in
echo %PATH%
, likeC:\Windows
(though that one will require administrator permission); otherwise, your home directory (C:\Users\YOURNAME
) - check "Show extracted files when complete"
- click Extract, wait for the destination folder to open
- find the hledger, hledger-web icons (if you extracted to
\Windows
, you'll need to scroll down) - for each icon: double-click, uncheck "Always ask before opening this file", click Run
- close those Explorer windows
- open a command window (press Windows-r, type CMD, press enter)
hledger --version; hledger-ui --version; hledger-web --version
should show 1.41echo # >> .hledger.journal
to ensure a default journal file exists. (Important: the doubled >> is needed to avoid overwriting existing data.)
Problems:
- Starting hledger by double-clicking its icon won't work because it needs arguments; run it from the command window instead.
- Starting hledger-web by double-clicking its icon may fail eg because Explorer's command window is too small;
configure that to be larger, or run hledger-web from a command window instead. - hledger or hledger-web may fail to run if there is not enough memory available.
Next steps
Once installed, run hledger
, and perhaps read hledger.org: Quick start.