Data model
- Beancount
- Strict and explicit — declared accounts, enforced balance, lots and cost basis
- hledger
- Flexible and forgiving — Ledger-compatible, accounts on the fly
Beancount and hledger share the same philosophy: your books live in plain text you can read, diff, and version with Git — no lock-in, ever. The real question is fit: Beancount's strict model and web ecosystem, or hledger's fast, batteries-included command line.


Both are plain-text, double-entry ledgers you can version with Git. The difference is fit: strict modeling with a web ecosystem, or a fast, self-contained command line.
Beancount
Accounts are declared explicitly, every transaction must balance, and lots and cost basis are first-class. Errors surface at parse time — before they reach your reports.
hledger
hledger's Ledger-compatible format creates accounts on the fly and can even infer balancing entries. Quicker to start, with discipline left to you.
Beancount
Explore your books in Fava's polished dashboards — interactive charts, statements, holdings, and a BQL query console — with bean-check validating every edit.
hledger
Rich built-in terminal reports, the hledger-ui TUI, and hledger-web for lightweight browsing and entry — no extra services required.
Beancount
Write importers and plugins in Python, and query entries with SQL-like BQL. Automation lives in reviewable, testable code.
hledger
Declarative CSV import rules and composable CLI commands slot straight into Unix pipelines — fast automation, no Python required.
Beancount
Every currency or security carries units, cost, and price in the open — precise capital-gains and multi-currency tracking, auditable line by line.
hledger
hledger covers everyday multi-currency and straightforward investment tracking with a gentler model — enough for many personal portfolios.
Beancount
Self-host Fava, or let beancount.io handle hosting with bank sync, native mobile apps, and an AI assistant that helps categorize and draft entries.
hledger
Install a single pre-built binary and your ledger stays on your machine. hledger-web covers mobile browsers; nothing depends on a cloud account.
Beancount
Beancount and Fava cost nothing, forever. Optional beancount.io plans add hosting, sync, mobile, and AI — the ledger stays portable either way.
hledger
Every hledger feature — reports, TUI, web UI, CSV import — ships free in a single tool. No paid tier exists; none is needed.
Same family, honest comparison: hledger is the better fit when you want a fast, self-contained tool that does everything from one binary.
Balance sheet, income statement, cash flow, and multi-period comparisons are built-in commands — no web server, no query language, no setup.
Written in Haskell, hledger starts instantly and stays fast on huge journals — tens of thousands of transactions per second, with modest memory use.
Declarative rules files turn bank CSV exports into clean journal entries — no Python importer to write or maintain.
No database, no server, no account. One binary plus your text file is the whole stack — trivial to back up, sync, and move.
Feature by feature, no marketing spin.
| Area | Beancount | hledger |
|---|---|---|
| Data model | Strict and explicit — declared accounts, enforced balance, lots and cost basis | Flexible and forgiving — Ledger-compatible, accounts on the fly |
| Main interface | Fava web UI, CLI validation, editor tooling | Built-in CLI reports, hledger-ui TUI, hledger-web |
| Performance | Python-based; v3 adds a C++ core for speed | Haskell — very fast, even on very large journals |
| Reporting | Interactive Fava charts plus SQL-like BQL queries | Rich built-in terminal reports and multi-period views |
| Imports | Python importer ecosystem; hosted bank sync on beancount.io | Built-in CSV import with declarative rules files |
| Investments | Rigorous lots, cost basis, and multi-currency | Simpler commodity handling for everyday portfolios |
| Setup | Requires Python; explicit account declarations | Single pre-built binary; forgiving parser |
| Mobile | Native beancount.io apps; Fava's responsive web UI | hledger-web in a mobile browser; third-party apps |
Web dashboards, BQL queries, and native mobile apps — one plain-text ledger behind all of it.










Neither project charges for the software, and both keep your books in plain text. The choice is workflow, not wallet.
Both ledgers are plain text, so your data is never trapped. Sample each with the same transactions, then commit — or keep both.
Enter the same recent transactions in both tools: import a statement, reconcile it, and produce your most important report in each.
Simple journals adapt easily, and hledger can export to Beancount format. Advanced cost, metadata, and directive features deserve a careful review pass.
Many people do: hledger for quick entry and daily command-line checks, Beancount plus Fava for deeper visual analysis. Plain text makes the split easy.
…you want Fava's interactive web dashboard, rigorous lot and cost-basis tracking for investments, Python-based importers and custom analysis, and a strict system that enforces correctness — with optional hosted sync, mobile apps, and AI on beancount.io.
…you live in the command line and want fast, built-in textual reports, a forgiving format that is quick to start with, single-binary installs, and strong multi-period reporting — backed by steady, regular releases.
Both are excellent, mature, actively maintained open-source projects, and both keep your data portable in plain text. The fairest test is a small sample of your own transactions in each — the workflow that resonates is the right choice.
Yes. Beancount requires explicit account declarations and applies a more formal data model, while hledger deliberately accepts a more flexible Ledger-style journal format and can infer some missing information.
Beancount paired with Fava offers the richer graphical analysis experience. hledger is stronger for fast terminal reports and also includes hledger-ui and hledger-web for people who prefer text or lightweight web interfaces.
Their formats overlap but are not identical. Simple journals can often be adapted or exported, while advanced cost, metadata, and directive features usually require conversion and review.
Beancount is attractive for Python-based importers and plugins; hledger is attractive for shell pipelines, CSV rules, and fast command-line reporting. The better choice depends on the language and workflow you want to maintain.
Start free in minutes — no credit card, no lock-in, and your plain-text ledger is always yours to keep.