![]()
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
Videos
Slides
Docs: Accounting basics , PTA app docs , comparisons , intros , cheatsheets , cookbooks
, FAQs
FAQ
Cookbook
Software: PTA apps , Feature
matrix , 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
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:
News & discussion
Chat - matrix
room - matrix
space - IRC
channel - project chats
Blogs & articles - See the PTA forum's News category
and RSS
feed - Older blogs &
articles, 2006-2024
PTA forum - forum.plaintextaccounting.org
Reddit - /r/plaintextaccounting
Lemmy - lemmy.world/c/plaintextaccounting
Hacker News - stories
- comments
Mastodon - #plaintextaccounting
- #ledgercli - #hledger - #beancount
Twitter - #plaintextaccounting
- #ledgercli
- #hledger - #beancount - LedgerTips 2014-2018
Stack Exchange - ledger-cli
tag - ledger-cli
search - hledger
tag - hledger
search
Project specific - Project mail
lists - This Week In
Hledger
plaintextaccounting.org site - commits
- contributors
- issues
- email the site
admin
Videos
https://www.youtube.com/results?search_query=plaintextaccounting
- Thanga Ayyanar: Ledger CLI (in Tamil) 2024
- Edwin Espinoza: Ledger CLI, Personal finance in the command line 2023
- Prakash Joshi Pax: How to Use Obsidian to Track Your Expenses 2022
- Peter Berger: Plain Text Accounting: An Opinionated View 2022
- Glenn Ramsey: Plain text accounting for fun and profit 2022
- 季路LJ: Beancount |简略记账说明 2021
- Robert Nielsen: hledger fan channel short hledger beginner lessons, 2019-2021
- Brian Ryall: Managing Your Finances Using Python 2020
- Steve Anderson: Plain Text Accounting: How to do Signed Number Accounting 2019
- Quiliro Ordóñez: ledger-mode lightning talk 2019
- Dickson S. Guedes: Cuide de suas FINANÇAS pessoais ou profissionais usando TEXTO 2019
- John Nduli: Plain Text Accounting 2019
- Jean Louis: GNU Emacs database accounting and rant on text ledgers 2019
- Cindy Zimmerman: Triple Entry Accounting, Ledger-cli, The blocktree hash tree - Guld Ledger File Format 2018
- Colin Dean: Plaintext Accounting with the ledger ecosystem 2017
- Colin Dean: Plain Text Accounting 2017
- Simon Michael: Hands-on with hledger 2016
- Chris Vollick: hledger, an open source accounting tool 2016
- Austin Walker: Conquering Your Finances with Emacs and Ledger 2016
- Simon Michael, Randal Schwartz, Simon Phipps: FLOSS Weekly 375: hledger (3m overview, show notes) 2016
- John Wiegley, Randal Schwartz, Aaron Newcomb: FLOSS Weekly 150: Ledger (show notes) 2011
Slides
- Simon Michael: Inside hledger: an architectural tour and how-to 2021
- Michael Lynch: An introduction to plaintext accounting 2021
- Andreas Pauley: Purely Functional Personal Finance 2018
- Matthew Turland: Hacking Your Finances for Fun and Profit 2013
Docs
Accounting basics , PTA app docs , Comparisons , Intros , Cheatsheets , Cookbooks , FAQs
Accounting basics
- hledger: Accounting basics
- hledger: Accounting links
- Beancount: The Double-Entry Counting Method
- Accounting for Computer Scientists
- Accounting for Dragons
- FAQ
PTA app docs
Comparisons
- PTA apps project stats
- Feature matrix
- Syntax Quick Reference
- FAQ: Which PTA app should I choose ?
- hledger and Ledger, hledger and Beancount, hledger and other software 2014, 2019, 2022, 2023..
- Matthias Kauer: Command Line Accounting – A look at the various ledger ports 2015
- beancount mail list: Another Ledger user's perspective 2015
- Beancount: A Comparison of Beancount and Ledger 2014
- ledger list: ledger vs hledger vs beancount or how to choose the right cli client 2014
Intros
- What is Plain Text Accounting?
- Getting Started With Ledger
- hledger: Get Started
- Getting Started with Beancount
- Tackler: Quickstart
- Don't Sink Your First Attempts at Plaintext Accounting
- Program your Finances: Command-line Accounting
- Plain Text Accounting Workshop
- Cookbook: Getting started
- BeanHub Academy: the definitive guide to learning double-entry accounting with Beancount — the Zen of Balance
- Lazy Beancount: an opinionated guide on Beancount
- Personal accounting in Ledger (book)
Cheatsheets
- Syntax Quick Reference
- Ledger CLI cheatsheet
- Beancount Syntax Cheat Sheet
- Beginners corner: a basic hledger transaction
- (Almost) everything you wanted to know about hledger transactions
- hledger: Journal cheatsheet
- hledger: CSV rules cheatsheet
Cookbooks
- Cookbook the Plain Text Accounting Cookbook; more docs, examples...
- Beancount cookbook
- hledger cookbook
- Ledger wiki
- PTA Forum
- Reddit: plaintextaccounting
FAQs
- FAQ the Plain Text Accounting FAQ
- hledger FAQ
- Ledger FAQ
Software
PTA apps , 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
PTA apps
To do Plain Text Accounting, try one (or more) of the apps below. Generally it's possible to migrate data between them.
| Project | Start | Last release | Code | Committers | Stars | Mail list, size | Chat, size | Issues |
|---|---|---|---|---|---|---|---|---|
| Popular | ||||||||
| Ledger | 2003 | 2025 | C++ | 226 | 5.5k | ledger ~900 | IRC ~70 | 1.6k |
| hledger | 2007 | 2025 | haskell | 178 | 3.4k | hledger ~250 | matrix ~250, IRC ~70 | 1.5k |
| Beancount | 2008 | 2023 | python | 84 | 4.1k | beancount ~700 | matrix ~30, matrix (fava) ~240, IRC ~30 | 0.5k |
| Small userbase | ||||||||
| Ledger (Go) | 2013 | 2024 | go | 12 | 470 | |||
| Abandon | 2013 | 2024 | scala | 11 | 180 | matrix | ||
| zhang | 2023 | 2024 | rust/ts | 5 | 180 | |||
| Tackler-NG | 2017 | 2026 | rust | 3 | 120 | matrix, GH | ||
| knut | 2020 | 2024 | go | 3 | 60 | |||
| budget-cli | 2023 | typescript | 3 | 12 | ||||
| rustledger | 2025 | rust | 2 | 12 | ||||
| ledg | 2021 | 2025 | typescript | 1 | 45 | |||
| placc | 2024 | 2024 | nim (free closed source) | 1 | ||||
| awk-pta | 2022 | awk | 1 | 20 | ||||
| coin | 2019 | 2025 | go | 1 | 13 | |||
| Inactive | ||||||||
| mynt | 2023 | rust | 1 | |||||
| ubal | 2022 | uxntal | 1 | |||||
| bankroll | 2020 | 2020 | rust | 1 | 1 | |||
| pta | 2020 | 2020 | perl | 1 | ||||
| blossom | 2020 | F# | 1 | 30 | ||||
| ledger.bash | 2020 | bash/awk | 1 | 7 | ||||
| acc | 2020 | rust | 1 | 1 | ||||
| rust_ledger | 2019 | 2021 | rust | 4 | 90 | |||
| Goledger (mescanne) | 2019 | 2020 | go | 1 | 30 | |||
| beans | 2019 | 2019 | haskell | 2 | 24 | |||
| Transity | 2018 | 2020 | purescript | 8 | 571 | matrix | ||
| Prudent | 2018 | js, addons | 1 | @PrudentLedger | ||||
| .Net Ledger | 2017 | 2021 | C# | 1 | 164 | matrix | ||
| monescript | 2017 | 2018 | javascript | 1 | 12 | |||
| Go Ledger (abourget) | 2016 | go | 3 | 40 | ||||
| uledger | 2015 | python | 1 | 17 | ||||
| pacioli | 2013 | python | 1 | 31 | ||||
| ledger.pl | 2013 | perl | 1 | 6 | ||||
| Penny | 2012 | 2014 | haskell | |||||
| UMM | 2009 | 2010 | haskell | |||||
| sm-Ledger | 2007 | squeak | ||||||
| cl-ledger | 2007 | lisp | 4 | 66 |
Feature matrix
A rough comparison of the big three PTA apps' main features, plus some relevant third-party tools in italics. (Plus some geeky technical bits that you may not care about.) Corrections and suggestions are appreciated (chat). You can also use this as a kind of overview, quick reference or porting guide. (See also syntax quick reference.)
Editor plugins
Atom - language-ledger - ledger
Emacs - beancount-mode -
hledger-mode -
ledger-mode
(good for hledger also)
IntelliJ - Ledger
CLI
Nano - scopatz/nanorc
Sublime - sublime-ledger-syntax
TextMate - Ledger.tmbundle
VIM - vim-ledger - vim-beancount -
hledger-vim - cmp-beancount
VS Code - hledger-vscode - ledger
- vscode-beancount
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
- WolfgangFahl/pynomina (updated 2025) interconversion between many formats, including gnucash-xml and beancount
- piecash/scripts/ledger.py (updated 2024) gnucash-sql to ledger
- lodenrogue/gnucash2ledger (2023) gnucash-xml to ledger
- tfree87/gnucash2ledger (2021) gnucash-xml to *ledger
- gnucash-xml-to-ledger-dat (2020) gnucash-xml to ledger
- gnucash-to-beancount (2017) gnucash-sqlite to beancount
- cookthebooks (2017) gnucash-xml to ledger
- pygnucash/gnucash2ledger.py (2014) gnucash-sqlite to ledger
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
- kmymoney2hledger KMyMoney to *ledger converter (clojure)
- kmymoney2ledgers KMyMoney to *ledger/beancount converter (python)
- kmymoney2ledgers.awk KMyMoney to *ledger/beancount converter (Awk)
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
- bean-price Beancount's price fetching tool (python)
- hledger-stockquotes download market prices for your hledger commodities (haskell)
- ledger-get-prices download market prices (ruby)
- LedgerStockUpdate update a Ledger price database (go)
- market-prices download market prices from several sources (python)
- market-prices.hs small, easy to adapt script to scrape market data from the internet (Haskell)
- pricehist fetch and format historical price data, with support for multiple sources and output formats (python)
- the-solipsist/scripts download prices for your hledger commodities, including indian commodities (bash)
- update-stocks-hledger in .net fetching stocks market prices and currency exchange rates from Yahoo Finance
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
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
- beancount-black opinionated beancount file formatter
- beancount-black web app opinionated beancount file formatter as a web-based app
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
- org2tc org to timeclock converter
- on-modify.timetrack.py taskwarrior hook for timeclock output
- t ledger timeclock shellscript
- tim time logging/reporting tool using hledger
- timekeeping-template time logging/reporting examples/how-to using hledger
- tito time logging bash scripts that avoid double clock-in
- toggl2timeclock.py Toggl CSV export to timeclock converter
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
- Beancount mobile app (Android, IOS)
- beancount-mobile data entry app (Android)
- NanoLedger data entry app supporting the ledger and hledger syntax (Android)
- cashier mobile or desktop client for ledger and hledger-web (Android/Desktop, javascript, app)
- cone data entry app for the h/ledger format (Android, dart)
- MoLe mobile client for hledger-web (Android, java)
- hledger.org: Mobile apps
Library
- beancount-parser standalone Lark-based beancount syntax parser (not relying on the beancount library)
- beancount-parser a Beancount parser in Rust using nom
- beancount-parser-lima another Beancount parser in Rust using Logos and Chumsky
- beancount-txn-elisp a library to read/parse and write/insert individual Beancount transactions, implemented in Emacs Lisp
- beanhub-forms a library provides data types and processors of custom beancount forms for inputting repeating similar entries easily
- beanhub-web-react react components for beancount entry input forms and beanhub-forms
- magicbeans Beancount extensions for cryptocurrency tax tracking and reporting
Utilities
- beanhub-cli beancount command line tools come with features like formatter, beanhub-import and a beanhub-forms web app
- bean-sort naive sorting for Beancount files
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