Tooling

Plain-Text Accounting (Beancount, Ledger, hledger)

Beancount + Fava, Ledger, hledger — finances in plain text in git; the gold-standard PTA stack for engineers.

Plain-Text Accounting (PTA) — your finances live as plain-text double-entry ledgers in a git repo. The 2026 default stack is Beancount + Fava (Python + a beautiful web UI). Ledger is the original (John Wiegley, 2003); hledger is the Haskell rewrite known for performance + ergonomics. All free OSS. For envelope budgeting see Actual Budget; for desktop double-entry see GnuCash; for the web-app comprehensive option see Firefly III Deep; for portfolio see Ghostfolio; for the broader self-host index see Self-Hosted Personal Apps; for SMB-business accounting see Accounting & Bookkeeping; for tax software see Free Tax Software.

The headline tools

Why pick plain-text accounting

  • Forever-format — text files; readable in 30 years.
  • Git-versioned — every change is a commit; full history; diffs; branching.
  • Programmable — pipelines, scripts, custom reports; integrates with anything.
  • Auditable — your accountant can read the source.
  • No lock-in — switch tools, keep the data.
  • Privacy — text files; no cloud; you choose your sync.

Why not

  • High learning curve.
  • No mobile-first story.
  • Manual category mapping until you build automation.
  • Family-friendly UX is weak (Fava helps; still a power-user app).

Beancount syntax (a taste)

2026-04-15 * "Trader Joe's" "Groceries"
  Expenses:Food:Groceries     45.32 USD
  Liabilities:CC:Chase

Strict typed format; Beancount validates balances and rejects malformed entries. The mental model: every transaction has at least two postings that balance to zero.

hledger / Ledger syntax

2026-04-15 Trader Joe's
    Expenses:Food:Groceries     $45.32
    Liabilities:CC:Chase

Looser typing; faster to write; same conceptual model.

Importers (★ critical for adoption)

  • bean-extract (Beancount built-in) — config-driven importers; per-bank Python class.
  • smart_importer — beancount + ML category prediction; great for the "I don't want to map every coffee shop" workflow.
  • beancount-import — interactive importer with category-suggestion UI.
  • plaid-importers for Beancount — community modules; or use SimpleFIN (Bank Import & SimpleFIN) → CSV → bean-extract.
  • ledger-autosync — OFX → Ledger.
  • hledger-flow — opinionated CSV pipeline for hledger.
  • rules.py — most PTA practitioners write per-account rules; easy.
  • ofxstatement — OFX file → CSV intermediate format.

Investment / commodities

  • ★ Beancount has first-class commodity + lot tracking; cost basis, FIFO/LIFO, gains/losses, multi-currency conversions all native.
  • Price feedsbean-price / pricehist plugins fetch from Yahoo / AlphaVantage / Coingecko etc. Cron daily.
  • Fava charts — net worth, allocation, performance, income vs expense — comparable to a paid app.
  • For deeper portfolio UI, pair Beancount with Ghostfolio (Ghostfolio).

Family / multi-user

  • One git repo, multiple committers — branching for spouses; merge.
  • Shared Fava behind Tailscale or Cloudflare Access.
  • Encrypted git repo (git-crypt, age) — recommended for sensitive ledgers.

Community

  • ★ ★ plaintextaccounting.org — the directory + getting-started hub.
  • PTA mailing list + Reddit /r/plaintextaccounting + IRC/Matrix.
  • Conferences — community gatherings around FOSDEM each year.
  • Beancount mailing list — small, helpful.

Migration path from spreadsheets / GnuCash / Mint

  • ★ Export GnuCash → CSV → bean-extract.
  • ★ Mint export (while data still exists in old exports) → bean-extract.
  • ★ Walk the past N years of transactions through importers — backfill is the one-time pain that pays off forever.

Backup + sync

License / pricing

  • Beancount, Fava, Ledger, hledger, bean-extract, smart_importer, beancount-import, ledger-autosync, hledger-flow, ofxstatement: free OSS.
  • plaintextaccounting.org: free.

Pick this if…

  • Default 2026 PTA stack: Beancount + Fava.
  • Performance / simpler syntax: hledger.
  • Want the original: Ledger.
  • Don't want to learn syntax / write code: Actual Budget or GnuCash instead.
  • Already a software engineer: PTA is the right home for your finances.
  • Multi-currency / lot-tracked investments: Beancount.
  • Want a beautiful web UI on top of it: Fava.
  • Comfortable shipping a small Python pipeline: SimpleFIN → bean-extract → git commit; once a week.