1
0
Files
plaintextaccounting/src/index.md
Simon Michael 39c4f0dd57 home: edits
2026-02-06 14:45:53 -10:00

76 KiB
Raw Blame History

% Plain Text Accounting (PTA)


toc: false ...

Welcome! Plain text accounting is a way of doing bookkeeping and accounting with plain text files and scriptable, command-line-friendly software, such as Ledger, hledger, or Beancount. This site collects the PTA community's tools, docs and practices. It is maintained by Simon Michael (hledger project leader, PTA fan) and contributors like you. See also our discussion forum and chat rooms.

**Site map**\ **What is Plain Text Accounting ?**\ **[News & discussion](#news-discussion)**\ **[Videos](#videos)**\ **[Slides](#slides)**\ **[Docs](#docs):** [Accounting basics](#accounting-basics) , [app docs](#pta-app-docs) , [comparisons](#comparisons) , [intros](#intros) , [cheatsheets](#cheatsheets) , [cookbooks](#cookbooks) , [FAQs](#faqs) \ **FAQ**\ **Cookbook**\ **[Software](#software):** [Apps](#apps) , [Distros/setups](#distrossetups) , [Features](#features) , [Editor plugins](#editor-plugins) , [Data import/conversion](#data-importconversion) , [Price fetching](#price-fetching) , [Data generation](#data-generation) , [Workflows](#workflows) , [Formatting](#formatting) , [Reporting](#reporting) , [Time logging](#time-logging) , [UI, console](#ui-console) , [UI, curses](#ui-curses) , [UI, GUI](#ui-gui) , [UI, web](#ui-web) , [UI, mobile](#ui-mobile) , [Library](#library) , [Utilities](#utilities) , [API](#api)

This is a community-supported site; if you find it useful, why not contribute to the github repo or help with finance. Thank you sponsors, including:

- [A modern accounting book app based on Beancount and Git](https://beanhub.io)

News & discussion

Chat


Project specific

Videos

https://www.youtube.com/results?search_query=plaintextaccounting

Slides

Docs

**Accounting basics , PTA app docs , Comparisons , Intros , Cheatsheets , Cookbooks , FAQs **

Accounting basics

PTA app docs

Comparisons

Intros

Cheatsheets

Cookbooks

FAQs

Software

**Apps , Distros/setups , Features , Editor plugins , Data import/conversion , Price fetching , Data generation , Workflows , Formatting , Reporting , Time logging , UI, console , UI, curses , UI, GUI , UI, web , UI, mobile , Library , Utilities , API **

Apps

To do Plain Text Accounting, try one (or more) of the PTA apps below. Generally it's possible to migrate data between them.

<style> th, td { border:none; padding-top:0; padding-bottom:0; border-bottom:thin solid #ddd; vertical-align:top; } th { width:30%; } th:first-child { width:10%; } th:first-child, td:first-child { white-space:nowrap; } </style>
Project Code Start Last release ~Stars ~Committers Discussion, ~size

Popular
Ledger C++ 2003 2025 5.8k 226 mail list 900, IRC 70
hledger haskell 2007 2026 3.8k 178 mail list 250, matrix 250, IRC 70
Beancount python 2008 2023 5.2k 84 mail list 700, matrix 30, matrix (fava) 240, IRC 30

Small userbase
Ledger (Go) go 2013 2025 470 12
Abandon scala 2013 2024 180 11 matrix
Transity purescript 2018 2020 650 8 matrix
zhang rust/ts 2023 2024 180 5
Tackler rust 2017 2026 120 3 matrix, github
knut go 2020 2024 60 3
ledg typescript 2021 2025 45 1
coin go 2019 2025 13 1
rustledger rust 2025 2026 66 1 github
limabean clojure/rust 2025 2026 9 1 github

Past/inactive
placc nim (closed source) 2024 2024 1
budget-cli typescript 2023 12 3
mynt rust 2023 1
awk-pta awk 2022 20 1
ubal uxntal 2022 1
bankroll rust 2020 2020 1 1
pta perl 2020 2020 1
blossom F# 2020 30 1
ledger.bash bash/awk 2020 7 1
acc rust 2020 1 1
rust_ledger rust 2019 2021 90 4
Goledger (mescanne) go 2019 2020 30 1
beans haskell 2019 2019 24 2
Prudent js, addons 2018 1 @PrudentLedger
.Net Ledger C# 2017 2023 164 1 matrix
monescript javascript 2017 2018 12 1
Go Ledger (abourget go ) 2016 40 3
uledger python 2015 17 1
pacioli python 2013 31 1
ledger.pl perl 2013 6 1
Penny haskell 2012 2014
UMM haskell 2009 2010
sm-Ledger squeak 2007
cl-ledger lisp 2007 66 4

Distros/setups

Documented/reproducible setups, integrated docker images etc, based on the above.

Name Uses Start Last update ~Stars
Full-fledged hledger hledger 2019 2025 500
hledger-flow hledger 2019 2026 200
Lazy Beancount beancount 2024 2026 100
rtrLEDGER hledger 2020 2020 20
docker-finance hledger, hledger-flow 2024 2026 2

Features

Here's a comparison of the big three PTA apps' main features, plus some relevant third-party tools in italics, and some geeky technical specs that you may not care about. Corrections and suggestions are appreciated (chat).

<style> td:first-child strong a { text-decoration:none; color:inherit; } </style>
Ledger hledger Beancount

User interfaces
CLI: ledger hledger beanquery
TUI: regdel hledger add, hledger-ui, hledger-iadd, puffin bean-add
GUI: Prudent, ledgerble, addtrans fruit-credits
WUI: ledgeraccounting, paisa, cashier, ledgible, ledger (howeyc), ledger-web (vifon), ledger-web (peterkeen), ledger-pyreport, ledger-analytics, node-ledger-web hledger-web, ledgeraccounting, paisa, cashier fava, paisa, BeanHub
Android: cashier, NanoLedger cashier, MoLe, NanoLedger Beancount Mobile CE, beancount-mobile (xuhcc)
IOS: Beancount Mobile CE

Getting-started
Easy install and setup: yes yes no
CLI help: general --help, also available as man page general and command-specific --help, commands summary, built-in asciinema demos command-specific --help
TLDR short help: ledger hledger and commands, also built-in
User manual formats: web web, info, man, also built-in info/man/text with jump to topic web
Active support channels: chat, mail list, forum, reddit mail list

Data formats
Input formats: journal (ledger), timeclock, csv journal (hledger), timeclock, timedot, csv, tsv, ssv, *sv journal (beancount)
Output formats: text, csv, xml, lisp text, html, csv, tsv, fods, beancount, sql, json text, ?

Commands
Commands: accounts, balance, cleared, commodities, convert, csv, entry, emacs, equity, lisp, payees, pricemap, pricedb, prices, print, register, select, source, stats, tags accounts, activity, add, aregister, balance, balancesheet, balancesheetequity, cashflow, check, close, codes, commodities, demo, descriptions, diff, files, help, import, incomestatement, payees, prices, print, notes, register, rewrite, roi, stats, tags, test beancount: check, doctor, example, format
Add-on commands: bar, check-fancyassertions, edit, git, iadd, interest, lots, move, pijul, plot.. beanquery: balances, journal, print, select

Configuration
Config file: general options general and command-specific options ?
Extensibility: built-in expression language, embedded python, HTTP-JSON add-on commands, haskell library, HTTP-JSON data-modifying plugins, python library

Other features
Account names: any any capitalised, no spaces, english top level names
Account types awareness: no yes yes
Budget report: built-in built-in fava
Charting tools: paisa, etc.. activity, hledger-bar, hledger-web, hledger-plot, paisa, etc.. fava, paisa..
Commodity names: any, on left or right, optional any, on left or right, optional 2-24 uppercase letters / digits / punctuation, on right, required
Data importing: built-in from CSV, others.. built-in from any input format, others.. beangulp framework, beancount_reds_importers framework, beancount-import library, others..
Data deduplication: checksum-based (requires unique CSV records) date-based (requires date-ordered CSV records) ?
Date range: 1400-01-01 to 9999-12-31 0000-01-01 onward 0001-01-01 to 9999-12-31
Generate postings by rule: built-in built-in ?
Generate recurring transactions: built-in built-in beancount-repete
International number notations: no yes no
Lot management: lot matching syntax, lots report, revaluation transactions, lotter manual, hledger-lots, hledger-move, lotter lot matching syntax, ?
Multi-period balance reports: no yes fava
Pivoting: on single tag on one or more tags / other fields no
Precision (journal): 254 significant digits "unlimited" integer digits + 255 decimal digits 28 significant digits
Precision (internal): "unlimited" (rational numbers) "unlimited" integer digits + 255 decimal digits 28 significant digits
Precision (balancing): max precisions in local entry global commodity precisions max precisions in local entry / 2 (configurable)
Precision (display): inferred commodity precision, or a default max precision of 6 inferred / specified commodity precision, or a default max precision of 8 inferred commodity precision, or a default max precision of 0 (configurable)
Price fetching: pricehist pricehist beanprice, pricehist
Querying: cli options, custom query expressions cli options, custom query expressions, sql SQL-like beancount query language
REPL: built-in haskell GHCI beanquery, python
Shell completions: bash (commands, flags, maybe accounts) bash (commands, flags, flag values, query types, journal data)
Unrealised gains report: --unrealized --gain, roi fava
Validation: configurable configurable always strict
Miscellaneous: ? standard financial reports ?
customisable account display order
customisable amount styles for input and output
documentation-first development
regular releases
regression bounties

Editor plugins

Atom

Data import/conversion

Miscellaneous

  • Ledger and hledger have CSV conversion built in. Also:
  • bean-identify, bean-extract, bean-file - Beancount built-in tools
  • banks2ledger - CSV to *ledger converter
  • beanborg Advanced transaction importer with auto-categorization (python)
  • beancount-import web app/framework for converting various formats to beancount (python)
  • beancount-reds-importers Simple importers and tools for Beancount. A framework to allow you to easily write your own importers.
  • beancount2ledger beancount to h/ledger converter (python)
  • beanhub-extract Simple Python library for extracting all kinds of bank export CSV files into standardized transaction data objects
  • beanhub-import Declarative idempotent rule-based beancount transaction import engine in Python consumes data extracted by beanhub-extract
  • buchhaltung CSV/FinTS/HBCI/OFX to *ledger conversion/deduplication (haskell)
  • Costflow convert one line message to beancount/*ledger format
  • csv2beancount CSV to beancount converter (clojure)
  • CSV2Ledger CSV to *ledger converter (perl)
  • csv2ledger.el CSV to *ledger converter (emacs lisp)
  • double-entry-generator Rule-based double-entry bookkeeping importer (from Alipay/WeChat/Huobi etc. to Beancount)
  • finfetch local web app for downloading csv from your banks via Plaid (categorised, deduplicated, plus edits and deletions)
  • fints2ledger FinTS/HBCI to csv to *ledger or beancount journals (python)
  • grisbi2Ledger Grisbi to *ledger converter
  • gsheet-csv.hs a script to download Google sheets (haskell)
  • hledger-Excel Excel spreadsheet to *ledger journal converter (visual basic for applications)
  • hledger-import-dsl alternate, programmable CSV converter for hledger
  • hledger-to-influxdb hledger to InfluxDB converter (haskell)
  • hledger2beancount hledger to beancount converter (haskell)
  • homebank2ledger HomeBank to ledger and beancount converter (perl)
  • icsvledger interactive CSV to *ledger converter (python)
  • into-ledger CSV to *ledger converter
  • invoice2data extract data from PDF invoices (python)
  • jali downloader/importer to *ledger (python)
  • ldgclip import bank transactions via the clipboard with one click (bash/awk)
  • Ledger in Go has limport, a CSV to *ledger converter
  • ledger-autosync OFX download, OFX to *ledger conversion, deduplication
  • ledger-guesser neural network for generating entries like past ones, can be used with ledger-autosync (javascript)
  • ledger-myexpenses MyExpenses android app sqlite db to *ledger conversion (python, 2017)
  • ledgermyexpenses sync MyExpenses android app to/from Ledger (bash, 2023)
  • ledger-to-beancount yet another simple ledger to beancount converter (python)
  • ledger-tutorials convert Pete Keen's tutorials to ebook format
  • ledger2beancount h/ledger to beancount converter (perl)
  • ledger2beancount.py *ledger to beancount converter (python)
  • moneymoney-ledger MoneyMoney export extension for *ledger
  • plaid2text Plaid API to *ledger/beancount download/conversion
  • reckon smart interactive/non-interactive CSV to *ledger converter
  • slc generates Ledger accounting entries, works with generic CSV files as well as the Stripe API
  • smart_importer library for building smarter CSV to beancount/Fava converters
  • Tiller service to download from mostly-US banks to google or microsoft spreadsheets (commercial but pretty good)
  • total_recall CSV to *ledger converter

GnuCash

Intuit

  • outofit QuickBooks to *ledger converter
  • plaid2qif Download transactions from plaid as QIF or CSV files
  • qb2ledger QuickBooks General Journal CSV to *ledger converter
  • QIFtoLedger (Bank of America's) QIF to *ledger converter

KMyMoney

YNAB

  • beancount-ynab Import YNAB4 (legacy desktop-based version) into beancount
  • beancount-ynab5 Import YNAB5 (cloud-based version) transactions into beancount
  • ynab-to-ledger YNAB5 (transactions) to *ledger converter (2025)
  • ynab-to-ledger You Need A Budget (YNAB) to *ledger converter. Handles multiple currencies, multiple number formats, reconciliation, memos, transfers, and split transactions
  • ynab_to_ledger YNAB to *ledger converter

Price fetching

Data generation

  • beancount-extract-price generate prices transactions based on your beancount ledger (python)
  • DepreciateForLedger generate *ledger depreciation transactions (python)
  • hledger-interest generate *ledger interest entries (haskell)
  • ledger-ts typescript EDSL for generating beancount journals (typescript)
  • ledgerbil schedule recurring txns, interactive reconcile, date sorting
  • LedgerScheduler move entries from one file to another when they come due (python)
  • lotter generate postings for capital gain/loss (go)
  • recurring generate recurring *ledger entries (python)
  • reorder-journal.sh sort hledger entries, preserving directives/comments at top of file (bash)
  • sassetti adds lisp macros to ledger files (common lisp)

Invoicing

  • kairos (repo) generate invoices from hledger timedot files (go)

Workflows

  • docker-finance hledger/hledger-flow/docker-based system for tracking and reporting on traditional and cryptocurrency finances
  • Full-fledged hledger scripts and detailed tutorial for generating hledger journals from CSV files (haskell, shell)
  • hledger-flow command-line tool to generate hledger (or Ledger) journals from CSV files (haskell)
  • rtrledger another hledger journals from CSV files system, designed for chaotic German freelancers (shell etc.)
  • Lazy Beancount Beancount packaged in Docker with additional plugins and tools

Formatting

Reporting

  • budget_report budget reporting with beancount (python)
  • gainstrack personal wealth analysis app with beancount export (scala/typescript)
  • hledger-diff report differing transactions between two journals (haskell)
  • hledger-irr calculate an account's internal rate of return (superseded by roi) (haskell)
  • hledger-lit show multiple charts in web browser (python)
  • hledger-sankey Script + HTML files to plot income next to expense money flows from an hledger ledger file (shell + javascript)
  • hledger-tools generating charts from hledger (typescript)
  • hledger-vega makes configurable vega-lite charts from hledger (shell)
  • hreports customise hledger reports with templates and PDF output (python)
  • ledger-plot interactive tool for making GNUplot charts from Ledger (python)
  • ledger-plots R package & script to make charts from Ledger (R)
  • r-ledger an R package for reading and reporting on ledger/hledger/beancount files (R)
  • TaxingLots calculates capital gains for a ledger journal (python)

Time logging

UI, console

  • bean-add interactive transaction entry tool (python)
  • hledger add interactive transaction entry tool (builtin command)
  • ladd create and edit a new *ledger transaction by fuzzy-matching past descriptions
  • ldgr command line tool to add/sort/tag ledger files (ruby)
  • ledger xact history-aware transaction generator (builtin command)

UI, curses

  • dravik TUI for hledger browsing (python)
  • hledger-iadd TUI for *ledger transaction entry (haskell)
  • hledger-ui TUI for *ledger browsing (haskell, video)
  • ledger-add TUI for *ledger transaction entry (python)
  • puffin TUI for hledger browsing (go)
  • regdel TUI for browsing Ledger files (python)

UI, GUI

  • favagtk app of Fava web UI for beancount browsing (Python, GTK)
  • fruit-credits data entry/reporting GUI for hledger (Vala, GNOME)
  • ledgerble reporting GUI with charts & adjustable reports (Javascript)
  • ledgerhelpers misc. GUI tools + helper library (Python, GTK)
  • Prudent integrated journal editing/importing/reporting GUI for Ledger (Javascript, mac only, closed source)

UI, web

  • cash offline-capable web UI for data entry to CSV (js/html)
  • fava web UI for beancount browsing (python, demo)
  • finfetch local web app for downloading csv from your banks via Plaid (categorised, deduplicated, plus edits and deletions)
  • hledger-web web UI for *ledger browsing, data entry (haskell, demo, Sandstorm app)
  • hledger-web-rs web UI for hledger reports (rust)
  • Paisa web UI or desktop app for ledger, hledger and beancount (go, javascript, demo)
  • Ledger in Go web UI for browsing ledger transactions, reports, and porfolios
  • Ledger Web ledger HTML reporting system (ruby, postgres)
  • Ledger Web web UI/API for ledger browsing, data entry (python)
  • ledger-analytics web UI for ledger data analytics (javascript)
  • ledger-dashboard web UI for ledger browsing, data entry (python)
  • ledger-pyreport web UI for standard accounting statements and unrealised gains (python)
  • ledgeraccounting web UI for hledger: data entry, basic reports and budgets (javascript)
  • ledgible web UI for ledger browsing, data entry (python)
  • n4s danish-language ERP system (php)
  • node-ledger-web web UI for ledger browsing (javascript)
  • WealthPulse web UI for ledger browsing, price fetching (F#)
  • BeanHub web UI for beancount browsing, data entry with a Git repository (proprietary SaaS; some components open source)

UI, mobile

Library

Utilities

API

  • gledger Go package to interface with Ledger (go)
  • hledger-lib library for parsing and generating reports from *ledger files (haskell)
  • hledger-web the web app includes a JSON API server for *ledger files (haskell)
  • ledgerhelpers extends Ledger's python library (python)
  • node-hledger Node.js API for *ledger files (javascript)
  • BeanHub API proprietary SaaS API for operating on hosted beancount repositories and beanhub-forms