Hospitable Ledger
Plain-text accounting toolkit and CLI
Ledger is the original command-line, double-entry plain-text accounting tool. It reads human-readable journal files and generates balance sheets, registers, and reports with powerful query options.
Key features
- Command-line accounting
- Plain-text journal files
- Powerful reporting queries
- No database required
Pros & cons
Strengths
- Extremely portable data
- Scriptable and version-controllable
Trade-offs
- CLI only
- Steep learning curve
Hospitable Ledger replaces
Last reviewed Sep 13, 2026 · 760 words
2026/09/01 * Electricity - September
Expenses:Home:Utilities 84.20 EUR
Assets:Bank:Checking
That is a complete, balanced transaction in Ledger, and the whole accounting system is a file of entries like it. Ledger is the original plain-text, double-entry accounting tool: a C++ command-line program first released in 2003, BSD-licensed, and still the reference that Beancount and hledger measure themselves against. It runs in 64 MB, needs no database, and the data is a file you can grep, diff, and commit to git. The Hard difficulty rating is fair, but the tool is not what is hard. Double-entry bookkeeping is hard, and Ledger refuses to hide it from you.
The journal file is the entire database
Every account is a colon-separated path (Assets:Bank:Checking, Expenses:Food:Groceries) that exists the moment you first use it. Every transaction lists postings that must sum to zero; leave one amount blank and Ledger fills it in. Commodities are arbitrary strings, so EUR, USD, BTC, and VTI shares live in the same file with P price directives for valuation. There is no schema to migrate, no export step, and no vendor. A 10-year personal journal is a few megabytes of text, and ledger -f journal.dat bal reads it in well under a second.
Every report is one command
ledger -f journal.dat balance Assets Liabilities
ledger -f journal.dat register Expenses:Food --monthly
ledger -f journal.dat bal Expenses -p "this year" --depth 2
ledger -f journal.dat bal ^Assets -X EUR -V
The query language filters by account regex, period, payee, tag, or amount expression; --monthly, --depth, -X (convert to a commodity), and -V (market value) cover most of what a budgeting app's dashboard shows. Budgets are ~ Monthly periodic transactions and --budget reports actual against plan. Automated transactions (= /Groceries/) can split a posting into shared and personal portions on every match. None of this has a GUI, and that is the point: the output goes to a terminal or a script, and the script goes wherever you want.
Getting bank data in is the actual work
Ledger has no bank sync and never will. The workflow that survives contact with real life is: download CSV from the bank monthly, run ledger convert or a short script that maps rows to postings from a rules file, review the result, append. Reviewing is where the time goes, because a text-file accounting system only works if every posting lands in the right account. Budget about an hour a month once your rules cover the recurring payees. People who skip this step end up with a beautiful journal that stops in March.
Beancount is where a newcomer should start
Ledger is the ancestor, but for someone starting today I point to Beancount with Fava as the web front end. Beancount is stricter (accounts must be opened with a directive, which catches typos Ledger silently accepts), its Python ecosystem of importers is larger, and Fava gives you an income statement, balance sheet, and charts in a browser on the same self-hosted box. Ledger wins if you want the fastest CLI, the most flexible query expressions, or you already have a journal in its syntax. hledger, a Haskell reimplementation, sits between the two and reads Ledger files with minor edits. All three share the same idea; moving between them is a format conversion, not a migration.
If you want an app, this is the wrong aisle
The finance category has proper web apps. Firefly III gives you a multi-user web UI, budgets, rules, and bank import through its data importer. Actual Budget is envelope budgeting with a polished client and local-first sync. Both are easier by a wide margin and both keep your data in a database you can export. Choose plain text only if you actively want to edit the source of truth in a text editor and script the reporting. That is a real preference, and a minority one.
What I'd do
New to double-entry: Beancount and Fava, with a monthly CSV import ritual on the calendar. Already fluent and allergic to web UIs: Ledger, the journal in a private git repo, a Makefile with the four reports above, and a cron job that emails the monthly balance. Either way the format is the durable part, and it is why I still have readable accounts from over a decade ago while every budgeting app from that era is gone.
Compare Hospitable Ledger
12 head-to-head comparisons.
- Hospitable Ledger vs Akaunting
- Hospitable Ledger vs Invoice Ninja
- Hospitable Ledger vs Sure
- Hospitable Ledger vs Beancount
- Hospitable Ledger vs Frappe Books
- Hospitable Ledger vs hledger-web
- Hospitable Ledger vs GnuCash
- Hospitable Ledger vs Fava
- Hospitable Ledger vs Money Manager Ex
- Hospitable Ledger vs Tryton
- Hospitable Ledger vs Skrooge
- Hospitable Ledger vs Grisbi
Similar budgeting & finance apps
Maybe
Budgeting & FinanceOpen-source personal finance and wealth app
Replaces Mint, Personal Capital
HyperSwitch
Budgeting & FinancePayment switch to make payments fast, reliable and affordable
Actual Budget
Budgeting & FinanceLocal-first envelope budgeting app
Replaces YNAB, Mint
Firefly III
Budgeting & FinanceSelf-hosted personal finance manager
Replaces Mint, YNAB
Lago
Budgeting & FinanceOpen-source billing and metering API
Replaces Stripe Billing, Chargebee
Akaunting
Budgeting & FinanceFree open-source accounting software online
Replaces QuickBooks, Xero