A Python implementation of the hledger plain-text accounting tool.
- Parse
.journalfiles compatible with the hledger 1.52 format - Comprehensive directive support:
include,account,commodity,payee,alias,P,Y,D,apply account - Core CLI commands:
balance,register,print,accounts,stats,check - Strict mode (
-s) and balance assertions - Multi-commodity balances with tree rollup
- Commodity display style inference and
-coverride flag - Optional pandas DataFrame export (
pip install ledgerkit[pandas]) - Editor-integration layer: lenient parser, round-trip writer,
EditorDocument - Pure Python — no third-party runtime dependencies
- Python 3.8–3.12
- Python 3.8+
pip install ledgerkitWith optional pandas support:
pip install ledgerkit[pandas]git clone https://github.com/ctosullivan/ledgerkit.git
cd ledgerkit
pip install -e ".[pandas]"ledgerkit balance myfile.journal
ledgerkit register myfile.journal
ledgerkit accounts myfile.journal
ledgerkit print myfile.journal
ledgerkit stats myfile.journalYou can also invoke ledgerkit as a Python module:
python -m ledgerkit balance myfile.journalimport ledgerkit
journal = ledgerkit.load("myfile.journal")
accounts = journal.accounts()
balance = journal.balance()See docs/python-api.md for the full library reference.
| Guide | Description |
|---|---|
| docs/getting-started.md | Installation, first run, verification |
| docs/usage.md | CLI commands with examples |
| docs/journal-format.md | Supported journal syntax with annotated examples |
| docs/python-api.md | Python library reference |
Install the optional pandas extra for DataFrame export:
pip install ledgerkit[pandas]Then:
import ledgerkit
journal = ledgerkit.load("myfile.journal")
# Export all postings to a DataFrame
df = journal.to_dataframe()
print(df.groupby("account")["amount"].sum())
# Or export directly from a report object
balance_df = journal.balance().to_dataframe()
register_df = journal.register().to_dataframe()
accounts_df = journal.accounts().to_dataframe()# Run all tests
python -m unittest discover -s tests -t . -vSee dev-docs/architecture.md for module design and dev-docs/api-spec.md for the full API specification.
See dev-docs/hledger-compatibility.md for which hledger journal features are supported in v1.
See CONTRIBUTING.md for pull request guidelines, commit message format, and branch naming. This project follows the Contributor Code of Conduct.
Clone the full repository including AI-workflow files:
git clone https://github.com/ctosullivan/ledgerkit.gitUse sparse checkout to clone only the source code, tests, and human docs
(excludes CLAUDE.md, dev-docs/, CHANGELOG.md, ROADMAP.md):
git clone --filter=blob:none --sparse https://github.com/ctosullivan/ledgerkit.git
cd ledgerkit
git sparse-checkout set ledgerkit tests docs README.md LICENSE pyproject.tomlledgerkit is a Python implementation inspired by two pioneering plain-text accounting projects. We gratefully acknowledge their authors and contributors.
John Wiegley created Ledger, the original plain-text double-entry accounting tool, which established the journal file format and accounting model that this ecosystem is built upon.
https://github.com/ledger/ledger
Simon Michael created hledger, a Haskell implementation of Ledger's concepts, which has since evolved its own rich feature set and extensive documentation. ledgerkit's journal format support is modelled primarily on the hledger 1.52 specification.
https://github.com/simonmichael/hledger
A full list of hledger contributors can be found at:
https://github.com/simonmichael/hledger/blob/main/doc/CREDITS.md
Their work — and the broader plain-text accounting community — makes ledgerkit possible.