hledger-textual
A full-featured terminal user interface for hledger plain-text accounting. Manage transactions, recurring rules, budgets, and investments — with multi-period reports, account drill-downs, and git sync — all from your terminal.
Built with Textual and Python.
Stack
- Python 3.12+
- Textual - TUI framework
- hledger - plain-text accounting (must be installed separately)
- uv - package manager (no
requirements.txtneeded, dependencies are inpyproject.toml) - pytest - testing
Requirements
- Python 3.12+
- hledger installed and available in
PATH
Installation
# With pipx
pipx install hledger-textual
# With uv
uv tool install hledger-textual
Usage
hledger-textual -f path/to/your.journal
The journal file is resolved in this order:
-f/--fileCLI argumentLEDGER_FILEenvironment variable~/.config/hledger-textual/config.toml(journal_filekey)~/.hledger.journal
Default currency
For multi-currency journals, the default currency is resolved in this order:
- The first
commoditydirective declared in the journal (followingincludefiles), e.g.commodity €1,000.00. - The
default_commoditykey in~/.config/hledger-textual/config.toml.
When resolved, the Accounts and Summary views convert balances to that
currency using hledger -X --infer-market-prices, so P price directives in
the journal are honored (see examples/multicurrency-prices.journal).
Commodities without a price are shown in their original currency.
When nothing is resolved, the Accounts view shows each account's balances in
their original currencies (stacked within the cell), the Reports view's flat
multi-period mode marks multi-currency accounts with a ◆ prefix, and the
Summary overview shows a per-currency balance line under each card (marquee
scrolling when it overflows). The Reports view's stacked mode (M) always
expands each currency into its own row.
To pin a currency via config instead:
default_commodity = "€"
Documentation
See the Wiki for the full documentation: feature overview, configuration, investment tracking, and per-tab reference.
Development
git clone https://github.com/thesmokinator/hledger-textual.git
cd hledger-textual
uv sync
Testing
# Run all tests
uv run pytest
# Run with verbose output
uv run pytest -v
# Run with coverage report
uv run pytest --cov=hledger_textual --cov-report=term-missing
Metadata
Release files for hledger-textual 0.3.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hledger_textual-0.3.8.tar.gz | 129.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hledger_textual-0.3.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 298.5 kB
Release files / hledger_textual-0.3.8.tar.gz
| Download URL | hledger_textual-0.3.8.tar.gz |
|---|---|
| Size | 129.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
38eceada654dbcb217714c6d6e1ec3fbc551b32cf2c8c9bb3685be00c0f925e0
|
|
BLAKE2b-256 checksum How to use checksums |
8af5b69fc40c0d927f7f0c22ba588c8b7a513c4f4566b5444585affbc647c5ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logRelease files / hledger_textual-0.3.8-py3-none-any.whl
| Download URL | hledger_textual-0.3.8-py3-none-any.whl |
|---|---|
| Size | 169.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c1644a50189c6412f51a7ea4546c443e9d314b5084ad1408e2077b43166d430d
|
|
BLAKE2b-256 checksum How to use checksums |
bc2221e96947965e7772bf780bacbee2f7118bf7514ea5f6e3b413275d1c8fe2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency log