plaintextaccounting.org

Plain Text Accounting (PTA)

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

Slides

Docs

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

Accounting basics

PTA app docs

Comparisons

Intros

Cheatsheets

Cookbooks

FAQs

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 2023 C++ 226 4.9k ledger ~900 IRC ~60 1.5k
hledger 2007 2024 haskell 171 2.9k hledger ~250 matrix ~200, IRC ~60 1.4k
Beancount 2008 2023 python 84 3.1k beancount ~700 matrix ~10, matrix (fava) ~190, IRC ~30 0.5k
 
Small userbase
Ledger (Go) 2013 2023 go 11 409
Abandon 2013 2020 scala 11 178 matrix
knut 2020 2022 go 3 49
zhang 2023 2023 rust/ts 1 105
ledg 2021 2021 javascript 1 37
Goledger 2019 2020 go 1 25
blossom 2020 F# 1 25
awk-pta 2022 awk 1 15
Tackler 2017 2022 scala 1 9 matrix
coin 2019 go 1 7
budget-cli 2023 2023 typescript 1 2
mynt 2023 rust 1
placc 2024 nim 1
 
Inactive
bankroll 2020 2020 rust 1 1
pta 2020 2020 perl 1
acc 2020 rust 1 1
rust_ledger 2019 2021 rust 4 90
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 2016 go 3 37
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.)

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

Help
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
Easy install and setup: yes yes no

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.. 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 - 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

Price fetching

Data generation

Invoicing

Workflows

Formatting

Reporting

Time logging

UI, console

UI, curses

UI, GUI

UI, web

UI, mobile

Library

Utilities

API


(c) 2016-2024 Simon Michael & contributors | Send updates via github