Skip to main content

hledger-textual

PyPI GitHub Release CI Coverage

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.

hledger-textual demo

Stack

  • Python 3.12+
  • Textual - TUI framework
  • hledger - plain-text accounting (must be installed separately)
  • uv - package manager (no requirements.txt needed, dependencies are in pyproject.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:

  1. -f / --file CLI argument
  2. LEDGER_FILE environment variable
  3. ~/.config/hledger-textual/config.toml (journal_file key)
  4. ~/.hledger.journal

Default currency

For multi-currency journals, the default currency is resolved in this order:

  1. The first commodity directive declared in the journal (following include files), e.g. commodity €1,000.00.
  2. The default_commodity key 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.9

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for hledger-textual 0.3.9
File Size Uploaded
hledger_textual-0.3.9.tar.gz 129.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for hledger-textual 0.3.9
File Interpreter ABI Platform
hledger_textual-0.3.9-py3-none-any.whl Python 3 none any Details

Total release size: 300.4 kB

Release files / hledger_textual-0.3.9.tar.gz

Download URL hledger_textual-0.3.9.tar.gz
Size 129.9 kB
Tags Source
SHA-256 checksum
How to use checksums
25cb4d105ed081b222f241508f8f408cdae857b3e1f8c2e57691fbfc2e0540f7
BLAKE2b-256 checksum
How to use checksums
d7d1890b6099f0a8f6d123d27b2e2aab705f1c7e38150209a5d84da2cc12743d
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

Release files / hledger_textual-0.3.9-py3-none-any.whl

Download URL hledger_textual-0.3.9-py3-none-any.whl
Size 170.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e6daef55c5a1a7e06a5dacd973fa1d75c88d63af07ef8df1795b64c6ff2f8ede
BLAKE2b-256 checksum
How to use checksums
356de569fbf022464b68ff8d15a216f0f379a939b1e4e96adcf9e2c33108474b
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

Release history Release notifications | RSS feed

This release

0.3.9 This release

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.14

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.18

2 release files

0.1.17

2 release files

0.1.16

2 release files

0.1.15

2 release files

0.1.14

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page