Skip to content

Releases: simonmichael/hledger

1.99.3

1.99.3 Pre-release
Pre-release

Choose a tag to compare

@simonmichael simonmichael released this 24 Jun 11:13
1.99.3

Release notes

(2.0 preview 3)

conventional file layout for rules/data/prices,
get command,
commodity aliases,
print aligns by decimal mark,
more intuitive precision behaviour,
more robust lot detection,
average cost basis methods,
customisable report titles,
prices --summary report,
more robust roi report.

hledger 1.99.3

Breaking changes

  • CLI: --verbose-tags is no longer a general flag, it is now a
    command-specific flag for print and rewrite.

  • Commodities & prices: commodities --used now only shows
    commodities used in transactions; use --priced to see commodities
    used in P directives.

  • Data import: The CSV source and archive rules now read from/write to a
    journal-adjacent data/ directory by default.

  • Journal: Inferred missing amounts no longer affect display precisions or
    entry balancing precisions.

  • Journal: account names whose final part is enclosed in curly braces
    (like assets:{foo}) are expected to have a valid lot subaccount
    name within the braces, and will raise an error if not. This is now
    documented. Also this error checking (and the hiding by default) of
    explicit lot subaccounts can now be disabled with -I/--ignore-lots.

  • print: print now aligns posting amounts by decimal mark, by default.
    --layout=hledger1 restores the old layout.

Command line

  • We now show a clear error when no value is provided for a
    value-requiring option. (Eg, hledger import -f --dry-run no
    longer tries to use --dry-run as -f's value.)

  • Bad option values are now reliably reported as an error.
    Previously, some invalid option values triggered an error only if
    the option was actually used by the command being run.

  • On Windows, file paths containing spaces are now quoted properly
    when invoking external helpers (info, man, tldr, pager, $EDITOR,
    hledger-iadd). This affected hledger-ui's A and E keys, and
    hledger's help/pager invocations.
    [#2646]

Commodities & prices

  • Commodity aliases:
    In journal files, commodity directives can now define one or more
    aliases for the commodity. Eg here USD has three aliases:

    commodity USD 1.00    ; alias: $ US$ "us dollars"
    

    A 1:1 market price is inferred for these, so you can use -X to
    freely convert between them. This is useful eg if your journal and
    your downloaded market price data use different symbols for a currency.

    cur:COMM queries now match COMM or any of its commodity aliases.
    To match only a specific symbol without considering aliases, use sym:SYM.

  • commodities: --used now only shows commodities used in transactions;
    a new --priced flag shows commodities used in P directives.
    Separating these makes --used more useful with a date query.

  • commodities now supports date: queries (and/or -b/-e/-p
    report period options), affecting the --used and --priced reports.

  • prices has a new --summary mode.

  • prices has a new --locations flag, showing the file and line number
    of each price's directive or transaction from which it was inferred.

Data entry

  • add and import now test for faulty filesystems before writing.
    Some filesystems, eg an Android shared filesystem in Termux, overwrite when you tell them to append.
    hledger now tests for this before writing to the journal, to reduce risk of data loss.
    [#2577]

  • add now offers useful default amounts after entering a balance assignment.
    Previously, amounts entered via = BALANCEAMOUNT were not affecting
    subsequent postings' default amounts, making it difficult to
    complete data entry. Now, appropriate balancing amounts are offered.

  • add no longer restarts at posting 1 if the final transaction checks fail.
    So if the entered transaction fails to balance or satisfy balance assertions,
    it now just reprompts for another posting, instead of discarding the postings
    entered. (This is most visible when entering balance assignments.)

  • add's default amounts are now displayed with the journal's commodity
    display styles, helping to avoid misparsing of decimal marks. [#2645]

Data import

  • get is a new command for fetching transaction data and market prices.
    It runs two helper scripts which you can customise:

    • data/getdata to gather transaction data (eg CSV) files in data/
    • prices/getprices to download market prices, to be saved in prices/

    Or with --transactions or --prices, only the selected phase is run.
    The data and prices directories are autocreated if needed, next to the main journal file.
    Sample scripts can be found in https://github.com/simonmichael/hledger/tree/main/bin.
    The sample getprices requires pricehist.

  • import with no file arguments now reads from all .rules files in
    the rules/ directory next to the main journal file, by default.
    Files whose name begins with . or _ are skipped (this is useful
    for included files which should not be read directly.)

  • import -g/--get runs the get command before importing. So
    with appropriate helper scripts, a complete import workflow can be:
    hledger import -g [--dry-run]

  • import now archives only when new transactions were actually
    imported. This avoids creating duplicate archives, eg with a
    data-generating source rule like source | paypalcsv ....

  • The CSV source and archive rules now read from/write to the
    journal's data/ directory by default:

    • source looks for bare filenames/relative paths first in data/,
      then in ~/Downloads.
      (Except paths beginning with ./ or ../ - these are relative
      to the rules file, as before.)
    • archive saves to data/archive/, autocreating that if needed.
      (A breaking change; previously it saved in a data dir next to the rules file.)
  • On Windows, source file paths with a drive letter like C:\foo
    are now properly recognised as absolute paths (not relative).

  • A # character in a source rule now always starts a same-line
    comment, even if it appears after |.

Error messages

  • Balance assertion errors: in the suggested troubleshooting command,
    commodity symbols containing regex metacharacters (like $) are now
    properly quoted for the shell.

  • In error messages which compare two amounts (balance assertions,
    recorded gain, check basis), when the rounded amounts look
    identical, we now show more decimal places to make the difference
    visible. [#2636]

  • Certain errors when reading a CSV or rules file
    (eg a missing date rule, or encoding/skip/timezone errors)
    now show the path of the problem rules file.

  • import's "no data files" error message is improved.

  • With an unrecognised command argument, the error message now shows
    the bad argument, and the config file path if it came from a config
    file. [#2489]

Journal

  • Inferred missing amounts no longer affect display precisions or the
    entries' local balancing precisions. So a high-precision inferred
    amount won't affect the number of decimals displayed in reports, or
    the precision required to balance the entry. So,

    • An unseen high-precision balancing amount, eg inferred from a
      precise @ price, no longer makes it harder to balance the entry.
    • Some reports that used to add unnecessary decimal zeros no longer do so.
    • Reports more consistently show amounts smaller than their
      commodity's display precision as 0.

Lots & gains

  • In command line help, --lots has moved from "General input flags"
    to "General output flags".

  • hledger can now detect gain postings heuristically, without
    requiring that their account is declared as type:G. Five styles
    for writing disposal transactions are documented in the manual's
    "Recording disposals" section.

  • The G/Gain and U/UnrealisedGain account types are now
    inferred from conventional English names, like the other types. Eg
    revenues:gain, income:capital-gains, equity:unrealised-gain,
    equity:unrealized gains are recognised as type G, G, U, U.

  • Gain amounts are now inferred or checked at the gain commodity's
    local precision within the entry. This makes it easier to read
    inferred gain amounts and to write explicit gain amounts.
    As a special case, if the local precision is zero but the gain is a
    non-integer, 2 decimal places are assumed.
    Inferred gain amounts preserve their full precision internally, so
    they can be viewed more precisely with a command like print -c '$1.000000' --round=soft.

  • Lot transfer destinations are now checked more carefully: any
    specified lot details on the destination annotation (date, label,
    cost) must match the source lot, or an error is raised. (Previously,
    this would silently disrupt lot identities.)

  • The AVERAGE/AVERAGEALL cost basis methods now properly
    recalculate the pool-wide average cost after each acquisition.
    And when they are used, lot subaccount names now omit the cost
    ({2026-01-15} rather than {2026-01-15, $50}), so account names
    remain stable as new lots are acquired.
    [#2581]

  • check basis no longer fails because of non-terminating decimals in
    the unit cost (eg $50/7 = $7.142857...).
    [#2636]

  • Harmless commodity style differences in explicit lot subaccount
    names are now ignored (eg $60 vs $ 60).

  • Explicit lot subaccounts are detected more robustly, tolerating
    colons or curly braces within the label or commodity symbol.

  • Explicit lot subaccounts now require a comma after the date.

  • The --ignore-lots/-I flags disable explicit lot subaccounts
    detection and error checking. [#2649]

  • When disposing a single lot with a balance assertion, we no longer
    generate an unnecessary new assertion posting.

  • If a Ledger-style (LOTNOTE) annotation contains double quotes,
    these are now stripped so they don't clash with hledger's cost basis
    syntax and break round-trip parsing.

  • When generating label...

Read more

1.99.2

1.99.2 Pre-release
Pre-release

Choose a tag to compare

@simonmichael simonmichael released this 28 Apr 23:18
1.99.2

Release notes

Lot tracking refinements.

hledger 1.99.2

Breaking changes

  • Lot processing and checking is now performed by default when reading a journal with lot entries.
    The --lots flag is now a display toggle; without it, lot subaccounts are hidden from reports.

  • The G (Gain) account type is no longer auto-detected from account names
    (to avoid breaking hledger 1 journals using those names).
    And a U (UnrealisedGain) account type has been added (a subtype of Equity).

  • Disposal transactions now produce a balanced pair of gain postings:
    a transfer between the first U account and the first G account.
    (If none are declared, the names equity:unrealised-gain and revenues:gain will be used.)
    The special exception for gain postings during transaction balancing,
    and the separate disposal balancing step, have been dropped.

  • Amountless explicit gain postings are no longer allowed; if you write gain
    postings in the journal, you must write their amounts also.

Features, Improvements

  • The new --ignore-lots flag disables lot processing. This can be useful
    to avoid errors when working with incomplete journals.

  • The -I flag is now a shorthand for --ignore-assertions --ignore-lots.

  • Capital gain is now computed more robustly, from disposal postings only
    (not from the entry's cost basis residual).

  • Cost amounts in lot subaccount names like assets:x1:{2026-01-15, $1,500}
    are now styled with the canonical commodity styles.
    Likewise for inferred gain posting amounts.

  • Lot transfer transactions with a priced fee posting will be automatically
    split into a transfer portion and a disposal portion (for the fee), if possible.

  • A new optional hledger check basis check verifies that each acquire posting's
    cost basis matches its transacted cost ({B} = @T).
    This prevents typos in cost basis which could silently cause wrong capital gain to be calculated.

  • print's -x/--explicit flag now implies --lots, so you can just
    type hledger print -x to see lot details. (To see all possible details,
    add --verbose-tags.)

  • print --verbose-tags now shows some new lot posting ptype tag values:

    • rgain and ugain on generated realised- and unrealised-gain postings
    • lot-parent-assertion on generated postings preserving balance assertions across lot splitting
    • split-posting on the disposal portion of auto-split lot transfers.
  • When inferring a transacted price to balance a two-commodity transaction,
    if one of the postings is lotful, hledger will attach the price to that one,
    rather than always picking the first posting.
    #2571

  • Transaction-balancing error messages have been improved, and now show the summed amounts
    to help with troubleshooting.

  • In CSV rules, a %(FIELD) interpolation syntax with parentheses is now accepted.
    This is useful when the field name needs to be delimited from adjacent text.
    Eg: account1 assets:%(type)checking.

  • When using the less pager, hledger no longer duplicates options in the LESS environment variable.

  • add now date-weights similar transactions by absolute distance from today,
    not from the journal's latest date. This prevents a future date typo from skewing defaults.

  • setup now also checks for the G (Gain) and U (UnrealisedGain) account types.
    Also output related to the less pager, lot-related data, and strict checking has been improved.

Fixes

  • The G (Gain) account type's spelling has been fixed (it's Gain, not Gains). #2570

  • add no longer breaks when the journal contains postings to a type G account.
    #2572

  • register and aregister now omit postings whose amount couldn't be inferred
    instead of showing blank entries and report layout problems. (Shouldn't occur in practice.)
    #2571

  • Equity conversion postings generated by --infer-equity no longer break
    transaction balancing in lot disposals.

  • {{TOTALCOST}} annotations may now contain a date and label too.

  • {{TOTALCOST}} annotations now preserve decimal digits (capped at 8 digits)
    when converted to {UNITCOST}.

Scripts/addons

  • hledger-fancyassertions: add -s/--strict flag. (Joshua Chapman)

Docs

  • Cost basis, Lot reporting: many updates.

hledger-ui 1.99.2

Fixes

  • Navigating to lot subaccounts (with names like {2026-01-01, $50}) no longer
    fails with "invalid regular expression" — regex metacharacters in account
    names are now properly escaped.

Improvements

  • Allow brick 3.x.

  • Uses hledger 1.99.2.

hledger-web 1.99.2

Improvements

  • Allow yesod-static 1.6.1.1 and later again.

  • Uses hledger 1.99.2.

project changes 1.99.2

Doc updates

  • AI: ongoing edits, new monitoring scripts and notes, FOSS credit, link cleanups
  • ACHIEVEMENTS, ANNOUNCE, DECISIONS, DEVFAQ, README, RELEASING: edits
  • SPEC-lots: edits and cleanups
  • SPEC-special-postings: converted to markdown tables
  • relnotes/ghrelnotes: AI doc url fixes, edits
  • references to the master branch updated to main

Infrastructure/tools

  • stack configs: bumped to nightly-2026-04-17
  • workflows: fix stack.yaml path in binaries-windows
  • justfile: ccusage scripts
  • justfile: functest uses more threads
  • general --help options doc updated

credits 1.99.2

Simon Michael,
Joshua Chapman.

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.

All platforms

If you have eget, that's a convenient way to download the right binaries for your machine:

eget simonmichael/hledger --all

Otherwise:

GNU/Linux, 64-bit Intel

At the command line:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.99.2/hledger-linux-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.99.2

Mac, 64-bit ARM or Intel

In a terminal window (don't download the binaries with your web browser, they won't get authorised):

On ARM macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.99.2/hledger-mac-arm64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.99.2

On Intel macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.99.2/hledger-mac-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.99.2

Windows, 64-bit ARM or Intel

In a powershell window (press WINDOWS-R, powershell, ENTER):

cd ~
curl https://github.com/simonmichael/hledger/releases/download/1.99.2/hledger-windows-x64.zip -OutFile hledger-windows-x64.zip
Expand-Archive hledger-windows-x64.zip -Force -DestinationPath AppData\Roaming\local\bin
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.99.2

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%, like C:\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.99.2
  • `echo # >...
Read more

1.52.1

Choose a tag to compare

@simonmichael simonmichael released this 28 Apr 22:48
1.52.1

Release notes

hledger 1.52.1

Breaking changes

  • The Gain (G) account type is no longer auto-detected from account names like
    revenue:gains or income:capital gains; it must now be declared explicitly with ; type: G.
    Also, the UnrealisedGain (U) account type, a subtype of Equity, has been added
    (spellings U, UnrealisedGain, and UnrealizedGain are all accepted).
    These improve compatibility between hledger 1 and 2.

Docs

  • The "Cost basis / lot syntax" section has been renamed to "Cost basis",
    and updated to mention hledger 2.

hledger-ui 1.52.1

Improvements

  • Uses hledger 1.52.1.

  • Allow vty-crossplatform 0.5.

hledger-web 1.52.1

Improvements

  • Uses hledger 1.52.1.

credits 1.52.1

Simon Michael.

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.

Updates to binaries:

  • 2026-01-12: Fixed the hledger-linux-x64.tar.gz asset below, it previously contained a dev build. #2526

All platforms

If you have eget, that's a convenient way to download the right binaries for your machine:

eget simonmichael/hledger --all

Otherwise:

GNU/Linux, 64-bit Intel

At the command line:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.52.1/hledger-linux-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.52.1

Mac, 64-bit ARM or Intel

In a terminal window (don't download the binaries with your web browser, they won't get authorised):

On ARM macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.52.1/hledger-mac-arm64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.52.1

On Intel macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.52.1/hledger-mac-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.52.1

Windows, 64-bit ARM or Intel

In a powershell window (press WINDOWS-R, powershell, ENTER):

cd ~
curl https://github.com/simonmichael/hledger/releases/download/1.52.1/hledger-windows-x64.zip -OutFile hledger-windows-x64.zip
Expand-Archive hledger-windows-x64.zip -Force -DestinationPath AppData\Roaming\local\bin
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.52.1

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%, like C:\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.52.1
  • echo # >> .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.

1.99.1

1.99.1 Pre-release
Pre-release

Choose a tag to compare

@simonmichael simonmichael released this 28 Mar 21:32
1.99.1

Release notes

(2.0 preview 1)

Automated lot tracking and capital gains calculation, improvements to print's beancount output, and a new policy for AI-assisted development.

hledger 1.99.1

Breaking changes

  • This 2.0 preview is the first hledger release to explore AI-assisted development.
    Please check out the evolving AI policy/FAQ: https://hledger.org/AI.md.
    There's also a new "AI usage" section below.

  • hledger now recognises certain transactions as lot disposals;
    and in these, postings to accounts with the Gain type (declared or auto-detected)
    are excluded from normal transaction balancing.
    This means it's possible for existing journal entries to be rejected.
    Eg, this entry (though nonsensical and unlikely) is ok in hledger 1.x but an error in 2.x:

    2026-02-01 sell stock
        assets:stocks      -1 AAA {$50} @ $60
        assets:cash       $50
        revenue:gains     $10
    

    hledger 2.x recognises the assets:stocks posting as a lot disposal,
    and revenue:gains as a Gain account,
    so it excludes the $10 from transaction balancing,
    and then fails to balance the $-60 and $50.
    To fix it you could: rename the revenue:gains to something else,
    or explicitly declare it as type R (Revenue) instead of G (Gain),
    or omit the $10 amount (allowing hledger to infer it).

    Here's a more realistic entry for 2.x, to explain the two balancing steps:

    2026-02-01 sell stock
        assets:stocks      -1 AAA {$50} @ $60
        assets:cash       $60
        revenue:gains    $-10
    

    By default, 2.x will check just the $-60 and $60 (transaction balancing).
    And in lots mode, it will also check the $-50, $60, and $-10 (disposal balancing).

  • Posting's ptype field has been renamed to preal (and PostingType to PostingRealness),
    to avoid confusion with the new ptype tag. This changes JSON output.

Features

  • hledger now understands, and prints, a Beancount-like cost basis syntax:
    {DATE, "LABEL", COST}, with the parts in that order, all optional.
    Ledger-compatible {COST} [DATE] (NOTE) syntax is also accepted,
    and can be printed using print's new ledger output format.

  • Lot-related postings are detected,
    from a {COSTBASIS} annotation, or a :{LOTNAME} subaccount,
    or a lots tag on their account or commodity, or in a few other ways.
    Their type (acquire, dispose, transfer-from, transfer-to, gain) is saved
    in a hidden _ptype posting tag; or with --verbose-tags, in a visible ptype tag.
    (For examples, see hledger print --verbose-tags -f examples/lots/lot-entries.journal)

  • Transacted cost (@) is inferred from cost basis ({}) if needed,
    and vice versa. So writing either one is often sufficient.

  • Internally, every lot has its own subaccount.
    These can be left implicit, or recorded explicitly.

    A new --lots flag enables "lots mode", which calculates and checks lot movements,
    and makes lot subaccounts visible in reports.

  • Lot identities and balances are tracked across transactions and accounts
    (and between year files, with close --clopen --lots).
    Wrong or ambiguous lot movements are reported.

  • The reduction method (booking method) for transfers and disposals
    can be configured per account or per commodity, using the lots tag.
    Per-account FIFO, LIFO, HIFO, AVERAGE
    and globally-scoped FIFOALL, LIFOALL, HIFOALL, AVERAGEALL methods are supported.

  • Disposals automatically calculate or check capital gain/loss,
    which can be left implicit or recorded explicitly.
    Transaction balancing behaviour has been updated to allow this (see Breaking Changes above).

  • The check command has a new lots check,
    which is another way to validate lot movements.
    Eg to run the usual strict checks and also the lot checks: hledger check -s lots.
    Also check accounts now ignores lot subaccounts.

Fixes

  • print now preserves empty {} cost basis annotations.

Improvements

  • commodities now supports tag: queries, eg hledger commodities tag:lots.

  • print's beancount output has been improved:

    • it converts single-letter commodity symbols
    • it converts the no-symbol commodity (to "CC")
    • it converts a top-level "revenue" or "revenues" account to "Income"
    • it converts balance assignments to explicit amounts
    • it converts market prices
    • it sets booking methods based on accounts' lots tag value
    • it generates a (commented) tolerance option
    • it handles account and commodity tags better
    • it shows cost basis before transacted cost, as Beancount requires.

Docs

  • Cost basis / Lot syntax: updated
  • Lot reporting: added
  • Lot postings with balance assertions: added
  • Reporting concepts > Detecting special postings: added

Examples

  • lot-entries.journal: sample journal entries involving lots
  • hledger.conf: how to hide explicit lots

AI usage

This 2.0 preview is the first hledger release to explore AI-assisted development.
There is an AI policy document/FAQ: https://hledger.org/AI.md

In this release, I used claude models to help me design, plan, implement, test, debug and document the lot tracking and capital gains features.
Mostly opus 4.6, plus some experimentation with the cheaper models and the more expensive modes.
Each commit is relatively small and clear and was reviewed and tested by me.

Approx. estimated claude token use (in+out), and cost, for the lots work in this release:

  • 2026-01: 133Mt, $85
  • 2026-02: 598Mt, $551
  • 2026-03: 299Mt, $256
  • Total: ~1Gt, ~$900

Approx. human dev time: ~150h, market value ~$10k-30k

hledger-ui 1.99.1

  • Uses hledger 1.99.1

hledger-web 1.99.1

Breaking changes

  • Posting's ptype field has been renamed to preal (and PostingType to PostingRealness),
    to avoid confusion with the new ptype tag. This changes JSON output.

Fixes

  • Uses hledger 1.99.1

  • Require yesod-static <1.6.1.1 to avoid a build breakage with cabal
    (psibi/crypton-conduit#3).

project changes 1.99.1

Doc updates

  • site: upgrade to latest mdbook
  • site: move pages' tables of contents to sidebar
  • AI: new project AI policy doc, with links and discussion notes
  • IMPACT: new project "external impacts" doc
  • README(hledger2 branch): describe the 2.x branch and plans
  • REGRESSIONS
  • SPEC-lots: specification for lot-related functionality, lot subaccount parsing technique, balance assertions
  • SPEC-finalising: retroactive specification for journal finalising
  • SPEC-print: document some print behaviours as a specification
  • SPEC-special-postings: document patterns of postings recognised by hledger
  • PLAN-lots: planning and design notes from implementing SPEC-lots

Infrastructure/tools

  • Shake: fix build error with GHC 9.12.2 by using newer shake
  • just devtag-push renamed to just devver
  • stack configs: 9.14 made default, 9.12 made non-default, both cleaned up and bumped

credits 1.99.1

Simon Michael,
Juliano Solanho.

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.

All platforms

If you have eget, that's a convenient way to download the right binaries for your machine:

eget simonmichael/hledger --all

Otherwise:

GNU/Linux, 64-bit Intel

At the command line:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.99.1/hledger-linux-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.99.1

Mac, 64-bit ARM or Intel

In a terminal window (don't download the binaries with your web browser, they won't get authorised):

On ARM macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.99.1/hledger-mac-arm64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.99.1

On Intel macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.99.1/hledger-mac-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.99.1
Read more

1.52

Choose a tag to compare

@simonmichael simonmichael released this 21 Mar 01:18
1.52

Release notes

Preserve cost basis syntax, cost basis export examples, faster valuation, commodity tags, more robust paging, fixes.

hledger 1.52

Features

  • aregister and register now support --drop for trimming leading account name components,
    like the balance command.
    (Caleb Maclennan)

  • print now preserves and reproduces Ledger-style lot syntax (cost basis annotations) in text and json output,
    and (converted to Beancount syntax) in beancount output.

  • Tags can now be declared on commodities, and you can query for postings by their commodity's tags.

  • A new Gain (G) account type has been added, as a subtype of Revenue.
    Certain account names, like income:gains, revenue:capital-gains, income:losses,
    are auto-detected as Gain type.
    This provides a language-independent way of matching capital gain/loss accounts specifically.
    (It is used more in hledger 2.)
    (g. nicholas d'andrea) #2522

Fixes

  • The add and import commands once again read all -f files, not just the first.
    This fixes a regression in 1.51.2 which broke autocompletion in add,
    and multi-file reading in import, when multiple -f options were given.
    #2553

  • In balance reports, accounts revealed by --empty --declared now respect account display order, instead of being shown last.
    (Juliano Solanho) #2564

  • balance --budget's csv/tsv output now properly suppresses digit group marks (eg thousands separators),
    preserving valid CSV structure.
    #2555

  • The run command now properly returns a non-zero exit code if there's an error while commands are being provided on standard input.
    (Previously it always returned exit code 0 in this mode.)
    #2557

  • Options requiring a value (like --round or -f) now give a clear error if the value is missing
    (rather than trying to consume a following flag).
    #2556

  • Postings generated by --infer-equity no longer inherit the source posting's tags, comment, or real/virtual type.
    (The posting's date and status are still inherited.)
    #2535

Improvements

  • When converting to value, price lookups are now optimised with pre-built indexes.
    This replaces O(n log n) re-sorting on every valuation date with O(log n) indexed lookups,
    significantly improving performance for --value=end,COMM with daily reports
    over long periods and large price databases.
    (Oleg Bulatov) #2511

  • date: queries can now include a report interval, eg date:weekly or date:'weekly from last month',
    like the -p/--period option.

  • Smart dates now understand last|this|next WEEKDAY and last|this|next MONTHNAME.

  • When add or import are autocreating a requested journal file that did not exist,
    they will also create any required parent directories.

  • The less pager is now invoked more robustly; we catch and report more kinds of failure clearly,
    and/or fall back to unpaged output with a warning.
    #2544

  • The --quit-at-eof flag is no longer added when running the less pager (and our less flags are better documented).

  • Improvements to the setup command:

    • improve top info's layout
    • show the OS version, architecture, and compiler version
    • show if hledger is wrongly built without OS thread support
    • show the value of $LESS more accurately
    • test that it runs with the configured options
    • print a warning before making a http request
    • show more compact output if the http request fails

Docs

  • Account tags: new separate section
  • COMMON TASKS: Setting LEDGER_FILE: updates
  • Cost basis / lot syntax: new section and edits
  • Costs: rewrite
  • csv: if: field matchers: clarify
  • Inferring equity conversion postings: note account tags limitation
  • journal: code: mention valid characters, recommend tags #2563
  • Regular expressions: note no lazy quantifiers
  • Tag names: clarify --verbose-tags

Examples

  • csv: Fidelity, Open Collective updates
  • csv: Interactive Brokers example CSV rules files #2508 (Ilja Kocken)
  • csv/cctax: notes and sample files related to exporting to cryptocurrency tax calculators
  • debconf: DebConf ledger files 2017-2025, adapted for hledger
  • investing/export-lots-workflow: doc and examples for exporting to Beancount, Ledger or rustledger for lots/gains calculation

Scripts/addons

  • bashrc: drop clashy month aliases; fix LEDGER_FILE typo; cleanup.
  • fix compilation errors in bin/ scripts (Dmitry Astapov) #2497
  • hledger-smooth: accept ACCTPAT, matching case-insensitively as infix (like aregister).
  • hledger-fancyassertions: use showMixedAmount for properly formatted output. (Joshua Chapman)
  • ledgereval: evaluate Ledger value expressions at the command line

hledger-ui 1.52

Fixes

  • List screens with no items now correctly appear empty on all platforms.
    (An unguarded division by zero was disrupting the display on non-ARM machines.)
    (Tuong Nguyen Manh, Simon Michael) #2476, #2550

  • The less pager (used for displaying help, eg) is now invoked more robustly; we catch and report more kinds of failure clearly.
    #2544

Improvements

  • New capital J/K keybindings move down/up 10 rows at a time.
    (Rahul Shankar V, Simon Michael) #1911, #2551

  • The default theme has been renamed to light.
    (Rahul Shankar V, Simon Michael) #2168, #2551

  • The selection colour has been changed to cyan, for better visibility in typical terminals.
    (Rahul Shankar V, Simon Michael) #2175, #2551

hledger-web 1.52

Fixes

  • The less pager (used for displaying help, eg) is now invoked more robustly; we catch and report more kinds of failure clearly.
    #2544

Docs

  • openapi.yaml (the OpenAPI spec for hledger-web's JSON API) has been updated.
    (n0vdd)

project changes 1.52

Doc updates

  • ACHIEVEMENTS, ANNOUNCE, README, REGRESSIONS, RELEASING
  • Github issue template improvements

Infrastructure/tools

  • fix URLs in github test binaries release doc
  • github issue templates updated
  • Justfile scripts
    • specify and require (newish) bash as default shell #2527
    • depend less on ghc in PATH
    • add compile.sh to build Haskell scripts
    • just ghrel-bin-upload -> ghrel-upload, fix
    • just google-search-console
    • just perfhelp (Simon Michael, Marko Kocić)
    • just perftest
    • just test: run doctests last to reduce double compilation (Marko Kocić) #2528
    • just tools
    • replace gsed with sed (Marko Kocić)
  • github workflows
    • binaries-windows: update for new GHC
    • binaries-linux: caching, cleanup improvements
    • nightly -> testbin
    • ensure linux binary uses fixed haskeline #2410
    • testbin: update, use testlatest tag / testbin branch

credits 1.52

Simon Michael,
Caleb Maclennan,
Dmitry Astapov,
Marko Kocić,
RahulShankarV52,
Tuong Nguyen Manh,
Ilja Kocken,
Jens Petersen,
Joshua Chapman,
Juliano Solanho,
Oleg Bulatov,
g. nicholas d'andrea,
n0vdd.

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.

Updates to binaries:

  • 2026-01-12: Fixed the hledger-linux-x64.tar.gz asset below, it previously contained a dev build. #2526

All platforms

If you have eget, that's a convenient way to download the right binaries for your machine:

eget simonmichael/hledger --all

Otherwise:

GNU/Linux, 64-bit Intel

At the command line:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.52/hledger-linux-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui ...
Read more

Test binaries

Test binaries Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Jan 20:18

Here you can find unreleased test binaries, which are updated occasionally. By using these and providing feedback, you can help to make the next release better.

These binaries have the following changes since the 1.51.2 release: 1.51.2...testlatest

Install

All platforms

If you have eget, that's a convenient way to download the right binaries for your machine:

eget simonmichael/hledger --pre-release --all

Otherwise:

GNU/Linux, 64-bit Intel

At the command line:

cd /usr/local/bin
curl -fLOC- https://github.com/simonmichael/hledger/releases/download/testbin/hledger-linux-x64.tar.gz
tar xzf hledger-linux-x64.tar.gz
cd
hledger --version; hledger-ui --version; hledger-web --version    # should show a recent .99 version

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 -fLOC- https://github.com/simonmichael/hledger/releases/download/testbin/hledger-mac-arm64.tar.gz
tar xzf hledger-mac-arm64.tar.gz
cd
hledger --version; hledger-ui --version; hledger-web --version    # should show a .99 version with the testbin release's date

For Intel macs:

cd /usr/local/bin
curl -fLOC- https://github.com/simonmichael/hledger/releases/download/testbin/hledger-mac-x64.tar.gz
tar xzf hledger-mac-x64.tar.gz
cd
hledger --version; hledger-ui --version; hledger-web --version    # should show a .99 version with the testbin release's date

Windows, 64-bit ARM or Intel

In a powershell window (press WINDOWS-R, powershell, ENTER):

  1. 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)
    
  2. Download and install the release binaries:

    cd $HOME\bin
    curl https://github.com/simonmichael/hledger/releases/download/testbin/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 a .99 version with the testbin release's date; if not: where.exe hledger
    
  3. Ensure a default journal file exists, and without a problematic encoding (I'm not sure if/why "ascii" was needed here).
    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
    

1.51.2

Choose a tag to compare

@simonmichael simonmichael released this 08 Jan 12:49
1.51.2

Release notes

hledger 1.51.2

Fixes

  • The add and import commands now once again auto-create the journal file
    if it does not exist yet, fixing a regression in 1.50.3.
    Also they now create it lazily, only when they have data to write,
    not unconditionally at the start.
    #2514

  • The roi command has some more sanity checks, and some error messages
    have been clarified.
    (Dmitry Astapov, #2505)

Improvements

  • The -f option now reports an error if you give it a glob pattern
    (a path containing [, {, *, or ?) that matches nothing.
    This makes it consistent with LEDGER_FILE.

  • Journal format's include directive no longer unnecessarily reads
    the attributes of all files in a directory. This works better with
    build tools like tup which detect filesystem operations.

  • Journal format's include directive has been optimised,
    repairing a slight slowdown introduced in 1.50.3.
    It no longer calls canonicalizePath unnecessarily.
    This might be noticeable with many includes on a slow filesystem.

  • Allow base 4.22 / ghc 9.14.

API

  • Hledger.Cli.Utils:
    withPossibleJournal

hledger-ui 1.51.2

  • hledger add invoked via the a key now shows output properly,
    fixing a regression in 1.50. #2512

  • Allow vty-crossplatform 0.5. (Jens Petersen)

  • Allow base 4.22 / ghc 9.14.

hledger-web 1.51.2

  • The register view now prevents line wrapping in dates when the window is narrow. #2520

  • Allow base 4.22 / ghc 9.14.

credits 1.51.2

Simon Michael,
Dmitry Astapov,
Jens Petersen.

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.

Updates to binaries:

  • 2026-01-12: Fixed the hledger-linux-x64.tar.gz asset below, it previously contained a dev build. #2526

All platforms

If you have eget, that's a convenient way to download the right binaries for your machine:

eget simonmichael/hledger --all

Otherwise:

GNU/Linux, 64-bit Intel

At the command line:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.51.2/hledger-linux-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51.2

Mac, 64-bit ARM or Intel

In a terminal window (don't download the binaries with your web browser, they won't get authorised):

On ARM macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.51.2/hledger-mac-arm64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51.2

On Intel macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.51.2/hledger-mac-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51.2

Windows, 64-bit ARM or Intel

In a powershell window (press WINDOWS-R, powershell, ENTER):

cd ~
curl https://github.com/simonmichael/hledger/releases/download/1.51.2/hledger-windows-x64.zip -OutFile hledger-windows-x64.zip
Expand-Archive hledger-windows-x64.zip -Force -DestinationPath AppData\Roaming\local\bin
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51.2

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%, like C:\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.51.2
  • echo # >> .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.

1.51.1

Choose a tag to compare

@simonmichael simonmichael released this 08 Dec 21:13
1.51.1

Release notes

hledger 1.51.1

Fixes

  • Relative includes from a symbolically-linked journal file now work again.
    This was fallout from 1.50.4's fixes.
    #2503

  • When journal's include directive has an IO error, like trying to
    include an existing but unreadable file, or failing to find a home
    directory when expanding ~, it now shows the problematic include
    directive (previously the line number was off by one).

  • aregister: respect the order of -f options when showing same-day transactions from multiple files.
    If transactions on the same date are coming from two files specified
    with -f options, we expect them to be displayed in parse order, ie
    respecting the order of the -f options. This wasn't always the case,
    now it is.

  • aregister: show "ACCTPAT matches no account" error on just one line.

  • Fix build failures with the scripts in bin/.
    (Dmitry Astapov, #2497)

hledger-ui 1.51.1

  • Uses hledger 1.51.1.

hledger-web 1.51.1

  • Uses hledger 1.51.1.

credits 1.51.1

Simon Michael,
Dmitry Astapov,

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.

All platforms

If you have eget, that's a convenient way to download the right binaries for your machine:

eget simonmichael/hledger --all

Otherwise:

GNU/Linux, 64-bit Intel

At the command line:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.51.1/hledger-linux-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51.1

Mac, 64-bit ARM or Intel

In a terminal window (don't download the binaries with your web browser, they won't get authorised):

On ARM macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.51.1/hledger-mac-arm64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51.1

On Intel macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.51.1/hledger-mac-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51.1

Windows, 64-bit ARM or Intel

In a powershell window (press WINDOWS-R, powershell, ENTER):

cd ~
curl https://github.com/simonmichael/hledger/releases/download/1.51.1/hledger-windows-x64.zip -OutFile hledger-windows-x64.zip
Expand-Archive hledger-windows-x64.zip -Force -DestinationPath AppData\Roaming\local\bin
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51.1

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%, like C:\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.51.1
  • echo # >> .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.

1.50.5

Choose a tag to compare

@simonmichael simonmichael released this 08 Dec 20:23
1.50.5

Release notes

hledger 1.50.5

Fixes

  • Relative includes from a symlinked file work again, fixing some fallout from 1.50.4's fixes.
    #2503

hledger-ui 1.50.5

  • Uses hledger 1.50.5.

hledger-web 1.50.5

  • Uses hledger 1.50.5.

credits 1.50.5

Simon Michael.

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.

All platforms

If you have eget, that's a convenient way to download the right binaries for your machine:

eget simonmichael/hledger --all

Otherwise:

GNU/Linux, 64-bit Intel

At the command line:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.50.5/hledger-linux-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.50.5

Mac, 64-bit ARM or Intel

In a terminal window (don't download the binaries with your web browser, they won't get authorised):

On ARM macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.50.5/hledger-mac-arm64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.50.5

On Intel macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.50.5/hledger-mac-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.50.5

Windows, 64-bit ARM or Intel

In a powershell window (press WINDOWS-R, powershell, ENTER):

cd ~
curl https://github.com/simonmichael/hledger/releases/download/1.50.5/hledger-windows-x64.zip -OutFile hledger-windows-x64.zip
Expand-Archive hledger-windows-x64.zip -Force -DestinationPath AppData\Roaming\local\bin
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.50.5

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%, like C:\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.50.5
  • echo # >> .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.

1.51

Choose a tag to compare

@simonmichael simonmichael released this 05 Dec 10:50
1.51

Release notes

Small improvements, doc updates

hledger 1.51

Fixes

  • HTML output no longer contains invalid nested tables (Joschua Kesper). This may cause some visual changes, hopefully all for the better.
  • stats: -o now redirects all output, including the performance stats.

Features

  • commodities, payees and tags commands now have a --find mode for finding the best match (like the accounts command).
  • stats: A new -1 flag prints a single line of output in machine-friendly tab-separated format, including the program version, journal file name, and performance stats.

Improvements

  • In journal format, an empty {} pair is now allowed (and ignored) in amounts, slightly improving Ledger/Beancount compatibility.
  • accounts in --tree mode, when showing a subset of accounts, now shows parent accounts for context, like the balance command.
    (Sam Almahri, #2427)
  • accounts --types no longer shows value-less type tags; untyped accounts are shown without a type tag.
  • When pivoting on account type with --pivot=type, account types will be normalised to their short spelling (A instead of Assets, etc).
  • accounts: the --positions flag has been renamed to --locations.
  • print: the --location flag has been renamed to --locations.
  • setup: tidier output for missing LEDGER_FILE or default file; wording improvements

Docs

  • Account names: rewrite, emphasise the two space delimiter
  • accounts: improve/sync options order
  • add: balance assertions/assignments: clarify, fix #2494
  • aregister: formatting
  • aregister: clarify arguments
  • argument files: corrections
  • check: drop obsolete note about transaction balancing
  • check: edits, correction
  • close: customisation: clarify #2492
  • commodity directive: add info about the -c command line option (Ooker)
  • COMMON TASKS: demote subheadings
  • csv: new "CSV fields and hledger fields" section
  • csv: new "Regular expressions in CSV rules" section
  • csv: link the if-specific skip and end ruels more clearly
  • depth: rewrite, note combining issue
  • print: clarify amount styling; note more parseability breakers
  • print: note another way print can disrupt journal readability (same-day balance assertions)
  • rename Editor configuration -> Editors
  • Setting LEDGER_FILE: rewrite, new windows procedures
  • Special characters: rewrite (Simon Michael, Caleb Maclennan, #2468)
  • Tags: rewrite [hledger_site#141]
  • Value reporting: more advice, examples for COMM
  • Value reporting: warn about -V, emphasise -X

Examples

Scripts/addons

  • hledger-check-buynothing: check Buy Nothing Day compliance
  • hledgerj1: example of a wrapper for reading a custom data format
  • sortandmergepostings: Overhaul for more robust determinism (Caleb Maclennan)
    • Avoids non-deterministic flip-flopping when the alphabetical account sort has multiple commodities
    • Sorts postings commodities so commodities are in the same order across transactions
    • Sorts postings with matching commodity by posting amount

API

  • Hledger.Cli.Utils:
    • stop exporting pivotByOpts, anonymiseByOpts
    • renamed withJournalDo -> withJournal. The old name is still available but deprecated.

hledger-ui 1.51

Improvements

  • Allow brick 2.10, vty 6.5.

  • Uses hledger 1.51.

hledger-web 1.51

Improvements

  • Uses hledger 1.51.

project changes 1.51

Docs updated

  • ACHIEVEMENTS
  • ANNOUNCE.short
  • AUTHORS
  • bin/README
  • CHANGES.md: move to doc/ for consistent paths
  • Contributing: mention translation (Lý Minh Nhật)
  • DECISIONS
  • dev
  • DOCS: document & diagram latest doc update procedures
  • ISSUES
  • REGRESSIONS
  • RELEASING
  • relnotes: more reliable changelog links
  • ROADMAP
  • tldr/README

Infrastructure/Misc

  • bump stack snapshots
  • Dockerfile fixed (probably)
  • drop the hledger-install script
  • just changelogs* update
  • just docupdatediag
  • just ghci-ui: :main (and :rmain) now works again
  • just ghnightly* -> nightly*
  • just oldest
  • just perftest: run performance tests, logged to perf.log
  • just releasediag update
  • just rels-major
  • just site-restart
  • just: devtag-push: simplify
  • just: ghrel-bin-upload
  • just: manuals, manuals-site
  • just: reltags: cleanup
  • just: ver, majorver
  • Justfile: less safari dependence
  • Justfile reorg, cleanups
  • release script updates
  • Shake: drop mandates target, update manual dates automatically
  • Shake manuals: more contributor instructions in the header comment [hledger_site#140]
  • stack92: add valid hashtables version
  • stack94: add valid hashtables version
  • stack96: add valid hashtables version
  • stack98: include valid hashtables version
  • stack98: restore needed encoding 0.10 extra dep
  • stop git ignoring site/src/, allowing web docs to be easily opened in vscode
  • tools/relnotes.hs update
  • use a nightly branch instead of a nightly tag on github, it's simpler
  • workflows: use shelltestrunner 1.11
  • workflows:binaries-mac-x64: switch to macos-15-intel

credits 1.51

Simon Michael,
Caleb Maclennan,
Joschua Kesper,
Ooker,
Sam Almahri.

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.

All platforms

If you have eget, that's a convenient way to download the right binaries for your machine:

eget simonmichael/hledger --all

Otherwise:

GNU/Linux, 64-bit Intel

At the command line:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.51/hledger-linux-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51

Mac, 64-bit ARM or Intel

In a terminal window (don't download the binaries with your web browser, they won't get authorised):

On ARM macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.51/hledger-mac-arm64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51

On Intel macs:

curl -fLOC- https://github.com/simonmichael/hledger/releases/download/1.51/hledger-mac-x64.tar.gz | tar -xzv -f- -C/usr/local/bin hledger hledger-ui hledger-web
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51

Windows, 64-bit ARM or Intel

In a powershell window (press WINDOWS-R, powershell, ENTER):

cd ~
curl https://github.com/simonmichael/hledger/releases/download/1.51/hledger-windows-x64.zip -OutFile hledger-windows-x64.zip
Expand-Archive hledger-windows-x64.zip -Force -DestinationPath AppData\Roaming\local\bin
hledger --version; hledger-ui --version; hledger-web --version    # should show 1.51

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%, like C:\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.51
  • echo # >> .hledger.journal to ensure a default journal file exists. (Important: the doubled >> is needed to avoid overwriting existing data.)

Problems:

  • Starting hledger by double-clickin...
Read more