16 releases (8 breaking)

0.9.2-rc.1 Aug 5, 2023
0.9.1 Dec 31, 2022
0.8.0 Jan 2, 2022
0.7.0 Nov 20, 2021
0.1.1 Mar 14, 2020

#16 in Finance

43 downloads per month

Custom license

716 lines


license CI

A small personal expense ledger.

All pledger does is track monthly expenses.


pledger is a single command-line program. You can install it using cargo:

cargo install pledger

Or by building it locally:

git clone https://github.com/woodruffw/pledger && cd pledger
cargo build


pledger takes only one input: a directory where monthly ledgers are stored:

pledger expenses/

Alternatively, you can use PLEDGER_DIR to pass the directory:

PLEDGER_DIR=expenses/ pledger

Ledgers are stored as structured text files with the filename YYYY-MM.ledger. Read about the pledger format below.

For example, here's a listing for a directory with three months of expenses:

$ ls expenses/

pledger ignores files that don't match the YYYY-MM.ledger format.

By default, pledger reports expenses for the current month.

To run pledger on a previous date, use pledger -d <spec> or pledger -l:

# do a report on january 2017
pledger -d 2017-01 expenses/

# the month name or single number is also enough for the current year
# do a report on april, then march
pledger -d april expenses/
pledger -d 3 expenses

# -l/--last is a shortcut for last month's ledger
pledger -l expenses/

pledger can also generate a report for all records with pledger --all, or for a specific year with pledger --year YEAR.

By default, pledger outputs a plain text report. You can use the --json flag to output JSON instead, for consumption by other tools:

pledger --json expenses/ > monthly.json

Ledger format

pledger's ledgers are plain text files, with one entry per line. Debits begin with D, credits with C, and the rest of the format is mostly self-explanatory:

C 130.00 #bonus
D 8.00 burger and fries #weekday #lunch
D 27.00 saturday drinks #weekend #alcohol
D 20,000.12 new car #essential

Everything after the currency amount is the comment. The comment can include tags, which begin with # and can be alphanumeric + symbolic. pledger uses your tags to provide expense summaries; duplicate tags in a comment are removed.

Empty lines or lines that begin with # are ignored.


~147K SLoC