Haddon and other open-source accounting tools
Haddon is new, and the tools on this page are not. hledger, Beancount, Ledger and GnuCash have kept people’s books for between one and nearly three decades, and each does something better than Haddon does. This page says what each is good at, how Haddon differs, and when you would pick one over the other. If something here is out of date or unfair, please open an issue.
Haddon builds on hledger rather than competing with it. It imports hledger journals, exports to them, and checks every export with a pinned hledger binary before publishing it (hledger import, export and the oracle). Books kept in Haddon can always be read, reported on and kept going in hledger.
At a glance
Section titled “At a glance”| Haddon | hledger | Beancount and Fava | Ledger | GnuCash | |
|---|---|---|---|---|---|
| Storage | one SQLite file per entity | plain-text journal files | plain-text files | plain-text journal files | XML file, or SQLite, MySQL or PostgreSQL |
| How entries are written | named HTTP commands, validated before they land, each recorded with an actor and a reason | edit the journal; add, import, or the hledger-web form |
edit the files; importers (beangulp); Fava’s editor and entry form | edit the journal; Ledger never changes your files | desktop forms and registers, importers, Python bindings |
| Change history | append-only audit log; posted entries can’t be edited, only reversed or corrected | the files are text, so version control | the files are text, so version control | the files are text, so version control | per-session .log files for recovery, and backups |
| Closing a period | a period lock, a checked close with recorded overrides, a recorded reopen | close generates closing and opening entries |
close closes an account; queries can summarise a period |
equity prints balances to start a new file |
a read-only threshold (transactions older than N days), and a Close Book tool |
| Several entities | one service, one file per entity, tokens scoped to entities | a journal per set of books | a ledger per set of books | a journal per set of books | a data file per book |
| Bank statements | the agent submits each statement’s lines and balances; every line is booked, linked or ignored; per-account reconciliation | CSV rules files; balance assertions | importers; balance assertions |
convert for CSV; balance assertions |
QIF, OFX, CSV and AqBanking import; a reconcile window |
| Programmatic access | an HTTP API described by OpenAPI, with an example of turning it into agent tools | hledger-web’s JSON API; JSON and CSV output | a Python API, plugins, and the BQL query language | Python bindings | Python bindings, where built in |
| Currencies | balances kept per currency, no conversion or revaluation | market prices and valuation | prices and cost lots | commodity prices and valuation | a price database and currency conversion |
| Reports | trial balance, income statement, balance sheet with a comparative period (JSON or PDF), registers | many, with a query language | BQL; Fava shows the statements and charts | many, with value expressions | standard and custom reports, charts |
| Web interface | included, for browsing the books, correcting entries and closing periods | hledger-web, and a terminal UI | Fava | none bundled | the desktop application |
| Licence, language, since | MIT, Python, 2026 (pre-1.0) | GPL-3.0+, Haskell, 2007 | GPL-2.0, Python, 2007; Fava MIT, 2016 | BSD-3-Clause, C++, 2003 | GPL, C and C++, 1998 |
hledger
Section titled “hledger”hledger is a fast, careful plain-text accounting tool. Its journal format is readable and diffable, its checks
(hledger check, balance assertions) are thorough, and CSV rules files turn bank exports into entries you can
keep in version control. hledger-web adds a browser view and a small JSON API.
Pick hledger if you, or a script you trust, keep the books, and you want them as text you can edit, grep and review in git. Haddon’s own journal format is hledger’s, so the two work together: import an existing hledger ledger into Haddon when you want an agent to take over the data entry, and export from Haddon whenever you want hledger’s reports or an independent check.
Beancount and Fava
Section titled “Beancount and Fava”Beancount is plain-text accounting with a strict model: accounts are opened and closed explicitly, balance
assertions are checked, and holdings are tracked at cost, lot by lot, which makes it a strong choice for
investments. Its Python API and plugins make it programmable, and BQL gives you SQL-like queries over the
books. A document directive ties statement files to accounts. Fava is its web interface, for browsing reports,
editing the source, adding entries, running importers and attaching documents.
Pick Beancount and Fava if you want strict plain-text books with good investment tracking and a pleasant web view, and you are happy to keep the files yourself.
Ledger
Section titled “Ledger”Ledger is the original command-line plain-text accounting tool, which hledger and Beancount both learned from. It reads your journal and never writes to it, and its value expressions make its reports very flexible. Pick it if you want that flexibility and are comfortable building your own workflow around a text file and an editor (Emacs’s ledger-mode is a common companion).
GnuCash
Section titled “GnuCash”GnuCash is a desktop application with a long history and a broad feature set. It imports OFX, QIF and CSV files and connects to banks through AqBanking, has a reconcile window that works against a statement’s ending balance, lets you link files to transactions, and includes small-business features: invoices, customers and vendors, and budgets. A book option makes transactions older than a set number of days read-only.
Pick GnuCash if people will enter the transactions themselves in a desktop application, especially for a small business that needs invoicing, and nobody wants to work in text files.
When Haddon fits
Section titled “When Haddon fits”Haddon is a double-entry ledger built for agents. Every write is a named HTTP command that is validated, made idempotent and recorded with who made it and why. Posted entries are corrected, not edited. A closed period stays closed until someone reopens it and says why, and each statement line is explained one way or another before a month can close without an override. One service holds any number of entities, each in its own file, and every export is checked by hledger. These are things the tools above leave to whoever edits the files, which is a fine choice when that is a careful person and a risky one when it is a model. Haddon also comes with a web interface for browsing the books, correcting entries and closing periods, if you want one.
It is also the youngest tool here and it is pre-1.0. It does fewer things: no currency conversion or revaluation, no invoicing or bank feeds, and no country’s tax rules. If you want to keep your own books by hand, hledger, Beancount, Ledger or GnuCash will serve you better. If an agent is doing the data entry for one or more companies, Haddon gives it an API it can use safely and leaves a record of everything it did.