HLEDGER(1) hledger User Manuals HLEDGER(1) (NAME) hledger - ( ) (SYNOPSIS) hledger hledger COMMAND [OPTS] [ARGS] (DESCRIPTION) hledger () . hledger ledger(1) beancount(1) . hledger . . hledger . / ! hledger . . hledger.org info man . : hledger --man [CMD] hledger --info [CMD] hledger help [TOPIC]. ( hledger --tldr [CMD] .) hledger ( HTML CSV JSON SQL) . . hledger hledger-* . hledger (journal) LEDGER_FILE ( ) ( $HOME/.hledger.journal) -f . timeclock timedot CSV/SSV/TSV . : 2015-10-16 bought food expenses:food $10 assets:cash ( ) (accounts) : / . : . (space) . () () . ( .) add hledger hledger-web hledger-iadd . : Emacs + ledger-mode VIM + vim-ledger VS Code + hledger-vscode ( ). hledger add $HOME/.hledger.journal : $ hledger print -x $ hledger aregister assets $ hledger balance $ hledger balancesheet $ hledger incomestatement hledger . "Starting a journal file" "Setting opening balances" PART 5: COMMON TASKS ..SH " : (PART 1: USER INTERFACE)" (INPUT) hledger . -f : $ hledger -f FILE [-f FILE2 ...] print (journal) hledger .journal (.hledger .j ) . hledger .hledger.journal (home) . . ( ). LEDGER_FILE ~/finance/2023.journal . Common tasks > Setting LEDGER_FILE . (Text encoding) hledger ascii locale . ( CSV/SSV/TSV CSV encoding .) ascii locale . locale / ( iconv unix powershell notepad ). Install: Text encoding . hledger locale . hledger UTF-8 . (Data formats) journal hledger : (Reads): (Reader): : ----------------------------------------------------------------------------------------- journal .journal .j .hledger .ledger hledger Ledger timeclock .timeclock timeclock timedot timedot .timedot csv .csv ssv .ssv (semicolon) tsv .tsv (tab) rules .rules CSV/SSV/TSV/ . hledger . journal . journal . / . .dat : $ hledger -f tsv:/some/file.dat stats - : $ cat FILE | hledger -f- print journal timeclock: : $ echo 'i 2009/13/1 08:00:00' | hledger print -f timeclock:- (Multiple files) -f journal . ( ) : o (balance assertions) . ( .) o (directives) . (parent file) : cat a.journal b.journal | hledger -f- CMD. (Strict mode) hledger . journal : o (syntax) o o -s/--strict : o account ( ) o commodity ( ) o check - . (COMMANDS) hledger . journal . . add print register balancesheet incomestatement. hledger . : (PART 4: COMMANDS) . : hledger CMD [CMDOPTS] [CMDARGS] o CMD . o CMDOPTS ( ). . : hledger print -x. o CMDARGS ( ). hledger (query) . : hledger reg assets:checking. hledger CMD -h . : hledger bal -h..SS (Add-on commands) hledger . bin/ hledger https://hledger.org/scripts.html . PATH "hledger-" (".bat" ".com" ".exe" ".hs" ".js" ".lhs" ".lua" ".php" ".pl" ".py" ".rb" ".rkt" ".sh") ( unix mac) . : hledger-ui --watch. hledger : hledger ui --watch. hledger . ( hledger 1.50 -- .) (OPTIONS) hledger -h . . hledger : : --conf=CONFFILE . XDG hledger.conf ( .hledger.conf $HOME) . -n --no-conf hledger : / : -f --file=[FMT:]FILE FILE stdin FILE - :FMT. . $LEDGER_FILE $HOME/.hledger.journal . --rules=RULESFILE CSV/SSV/TSV. FILE.csv FILE.csv.rules . --alias=A=B|/RGX/=RPL A B --auto ("=") --forecast[=PERIOD] ("~") . PERIOD ( ). . hledger-ui . -I --ignore-assertions --txn-balancing=... : 'old': 'exact': () --infer-costs --infer-equity --infer-market-prices --pivot=TAGNAME -s --strict ( -I) --verbose-tags / / ( ): -b --begin=DATE / -e --end=DATE / ( ) -D --daily -W --weekly -M --monthly -Q --quarterly () -Y --yearly -p --period=PERIODEXP / --today=DATE ( ) --date2 / () -U --unmarked / -P --pending / -C --cleared / ( -U/-P/-C ) -R --real -E --empty . hledger-ui hledger-web . --depth=DEPTHEXP ( NUM-) : NUM . REGEXP=NUM . -B --cost / -V --market () . --value=end. -X --exchange=COMM () . --value=end,COMM. --value=WHEN[,COMM] () . WHEN : 'then': 'end': () 'now': YYYY-MM-DD: -c --commodity-style=S . : -c '.' -c '1.000,00 EUR' --pretty[=YN] 'y'/'yes' 'n'/'no' . YN . : -h --help --tldr tldr --info info --man man --version --debug=[1-9] (: 1) --pager=YN y/yes () n/no --color=YNA --colour ANSI y/yes n/no auto () hledger --tldr --tl --dry-run --dry. -M -A -S -T -MAST. (-If FILE ). () . . ( --help .) hledger . . - ..SS "" "" . . - _ USD $ . $ . . ( .) ( ) : o (SPACE) < > ( ) | \ % o $ (word character) "credit card" : $ hledger register credit card : $ hledger register 'credit card' PowerShell $ . : $ hledger register "assets:$SOMEACCT" CMD.EXE : C:\Users\Me> hledger register "credit card" PowerShell : $ hledger register credit\ card hledger ( ) . : $ hledger register credit.card ( hledger ) . : o . ^ $ [ ] ( ) | \ \ . . \ $ . cur: $ : $ hledger balance cur:\\$ : 1. \ $ ( ). 2. ( ). 3. $ . : : $ hledger balance cur:'\$' hledger / (escaping/quoting) . . : unix / ( ) powershell ( ) cmd hledger-ui hledger-web (shell-escape) (regex-escape) / ('desc:a b' desc:'a b') ghci ( REPL Haskell) hledger ascii : o hledger ( add iadd // hledger-web ) o hledger . . : o locale . - Text encoding Install: Text encoding . o ( Terminal.app iTerm CMD.exe xterm ...) . Windows Terminal . o . o (wide characters) ( ). o hledger . hledger CMD.EXE ( ) cygwin msys . ( #961 )..SS " (Regular expressions)" (regexp) ( . ^ $ + * () | [] \) - hledger . regular-expressions.info . hledger (query) if CSV hledger-web / hledger-ui . () ( ). : ( ): : : ------------------- ------------------------------------------------------------ bank assets:bank, assets:bank:savings, expenses:art:banksy, ... :bank assets:bank:savings, expenses:art:banksy :bank: assets:bank:savings '^bank' ( ^ ) 'bank$' assets:bank ( $ ) 'big \$ bank' big $ bank ( \ ) '\bbank\b' assets:bank, assets:bank:savings ( \b ) '(sav|check)ing' saving checking ( (|) ) 'saving|checking' saving checking ( ) 'savings?' saving savings ( ? ) 'my +bank' my bank, my bank, ... ( + ) 'my *bank' mybank, my bank, my bank, ... ( * ) 'b.nk' bank, bonk, b nk, ... ( . ) : desc:'amazon|amzn|audible' Amazon cur:EUR EUR cur:'\$' $ cur:'^\$$' $ AU$ CA$ cur:....? tag:.=202[1-3] 2021 2022 2023 : . : : alias /\./=: : --alias='/^[^:]+/=combined' ( [^:] : ) : --alias '/^([^:]+):[^:]+/ = \1' ( \1 " " ) CSV: CSV MCC : if \?MCC581[124] CSV : if %amount \b3\.99 & %date (29|30|31|01|02|03)$ hledger regex-tdfa . : 1. (case insensitive). 2. ( ). 3. POSIX ERE ( ) . 4. (\b \B \< \>). 5. (backreferences) CSV (capturing groups) . \1 1 . 6. (*?) ((?s)) (\w \d) . 7. ( ) . : o alias --alias (/REGEX/). hledger . o $ . hledger-web cur:\$. o $ . (Special characters) . (Argument files) @FILE.args hledger . .args . : o . o # . o = . o . . o / . cur:\$ cur:\\$ . : # cash.args assets:cash assets:charles schwab:sweep cur:\$ -c=$1. $ hledger bal @cash.args (Config files) hledger 1.40 hledger . : # General options are listed first, and used with hledger commands that support them. --pretty # Options following a `[COMMAND]` heading are used with that hledger command only. [print] --explicit --infer-costs --conf . . hledger.conf .hledger.conf (~/.hledger.conf) hledger.conf XDG (~/.config/hledger/hledger.conf) hledger . : https://github.com/simonmichael/hledger/blob/master/hledger.conf.sample . () (: print) ( ). shebang . (-S ): #!/usr/bin/env -S hledger --conf -n/--no-conf . hledger . --conf --no-conf . --debug --debug=8 . setup . ( setup .) ! hledger ! hledger . / hledger . : 1. hledger.conf . 2. hledger.conf . 3. hledger.conf . : 1. hledger -n (--no-conf) . 2. hledger -n . 3. . 4. --debug --debug 8 . hledger 1.40 ..SS " (Shell completions)" bash zsh hledger . hledger ( hledger ) hledger reg acct: ( ) . Install > Shell completions . (OUTPUT) (Output destination) hledger . : $ hledger print > foo.txt (print register stats balance) -o/--output-file . : $ hledger print -o foo.txt $ hledger print -o - # write to stdout (the default) (Output format) . : command txt html csv/tsv fods beancount sql json ------------------------------------------------------------------------------------------- aregister Y Y Y Y Y balance Y Y Y Y Y balancesheet Y Y Y Y Y balancesheetequity Y Y Y Y Y cashflow Y Y Y Y Y incomestatement Y Y Y Y Y print Y Y Y Y Y Y Y register Y Y Y Y Y hledger CMD -h -O/--output-format=FMT .PP : $ hledger print -O csv # print CSV to standard output -o/--output-file=FILE.FMT: $ hledger balancesheet -o foo.csv # write CSV to foo.csv -O -o : $ hledger balancesheet -o foo.txt -O csv # write CSV to foo.txt . (Text output) : (monospace) . . ( MS Windows .) (register aregister) . -w/--width . (balance balancesheet incomestatement...) . . (pager) : --layout=bare -X COMM cur: --transpose --tree --depth --drop html . (Box-drawing characters) hledger . --pretty . hledger . (Colour) hledger ANSI . ( : (bold) .) NO_COLOR --color/--colour ( ) y/yes n/no . (Paging) (unix-like) ( ) hledger . ( --pager=no .) . SPACE h q . home/end/page up/page down . hledger PAGER less more . ( : hledger help -p TOPIC less .) ANSI hledger . ANSI . . less hledger LESS : --chop-long-lines --hilite-unread --ignore-case --no-init --quit-if-one-screen --shift=8 --squeeze-blank-lines --use-backslash : --RAW-CONTROL-CHARS HLEDGER_LESS LESS ..SS HTML HTML hledger.css . HTML HTML HTML. hledger -ASCII locale ( Text encoding ). CSV / TSV CSV TSV ( ) . FODS FODS OpenDocument Spreadsheet XML LibreOffice OpenOffice . CSV locale ( XML ) ( ) ( ) ( /bold) . libreoffice --headless ods2csv FODS/ODS CSV . Beancount Beancount . hledger Beancount Fava . hledger Beancount . . Beancount : o Beancount o o (cost notation) (equity conversion postings) o (balance assignments) . : Beancount Assets Liabilities Equity Income / Expenses . hledger2beancount.conf . 2024-12-20: : o P - . o (Balance assignments) (Beancount ) - . Beancount hledger - C A :A Beancount . Beancount hledger (commodity) / Beancount ' . _ - . hledger ISO 4217 - C C . Beancount Beancount Beancount . Beancount hledger Beancount ( _ ). Beancount : . (string) Beancount . hledger . assets:cash type:Asset type:Cash . Beancount . : type: "Asset, Cash"..SS " Beancount (Beancount costs)" Beancount hledger (conversion postings) . . << + >> . Beancount (Beancount operating currency) ( ) Beancount Fava . hledger . : option "operating_currency" "USD" SQL (SQL output) SQL SQLite MySQL Postgres . SQL . SQL hledger ( SQL delete truncate) drop . SQLite id PRIMARY KEY . : $ hledger print -O sql | sed 's/id serial/id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL/g' | ... . JSON (JSON output) JSON (verbose) hledger . Haskell : https://github.com/simonmichael/hledger/blob/master/hledger-lib/Hledger/Data/Types.hs OpenAPI hledger-web . hledger . JSON JSON . ( .) . : #1195 . (Commodity styles) hledger / << >> . -c/--commodity-style ( print ). : $ hledger print -c '$1.000,0' / . commodity . . hledger (parseability) ( ). (Debug output) hledger . --debug[=N] hledger . N ( ) ( ) . . stderr -o/--output-file ( stderr stdout : 2>&1). . stderr : hledger bal --debug=3 2>hledger.log ( .).SH " (ENVIRONMENT)" hledger : HLEDGER_LESS less (pager) less hledger . ( LESS + .) LEDGER_FILE -f/--file . ~/finance/main.journal . glob ./2???.journal. ( - .) LEDGER_FILE . . LEDGER_FILE -f $HOME/.hledger.journal ( ./.hledger.journal). > LEDGER_FILE (Common tasks > Setting LEDGER_FILE) . NO_COLOR ( ) hledger ANSI --color=y --colour=y . : (PART 2: DATA FORMATS) (Journal) hledger (plain text) journal hledger . ( ). (General Journal) . .journal . ( ) hledger . hledger Ledger . hledger and Ledger . hledger Ledger . . hledger add web import . git . ledger-mode hledger-mode Emacs vim-ledger Vim hledger-vscode Visual Studio Code Tab . Editors hledger.org . hledger : / ( ). hledger . / . (Journal cheatsheet) # hledger # ( Ledger). ############################################################################### # . . ; # ; comment "comment" / "end comment" . . end comment # ; # . ############################################################################### # . . # . # . # . # . account assets ; . account assets:savings ; . . account assets:checking ; . : + . account assets:receivable ; account passifs ; "type" type:L account expenses ; type:X ; . account expenses:rent ; . ; . commodity $0.00 ; . commodity 1.000,00 EUR decimal-mark . ; ( ). payee Whole Foods ; . tag trip ; . P 2024-03-01 AAPL $179 ; AAPL $ . include other.journal ; . # << >> ("periodic transaction") / ~ monthly set budget goals ; <- : + . (expenses:rent) $1000 (expenses:food) $500 # = revenues:consulting liabilities:tax:2024:us *0.25 ; expenses:tax:2024:us *-0.25 ; . ############################################################################### # . . # . # . # : # # DATE DESCRIPTION ; . # ACCOUNT1 AMOUNT ; / . # ACCOUNT2 AMOUNT ; . # ... ; . . # ; : + . 2024-01-01 opening balances ; . assets:savings $10000 ; . . assets:checking $1000 ; assets liabilities equity revenues expenses . liabilities:credit card $-500 ; liabilities equity revenues . equity:start ; . $-10500 . ; ; -s/--strict . 2024-01-03 ! (12345) pay rent ; . ; ! * << >> ("pending") <<>> ("cleared"). ; (code) / . ; . assets:checking $-500 ; (/credit). expenses:rent $500 ; (/debit). ; ( ). 2024-01-02 Gringott's Bank | withdrawal ; PAYEE | NOTE assets:bank:gold -10 gold assets:pouch 10 gold 2024-01-02 shopping expenses:clothing 1 gold expenses:wands 5 gold assets:pouch -6 gold 2024-01-02 receive gift revenues:gifts -3 "Chocolate Frogs" ; assets:pouch 3 "Chocolate Frogs" ; . 2024-01-15 buy some shares, in two lots ; . assets:investments:2024-01-15 2.0 AAAA @ $1.50 ; @ assets:investments:2024-01-15-02 3.0 AAAA @@ $4 ; @@ ; ^ (lot) . assets:checking $-7 2024-01-15 assert some account balances on this date ; = . ; hledger close --assert --show-costs ; assets:savings $0 = $10000 assets:checking $0 = $493 assets:bank:gold 0 gold = -10 gold assets:pouch 0 gold = 4 gold assets:pouch 0 "Chocolate Frogs" = 3 "Chocolate Frogs" assets:investments:2024-01-15 0.0 AAAA = 2.0 AAAA @ $1.50 assets:investments:2024-01-15-02 0.0 AAAA = 3.0 AAAA @@ $4 liabilities:credit card $0 = $-500 2024-02-01 note some event, or a transaction not yet fully entered, on this date ; (postings) . # YYYY-MM-DD # . / . 2024.01.01 2024/1/1 (journal) (#) - (;) . ( << >> .) hledger comment end comment ( ) . : o # o ; o comment ( ) : # a comment line ; another commentline comment A multi-line comment block, continuing until "end comment" directive or the end of the current file. end comment hledger ; (-) . << >> (Transaction comments) << >> (Posting comments) << >> (Account comments) . (Transactions) . . 0 . : o ( ! *) o ( ) o ( -) o ( - - ) o 0 (posting) ( ). : 2008/01/01 income assets:bank:checking $1 income:salary $-1 (Dates) (Simple dates) : YYYY-MM-DD YYYY/MM/DD YYYY.MM.DD . : Y . : 2010-01-31 2010/01/31 2010.1.31 1/31. ( hledger .) (Posting dates) ( ) ; date:DATE . ( Ledger : ; [DATE] .) . May checking 6/1 : 2015/5/30 expenses:food $10 ; food purchased on saturday 5/30 assets:checking ; bank cleared it on monday, date:6/1 $ hledger -f t.j register food 2015-05-30 expenses:food $10 $10 $ hledger -f t.j register checking 2015-06-01 assets:checking $-10 $-10 DATE . date: date: ..SS " (Status)" ( ) ( ) : ---------------------------------------------- unmarked ( ) ! pending ( ) * cleared () -U/--unmarked -P/--pending -C/--cleared ( -UP ). status: status:! status:* U P C hledger-ui . (: Ledger "unmarked" "uncleared" hledger "unmarked" .) (real-world) . . ledger-mode (Emacs) C-c C-e C-c C-c (toggle) . "uncleared" "pending" "cleared" . : ------------------------------------------------------------------------------- uncleared pending ( ) cleared -PC -U ( ) ..SS " (Code)" "" (code) . : ( ). (register report) . . tags(#tags] . (Description) / ( ; ) . ( " " ) / (payee/payer) . print register descriptions . desc:DESCREGEX --pivot desc (pivot) . (Payee and note) / . | ( /pipe) . "payee" "note" . ( .) payee:PAYEEREGEX note:NOTEREGEX payees notes payee note (pivot) . : | description payee note . | . ( .) payee hledger check payees . (: | payee .) (Transaction comments) ; / . print (tags) . 2012-01-01 something ; a transaction comment ; a second line of transaction comment expenses 1 assets (Postings) . ( ) : o () ( ! *) o () ( . .) o () o () (;) . . . (balanced transaction) . ( .) . ..SS (Debits and credits) hledger . (posting) . - - : debit / plus / left / short words credit / minus / right / longer words (Account names) hledger . ( ) << >> << >> . . . . : assets, liabilities, equity, revenues, expenses (Account types) . hledger A L E R X . (Two space delimiter) . hledger Ledger . . (balance assignment) : bad: assets:accounts receivable $10 ; <- too close! good: assets:accounts receivable $10 bad: assets:accounts receivable =$1000 ; <- too close! good: assets:accounts receivable =$1000 bad: assets:accounts receivable ; comment. <- too close! good: assets:accounts receivable ; comment hledger (postings) (account directives) . . (syntax) . (Account hierarchy) (:) . assets expenses assets:bank:checking expenses:food. hledger : assets assets:bank assets:bank:checking expenses expenses:food : assets bank checking expenses food hledger . ..SS (expenses:food) : (virtual postings). (account aliases) . (Amounts) . ( : .) hledger . . ( <<>> <>) : 1 .. (commodity) ( ) : $1 4000 AAPL 3 "green apples" ( ) . : -$1 $-1 (parsing) ( ): + $1 $- 1 E : 1E-6 EUR 1E3 (Decimal marks) : 1.23 1,23 hledger . hledger ( ) 1,000 1.000 . hledger 1 . hledger . decimal-mark : decimal-mark . commodity . hledger 10. ( - Trailing decimal marks )..SS " (Digit group marks)" ( ) - ( ) ( [no-break space] ) . : $1,000,000.00 EUR 2.000.000,00 INR 9,99,99,999.00 1 000 000.00 ; <- ordinary space 1 000 000.00 ; <- no-break space (Commodity) hledger "" (quantity) "" (commodity) . ( ) ("green apples" "ABC123"). "" " " (no-symbol commodity) . hledger . : 1 USD, 2 EUR, 3.456 TSLA. hledger . hledger . << >> (Commodity display style) . (Costs) (equity postings) . : 2026-01-01 buy euros assets:dollars $-123 equity:conversion $123 equity:conversion EUR-100 assets:euros EUR100 hledger @/@@ " " (cost notation) : " " " " . hledger "" (cost) . @ UNITPRICE @@ TOTALPRICE . : 2026-01-01 buy euros assets:dollars $-123 assets:euros EUR100 @ $1.23 ; unit cost (exchange rate) : 2026-01-01 buy euros assets:dollars $-123 assets:euros EUR100 @@ $123 ; total cost . --infer-market-prices: market prices from transactions . . . : 2026-01-01 buy euros assets:dollars ; $-123 is inferred assets:euros EUR100 @ $1.23 : 2026-01-01 buy euros assets:dollars ; $-123 is inferred assets:euros EUR100 @@ $123 : 2026-01-01 buy euros assets:euros EUR100 ; @@ $123 is inferred assets:dollars $-123 . : () . . hledger check balanced (strict mode) . : 1. . 2. -B/--cost hledger ( Cost reporting ). (equity postings): 1. ( ). 2. . hledger . --infer-equity . hledger print -x --infer-equity . --infer-costs ( Requirements for detecting equity conversion postings ). hledger print -x --infer-costs . : / . ( .): 2026-01-01 buy euros assets:dollars $-123 equity:conversion $123 equity:conversion EUR-100 assets:euros EUR100 @ $1.23 --infer-equity --infer-costs ..SS / (Cost basis / lot syntax) : 1. 2. 3. . hledger " " (cost basis) "" (lot) . () . " " "" ( ) . . " " (lot syntax) . lot hledger Ledger : : o {LOTUNITCOST} {{LOTTOTALCOST}} ( lot price ) o [LOTDATE] ( lot date ) o (LOTLABEL) ( lot note ) hledger lot txt beancount json print. hledger ( ) print Ledger Beancount rustledger / (lots/gains) ( Export Lots ). (Balance assertions) hledger Ledger . = EXPECTEDBALANCE (posting) . a b : 2013/1/1 a $1 = $1 b = $-1 2013/1/2 a $1 = $2 b $-1 = $-2 hledger . . -I/--ignore-assertions Ledger . (: ). (Assertions and ordering) hledger ( ) . Ledger Ledger . hledger . . (Assertions and multiple files) - include . -f . include . (concatenate) . hledger . "" / . . . ( .).SS : 2019/1/1 (a) $1 @ EUR1 = $1 print . ( close hledger ) ( ). << >> : . Ledger . (posting) : 2013/1/1 usd $-1 eur EUR-1 both 2013/1/2 both 0 = $1 both 0 = EUR1 hledger (== EXPECTEDBALANCE) << >> . ( ): 2013/1/1 usd $-1 == $-1 ; these sole commodity assertions succeed eur EUR-1 == EUR-1 both ;== $1 ; this one would fail because 'both' contains $ and EUR << >> ( ) - . : 1. 2. : 2013/1/1 usd $-1 eur EUR-1 both 0 == 0 ; nothing up my sleeve both:usd $1 == $1 ; a dollar here both:eur EUR1 == EUR1 ; a euro there ( = ==) << >> . hledger (=* ==*) << >> : 2019/1/1 equity:start assets:checking $10 assets:savings $10 assets $0 ==* $20 ; assets + subaccounts contains $20 and nothing else ( ) -U/--unmarked / -P/--pending / -C/--cleared status: . --real/-R real: . --auto (auto postings) . hledger . . : o --auto --auto o --auto --auto o ( ). . commodity . . add hledger add . (journal) . . . -I . (balance assignments) . ; (posting) / . print (tags) . 2012-01-01 expenses 1 ; a comment for posting 1 assets ; a comment for posting 2 ; a second comment line for posting 2 hledger (costs) commodity hledger - (balancing precision) . 1.50 hledger ( Ledger). commodity A A ( cost) . -c Ledger Beancount . hledger 1.50 : (override ). ( #2402 ). ( CSV) hledger <1.50 "unbalanced transaction" ( ) . : o --txn-balancing=old ~/.hledger.conf . . o (). : 1. (cost) ( / ) 2. ( ) 3. ( "expenses:rounding". .) tag: . ( .) . ( .) : 2025-01-01 groceries ; some-tag: assets:checking expenses:food $1 . .: 2025-01-01 groceries ; tag1: this is tag1's value . .: 2025-01-01 groceries ; tag1:value 1, tag2:value 2, comment text : 2025-01-01 groceries ; tag1:value 1, tag1:value 2 ( ): 2025-01-01 groceries ; tag1: value 1 ; tag2: value 2 : 2025-01-01 rent assets:checking expenses:rent $1000 ; postingtag: : account assets:checking ; acct-number: 123-45-6789 (Tag propagation) : 1. -> . . 2. -> . . 3. -> . . tag: . : account assets:checking account expenses:food ; atag: 2025-01-01 groceries ; ttag: assets:checking ; p1tag: expenses:food $1 ; p2tag: ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ assets:checking expenses:food atag atag: assets:checking p1tag, ttag p1tag: ttag expenses:food p2tag, atag, ttag p2tag: atag ttag groceries ttag, p1tag, p2tag, atag ttag: p1tag p2tag atag (Displaying tags) tags . print . --pivot ( ) . (When to use tags ?) . . regex . . . trip: YEAR:PLACE . (Tag names) . : . tag check . . ; see https://foo.com https . hledger . : type -- date -- date2 -- assert -- close --assert retain -- close --retain start -- close --migrate/--close/--open/--assign t -- timedot generated-transaction -- modified-transaction -- generated-posting -- cost-posting -- ( ) conversion-posting -- V/Conversion (generated-transaction ) _ . print . --verbose-tags print . (Directives) journal : (directives). hledger . . hledger Ledger . . : tab( ); lw(39.7n) lw(30.3n). ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ (READING DATA): alias comment decimal-mark include (GENERATING DATA): ~ = (CHECKING FOR ERRORS): account commodity payee tag (REPORTING): account commodity P . ( ) - . ! alias . alias . . -f include . " " hledger - : tab( ); lw(3.5n) lw(64.1n) lw(2.4n). ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ account . : . alias end aliases . : --alias comment end comment . commodity : 1. 2. 3. decimal-mark 4. . D . : format ( ). : -c/--commodity-style decimal-mark decimal-mark . . commodity D . include . : -f/--file payee . P . ~ ( / tilde) --forecast balance --budget . : apply account end apply account . D commodity : . Y . = ( / equals) --auto ( #1212 ). Ledger Ledger . account ( ) . : o 2 (chart of accounts) . o 2 (pivot) . o 2 strict mode . o 2 ( ). o 2 hledger (asset liability equity revenue expense) balancesheet incomestatement . o 2 ( hledger add hledger-web hledger-iadd ledger-mode ). account hledger . : account assets:bank:checking Ledger : account assets:bank:checking format subdirective ; currently ignored ; account / ; . ; . account assets:bank:checking ; same-line comment, at least 2 spaces before the semicolon ; next-line comment ; some tags - type:A, acctnum:12345 account . (postings) . ( .) . hledger journal . (reconciling). (strict mode) -s/--strict hledger check accounts account hledger . : o 2 (case-sensitive) . o 2 account " " ( directives ) . (include) . account . o 2 journal . o 2 " " (wildcard) . o 2 --infer-equity ..SS " (Account display order)" account hledger . (top-level) : account assets account liabilities account equity account revenues account expenses hledger : $ hledger accounts assets liabilities equity revenues expenses . () . account parent:child child . parent account parent . hledger x:y a:b a:c . account (posting target) . " (Account types)" hledger : tab( ); l l l. Asset A Liability L Equity E : Revenue R ( Income) Expense X hledger (subtype) : Cash C ( Asset) Conversion V ( Equity) Gain G / ( Revenue) hledger . type: account . . . : account assets ; type: A account liabilities ; type: L account equity ; type: E account revenues ; type: R account expenses ; type: X account assets:bank ; type: C account assets:cash ; type: C account equity:conversion ; type: V account revenues:capital ; type: G balancesheet balancesheetequity cashflow incomestatement :. : o : $ hledger accounts --types [ACCTPAT] [type:TYPECODES] [-DEPTH] [--locations] o . . o ( - Regular expressions). type: . If account's name contains this case insensitive regular expression | its type is --------------------------------------------------------------------|------------- ^assets?(:.+)?:(cash|bank|che(ck|que?)(ing)?|savings?|current)(:|$) | Cash ^assets?(:|$) | Asset ^(debts?|liabilit(y|ies))(:|$) | Liability ^equity:(trad(e|ing)|conversion)s?(:|$) | Conversion ^equity(:|$) | Equity ^(income|revenue)s?(:|$) | Revenue ^expenses?(:|$) | Expense . : 1. type: . 2. type: . 3. . 4. . 5. . o . alias (alias) . : o o o o o account . hledger add hledger-web . . . << >> (Rewrite account names) . alias . ( : ). = : alias OLD = NEW --alias 'OLD=NEW' . . . OLD NEW . hledger . . : alias checking = assets:bank:wells fargo:checking ; rewrites "checking" to "assets:bank:wells fargo:checking", or "checking:a" to "assets:bank:wells fargo:checking:a" (Regex) . ( hledger .) : alias /REGEX/ = REPLACEMENT : $ hledger --alias '/REGEX/=REPLACEMENT' ... REGEX REPLACEMENT . REGEX (case-insensitive). /\/=:. REGEX REPLACEMENT : alias /^(.+):bank:([^:]+):(.*)/ = \1:\2 \3 ; rewrites "assets:bank:wells fargo:checking" to "assets:wells fargo checking" REPLACEMENT ( ) ..SS / (alias) . - - . . . ( ) : 1. alias ( ) 2. --alias ( ). ( ) : o / o / o / . - . --debug=6 . << >> alias . hledger -f a.aliases -f b.journal a.aliases b.journal . (include) : include a.aliases 2023-01-01 ; not affected by a.aliases foo 1 bar : alias foo=Foo alias bar=Bar 2023-01-01 ; affected by aliases above foo 1 bar include c.journal ; also affected end aliases ( ) () : end aliases print . : 2021-01-01 a:aa 1 b $ hledger print --alias '/.*/=' 2021-01-01 1 print . print : 2021-01-01 old 1 other $ hledger print --alias old="new USD" | hledger -f- print 2021-01-01 new USD 1 other ( > ) . ( ) . . type: accounts : $ hledger accounts --types -1 --alias assets=bassetts commodity commodity : 1. (strict mode) check . << >> . 2. . << >> . 3. ( decimal-mark :) ( ) . << >> . 4. . / . . ( ) commodity . . . -c/--commodity-style . (: #793) commodity commodity . . : commodity $1000.00 commodity 1.000,00 EUR commodity 1 000 000.0000 ; the no-symbol commodity ( ). : commodity 1000. AAAA ; show AAAA with no decimals : commodity 1.0000 "AAAA 2023" ( ): commodity $ commodity INR commodity "AAAA 2023" commodity "" ; the no-symbol commodity format Ledger. . : ; display indian rupees with currency name on the left, ; thousands, lakhs and crores comma-separated, ; period as decimal point, and two decimal places. commodity INR format INR 1,00,00,000.00 an unsupported subdirective ; ignored by hledger commodity . (postings) . ( .) (Commodity error checking) (-s/--strict) ( hledger check commodities) hledger . ( : .) ( ) . decimal-mark decimal-mark - - . : decimal-mark . decimal-mark , ( ) . include include : include SOMEFILE SOMEFILE . ( include SOMEFILE .) journal (include) . journal timeclock timedot CSV . (tilde) : include ~/main.journal. : include /home/user/main.journal. : include ../finances/main.journal. () ( Data formats ): include timedot:notes/2023.md. glob . glob hledger zsh : ? [a-z] * ( /) ** / . include . : o include *.journal journal ( ) o include **.journal journal ( ) o include timelogs/2???.timedot timedot . * ** : ** . glob ( **.journal **). hledger files --debug=6 ( 7) ..SS P P . . () . : P DATE COMMODITY1SYMBOL COMMODITY2AMOUNT DATE COMMODITY1SYMBOL COMMODITY2AMOUNT ( ) . : # one euro was worth $1.35 from 2009-01-01 onward: P 2009-01-01 EUR $1.35 # and $1.40 from 2010-01-01 onward: P 2010-01-01 EUR $1.40 -V -X --value . (Value reporting) . payee payee PAYEE NAME . "payees" . : payee Whole Foods ; a comment (tag) ( ). "" . payee "" Ledger . tag tag TAGNAME . TAGNAME ( ). : tag item-id . "tags" . . (Periodic transactions) ~ << >> ("periodic rule") hledger --forecast . << >> ("forecast transactions") . --forecast hledger . : --budget . : 1. - . 2. hledger print --forecast tag:generated hledger register --forecast tag:generated . 3. . 4. . / . 5. (period expressions) . . 6. . weekly from DATE DATE . ~ weekly from 2019/10/1 ( ) . 7. . ( . .) : ~ every 10th day of month from 2023/01 ~ every 10th day of month from 2023/01/01 2019/12/10 ..SS (~) (: ~ .): # every first of month ~ monthly expenses:rent $2000 assets:bank:checking # every 15th of month in 2023's first quarter: ~ monthly from 2023-04-15 to 2023-06-16 expenses:utilities $400 assets:bank:checking ( ) . ( 12/31 25 tomorrow last week next quarter) . : 1. Y 2. --today 3. . . ! . hledger : ; 2 or more spaces needed here, so the period is not understood as "every 2 months in 2023" ; || ; vv ~ every 2 months in 2023, we will review assets:bank:checking $1500 income:acme inc o ( ) . o . (Auto postings) = << >> ("auto posting rule") . ( (postings) .) = (: "match") (query) : = QUERY ACCOUNT AMOUNT ... . . = : hledger --auto QUERY . --auto hledger . %account . . . AMOUNT : o / 2. . o / $2. . o *2. ( ) . o / *$2. / . : ; every time I buy food, schedule a dollar donation = expenses:food (liabilities:charity) $-1 ; when I buy a gift, also deduct that amount from a budget envelope subaccount = expenses:gifts assets:checking:gifts *-1 assets:checking *1 2017/12/1 expenses:food $10 assets:checking 2017/12/14 expenses:gifts $20 assets:checking $ hledger print --auto 2017-12-01 expenses:food $10 assets:checking (liabilities:charity) $-1 2017-12-14 expenses:gifts $20 assets:checking assets:checking:gifts -$20 assets:checking $20 - ( balance assertions --auto ). <<>> - hledger print --auto ..SS . ( -f/--file - #1212 ). ( ) ( ) . / / : o o . . hledger 1.12+ #893 . . : o generated-posting:= QUERY - (query) o _generated-posting:= QUERY - hledger . " " . : o modified: - o _modified: - " " . : tag:_generated-transaction QUERY . . hledger Ledger . . . Ledger . . : ; starting a new journal, set asset account balances 2016/1/1 opening balances assets:checking = $409.32 assets:savings = $735.24 assets:cash = $42 equity:opening balances : ; no cash left; update balance, record any untracked spending as a generic expense 2016/1/15 assets:cash = $0 expenses:misc (commodity) ( ). : hledger . . ..SS (cost) : 2019/1/1 (a) = $1 @ EUR2 $ hledger print --explicit 2019-01-01 (a) $1 @ EUR2 = $1 @ EUR2 (balance assertions) . (include) . Ledger : [DATE] [DATE=DATE2] [=DATE2] (posting comments). hledger 0123456789/-.= . DATE DATE2 DATE . : date:/date2: hledger (lot date) Ledger. D D AMOUNT ( ) . D . D commodity ( ). . ( ) . : ; commodity-less amounts should be treated as dollars ; (and displayed with the dollar sign on the left, thousands separators and two decimal places) D $1,000.00 1/1 a 5 ; <- commodity-less amount, parsed as $5 and displayed as $5.00 b : commodity D . decimal-mark commodity D. check commodity (hledger check commodities D ). : . . D commodity decimal-mark . D Ledger . apply account end apply account . : apply account home 2010/1/1 food $10 cash end apply account : 2010/01/01 home:food $10 home:cash $-10 account (include) . hledger add hledger-web . ( ) . : ..SS Y Y YEAR ( ): year YEAR apply year YEAR . . : Y2009 ; set default year to 2009 12/15 ; equivalent to 2009/12/15 expenses 1 assets year 2010 ; change default year to 2010 2009/1/30 ; specifies the year, not affected expenses 1 assets 1/31 ; equivalent to 2010/1/31 expenses 1 assets : ( ) . Y . Y . : DATE1=DATE2. . ( ) --date2 ( --aux-date --effective Ledger ) ( ) . . : " ". : o . o . o (balance assertions) . o . o . o . o (posting dates) . hledger Ledger posting dates . * () () . Emacs org org mode . : . . Emacs org / ledger mode outshine ledger mode ledger mode ..SS " (Valuation expressions)" Ledger . hledger . (Virtual postings) (some:account) 10 . . ( .) . () ([some:account]) . . . : 2022-01-01 buy food with cash, update budget envelope subaccounts, & something else assets:cash $-10 ; <- these balance each other expenses:food $7 ; <- expenses:food $3 ; <- [assets:checking:budget:food] $-10 ; <- and these balance each other [assets:checking:available] $10 ; <- (something:else) $5 ; <- this is not required to balance . -R/--real real:1 . Ledger (Other Ledger directives) Ledger . hledger Ledger hledger Ledger . apply fixed COMM AMT apply tag TAG assert EXPR bucket / A ACCT capture ACCT REGEX check EXPR define VAR=EXPR end apply fixed end apply tag end apply year end tag eval / expr EXPR python PYTHONCODE tag NAME value EXPR --command-line-flags hledger Ledger . Ledger (Ledger virtual costs) Ledger (@) UNITCOST (@@) TOTALCOST . hledger @ @@ . Ledger (Ledger lot syntax) Ledger ( ) () : o {LOTUNITCOST} {{LOTTOTALCOST}} ( ) o [LOTDATE] ( ) o (LOTNOTE) ( ) hledger txt beancount json print . hledger ( ) print Ledger Beancount ..SS " Ledger (Ledger fixed lot costs)" o {=UNITCOST} {{=TOTALCOST}} ( ) o " " @/@@ . Beancount : o @ UNITCOST @@ TOTALCOST o hledger o ( ) () {...}: / o {UNITCOST} {{TOTALCOST}} o o o o ( ) o o {} {YYYY-MM-DD} {"LABEL"} {UNITCOST, "LABEL"} {UNITCOST, YYYY-MM-DD, "LABEL"} o // . hledger o @ @@ o {UNITCOST}/{{TOTALCOST}} o . (CSV) hledger CSV ( ) . DSV ( ) . hledger .csv .ssv .tsv csv: ssv: tsv: . ( CSV TSV Output format .) CSV (rules file) . CSV ( ) hledger . hledger CSV .rules . foo/FILE.csv hledger foo/FILE.csv.rules . --rules . (date) (amount) . CSV : Date, Description, Id, Amount 12/11/2019, Foo, 123, 10.23 # basic.csv.rules skip 1 fields date, description, , amount date-format %d/%m/%Y $ hledger print -f basic.csv 2019-11-12 Foo expenses:unknown 10.23 income:unknown -10.23 Tutorial: Import CSV data hledger.org CSV https://github.com/simonmichael/hledger/tree/master/examples/csv ..SS CSV (CSV rules cheatsheet) . ( # ; * .) source archive encoding (text encoding) separator decimal-mark CSV date-format /- CSV timezone - CSV newest-first (txn) : intra-day-reversed (txn) : skip ( ) () (header) fields CSV hledger CSV hledger if hledger (skip) (end ) if hledger skip ( if) () end ( if) balance-type / (balance assertions/assignments) include CSV CSV CSV..SS source hledger csv -f foo.csv foo.csv.rules . -f foo.csv.rules foo.csv ( 1.30). . . source : source ./Checking1.csv . hledger ~/Downloads : source Checking1.csv glob : source Checking1*.csv : hledger ( ) . . CSV hledger import rules/* . "Working with CSV > Reading files specified by rule" . / source | () ( ) . CSV hledger . (CSV) CSV . : source ./paypal.json | paypalcsv source data/simplefin.json | simplefincsv - 'chase.*card' source OfxDownload*.csv | grep -vE '^(([^,]*,){6}[^,]*|)$' | sort -t, -n +2 source History_for_Account_Z20144832*.csv # | grep -E '^([^,]*,){12}[^,]*$' | sed -E -e 's/^ //' -e 's/\.([0-9]),/.\10,/g' -e 's/,([0-9]+),/,\1.00,/g' source | ( |) . CSV . : source | paypaljson | paypalcsv source | paypalcsv data/paypal.json source | simplefinjson >data/simplefin.json && simplefincsv data/simplefin.json 'chase.*card' source | simplefincsv data/simplefin.json 'unify.*checking' ( paypal* simplefin* bin/ ) hledger stderr (echo) . hledger . hledger . 1.50 ..SS archive archive import data/ . ( ".csv") . . import glob source . ( .) CSV CSV . 1.50 . encoding encoding ENCODING hledger ascii locale . CSV encoding ENCODING CSV . : encoding iso-8859-1. : ascii, utf-8, utf-16, utf-32, iso-8859-1, iso-8859-2, iso-8859-3, iso-8859-4, iso-8859-5, iso-8859-6, iso-8859-7, iso-8859-8, iso-8859-9, iso-8859-10, iso-8859-11, iso-8859-13, iso-8859-14, iso-8859-15, iso-8859-16, cp1250, cp1251, cp1252, cp1253, cp1254, cp1255, cp1256, cp1257, cp1258, koi8-r, koi8-u, gb18030, macintosh, jis-x-0201, jis-x-0208, iso-2022-jp, shift-jis, cp437, cp737, cp775, cp850, cp852, cp855, cp857, cp860, cp861, cp862, cp863, cp864, cp865, cp866, cp869, cp874, cp932. 1.42 . separator separator (character-separated) . tab space ( ) . (CSV): separator , (SSV): separator ; (TSV): separator TAB .csv .ssv .tsv ( csv: ssv: tsv:) ..SS skip skip N skip ( ) hledger . CSV . . skip : if ( ) . CSV . date-format date-format DATEFMT date ( date2) . CSV YYYY-MM-DD YYYY/MM/DD YYYY.MM.DD date-format strptime - : https://hackage.haskell.org/package/time/docs/Data-Time-Format.html#v:formatTime CSV . : # MM/DD/YY date-format %m/%d/%y # D/M/YYYY # The - makes leading zeros optional. date-format %-d/%-m/%Y # YYYY-Mmm-DD date-format %Y-%h-%d # M/D/YYYY HH:MM AM some other junk # Note the time and junk must be fully parsed, though only the date is used. date-format %-m/%-d/%Y %l:%M %p some other junk (locale) %b LC_TIME . timezone timezone TIMEZONE CSV - CSV (off-by-one) . - CSV %Z date-format ( %z %EZ %Ez formatTime ). hledger - CSV . ( ) TZ : $ TZ=-1000 hledger print -f foo.csv # or TZ=-1000 hledger import foo.csv timezone "UTC" "GMT" "EST" "EDT" "CST" "CDT" "MST" "MDT" "PST" "PDT". : +HHMM -HHMM..SS newest-first hledger . CSV . CSV . CSV : 2022-10-01, txn 3... 2022-10-01, txn 2... 2022-10-01, txn 1... newest-first hledger . # same-day CSV records are newest first newest-first intra-day-reversed CSV intra-day-reversed . : 2022-10-02, txn 3... 2022-10-02, txn 4... 2022-10-01, txn 1... 2022-10-01, txn 2... # transactions within each day are reversed with respect to the overall date order intra-day-reversed decimal-mark decimal-mark . : decimal-mark , hledger ( Amounts). CSV . CSV hledger : o CSV . CSV . . o hledger date description account1 amount1 account2 . . o CSV hledger . ( CSV .) o CSV hledger ( ) . CSV . o CSV hledger hledger . o CSV . % . : o CSV: if %CSVFIELD ... o : HLEDGERFIELD %CSVFIELD o hledger . ( ) . : o : description VALUE o CSV: fields date, description, amount fields FIELDNAME1, FIELDNAME2, ... ( fields ) . : 1. CSV . %13 %SomeField . 2. hledger ( ) CSV hledger . hledger . " ": fields date, description, , amount, , , somefield, anotherfield CSV . : o ( ). o . . o _ ( ) - ( ) . o . CSV ( ) . CSV hledger . "balance" CSV balance_ balance hledger ( ) . HLEDGERFIELD FIELDVALUE CSV hledger . ( ) . hledger ( / hledger ) . CSV CSV (%N) (%CSVFIELD) (\N) . : # CSV " USD" amount %4 USD # note: date: comment note: %somefield - %anotherfield, date: %1 : o ( CSV " 1 " 1 ) (#1051). o CSV - hledger . ( << >> )..SS " (Field names)" CSV hledger : 1. CSV ( CSVFIELD): CSV ( hledger CSV ) fields : fields When, What, Some_Id, Net, Total, Foo, Bar 2. hledger ( HLEDGERFIELD): hledger CSV : date %When code %Some_Id description %What comment %Foo %Bar amount1 $ %Total fields: fields date, description, code, , amount1, Foo, Bar currency $ comment %Foo %Bar hledger : date (date field) date . date2 (date2 field) date2 . status (status field) status . code (code field) code . description (description field) description . comment (comment field) comment . commentN N N (posting) . \n . \n . (tags) . . . account (account field) accountN N N . account1 account2 . account1 CSV account2 . ( ) ( "expenses:unknown" "income:unknown"). amount (amount field) CSV . 1. amount . . . 2. amount-in amount-out CSV ( "Debit" "Credit" "Inflow" "Outflow"). . : o "amount-in amount-out " " amount-in amount-out ( ) ". o amount amount-in/amount-out CSV . o CSV . o hledger CSV amount-out . o if ( ). 3. amountN ( N ) : N . () . . if . 4. amountN-in amountN-out CSV . amount-in amount-out . 5. fields . fields CSV "amount" amount . ( fields "amount_".) 6. if . " CSV > (Working with CSV > Setting amounts)" ..SS currency currency . CSV . currencyN N . balance balanceN ( ) N . balance 1.17 hledger balance1 . / balance-type ( ). Working with CSV . if CSV . ( ) . : << if>> << if>> . if if <<>> ( ) . if MATCHER RULE if MATCHER MATCHER MATCHER RULE RULE . if : o skip - CSV ( ) o end - CSV . : # <> account2 <> if groceries account2 expenses:groceries # account2 if monthly service fee atm transaction fee banking thru software account2 expenses:business:banking comment XXX deductible ? check it # ( ) CSV if ,,,, end : 1. : hledger CSV . : whole foods. 2. CSV (%) . : %3 whole foods %description whole foods. hledger CSV . : 1. . SSV : 2023-01-01 ; "Acme, Inc. " ; 1,000 : 2023-01-01,Acme, Inc. ,1,000 2. CSV CSV fields . ( CSV ). hledger ( CSV hledger ). ! ( ) . ! whole foods ! %3 whole foods !%description whole foods "whole foods" . 1.32. hledger POSIX (\b \B \< \>) . << CSV>> . (Multiple matchers) if : o OR ( ). o & ( && 1.42) AND ( AND ). o & ! ( 1.41 && ! 1.42) AND . && ( AND) && ! ( AND NOT) . %description amazon && %date 2025-01-01 description "amazon" date "2025-01-01" . 1.42. (Match groups) 1.32 : . (( )) . \N N ( \1 \2 ). : ( ) : if %date (....-..)-.. comment2 date:\1-01 : CSV : if %account1 liabilities:family:(expenses:.*) account1 \1 << if>> if : if,HLEDGERFIELD1,HLEDGERFIELD2,... MATCHERA,VALUE1,VALUE2,... MATCHERB && MATCHERC,VALUE1,VALUE2,... (*since 1.42*) ; Comment line that explains MATCHERD MATCHERD,VALUE1,VALUE2,... if if . CSV . - , | ( ). . (whitespace) ( if). () . ( ) . if : hledger (override) - if . if if : if MATCHERA HLEDGERFIELD1 VALUE1 HLEDGERFIELD2 VALUE2 ... if MATCHERB && MATCHERC HLEDGERFIELD1 VALUE1 HLEDGERFIELD2 VALUE2 ... ; Comment line which explains MATCHERD if MATCHERD HLEDGERFIELD1 VALUE1 HLEDGERFIELD2 VALUE2 ... : if,account2,comment atm transaction fee,expenses:business:banking,deductible? check it %description groceries,expenses:groceries, ;; Comment line that desribes why this particular date is special 2023/01/12.*Plumbing LLC,expenses:house:upkeep,emergency plumbing call-out balance-type (balance assertions) balanceN = . checking . balance-type : # balance assertions will consider all commodities and all subaccounts balance-type ==* : = single commodity, exclude subaccounts =* single commodity, include subaccounts == multi commodity, exclude subaccounts ==* multi commodity, include subaccounts include RULESFILE CSV . RULESFILE . : # someaccount.csv.rules ## someaccount-specific rules fields date,description,amount account1 assets:someaccount account2 expenses:misc ## common rules include categorisation.rules CSV : CSV . entr eradman.com/entrproject : $ ls foo.csv* | entr bash -c 'echo ----; hledger -f foo.csv print desc:SOMEDESC' desc: ( ) . "bash -c" . CSV hledger CSV RFC 4180 SSV TSV ( RFC 4180 - ) . : o . . ( 'A','B' .) o . ( "A", "B" .) o . ( A"A, B .) CSV/SSV/TSV hledger . sed CSV csv python . hledger CSV ( ) CSV/SSV/TSV .csv .ssv .tsv . ( .) <<>> csv: ssv: tsv: CSV ( ) : $ hledger -f ssv:foo.dat print separator . CSV CSV stdin hledger journal . : $ cat foo.dat | hledger -f ssv:- print CSV -f hledger CSV (rules) . --rules CSV . CSV hledger -f foo.csv.rules CMD. foo.csv source . hledger 1.30 CSV . CSV . CSV glob . source Checking1*.csv foo-checking.csv.rules : 1. CSV Foo 2. hledger import foo-checking.csv.rules (import) : CSV . Checking1-2.csv hledger (wildcard) * . CSV hledger - (balance assignments) . . : (balance assertions) CSV . CSV (pipe) hledger : $ hledger -f file.csv print | hledger -f- print CSV ( ) . import : () () (append) . (idempotent) CSV. ( .latest.FILE.csv .) CSV . : # download the latest CSV files, then run this command. # Note, no -f flags needed here. $ hledger import *.csv [--dry] CSV . ( .) hledger CSV . : o https://hledger.org/cookbook.html#setups-and-workflows o https://plaintextaccounting.org -> data import/conversion CSV if ( matchers) POSIX (\b \B \< \>) . ( Regular expressions .) CSV : o "foo" if %foo ^$ o (whitespace) if %foo ^ *$ o if %foo . o if %foo [^ ] . hledger amt:0 amt:>10 CSV . . CSV ( ). CSV (defensive and robust) . : o foo if %foo [1-9] o if %foo - o if ! %foo - o >= 10 if %foo [1-9][0-9]+\. ( ) o >= 10 < 20 if %foo \b1[0-9]\..SS : 1. CSV : a. : amountN N- . N . b. : . : # assume a withdrawal unless Type contains "deposit": amount1 -%Amount if %Type deposit amount1 %Amount 2. CSV ( Debit Credit In Out): a. : amountN-in amountN-out . hledger "out" N- . b. : hledger : # Negate the -out value, but only if it is not empty: fields date, description, amount1-in, amount1-out if %amount1-out [1-9] amount1-out -%amount1-out c. ( ): -in/-out / . 1 none. . : fields date, description, in, out if %in [1-9] amount1 %in if %out [1-9] amount1 %out 3. (cost) : amount ( amount-in amount-out) . 4. CSV : balanceN N- . balance balance1 . hledger ..SS (Amount signs) . ( COST amount1 AMT @ COST): o : : +AMT AMT o : : (AMT) -AMT o ( ): : --AMT -(AMT) AMT o ( ): . "+" "-" "()" "". ( CSV) . / (Setting currency/commodity) / () CSV : 2023-01-01,foo,$123.00 . : fields date,description,amount 2023-01-01 foo expenses:unknown $123.00 income:unknown $-123.00 CSV : 2023-01-01,foo,USD,123.00 currency ( ): fields date,description,currency,amount 2023-01-01 foo expenses:unknown USD123.00 income:unknown USD-123.00 . : fields date,description,cur,amt amount %amt %cur 2023-01-01 foo expenses:unknown 123.00 USD income:unknown -123.00 USD (cur) currency - ..SS CSV hledger -f foo.csv print hledger ( ) - commodity ( ). CSV CSV . CSV import hledger import foo.csv : import . - EUR - import : 1. EUR commodity 2. EUR 3. EUR CSV. (TLDR): import commodity . CSV hledger . CSV hledger amount1 %amount1 CSV hledger: # Name the third CSV field "amount1" fields date,description,amount1 # Set hledger's amount1 to the CSV amount1 field followed by USD amount1 %amount1 USD # Set comment to the CSV amount1 (not the amount1 assigned above) comment %amount1 amount1 CSV %amount1 "amount1" : fields date,description,csvamount amount1 %csvamount USD # Can't interpolate amount1 here comment %amount1 hledger . comment B "something" C A : comment A comment B if something comment C CSV CSV . CSV : 1. (included) ( ) . 2. (date-format fields newest-first skip ) . " " . skip/end . 3. CSV . ASCII encoding (locale) . 4. skip end . skip [N] N CSV end CSV ( ). 5. CSV . CSV : o skip/end if skip end . CSV . ... o CSV ( ). o hledger (date description account1 ): 1. ( fields ) if . . 2. ( ) %CSVFIELD . o hledger hledger ( ). CSV hledger . hledger ..SS : o CSV common.rules include common.rules CSV. o if if . CSV Bank of Ireland CSV (Debit Credit) (Balance) (balance assertions) : Date,Details,Debit,Credit,Balance 07/12/2012,LODGMENT 529898,,10.0,131.21 07/12/2012,PAYMENT,5,,126 # bankofireland-checking.csv.rules # skip the header line skip # name the csv fields, and assign some of them as journal entry fields fields date, description, amount-out, amount-in, balance # We generate balance assertions by assigning to "balance" # above, but you may sometimes need to remove these because: # # - the CSV balance differs from the true balance, # by up to 0.0000000000005 in my experience # # - it is sometimes calculated based on non-chronological ordering, # eg when multiple transactions clear on the same day # date is in UK/Ireland format date-format %d/%m/%Y # set the currency currency EUR # set the base account for all txns account1 assets:bank:boi:checking $ hledger -f bankofireland-checking.csv print 2012-12-07 LODGMENT 529898 assets:bank:boi:checking EUR10.0 = EUR131.2 income:unknown EUR-10.0 2012-12-07 PAYMENT assets:bank:boi:checking EUR-5.0 = EUR126.0 expenses:unknown EUR5.0 CSV journal . Coinbase CSV Coinbase. (spot price) (cost notation) . amount ( posting ) . # Timestamp,Transaction Type,Asset,Quantity Transacted,Spot Price Currency,Spot Price at Transaction,Subtotal,Total (inclusive of fees and/or spread),Fees and/or Spread,Notes # 2021-12-30T06:57:59Z,Receive,USDC,100,GBP,0.740000,"","","","Received 100.00 USDC from an external account" # coinbase.csv.rules skip 1 fields Timestamp,Transaction_Type,Asset,Quantity_Transacted,Spot_Price_Currency,Spot_Price_at_Transaction,Subtotal,Total,Fees_Spread,Notes date %Timestamp date-format %Y-%m-%dT%T%Z description %Notes account1 assets:coinbase:cc amount %Quantity_Transacted %Asset @ %Spot_Price_at_Transaction %Spot_Price_Currency $ hledger print -f coinbase.csv 2021-12-30 Received 100.00 USDC from an external account assets:coinbase:cc 100 USDC @ 0.740000 GBP income:unknown -74.000000 GBP amazon.com if (posting) . ( .) "Date","Type","To/From","Name","Status","Amount","Fees","Transaction ID" "Jul 29, 2012","Payment","To","Foo.","Completed","$20.00","$0.00","16000000000000DGLNJPI1P9B8DKPVHL" "Jul 30, 2012","Payment","To","Adapteva, Inc.","Completed","$25.00","$1.00","17LA58JSKRD4HDGLNJPI1P9B8DKPVHL" # amazon-orders.csv.rules # skip 1 # csv . # hledger "status" "amount" . fields date, _, toorfrom, name, amzstatus, amzamount, fees, code # date-format %b %-d, %Y # description description %toorfrom %name # (tag) comment status:%amzstatus # account1 assets:amazon # amount1 () . # amzamount # account2 account2 expenses:misc amount2 %amzamount # : #include categorisation.rules # . if %fees [1-9] account3 expenses:fees amount3 %fees $ hledger -f amazon-orders.csv print 2012-07-29 (16000000000000DGLNJPI1P9B8DKPVHL) To Foo. ; status:Completed assets:amazon expenses:misc $20.00 2012-07-30 (17LA58JSKRD4HDGLNJPI1P9B8DKPVHL) To Adapteva, Inc. ; status:Completed assets:amazon expenses:misc $25.00 expenses:fees $1.00 Paypal CSV () Paypal Paypal : "Date","Time","TimeZone","Name","Type","Status","Currency","Gross","Fee","Net","From Email Address","To Email Address","Transaction ID","Item Title","Item ID","Reference Txn ID","Receipt ID","Balance","Note" "10/01/2019","03:46:20","PDT","Calm Radio","Subscription Payment","Completed","USD","-6.99","0.00","-6.99","simon@joyful.com","memberships@calmradio.com","60P57143A8206782E","MONTHLY - $1 for the first 2 Months: Me - Order 99309. Item total: $1.00 USD first 2 months, then $6.99 / Month","","I-R8YLY094FJYR","","-6.99","" "10/01/2019","03:46:20","PDT","","Bank Deposit to PP Account ","Pending","USD","6.99","0.00","6.99","","simon@joyful.com","0TU1544T080463733","","","60P57143A8206782E","","0.00","" "10/01/2019","08:57:01","PDT","Patreon","PreApproved Payment Bill User Payment","Completed","USD","-7.00","0.00","-7.00","simon@joyful.com","support@patreon.com","2722394R5F586712G","Patreon* Membership","","B-0PG93074E7M86381M","","-7.00","" "10/01/2019","08:57:01","PDT","","Bank Deposit to PP Account ","Pending","USD","7.00","0.00","7.00","","simon@joyful.com","71854087RG994194F","Patreon* Membership","","2722394R5F586712G","","0.00","" "10/19/2019","03:02:12","PDT","Wikimedia Foundation, Inc.","Subscription Payment","Completed","USD","-2.00","0.00","-2.00","simon@joyful.com","tle@wikimedia.org","K9U43044RY432050M","Monthly donation to the Wikimedia Foundation","","I-R5C3YUS3285L","","-2.00","" "10/19/2019","03:02:12","PDT","","Bank Deposit to PP Account ","Pending","USD","2.00","0.00","2.00","","simon@joyful.com","3XJ107139A851061F","","","K9U43044RY432050M","","0.00","" "10/22/2019","05:07:06","PDT","Noble Benefactor","Subscription Payment","Completed","USD","10.00","-0.59","9.41","noble@bene.fac.tor","simon@joyful.com","6L8L1662YP1334033","Joyful Systems","","I-KC9VBGY2GWDB","","9.41","" # paypal-custom.csv.rules # : # Activity -> Statements -> Custom -> Activity download # : "Balance affecting" # Paypal : # "Date","Time","TimeZone","Name","Type","Status","Currency","Gross","Fee","Net","From Email Address","To Email Address","Transaction ID","Shipping Address","Address Status","Item Title","Item ID","Shipping and Handling Amount","Insurance Amount","Sales Tax","Option 1 Name","Option 1 Value","Option 2 Name","Option 2 Value","Reference Txn ID","Invoice Number","Custom Number","Quantity","Receipt ID","Balance","Address Line 1","Address Line 2/District/Neighborhood","Town/City","State/Province/Region/County/Territory/Prefecture/Republic","Zip/Postal Code","Country","Contact Phone Number","Subject","Note","Country Code","Balance Impact" # "Customize report fields" : # "Date","Time","TimeZone","Name","Type","Status","Currency","Gross","Fee","Net","From Email Address","To Email Address","Transaction ID","Item Title","Item ID","Reference Txn ID","Receipt ID","Balance","Note" fields date, time, timezone, description_, type, status_, currency, grossamount, feeamount, netamount, fromemail, toemail, code, itemtitle, itemid, referencetxnid, receiptid, balance, note skip 1 date-format %-m/%-d/%Y # paypal if In Progress Temporary Hold Update to skip # description description %description_ %itemtitle # (tag) comment itemid:%itemid, fromemail:%fromemail, toemail:%toemail, time:%time, type:%type, status:%status_ # if %currency USD currency $ if %currency EUR currency E if %currency GBP currency P # (postings) # paypal # ( ) account1 assets:online:paypal amount1 %netamount # # (account2 ) amount2 -%grossamount # paypal . if %feeamount [1-9] account3 expenses:banking:paypal amount3 -%feeamount comment3 business: # # : # ( ) if %grossamount ^[^-] account2 income:unknown # ( ) if %grossamount ^- account2 expenses:unknown # account2 include common.rules # csv # / . Pending # . if Bank Account Bank Deposit to PP Account description %type for %referencetxnid %itemtitle account2 assets:bank:wf:pchecking account1 assets:online:paypal # if Currency Conversion account2 equity:currency conversion # common.rules if darcs noble benefactor account2 revenues:foss donations:darcshub comment2 business: if Calm Radio account2 expenses:online:apps if electronic frontier foundation Patreon wikimedia Advent of Code account2 expenses:dues if Google account2 expenses:online:apps description google | music $ hledger -f paypal-custom.csv print 2019-10-01 (60P57143A8206782E) Calm Radio MONTHLY - $1 for the first 2 Months: Me - Order 99309. Item total: $1.00 USD first 2 months, then $6.99 / Month ; itemid:, fromemail:simon@joyful.com, toemail:memberships@calmradio.com, time:03:46:20, type:Subscription Payment, status:Completed assets:online:paypal $-6.99 = $-6.99 expenses:online:apps $6.99 2019-10-01 (0TU1544T080463733) Bank Deposit to PP Account for 60P57143A8206782E ; itemid:, fromemail:, toemail:simon@joyful.com, time:03:46:20, type:Bank Deposit to PP Account, status:Pending assets:online:paypal $6.99 = $0.00 assets:bank:wf:pchecking $-6.99 2019-10-01 (2722394R5F586712G) Patreon Patreon* Membership ; itemid:, fromemail:simon@joyful.com, toemail:support@patreon.com, time:08:57:01, type:PreApproved Payment Bill User Payment, status:Completed assets:online:paypal $-7.00 = $-7.00 expenses:dues $7.00 2019-10-01 (71854087RG994194F) Bank Deposit to PP Account for 2722394R5F586712G Patreon* Membership ; itemid:, fromemail:, toemail:simon@joyful.com, time:08:57:01, type:Bank Deposit to PP Account, status:Pending assets:online:paypal $7.00 = $0.00 assets:bank:wf:pchecking $-7.00 2019-10-19 (K9U43044RY432050M) Wikimedia Foundation, Inc. Monthly donation to the Wikimedia Foundation ; itemid:, fromemail:simon@joyful.com, toemail:tle@wikimedia.org, time:03:02:12, type:Subscription Payment, status:Completed assets:online:paypal $-2.00 = $-2.00 expenses:dues $2.00 expenses:banking:paypal ; business: 2019-10-19 (3XJ107139A851061F) Bank Deposit to PP Account for K9U43044RY432050M ; itemid:, fromemail:, toemail:simon@joyful.com, time:03:02:12, type:Bank Deposit to PP Account, status:Pending assets:online:paypal $2.00 = $0.00 assets:bank:wf:pchecking $-2.00 2019-10-22 (6L8L1662YP1334033) Noble Benefactor Joyful Systems ; itemid:, fromemail:noble@bene.fac.tor, toemail:simon@joyful.com, time:05:07:06, type:Subscription Payment, status:Completed assets:online:paypal $9.41 = $9.41 revenues:foss donations:darcshub $-10.00 ; business: expenses:banking:paypal $0.59 ; business: (Timeclock) hledger timeclock.el . Ledger timeclock hledger / timeclock.el . timeclock hledger 1.43 1.50 . hledger 1.43 --old-timeclock . timeclock hledger 1.50+ : # Comment lines like these, and blank lines, are ignored: # comment line ; comment line * comment line # Lines beginning with b, h, or capital O are also ignored, for compatibility: b SIMPLEDATE HH:MM[:SS][+-ZZZZ][ TEXT] h SIMPLEDATE HH:MM[:SS][+-ZZZZ][ TEXT] O SIMPLEDATE HH:MM[:SS][+-ZZZZ][ TEXT] # Lines beginning with i or o are are clock-in / clock-out entries: i SIMPLEDATE HH:MM[:SS][+-ZZZZ] ACCOUNT[ DESCRIPTION][;COMMENT]] o SIMPLEDATE HH:MM[:SS][+-ZZZZ][ ACCOUNT][;COMMENT] hledger (YYYY-MM-DD ). . . + - . (i) . . ; . ( (journal) .) (o) . "" - (session) . : i 2015/03/30 09:00:00 session1 o 2015/03/30 10:00:00 $ hledger -f a.timeclock print 2015-03-30 * 09:00-10:00 (session1) 1.00h / . . . . . : i 2015/03/30 09:00:00 some account optional description after 2 spaces ; optional comment, tags: o 2015/03/30 09:20:00 i 2015/03/31 22:21:45 another:account o 2015/04/01 02:00:34 i 2015/04/02 12:00:00 another:account ; this demonstrates multple sessions being clocked in i 2015/04/02 13:00:00 some account o 2015/04/02 14:00:00 o 2015/04/02 15:00:00 another:account : $ hledger -f t.timeclock print 2015-03-30 * optional description after 2 spaces ; optional comment, tags: (some account) 0.33h 2015-03-31 * 22:21-23:59 (another:account) 1.64h 2015-04-01 * 00:00-02:00 (another:account) 2.01h 2015-04-02 * 12:00-15:00 ; this demonstrates multiple sessions being clocked in (another:account) 3.00h 2015-04-02 * 13:00-14:00 (some account) 1.00h sample.timeclock : $ hledger -f sample.timeclock balance # current time balances $ hledger -f sample.timeclock register -p 2009/3 # sessions in march 2009 $ hledger -f sample.timeclock register -p weekly --depth 1 --empty # time summary by week : o : alias ti='echo i `date "+%Y-%m-%d %H:%M:%S"` $* >>$TIMELOG' alias to='echo o `date "+%Y-%m-%d %H:%M:%S"` >>$TIMELOG' o timeclock.el Emacs timeclock-x.el ledgerutils.el o ti to ledger 2.x . "timeclock" ledger 2 . timedot hledger . timeclock ( ). : 2023-05-01 hom:errands .... .... ; two hours; the space is ignored fos:hledger:timedot .. ; half an hour per:admin:finance ; no time spent yet hledger () "0.25" . . $ hledger -f a.timedot print # .timedot file extension (or timedot: prefix) is required 2023-05-01 * (hom:errands) 2.00 ; two hours (fos:hledger:timedot) 0.50 ; half an hour (per:admin:finance) 0 timedot ( ). (Y-M-D Y/M/D Y.M.D) / . : o - hledger . o - ( journal). o timedot : o ( ) o s m h d w mo y ( ) 60s = 1m 60m = 1h 24h = 1d 7d = 1w 30d = 1mo 365d = 1y . o ( ) 0.25 . "timedot" . . o 1.32 . t: ( "type") . --pivot t . o ( hledger). : o # ; . o . ( register hledger -E ). o * ( org) . Emacs org mode ( * ) . org (org outline) . timedot journal (directives) . journal ( time.journal) timedot (include time.timedot)..SS Timedot : 2016/2/3 inc:client1 4 fos:hledger 3h biz:research 60m : # on this day, 6h was spent on client work, 1.5h on haskell FOSS work, etc. 2016/2/1 inc:client1 .... .... .... .... .... .... fos:haskell .... .. biz:research . 2016/2/2 inc:client1 .... .... biz:research . $ hledger -f a.timedot print date:2016/2/2 2016-02-02 * (inc:client1) 2.00 2016-02-02 * (biz:research) 0.25 $ hledger -f a.timedot bal --daily --tree Balance changes in 2016-02-01-2016-02-03: || 2016-02-01d 2016-02-02d 2016-02-03d ============++======================================== biz || 0.25 0.25 1.00 research || 0.25 0.25 1.00 fos || 1.50 0 3.00 haskell || 1.50 0 0 hledger || 0 0 3.00 inc || 6.00 2.00 4.00 client1 || 6.00 2.00 4.00 ------------++---------------------------------------- || 7.75 2.25 8.00 : # Activity types: # c cleanup/catchup/repair # e enhancement # s support # l learning/research 2023-11-01 work:adm ccecces $ hledger -f a.timedot print 2023-11-01 (work:adm) 1 ; t:c (work:adm) 0.5 ; t:e (work:adm) 0.25 ; t:s $ hledger -f a.timedot bal 1.75 work:adm -------------------- 1.75 $ hledger -f a.timedot bal --pivot t 1.00 c 0.50 e 0.25 s -------------------- 1.75 Org: * 2023 Work Diary ** Q1 *** 2023-02-29 **** DONE 0700 yoga **** UNPLANNED **** BEGUN hom:chores cleaning ... water plants outdoor - one full watering can indoor - light watering **** TODO adm:planning: trip *** LATER . : 2016/2/4 fos.hledger.timedot 4h fos.ledger .. $ hledger -f a.timedot --alias '/\./=:' bal -t 4.50 fos 4.00 hledger:timedot 0.50 ledger -------------------- 4.50 (Time periods) (Report start & end date) hledger journal . posting posting . . / -b/--begin -e/--end -p/--period date: . (smart date) . (exclusive ) . () . date: . : -b 2016/3/17 -e 12/1 -p 'this month' -p thismonth -b 2023 date:2023.. date:2023- -b 2024 -e 2025 -p '2000 to 2030' date:2020-01 date:2020 : ( -p -b -e) (Smart dates) hledger ( journal) "smart date" . . . . : 2004-01-01 2004/10/1 2004.9.1 20240504 2024Q1 : . - - - / . . q - . 2004-10 2004q3 q3 2004 10/1 oct october 21 yesterday, today, tomorrow -1 0 1 last/this/next day/week/month/quarter/year -1 0 1 last/this/next tuesday last/this/next february in n days/weeks/months/quarters/years n n days/weeks/months/quarters/years ahead n n days/weeks/months/quarters/years ago -n 20181201 YYYYMMDD 201812 YYYYMM : o 20181301 (YYYYMMDD ) o 20181232 (YYYYMMDD ) o 201801012 ( YYYYMMDD ) (today) . --today . ( --today .).SS register balance activity . : o -D/--daily o -W/--weekly o -M/--monthly o -Q/--quarterly o -Y/--yearly -p/--period . hledger . ( .) : o hledger register ( ) . o hledger register --monthly . o hledger register --monthly --begin 1/5 [1]. ( ) . . : o hledger register . o hledger register --monthly . o hledger register --monthly --end 2/14 ( ). o hledger register --monthly --begin 1/5 --end 2/14 [1]. [1] hledger 1.29 . hledger "STARTDATE..ENDDATE" . ( ) . ( .) : . ( -b 2024 1/1 2024-04 202404 Apr .) (Monday) . ( -b '3 weeks ago'.) -p/--period / . ( ): -p "from 2009/1/1 to 2009/4/1" "from" "to" . "to" ".." "-" . . : -p "2009/1/1 2009/4/1" -p2009/1/1to2009/4/1 -p2009/1/1..2009/4/1 (smart dates) : -p "1/1 4/1" -p "jan-apr" -p "this year to 4/1" : -p "from 2009/1/1" -p "since 2009/1" since -p "from 2009" -p "to 2009" : -p "2009" "2009/1/1 to 2010/1/1" -p "2009/1" "2009/1/1 to 2009/2/1" -p "2009/1/1" "2009/1/1 to 2009/1/2" "Q" ( ):.PP -p "2009Q1" "2009/1/1 to 2009/4/1" -p "q4" (Period expressions with a report interval) in / ( ) : -p "weekly from 2009/1/1 to 2009/4/1" -p "monthly in 2008" -p "quarterly" (More complex report intervals) : o biweekly ( ) o fortnightly o bimonthly ( ) o every day|week|month|quarter|year o every N days|weeks|months|quarters|years : o every Nth day of week ( th nd rd st ) o every WEEKDAYNAME ( ) : o every Nth day [of month] (31st day ) o every Nth WEEKDAYNAME [of month] : o every MM/DD [of year] ( ) o every MONTHNAME DDth [of year] ( ) o every DDth MONTHNAME [of year] ( ) : -p "bimonthly from 2008" -p "every 2 weeks" -p "every 5 months from 2009/03" -p "every 2nd day of week" -p "every Tue" -p "every 15th day" -p "every 2nd Monday" -p "every 11/05" -p "every 5th November" -p "every Nov 5th" (N ): $ hledger balance -H -p "every 16th day" (N () () ): $ hledger register checking -p "every 3rd day of week" : o every WEEKDAYNAME,WEEKDAYNAME,... ( ) weekday weekendday mon,tue,wed,thu,fri sat,sun . --forecast . -p . (: #1632) : -p "every Mon Wed Fri mon,wed,fri" Mon-Tue Wed-Thu Fri-Sun -p "every weekday" Mon Tue Wed Thu Fri Mon Tue Wed Thu Fri-Sun -p "every Sat Sun weekendday" Sat Sun-Fri (DEPTH) --depth NUM ( : -NUM) . . depth: . : depth:2 --depth=2 -2. NUM REGEX=NUM ( 1.41). --depth assets=2 ( depth:assets=2) "assets" () . assets:bank:savings assets:bank liabilities:bank:credit card . REGEX . : --depth 'credit card=2' . ( .) . () . : o --depth assets=3 --depth expenses=2 --depth 1 "assets" "expenses" . o --depth assets=1 --depth savings=2 assets:bank:savings ( "savings" "assets" ). --depth REGEX=NUM REGEX ..SH " (QUERIES)" hledger . hledger : o . : dining groceries car:fuel o : 'personal care' o (regular expressions) ( "Regular expressions" ): '^expenses\b' 'food$' 'fuel|repair' 'accounts (payable|receivable)' o : date:202312- status: desc:amazon cur:USD cur:\\$ amt:'>0' acct:groceries ( acct: ) o not: : not:status:'*' not:desc:'opening|closing' not:cur:USD o : hledger print date:2022 desc:amazon desc:amzn ( 2022 "amazon" "amzn" ). o (boolean). : hledger print expr:'date:2022 and (desc:amazon or desc:amzn) and not date:202210' hledger . ( << : >> (PART 4: COMMANDS) ) : o (print aregister close import descriptions...) ( ) . o (register balance balancesheet incomestatement accounts...) (postings) . . o . ( aregister .).SS (Query types) : acct: acct:REGEX REGEX ( ) . "acct:" . amt: amt:N, amt:'N', amt:'>=N' N . ( .) / amt: . : N + - ( ) . . amt: . code: code:REGEX ( ). cur: cur:REGEX / REGEX . ( hledger. .*REGEX.* .) \ (escape) . . : cur:\\$ cur:'\$' desc: desc:REGEX . date: date:PERIODEXPR ( --date2 ) . PERIODEXPR . : date:2016 date:thismonth date:2/1-2/15 date:2021-07-27..nextquarter. PERIODEXPR ( 1.52). . ( hledger-ui hledger-web) . date2: date2:PERIODEXPR : . --date2 . PERIODEXPR ..SS depth: depth:[REGEXP=]N ( ) . Depth . note: note:REGEX ( | | ). payee: payee:REGEX / ( | | ). real: real:, real:0 (postings) . status: status:, status:!, status:* . type: type:TYPECODES ( Declaring accounts > Account types ). TYPECODES ALERXCVG . type:A type:E type:R C ( - Cash) V ( - Conversion) G ( - Gain) . (alias) Rewriting accounts > Aliases and account types . tag: tag:NAMEREGEX[=VALREGEX] . : o . ^ $ . : tag:'^fullname$' tag:'^fullname$=^fullvalue$ o tag:.=VALREGEX . o . o . o . not: not:QUERY not: . : not:equity not:desc:apple ( : not:not:... .).SS : o AND o AND o AND o . print : o AND o AND o AND o . "" expr: . NOT AND OR ( ) . cash expenses : hledger print expr:'cash AND expenses' hledger print cash AND expenses . "cash" "and" "expenses" . . cash expenses : hledger print expr:'cash expenses' hledger print cash expenses date: : OR . : expr: any: all: print . expr: expr:'QUERYEXPR' expr:'date:lastmonth AND NOT (food OR rent)' : " food rent ". expr: print acct: amt: . hledger print expr:'cash and amt:>0' : " ( cash) ( )". any: any:'QUERYEXPR' expr: print QUERYEXPR . hledger print any:'cash and amt:>0' : " cash "..SS all: all:'QUERYEXPR' expr: print (postings) QUERYEXPR ( ). hledger print all:'cash and amt:0' : " (cash) ". hledger print all:'cash or checking' " (cash) / (checking) ". : depth:2 --depth 2 date:2023 -p 2023 . . --alias alias acct: . / cur: amt: . ( hledger 1.22 #1625.) (PIVOTING) hledger () . --pivot PIVOTEXPR ( ) . PIVOTEXPR : o ( ): status code desc payee note acct comm/cur amt cost o (tag) o (colon-separated). : o PIVOTEXPR . o . o / "comm"/"cur" "" . "" . ( .) : 2016/02/16 Yearly Dues Payment assets:bank account 2 EUR income:dues -2 EUR ; member: John Doe, kind: Lifetime : $ hledger balance 2 EUR assets:bank account -2 EUR income:dues -------------------- 0 member: : $ hledger balance --pivot member 2 EUR -2 EUR John Doe -------------------- 0 member: ( ): $ hledger balance --pivot member tag:member=. -2 EUR John Doe -------------------- -2 EUR ( acct: " " ): $ hledger balance --pivot member acct:. -2 EUR John Doe -------------------- -2 EUR : $ hledger balance Income:Dues --pivot kind:member -2 EUR Lifetime:John Doe -------------------- -2 EUR hledger . : o . o --infer-equity (conversion equity postings) @/@@ . o --infer-costs . o --infer-market-prices P . o --auto . o --forecast . o balance --budget . o close rewrite hledger-interest . o CSV CSV ... . . hledger print (journal) . . hledger print -x --verbose-tags . -x/--explicit --verbose-tags generated-transaction ( ) generated-posting modified ( ) . ( _) tag:generated tag:modified . (Forecasting) . hledger . future.journal -f . --forecast : --forecast hledger " " . . . ( ) . ( .) " " . --forecast - - --forecast=..2099 --forecast=2023-02-15... = . (Inspecting forecast transactions) print . : ~ monthly from 2022-12-20 rent assets:bank:checking expenses:rent $1000 $ hledger print --forecast --today=2023/4/21 2023-05-20 rent ; generated-transaction: ~ monthly from 2022-12-20 assets:bank:checking expenses:rent $1000 2023-06-20 rent ; generated-transaction: ~ monthly from 2022-12-20 assets:bank:checking expenses:rent $1000 2023-07-20 rent ; generated-transaction: ~ monthly from 2022-12-20 assets:bank:checking expenses:rent $1000 2023-08-20 rent ; generated-transaction: ~ monthly from 2022-12-20 assets:bank:checking expenses:rent $1000 2023-09-20 rent ; generated-transaction: ~ monthly from 2022-12-20 assets:bank:checking expenses:rent $1000 . ( --today .).SS " (Forecast reports)" . : $ hledger areg rent --forecast --today=2023/4/21 Transactions in expenses:rent and subaccounts: 2023-05-20 rent as:ba:checking $1000 $1000 2023-06-20 rent as:ba:checking $1000 $2000 2023-07-20 rent as:ba:checking $1000 $3000 2023-08-20 rent as:ba:checking $1000 $4000 2023-09-20 rent as:ba:checking $1000 $5000 $ hledger bal -M expenses --forecast --today=2023/4/21 Balance changes in 2023-05-01..2023-09-30: || May Jun Jul Aug Sep ===============++=================================== expenses:rent || $1000 $1000 $1000 $1000 $1000 ---------------++----------------------------------- || $1000 $1000 $1000 $1000 $1000 (Forecast tags) --forecast _generated-transaction . tag:_generated-transaction ( tag:generated) . --verbose-tags . generated-transaction print . . (Forecast period, in detail) . ( ) : : o o o --forecast o ( ): o -b/-p/date: o (journal) o ( ): . : o o o --forecast o : -e/-p/date: o : (~ ) . (Forecast troubleshooting) --forecast : o --forecast . o . o print --forecast . o / . o . o . o / -b -e -p date: . o -E / . o / --forecast=START..END . o << >> . o : --debug=2 ..SH --budget balance . balance . : hledger bal -M --budget --forecast ... : (Budgeting and Forecasting). (commodity) hledger ( ) . : D (journal) . commodity . commodity . : # Set display styles (and decimal marks, for parsing, if there is no decimal-mark directive) # for the $, EUR, INR and no-symbol commodities: commodity $1,000.00 commodity EUR 1.000,00 commodity INR 9,99,99,999.00 commodity 1 000 000.9455 commodity hledger ( ). : o o o . (fallback) $1000.00 ( ). -c/--commodity-style . . print print ( ) . hledger (banker's rounding ) . 0.5 "0" . print ( Decimal marks ). : commodity $1,000.00 2023-01-02 (a) $1000 $ hledger print 2023-01-02 (a) $1,000. ( Ledger) -c/--commodity ( ) : $ hledger print -c '$1000.00' 2023-01-02 (a) $1000 print --round: $ hledger print -c '$1,000.00' --round=soft 2023-01-02 (a) $1,000.00 hledger : . " hledger" - hledger ( ) o : print import close rewrite . o . o . o ( hledger ledger2beancount Ledger..). . " " - o . o (commodity) . o . o ( ). . " " - o csv tsv json sql . o . o ( -c/--commodity-style ). (Cost reporting) - - . (cost ) (selling price ) . ( hledger "cost" .) -B/--cost hledger " " (at cost) . (Recording costs) . hledger Cookbook > Cost notation . @ UNITCOST @@ TOTALCOST Journal > Costs : 2022-01-01 assets:dollars $-135 assets:euros EUR100 @ $1.35 ; $1.35 per euro (unit cost) 2022-01-01 assets:dollars $-135 assets:euros EUR100 @@ $135 ; $135 total cost ( ) . hledger (balanced) : 2022-01-01 assets:dollars $-135 assets:euros EUR100 hledger @@ EUR100 ( hledger print -x ). : o . EUR100 EUR10 hledger . o (postings) - . o . . -s ( strict) hledger check balanced ..SS (Reporting at cost) -B/--cost ("B" -B/--basis/--cost Ledger ) ( ) . " " " " . : o . . o ( ) . (Equity conversion postings) - (DEB) "" . hledger bse . hledger ! . (DEB) (equity posting) . hledger : 2022-01-01 assets:dollars $-135 assets:euros EUR100 equity:conversion $135 equity:conversion EUR-100 DEB hledger bse . hledger - --infer-costs : $ hledger print --infer-costs 2022-01-01 one hundred euros purchased at $1.35 each assets:dollars $-135 @@ EUR100 assets:euros EUR100 equity:conversion $135 equity:conversion EUR-100 $ hledger bal --infer-costs -B EUR-100 assets:dollars EUR100 assets:euros -------------------- 0 : o . o -B -B --infer-costs . o --infer-costs hledger equity:conversion . . . (Inferring equity conversion postings) @/@@ --infer-equity hledger . : 2022-01-01 assets:dollars -$135 assets:euros EUR100 @ $1.35 $ hledger print --infer-equity 2022-01-01 assets:dollars $-135 assets:euros EUR100 @ $1.35 equity:conversion:$-EUR:EUR EUR-100 equity:conversion:$-EUR:$ $135.00 "equity:conversion:A-B:A" "equity:conversion:A-B:B" A . "equity:conversion" V/Conversion . check accounts check --strict . ( .).SS @/@@ (equity) . - : 2022-01-01 one hundred euros purchased at $1.35 each assets:dollars $-135 equity:conversion $135 equity:conversion EUR-100 assets:euros EUR100 @ $1.35 () : $ hledger print -x --infer-costs --infer-equity : o . hledger equity . o add (#2056). o . --infer-costs ( --infer-equity ). : o (non-equity) (commodities) . : . o equity equity . ( ) . equity : o V/Conversion o equity:conversion equity:trade equity:trading . . --infer-costs ( ). . hledger "unbalanced transaction" ( ) . --infer-costs --infer-equity (alias): alias h="hledger --infer-equity --infer-costs" . (VALUE REPORTING) hledger << >> ("at market value") . --value=TYPE[,COMMODITY] . -V -X COMMODITY . P / --infer-market-prices ..SS -X: -X COMM ( --exchange=COMM) () ( ) . ( .) ( ) . ( .) COMM . . : o -XEUR o -X$ ( $ ) o -X CNY ( -X ) o -X 'red apples' o -X 'r&r' -V: () -V/--market -X COMM . () . -V -X MYCURRENCY . -X -V . . hledger ( ) . hledger "end" () . : o ( print register): o . o P . o . --value "then" "end" "now" "custom" . A B hledger ( ) : 1. : A B P ( --infer-market-prices) . 2. : B A. 3. : <<>> ("forward" ) A B . 4. : ( ) A B . hledger ( "gave up" --debug=2 ). . ..SS --infer-market-prices: hledger P . ( Ledger ) --infer-market-prices -V -X --value . hledger bs -V --infer-market-prices P . P . : . << >> (Value reporting) --debug --debug=2 . --infer-market-prices : o (@/@@) o ( @ ). ( . hledger print -x .) o (equity postings) --infer-costs . () : --infer-market-prices P . (--debug=2 ). : o -X EUR --infer-market-prices -V --infer-market-prices o --value=then,EUR --infer-market-prices --value=then --infer-market-prices . hledger 1.25 . ( # .) 2022-01-01 Positive Unit prices a A 1 b B -1 @ A 1 2022-01-01 Positive Total prices a A 1 b B -1 @@ A 1 2022-01-02 Negative unit prices a A 1 b B 1 @ A -1 2022-01-02 Negative total prices a A 1 b B 1 @@ A -1 2022-01-03 Double Negative unit prices a A -1 b B -1 @ A -1 2022-01-03 Double Negative total prices a A -1 b B -1 @@ A -1 ( ). B : $ hledger -f- --infer-market-prices prices P 2022-01-01 B A 1 P 2022-01-01 B A 1.0 P 2022-01-02 B A -1 P 2022-01-02 B A -1.0 P 2022-01-03 B A -1 P 2022-01-03 B A -1.0 (-X COMM --value TYPE,COMM): hledger COMM ( ). (-V --value TYPE): A hledger : 1. P A . 2. P A . ( .) 3. P ( ) --infer-market-prices : A . : o P -V . o P --infer-market-prices . . --value: -V -X --value : --value=TYPE[,COMM] TYPE is then, end, now or YYYY-MM-DD. COMM is an optional commodity symbol. Shows amounts converted to: - default valuation commodity (or COMM) using market prices at posting dates - default valuation commodity (or COMM) using market prices at period end(s) - default valuation commodity (or COMM) using current market prices - default valuation commodity (or COMM) using market prices at some date TYPE : --value=then (posting). --value=end ( ) . --value=now ( ). --value=YYYY-MM-DD . ,COMM : . : --value=now,EUR. hledger . -V : ; one euro is worth this many dollars from nov 1 P 2016/11/01 EUR $1.10 ; purchase some euros on nov 3 2016/11/3 assets:euros EUR100 assets:checking ; the euro is worth fewer dollars by dec 21 P 2016/12/21 EUR $1.03 $ hledger -f t.j bal -N euros EUR100 assets:euros $ hledger -f t.j bal -N euros -V -e 2016/11/4 $110.00 assets:euros 2016/12/21 ( ) $ hledger -f t.j bal -N euros -V $103.00 assets:euros --value print : P 2000-01-01 A 1 B P 2000-02-01 A 2 B P 2000-03-01 A 3 B P 2000-04-01 A 4 B 2000-01-01 (a) 1 A @ 5 B 2000-02-01 (a) 1 A @ 6 B 2000-03-01 (a) 1 A @ 7 B : $ hledger -f- print --cost 2000-01-01 (a) 5 B 2000-02-01 (a) 6 B 2000-03-01 (a) 7 B (2000-02-29): $ hledger -f- print --value=end date:2000/01-2000/03 2000-01-01 (a) 2 B 2000-02-01 (a) 2 B (2000-04-01): $ hledger -f- print --value=end 2000-01-01 (a) 3 B 2000-02-01 (a) 3 B 2000-03-01 (a) 3 B ( 2000-04-01 ): $ hledger -f- print --value=now 2000-01-01 (a) 4 B 2000-02-01 (a) 4 B 2000-03-01 (a) 4 B 2000/01/15: $ hledger -f- print --value=2000-01-15 2000-01-01 (a) 1 B 2000-02-01 (a) 1 B 2000-03-01 (a) 1 B : 1. : 1. (cur:) (amt:). 2. . 2. . 3. . 4. . : #1625 hledger' . . . : #329 #1083. : cost ( ) () () . value () . report start ( ) -b -p date: . report or journal start ( ) -b -p date: . report end ( ) -e -p date: . report or journal end ( ) -e -p date: . report interval ( ) (-D/-W/-M/-Q/-Y) ( ). -B, --cost -V, -X --value=then --value=end --value=DATE, --value=now ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- print DATE/ / register (-H) DATE/ (-H) DATE/ DATE/ DATE/ / / / / / / balance (bs, bse, cf, is) DATE/ (--budget) balance (bs, bse, cf, is) (-H) (bal, is, bs --change, cf --change) --value=end DATE/ (bal -H, is --H, bs, cf) --value=end DATE/ (--budget) / / / / (-T, -A) .TE --cumulative -H . " : (PART 4: COMMANDS)" hledger . hledger . . . . ( .) hledger CMD -h . o 2 commands - hledger () o 2 demo - hledger o 2 help - hledger info man (pager) o 2 repl - o 2 run - o 2 ui - ( ) hledger o 2 web - ( ) hledger o 2 add - o 2 import - CSV o 2 accounts - o 2 codes - o 2 commodities - / o 2 descriptions - o 2 files - o 2 notes - o 2 payees - o 2 prices - o 2 stats - o 2 tags - o 2 print - o 2 aregister (areg) - o 2 register (reg) - o 2 balancesheet (bs) - o 2 balancesheetequity (bse) - o 2 cashflow (cf) - o 2 incomestatement (is) - o 2 balance (bal) - ... o 2 roi - (ROI) o 2 activity - o 2 close - / o 2 rewrite - print --auto o 2 check - o 2 diff - o 2 setup - hledger o 2 test - (self tests) ..SH " (Help commands)" commands hledger. : --builtin demo hledger asciinema. : -s --speed=SPEED (1 0.5 2 (: 2)) . . : . -s/--speed SPEED -s4 4 -s.5 . 2x . : SPACE / . ( ) CTRL-c . : $ hledger demo # $ hledger demo 1 # (2x) $ hledger demo install -s4 # "install" 4x : . help hledger info man (pager). TOPIC ( ) . : -i info -m man -p $PAGER less ( TOPIC less ) hledger hledger . hledger . $PATH : info man $PAGER less more stdout. ( TOPIC $PAGER more .) -i -m -p info man . stdout . info TOPIC . info --version 6 'brew install texinfo'. man less TOPIC . : 'TOPIC.*'. $ hledger help -h # help $ hledger help # info man $PAGER $ hledger help 'time periods' # "Time periods" $ hledger help 'time periods' -m # man info repl (prompt) hledger . . Flags: no command-specific flags . hledger repl -- (REPL) . run ( / ) . run () repl . -f (override ). REPL ( add) . run : o 2 hledger hledger o 2 # o 2 o 2 REPL exit quit control-D . REPL : o 2 Emacs o 2 / control-P/control-N / o 2 control-R o 2 TAB . repl hledger . repl ( ) . commands help (CMD --tldr CMD -h/--help CMD --info CMD --man) . control-C ( REPL ). control-Z ( fg REPL ). " (EXAMPLES)" REPL : $ hledger repl Enter hledger commands. To exit, enter 'quit' or 'exit', or send EOF. % stats Main file : .../2025.journal ... % stats -f 2024/2024.journal Main file : .../2024.journal ... % stats Main file : .../2025.journal ... : $ hledger repl -f some.journal Enter hledger commands. To exit, enter 'quit' or 'exit', or send EOF. % bs ... % print -b 'last week' ... % bs -f other.journal ... hledger . . : . run : o 2 hledger run -- CMD1 -- CMD2 -- CMD3 - -- o 2 hledger run SCRIPTFILE1 SCRIPTFILE2 - o 2 cat SCRIPTFILE1 | hledger run - . run () LEDGER_FILE -f . . -f . ( ). ( ) . . ( ). : o 2 hledger hledger o 2 o 2 # () o 2 o 2 : echo TEXT exit quit . #!/usr/bin/env hledger run . #!/usr/bin/env -S hledger run . run . run hledger . run ( ) . " (EXAMPLES)" : hledger -f some.journal run -- balance assets --depth 2 -- balance liabilities -f /some/other.journal --depth 3 --transpose -- stats some.journal balance assets --depth 2 balance liabilities --depth 3 --transpose /some/other.journal stats some.journal . : (echo "files"; echo "stats") | hledger -f some.journal run : $ cat report #!/usr/bin/env -S hledger run -f some.journal echo "List of accounts in some.journal" accounts echo "Assets of some.journal" balance assets --depth 2 echo "Liabilities from /some/other.journal" balance liabilities -f /some/other.journal --depth 3 --transpose echo "Commands from another.script, applied to another.journal" run -f another.journal another.script $ chmod +x report $ ./report List of accounts in some.journal ... hledger-ui ( ) . web hledger-web ( ) . " (DATA ENTRY COMMANDS)" add (journal) . Flags: --no-new-accounts hledger CSV . add ( journal ) . . hledger ( import ). hledger add . . control-d control-c . : o 2 add ( ) ( ) . o 2 . o 2 Readline . o 2 tab - / (yesterday today tomorrow). . o 2 . o 2 . o 2 < . o 2 . : o 2 (commodity) D add . D . o 2 add journal timeclock timedot . o 2 hledger stackage Windows : ANSI (#2410). hledger haskeline >=0.8.4 add --color=no . : o 2 : 2 hledger add o 2 2024.journal 2023.journal : 2 hledger add --file 2024.journal --file 2023.journal o 2 : 2 hledger add today 'best buy' expenses:supplies '$20' https://hledger.org/add.html ..SS add hledger 1.43 AMOUNT = BALANCE . 100 = 500. hledger . add -I/--ignore-assertions . add hledger 1.51 = BALANCE ( == =* ) . . add (posting) . ( add .) -I . import . Flags: --catchup just mark all transactions as already imported --dry-run just show the transactions to be imported . hledger CSV/SSV/TSV . $LEDGER_FILE -f/--file . journal . : $ hledger import bank1-checking.csv bank1-savings.csv $ hledger import *.csv (dry run) --dry-run CSV . : $ hledger import bank.csv --dry-run journal hledger . : $ hledger import --dry-run bank.csv | hledger -f- -I print unknown : $ watchexec -- "hledger import --dry-run bank.csv | hledger -f- -I print unknown" ( ) : $ hledger import bank.csv CSV hledger import hledger -f bank.csv print >>$LEDGER_FILE . import . . CSV import . " " CSV . import CSV ( ) . CSV : "1." 3 ( ) "2." 3 "3." 3 "4." 3 ( .) ( ). : o 2 FILE : 2 "1." 3 hledger .latest.FILE . FILE YYYY-MM-DD . N . "2." 3 hledger FILE . N . o 2 FILE --dry-run hledger .latest.FILE FILE . : o 2 import --dry-run . o 2 hledger . o 2 hledger print -f FILE.csv . (journal) . / (Copy/paste) . o 2 . o 2 .latest import --catchup FILE . o 2 . . " (First import)" .latest . . hledger import --catchup . .latest CSV . ( ) .latest . foobank 2024-10-31 . foobank.csv .latest.foobank.csv : 2024-10-31 foobank : 2024-10-31 2024-10-31 2024-10-31 hledger import foobank.csv [--dry-run] ..SS import ( print -x). . import . CSV . ( .) CSV : print . (print --new import ): $ hledger print --new -f bank.csv >> $LEDGER_FILE ( import pull .) import commodity . : CSV > Amount decimal places. import CSV (hledger import bank.rules) archive . import ( source) (data/ ) . CSV . archive import glob source : . import " " import ( ): o 2 CSV . o 2 CSV () . . source CSV glob rules. . bank.csv . () bank (2).csv . glob source : source bank.csv source bank*.csv . hledger -f bank.rules CMD hledger import bank.rules (bank (2).csv) . bank.csv bank (2).csv . ( ). import . hledger import bank.rules; hledger import bank.rules bank.csv bank (2).csv ..SH " (Basic report commands)" accounts . : -u --used -d --declared --undeclared --unused --find ( ) --directives --locations --types -l --flat /: () -t --tree /: --drop=N : N - (-u/--used) account (-d/--declared) (--undeclared) (--unused) (--find ). . --directives . --undeclared hledger check accounts . --locations ( ) . --types . (: Declaring accounts > Account types.) . --tree . --drop N . depth:N --depth N -N . : $ hledger accounts assets:bank:checking assets:bank:saving assets:cash expenses:food expenses:supplies income:gifts income:salary liabilities:debts $ hledger accounts --undeclared --directives >> $LEDGER_FILE $ hledger check accounts codes . : . . . -E/--empty . . : 2022/1/1 (123) Supermarket Food $5.00 Checking 2022/1/2 (124) Post Office Postage $8.32 Checking 2022/1/3 Supermarket Food $11.23 Checking 2022/1/4 (126) Post Office Postage $3.21 Checking $ hledger codes 123 124 126 $ hledger codes -E 123 124 126 . : --used --declared --undeclared --unused --find ( regexp ) / - P commodity ( --find ). cur: . descriptions . : . . : $ hledger descriptions Store Name Gas Station | Petrol Person A files . REGEX ( ) . : notes . : . . | ( | ). : $ hledger notes Petrol Snacks payees / . : --used --declared --undeclared --unused --find ( regexp ) / - payee ( --find ). / | ( | ). . : $ hledger payees Store Name Gas Station Person A P. --infer-market-prices . --show-reverse . : --show-reverse . date: cur: amt: . --infer-market-prices --show-reverse . --debug=2 . stats . : -1 -v --verbose -o --output-file=FILE FILE. stats . . : o 2 o 2 o 2 o 2 . -v/--verbose : . -1 : . stats . : $ hledger stats -f examples/1ktxns-1kaccts.journal Main file : .../1ktxns-1kaccts.journal Included files : 0 Txns span : 2000-01-01 to 2002-09-27 (1000 days) Last txn : 2002-09-26 (7827 days ago) Txns : 1000 (1.0 per day) Txns last 30 days : 0 (0.0 per day) Txns last 7 days : 0 (0.0 per day) Payees/descriptions : 1000 Accounts : 1000 (depth 10) Commodities : 26 Market prices : 1000 Runtime stats : 0.12 s elapsed, 8266 txns/s, 4 MB live, 16 MB alloc $ hledger stats -1 -f examples/10ktxns-1kaccts.journal 1.50.99-g0835a2485-20251119, mac-aarch64 10ktxns-1kaccts.journal 0.66 s elapsed 15244 txns/s 28 MB live 86 MB alloc -o/--output-file ( -O/--output-format )..SS tags . Flags: --used --declared --undeclared --unused --find ( ) --values --parsed () - // tag ( --find ). : . . --values . -E/--empty / . --parsed . ( .) . " (Standard report commands)" print . Flags: -x --explicit --invert () --locations -m --match=DESC DESC --new --round=TYPE none - () soft - hard - ( ) all - ( ) --base-url=URLPREFIX html hledger-web . ( URL hledger-web .) -O --output-format=FMT . : txt, beancount, csv, tsv, html, fods, json, sql. -o --output-file=FILE FILE. . print () ( --date2 ) . . print . : $ hledger print -f examples/sample.journal date:200806 2008/06/01 gift assets:bank:checking $1 income:gifts $-1 2008/06/02 save assets:bank:saving $1 assets:bank:checking $-1 2008/06/03 * eat & shop expenses:food $1 expenses:supplies $1 assets:cash $-2 . . . -x/--explicit . . -B -V -X --value -x . -x/--explicit ( ) . print ( ledger-mode Emacs ). print ( ) . print . --round print ( 1.32) . --round : o 2 --round=none () o 2 --round=soft / ( ) o 2 --round=hard ( ) o 2 --round=all soft . hard all . . print print hledger hledger ("pipe") . ( ): # . # -f- stdin . -I/--ignore-assertions . $ hledger print assets:cash | hledger -f- -I reg expenses:food print : o 2 --round ( ) . o 2 (Account aliases) (pivoting) (balance assertions) (balance assignments) . o 2 (Value reporting) . o 2 (Auto postings) . o 2 --infer-costs --infer-equity . o 2 print ( ) ..SS " print (print, other features)" -B/--cost . --invert (posting) . . --new print . (deduplication) import . ( import .) -m DESC/--match=DESC print DESC . DESC . . --locations print (tag) . " print (print output format)" . txt beancount ( 1.32) csv tsv ( 1.32) json sql. beancount Beancount : o 2 (unmarked) (*) . o 2 (payee) (note) (escaped) . o 2 #tag Beancount . o 2 / (commodity) $ . o 2 - . Assets Liabilities Equity Income Expenses . ( --alias .) o 2 (directive) open . : o 2 (balance assertions) . o 2 (balance assignments) . o 2 (virtual) . o 2 (directives) . CSV print : $ hledger print -Ocsv "txnidx","date","date2","status","code","description","comment","account","amount","commodity","credit","debit","posting-status","posting-comment" "1","2008/01/01","","","","income","","assets:bank:checking","1","$","","1","","" "1","2008/01/01","","","","income","","income:salary","-1","$","1","","","" "2","2008/06/01","","","","gift","","assets:bank:checking","1","$","","1","","" "2","2008/06/01","","","","gift","","income:gifts","-1","$","1","","","" "3","2008/06/02","","","","save","","assets:bank:saving","1","$","","1","","" "3","2008/06/02","","","","save","","assets:bank:checking","-1","$","1","","","" "4","2008/06/03","","*","","eat & shop","","expenses:food","1","$","","1","","" "4","2008/06/03","","*","","eat & shop","","expenses:supplies","1","$","","1","","" "4","2008/06/03","","*","","eat & shop","","assets:cash","-2","$","2","","","" "5","2008/12/31","","*","","pay off","","liabilities:debts","1","$","","1","","" "5","2008/12/31","","*","","pay off","","assets:bank:checking","-1","$","1","","","" o 2 (posting) CSV . o 2 "txnidx" ( ) . ( .) o 2 "commodity" () "amount" ( ) . o 2 "credit" "debit" . ( credit debit .).SS aregister (areg) . : --txn-dates (posting date). : . --no-elide --cumulative : -H --historical : / ( ) () --invert --drop=N N --heading=YN : yes () no -w --width=N (: ). -wN,M . --align-all () -O --output-format=FMT . : txt html csv tsv json. -o --output-file=FILE FILE. . aregister ( ) . . ( --historical ). --cumulative . register ( ) <<>> . : o 2 aregister / o 2 register / . . ( ) . ( assets:personal checking assets:business checking hledger areg checking assets:business checking .) . aregister . . . : "checking" : $ hledger areg checking date:jul aregister : o 2 ( ) o 2 ( ) o 2 o 2 . -E/--empty . . ( ) --align-all . aregister . . --heading=no . . txt csv tsv ( 1.32) html fods ( 1.41) json..SS aregister (posting dates) aregister ( ) . (postings) . . aregister . ( ) . register -H . --txn-dates . . register (reg) . Flags: --cumulative : () -H --historical : / ( ) -A --average ( --empty ) -m --match=DESC DESC -r --related (siblings) --invert --drop=N N --sort=FIELDS : date desc account amount absamount . - . (: date) -w --width=N (: ). -wN,M . --align-all () --base-url=URLPREFIX html hledger-web . ( base url hledger-web .) -O --output-format=FMT . : txt csv tsv html fods json. -o --output-file=FILE FILE. . register . ( aregister .) register (multi-commodity) ( ). : $ hledger register checking 2008/01/01 income assets:bank:checking $1 $1 2008/06/01 gift assets:bank:checking $1 $2 2008/06/02 save assets:bank:checking $-1 $1 2008/12/31 pay off assets:bank:checking $-1 0 --date2 . . ( ) --align-all . --historical/-H . : $ hledger register checking -b 2008/6 --historical 2008/06/01 gift assets:bank:checking $1 $2 2008/06/02 save assets:bank:checking $-1 $1 2008/12/31 pay off assets:bank:checking $-1 0 --depth . --drop . --average/-A ( ). --empty ( ). --historical . . --related/-r . --invert . . checking : --sort=FIELDS account amount absamount date desc/description . --sort account,amount . - --sort -amount . $ hledger register --related --invert assets:checking register : $ hledger register --monthly income 2008/01 income:salary $-1 $-1 2008/06 income:gifts $-1 $-2 --empty/-E : $ hledger register --monthly income -E 2008/01 income:salary $-1 $-1 2008/02 0 $-1 2008/03 0 $-1 2008/04 0 $-1 2008/05 0 $-1 2008/06 income:gifts $-1 $-2 2008/07 0 $-2 2008/08 0 $-2 2008/09 0 $-2 2008/10 0 $-2 2008/11 0 $-2 2008/12 0 $-2 . --depth : $ hledger register --monthly assets --depth 1 2008/01 assets $1 $1 2008/06 assets $-1 0 2008/12 assets $-1 $-1 / . . --drop . $ hledger register --monthly income --drop 1 2008/01 salary $-1 $-1 2008/06 gifts $-1 $-2 -m DESC/--match=DESC register (fuzzy search) (posting) DESC . DESC . . register register ( ) . --width/-w . (description) (account) ( (width - 40)). --width : --width W,D . ( --help ): <--------------------------------- width (W) ----------------------------------> date (10) description (D) account (W-41-D) amount (12) balance (12) DDDDDDDDDD dddddddddddddddddddd aaaaaaaaaaaaaaaaaaa AAAAAAAAAAAA AAAAAAAAAAAA : $ hledger reg # ( ) $ hledger reg -w 100 # $ hledger reg -w 100,40 # . txt csv tsv ( 1.32) json. balancesheet (bs) (asset) (liability). . (Flags): --sum : () --valuechange : ( ) --gain : / ( ) --count : --change : ( ) --cumulative : ( -b/--begin) -H --historical : ( ) () -l --flat /: (). . -t --tree /: . . --drop=N N --declared ( -E) -A --average ( ) -T --row-total ( ) --summary-only ( ) ( ) -N --no-total --no-elide --format=FORMATSTR ( ) -S --sort-amount / -% --percent --layout=ARG : 'wide[,WIDTH]': 'tall' : 'bare' : --base-url=URLPREFIX html hledger-web . ( URL hledger-web .) -O --output-format=FMT . : txt html csv tsv json. -o --output-file=FILE FILE. . . ( balancesheetequity .) Asset Cash Liability ( ). asset liability ( ) . : $ hledger balancesheet Balance Sheet 2008-12-31 || 2008-12-31 ====================++============ Assets || --------------------++------------ assets:bank:saving || $1 assets:cash || $-2 --------------------++------------ || $-1 ====================++============ Liabilities || --------------------++------------ liabilities:debts || $-1 --------------------++------------ || $-1 ====================++============ Net: || 0 balance . hledger balance -H assets liabilities . . txt csv tsv ( 1.32) html json..SS balancesheetequity (bse) . . : --sum : () --valuechange : ( ) --gain : / ( ) --count : --change : ( ) --cumulative : ( -b/--begin) -H --historical : ( ) () -l --flat /: (). . -t --tree /: . . --drop=N N --declared ( -E) -A --average ( ) -T --row-total ( ) --summary-only ( ) ( ) -N --no-total --no-elide --format=FORMATSTR ( ) -S --sort-amount / -% --percent --layout=ARG : 'wide[,WIDTH]': 'tall' : 'bare' : --base-url=URLPREFIX html hledger-web . ( URL hledger-web .) -O --output-format=FMT . : txt, html, csv, tsv, json. -o --output-file=FILE FILE. . Asset Cash Liability Equity ( ). asset liability equity ( ) . : $ hledger balancesheetequity Balance Sheet With Equity 2008-12-31 || 2008-12-31 ====================++============ Assets || --------------------++------------ assets:bank:saving || $1 assets:cash || $-2 --------------------++------------ || $-1 ====================++============ Liabilities || --------------------++------------ liabilities:debts || $-1 --------------------++------------ || $-1 ====================++============ Equity || --------------------++------------ --------------------++------------ || 0 ====================++============ Net: || 0 balance . hledger balance -H assets liabilities equity (liabilities/equity) . (A+L+E = 0) ( close --retain --infer-equity / ). . : txt csv tsv html json..SS cashflow (cf) () "" ( ) . . : --sum : () --valuechange : ( ) --gain : / ( ) --count : --change : ( ) () --cumulative : ( -b/--begin) -H --historical : ( ) -l --flat /: (). . -t --tree /: . . --drop=N N --declared ( -E) -A --average ( ) -T --row-total ( ) --summary-only ( ) ( ) -N --no-total --no-elide --format=FORMATSTR ( ) -S --sort-amount / -% --percent --layout=ARG : 'wide[,WIDTH]': 'tall' : 'bare' : --base-url=URLPREFIX html hledger-web . ( hledger-web .) -O --output-format=FMT . : txt, html, csv, tsv, json. -o --output-file=FILE FILE. . Cash ( ). o 2 asset ( ) o 2 cash bank checking saving . : : ^assets?(:.+)?:(cash|bank|che(ck|que?)(ing)?|savings?|currentcash)(:|$) . cashflow: $ hledger cashflow Cashflow Statement 2008 || 2008 ====================++====== Cash flows || --------------------++------ assets:bank:saving || $1 assets:cash || $-2 --------------------++------ || $-1 balance . hledger balance assets not:fixed not:investment not:receivable . . txt csv tsv ( 1.32) html json..SS incomestatement (is) . . : --sum : () --valuechange : ( ) --gain : / ( ) --count : --change : ( ) () --cumulative : ( -b/--begin) -H --historical : ( ) -l --flat /: (). . -t --tree /: . . --drop=N N --declared ( -E) -A --average ( ) -T --row-total ( ) --summary-only ( ) ( ) -N --no-total --no-elide --format=FORMATSTR ( ) -S --sort-amount / -% --percent --layout=ARG : 'wide[,WIDTH]': 'tall' : 'bare' : --base-url=URLPREFIX html hledger-web . ( hledger-web .) -O --output-format=FMT . : txt, html, csv, tsv, json. -o --output-file=FILE FILE. . . Revenue Expense ( ). revenue income expense ( ) . : $ hledger incomestatement Income Statement 2008 || 2008 ===================++====== Revenues || -------------------++------ income:gifts || $1 income:salary || $1 -------------------++------ || $2 ===================++====== Expenses || -------------------++------ expenses:food || $1 expenses:supplies || $1 -------------------++------ || $2 ===================++====== Net: || 0 balance . hledger balance '(revenues|income)' expenses . . txt csv tsv ( 1.32) html json..SH " (Advanced report commands)" balance (bal) <<>> . / . : --sum : () --valuechange : ( ) --gain : / ( ) --budget[=DESCPAT] : . DESCPAT ( = ) ( ). --count : --change : ( ) --cumulative : ( -b/--begin) -H --historical : ( ) -l --flat /: (). . -t --tree /: . . --drop=N N --declared ( -E) -A --average ( ) -T --row-total ( ) --summary-only ( ) ( ) -N --no-total --no-elide --format=FORMATSTR ( ) -S --sort-amount / ( ). ( ) . -% --percent -r --related --invert --transpose ( ) --layout=ARG : 'wide[,W]': W 'tall' : 'bare' : 'tidy' : --base-url=URLPREFIX html hledger-web . ( hledger-web .) -O --output-format=FMT . : txt, html, csv, tsv, json, fods. -o --output-file=FILE FILE. . balance hledger . . balance : balancesheet balancesheetequity cashflow incomestatement. balance ..SS balance balance . balance (bs cf is..). balance .. o 2 (-l) (-t) o 2 (-[1-9]) o 2 .... o 2 () o 2 (--budget) o 2 (-V) o 2 (--valuechange) o 2 / (--gain) o 2 (--related/-r) o 2 (--count) .... o 2 ( ) o 2 (-D -W -M -Q -Y -p INTERVAL) .... o 2 () o 2 (--cumulative) o 2 (--historical/-H) .. .. o 2 (--value=cost[,COMM]/--cost/-B) o 2 (--value=then[,COMM]) o 2 (--value=end[,COMM]) o 2 (--value=now) o 2 (--value=YYYY-MM-DD) .. .. o 2 (-T) (-A) (-%) (--invert) o 2 (--transpose) o 2 (--pivot) o 2 ( ) (--format) o 2 (--layout) txt csv tsv ( 1.32) json ( :) html fods ( 1.40). txt ..SS " (Simple balance report)" balance - - . ( "" . .) . ( ) . ( examples/sample.journal): $ hledger -f examples/sample.journal bal $1 assets:bank:saving $-2 assets:cash $1 expenses:food $1 expenses:supplies $-1 income:gifts $-1 income:salary $1 liabilities:debts -------------------- 0 ( - ) . -E/--empty ( assets:bank:checking ): $ hledger -f examples/sample.journal bal -E 0 assets:bank:checking $1 assets:bank:saving $-2 assets:cash $1 expenses:food $1 expenses:supplies $-1 income:gifts $-1 income:salary $1 liabilities:debts -------------------- 0 -N/--no-total . " (Balance report line format)" () --format FMT . : $ hledger -f examples/sample.journal balance --format "%20(account) %12(total)" assets $-1 bank:saving $1 cash $-2 expenses $2 food $1 supplies $1 income $-2 gifts $-1 salary $-1 liabilities:debts $1 --------------------------------- 0 FMT / . : %[MIN][.MAX](FIELDNAME) o 2 MIN () o 2 MAX () o 2 FIELDNAME : 2 o 2 depth_spacer - MIN MIN * . o 2 account - o 2 total - / FMT (multi-commodity) : o 2 %_ - () o 2 %^ - o 2 %, - . %(depth_spacer) %(account) . . : o 2 %(total) - o 2 %-20.20(account) - o 2 %,%-50(account) %25(total) - o 2 %20(total) %2(depth_spacer)%-(account) - .SS (query) (postings) (cleared) . : $ hledger -f examples/sample.journal bal --cleared assets date:200806 $-2 assets:cash -------------------- $-2 -l/--flat . -t/--tree "" () : $ hledger -f examples/sample.journal balance $-1 assets $1 bank:saving $-2 cash $2 expenses $1 food $1 supplies $-2 income $-1 gifts $-1 salary $1 liabilities:debts -------------------- 0 : o 2 "" (boring) --no-elide . ( assets:bank liabilities ). o 2 "" (inclusive) . (plaintext accounting) . . o 2 ( ) . depth:NUM --depth NUM -NUM (: -3) . . ( ). : $ hledger -f examples/sample.journal balance -1 $-1 assets $2 expenses $-2 income $1 liabilities -------------------- 0 --drop NUM . : $ hledger -f examples/sample.journal bal expenses --drop 1 $1 food $1 supplies -------------------- $2 --declared account . ( -E/--empty .) (leaf - ) . "" . -S/--sort-amount () . : hledger bal expenses -MAS . (commodity) ( 0 ). -S . --invert . (bs is..) (: hledger is -MAS). -%/--percent () . . : $ hledger bal -% amt:`>0` $ hledger bal -% amt:`<0` -B -V -X --value : $ hledger bal -% cur:\\$ $ hledger bal -% cur:EUR ( -D/--daily -W/--weekly -M/--monthly -Q/--quarterly -Y/--yearly -p/--period) balance ( ): $ hledger -f examples/sample.journal bal --quarterly income expenses -E Balance changes in 2008: || 2008q1 2008q2 2008q3 2008q4 ===================++================================= expenses:food || 0 $1 0 0 expenses:supplies || 0 $1 0 0 income:gifts || 0 $-1 0 0 income:salary || $-1 0 0 0 -------------------++--------------------------------- || $-1 $1 0 0 : o 2 / ( ). o 2 () -E/--empty . o 2 () -E/--empty . o 2 --no-elide . o 2 / -A/--average -T/--row-total . o 2 --transpose . o 2 --pivot FIELD " " . PIVOTING . o 2 --summary-only (--summary ) Total Average ( --row-total -A/--average ). . : o 2 -N/--no-total o 2 cur: o 2 -V [--infer-market-price] o 2 --layout=bare o 2 (Maximize) o 2 o 2 less : hledger bal -D --color=yes | less -RS o 2 CSV CSV visidata (hledger bal -D -O csv | vd -f csv) csv-mode (M-x csv-mode, C-c C-a) (hledger bal -D -o a.csv && open a.csv) o 2 HTML : hledger bal -D -o a.html && open a.html.SS (Balance change, end balance) balance . : (balance change) . (end balance) ( hledger ). . (historical end balance) . << >> . ( !) . balance . : "1." 3 << >> (opening balances) ( ) . "2." 3 -H/--historical . (-H .) (Balance report modes) balance . - . : hledger balance [CALCULATIONMODE] [ACCUMULATIONMODE] [VALUATIONMODE] ... (Calculation mode) . : o 2 --sum : () o 2 --budget : ( /) o 2 --valuechange : ( / ) o 2 --gain : / ( ) o 2 --count : (Accumulation mode) / . : . : o 2 --change : << >>. / . ( balance cashflow incomestatement) o 2 --cumulative : << >>. . . o 2 --historical/-H : << >>. // . ( balancesheet balancesheetequity).SS (Valuation mode) . <> <> . ( ) --value : o 2 : () o 2 --value=cost[,COMM] : ( ) o 2 --value=then[,COMM] : o 2 --value=end[,COMM] : () 0 ( --valuechange --gain) o 2 --value=now[,COMM] : o 2 --value=YYYY-MM-DD[,COMM] : -B/-V/-X : o 2 -B/--cost : --value=cost o 2 -V/--market : --value=end o 2 -X COMM/--exchange COMM : --value=end,COMM --value --cost --value . (Combining balance report modes) . : o 2 --valuechange --value=end o 2 --valuechange balancesheet/balancesheetequity --change o 2 --cumulative --historical --row-total/-T : tab(@); lw(7.9n) lw(16.4n) lw(16.9n) lw(15.1n) lw(13.7n). T{ :> :v T} --value= then --value= end --value= YYYY-MM-DD /now ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --change DATE --cumulative DATE --historical /-H DATE ( ) --budget : o 2 o 2 . . . : ;; Budget ~ monthly (expenses:bus) $30 (expenses:food) $400 ;; Two months worth of expenses 2017-11-01 income $-1950 expenses:bus $35 expenses:food:groceries $310 expenses:food:dining $42 expenses:movies $38 assets:bank:checking 2017-12-01 income $-2100 expenses:bus $53 expenses:food:groceries $380 expenses:food:dining $32 expenses:gifts $100 assets:bank:checking : $ hledger bal -M --budget Budget performance in 2017-11-01..2017-12-31: || Nov Dec ===============++============================================ || $-425 $-565 expenses || $425 [ 99% of $430] $565 [131% of $430] expenses:bus || $35 [117% of $30] $53 [177% of $30] expenses:food || $352 [ 88% of $400] $412 [103% of $400] ---------------++-------------------------------------------- || 0 [ 0% of $430] 0 [ 0% of $430] << >> ("goal-based budgeting") hledger . << >> ("envelope budgeting") . https://plaintextaccounting.org/Budgeting . (Using the budget report) . hledger . . o 2 expenses:bus expenses:food . o 2 expenses . o 2 expenses:food:groceries expenses:food:dining expenses:food . o 2 expenses:movies expenses:gifts expenses . o 2 income assets:bank:checking . o 2 --depth depth: ( ). o 2 ( -l/--list). o 2 --budget . -E/--empty . o 2 (unbalanced postings) . o 2 . (expenses) . ( .) o 2 (-X COMM --infer-market-prices) / (cur:COMM). --layout bare . o 2 --cumulative ( ) ( "roll over" ). : https://hledger.org/budgeting.html.SS . (journal) expenses:food . ( expenses ): ~ monthly in 2020 (expenses:food) $500 2020-01-15 expenses:food $400 assets:checking $ hledger bal --budget expenses Budget performance in 2020-01-15: || 2020-01-15 ===============++==================== || $400 expenses:food || 0 [ 0% of $500] ---------------++-------------------- || $400 [80% of $500] ( hledger print --forecast tag:generated expenses ). ( ). (/ ) . -b 2020 . . . . --budget . --budget=DESCPAT DESCPAT ( ) . ( ) . --forecast --budget . - . : tab( ); lw(38.2n) lw(31.8n). --forecast --budget ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- balance balance --forecast=PERIODEXPR ( ) ( ) --budget=DESCPAT DESCPAT --layout balance . / ( ) . : o 2 --layout=wide[,WIDTH]: WIDTH () o 2 --layout=tall: o 2 --layout=bare: o 2 --layout=tidy: "tidy" () . ( balance .) --layout . CSV : tab( ); l l l l l l. - txt csv html json sql ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- wide Y Y Y tall Y Y Y bare Y Y Y tidy Y :.SS " (Wide layout)" : $ hledger -f examples/bcexample.hledger bal assets:us:etrade -3 -T -Y --layout=wide Balance changes in 2012-01-01..2014-12-31: || 2012 2013 2014 Total ==================++==================================================================================================================================================================================================================== Assets:US:ETrade || 10.00 ITOT, 337.18 USD, 12.00 VEA, 106.00 VHT 70.00 GLD, 18.00 ITOT, -98.12 USD, 10.00 VEA, 18.00 VHT -11.00 ITOT, 4881.44 USD, 14.00 VEA, 170.00 VHT 70.00 GLD, 17.00 ITOT, 5120.50 USD, 36.00 VEA, 294.00 VHT ------------------++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- || 10.00 ITOT, 337.18 USD, 12.00 VEA, 106.00 VHT 70.00 GLD, 18.00 ITOT, -98.12 USD, 10.00 VEA, 18.00 VHT -11.00 ITOT, 4881.44 USD, 14.00 VEA, 170.00 VHT 70.00 GLD, 17.00 ITOT, 5120.50 USD, 36.00 VEA, 294.00 VHT : $ hledger -f examples/bcexample.hledger bal assets:us:etrade -3 -T -Y --layout=wide,32 Balance changes in 2012-01-01..2014-12-31: || 2012 2013 2014 Total ==================++=========================================================================================================================== Assets:US:ETrade || 10.00 ITOT, 337.18 USD, 2 more.. 70.00 GLD, 18.00 ITOT, 3 more.. -11.00 ITOT, 3 more.. 70.00 GLD, 17.00 ITOT, 3 more.. ------------------++--------------------------------------------------------------------------------------------------------------------------- || 10.00 ITOT, 337.18 USD, 2 more.. 70.00 GLD, 18.00 ITOT, 3 more.. -11.00 ITOT, 3 more.. 70.00 GLD, 17.00 ITOT, 3 more.. (Tall layout) ( ) : $ hledger -f examples/bcexample.hledger bal assets:us:etrade -3 -T -Y --layout=tall Balance changes in 2012-01-01..2014-12-31: || 2012 2013 2014 Total ==================++================================================== Assets:US:ETrade || 10.00 ITOT 70.00 GLD -11.00 ITOT 70.00 GLD Assets:US:ETrade || 337.18 USD 18.00 ITOT 4881.44 USD 17.00 ITOT Assets:US:ETrade || 12.00 VEA -98.12 USD 14.00 VEA 5120.50 USD Assets:US:ETrade || 106.00 VHT 10.00 VEA 170.00 VHT 36.00 VEA Assets:US:ETrade || 18.00 VHT 294.00 VHT ------------------++-------------------------------------------------- || 10.00 ITOT 70.00 GLD -11.00 ITOT 70.00 GLD || 337.18 USD 18.00 ITOT 4881.44 USD 17.00 ITOT || 12.00 VEA -98.12 USD 14.00 VEA 5120.50 USD || 106.00 VHT 10.00 VEA 170.00 VHT 36.00 VEA || 18.00 VHT 294.00 VHT (Bare layout) : $ hledger -f examples/bcexample.hledger bal assets:us:etrade -3 -T -Y --layout=bare Balance changes in 2012-01-01..2014-12-31: || Commodity 2012 2013 2014 Total ==================++============================================= Assets:US:ETrade || GLD 0 70.00 0 70.00 Assets:US:ETrade || ITOT 10.00 18.00 -11.00 17.00 Assets:US:ETrade || USD 337.18 -98.12 4881.44 5120.50 Assets:US:ETrade || VEA 12.00 10.00 14.00 36.00 Assets:US:ETrade || VHT 106.00 18.00 170.00 294.00 ------------------++--------------------------------------------- || GLD 0 70.00 0 70.00 || ITOT 10.00 18.00 -11.00 17.00 || USD 337.18 -98.12 4881.44 5120.50 || VEA 12.00 10.00 14.00 36.00 || VHT 106.00 18.00 170.00 294.00 bare CSV ( ) : $ hledger -f examples/bcexample.hledger bal assets:us:etrade -3 -O csv --layout=bare "account","commodity","balance" "Assets:US:ETrade","GLD","70.00" "Assets:US:ETrade","ITOT","17.00" "Assets:US:ETrade","USD","5120.50" "Assets:US:ETrade","VEA","36.00" "Assets:US:ETrade","VHT","294.00" "Total:","GLD","70.00" "Total:","ITOT","17.00" "Total:","USD","5120.50" "Total:","VEA","36.00" "Total:","VHT","294.00" bare (no-symbol) ( hledger ). hledger-bar (: cur: )..SS (Tidy layout) "tidy data" (: https://cran.r-project.org/web/packages/tidyr/vignettes/tidy-data.html) . : $ hledger -f examples/bcexample.hledger bal assets:us:etrade -3 -Y -O csv --layout=tidy "account","period","start_date","end_date","commodity","value" "Assets:US:ETrade","2012","2012-01-01","2012-12-31","GLD","0" "Assets:US:ETrade","2012","2012-01-01","2012-12-31","ITOT","10.00" "Assets:US:ETrade","2012","2012-01-01","2012-12-31","USD","337.18" "Assets:US:ETrade","2012","2012-01-01","2012-12-31","VEA","12.00" "Assets:US:ETrade","2012","2012-01-01","2012-12-31","VHT","106.00" "Assets:US:ETrade","2013","2013-01-01","2013-12-31","GLD","70.00" "Assets:US:ETrade","2013","2013-01-01","2013-12-31","ITOT","18.00" "Assets:US:ETrade","2013","2013-01-01","2013-12-31","USD","-98.12" "Assets:US:ETrade","2013","2013-01-01","2013-12-31","VEA","10.00" "Assets:US:ETrade","2013","2013-01-01","2013-12-31","VHT","18.00" "Assets:US:ETrade","2014","2014-01-01","2014-12-31","GLD","0" "Assets:US:ETrade","2014","2014-01-01","2014-12-31","ITOT","-11.00" "Assets:US:ETrade","2014","2014-01-01","2014-12-31","USD","4881.44" "Assets:US:ETrade","2014","2014-01-01","2014-12-31","VEA","14.00" "Assets:US:ETrade","2014","2014-01-01","2014-12-31","VHT","170.00" (Balance report output) << >> (Output format) HTML ( -O html -o somefile.html) hledger.css . HTML FODS hledger-web . hledger-web http://localhost:5000 balance --base-url=http://localhost:5000 . ( --base-url="some/path" --base-url="".) balance (Some useful balance reports) / balance : o bal -M revenues expenses / . incomestatement . o bal -M -H assets liabilities / . balancesheet . o bal -M -H assets liabilities equity // . balancesheetequity . o bal -M assets not:receivable . cashflow . : o bal -M expenses -2 -SA . o bal -M --budget expenses . o bal -M --valuechange investments . o bal investments --valuechange -D date:lastweek amt:'>1000' -STA [--invert] [ ] .SS roi - (TWR) - (IRR) . Flags: --cashflow show all amounts that were used to compute returns --investment=QUERY query to select your investment transactions --profit-loss=QUERY --pnl query to select profit-and-loss or appreciation/valuation transactions ( ) --inv () --pnl . - (TWR) --pnl (--pnl "" --pnl STR STR ). (IRR -) - (TWR) . IRR TWR . --cost --value ( VALUATION ). : o Error (NotBracketed): (IRR) . : IRR (>1000000%) . o Error (SearchFailed): (IRR) . . : o roi : https://github.com/simonmichael/hledger/blob/master/examples/investing/roi-unrealised.ledger o Cookbook > Return on Investment: https://hledger.org/roi.html --inv --pnl --inv --pnl ( QUERIES ). ( Special characters ): $ hledger roi --inv 'term1 term2 term3 ...' : $ hledger roi --inv="'Assets:Test 1'" --pnl="'Equity:Unrealized Profit and Loss'" --inv --pnl --inv . --inv . ROI (postings) --inv " " ( --inv ) : " " " " ROI . o " " . : 2019-01-01 Investing in Snake Oil assets:cash -$100 investment:snake oil 2020-01-01 Selling my Snake Oil assets:cash $10 investment:snake oil = 0 o " " : 2019-06-01 Snake Oil falls in value investment:snake oil = $57 equity:unrealized profit or loss " " --pnl . " " . : --inv snake --pnl equity:unrealized : 2019-01-01 Snake Oil #1 assets:cash -$100 ; cash flow posting investment:snake oil ; investment posting 2019-03-01 Snake Oil #2 equity:unrealized pnl -$100 ; profit and loss posting snake oil ; investment posting 2019-07-01 Snake Oil #3 equity:unrealized pnl ; profit and loss posting cash -$100 ; cash flow posting snake oil $50 ; investment posting "ROI" " " (return on investment) . . . : IRR TWR. "IRR" ( " -" ) . . ( ) IRR . IRR . "roi" (postings) --inv --pnl . " " ( " ") (price directives) IRR . IRR . . IRR hledger =XIRR Excel . roi " -" "TWR" . IRR IRR . TWR " " / "" " " . " " TWR IRR . : o o IRR o TWR o IRR TWR o IRR TWR (CHART COMMANDS) activity (postings) . Flags: no command-specific flags activity ( ). . : $ hledger activity --quarterly 2008-01-01 ** 2008-04-01 ******* 2008-07-01 2008-10-01 ** close (equity) close <<>> / << >> : (equity) (lot costs)... print . () . Flags: --clopen[=TAGVAL] AL --close[=TAGVAL] --open[=TAGVAL] --assert[=TAGVAL] (balance assertions) --assign[=TAGVAL] (balance assignments) --retain[=TAGVAL] RX -x --explicit --show-costs --interleaved --assertion-type=TYPE =* ==* == = --close-desc=DESC --close-acct=ACCT --open-desc=DESC --open-acct=ACCT --round=TYPE none - () soft - (precision) hard - ( ) all - ( ) close : --clopen --close () --open --assert --assign --retain. . close clopen: . . 2025.journal clopen:2026 . --close=foo --clopen=2025-main. close --clopen . << >> ( [Asset] [Liability]) << >> . : hledger close --clopen -e NEWYEAR >> $LEDGER_FILE ( LEDGER_FILE ). . . . / - - . / . equity:opening/closing balances . --close-acct / --open-acct . / . (Equity) assets liabilities equity type:ALE . AL ALE RX ( [Revenue] [Expense]). (assertions) / ..SS close --close --clopen . . . close --close . ( hledger-move .) close --open --clopen . ( equity Ledger .) close --assert (assert) ( assert: ). . close --assign ( "assign:" ). . . --clopen . close --retain --close (Revenue) (Expense) . equity:retained earnings --close-acct . (equity) . . << >> ("retaining earnings") << >> ("closing the books") . . ( balancesheetequity (A-L=E) .) close (close customisation) (override) : o / o / -e OPENDATE o --close-acct=ACCT / --open-acct=ACCT o --close-desc=DESC --open-desc=DESC o clopen TAGVAL ( ). (journal) . . -e 2024 " 2023-12-31 2024-01-01" . --x/--explicit / (commodity) (posting) ( print -x). --interleaved ( ). --show-costs / . . close --show-costs (lots) hledger . ( lot hledger-move .).SS close close . -I . (=) . --assertion-type='==*'. close -C -R status: ( ) --auto ( ) . ( ) : 2023-12-30 a purchase made in december, cleared in january expenses:food 5 assets:bank:checking -5 ; date: 2023-01-02 : ; in 2022.journal: 2022-12-30 a purchase made in december, cleared in january expenses:food 5 equity:pending -5 ; in 2023.journal: 2023-01-02 last year's transaction cleared equity:pending 5 = 0 assets:bank:checking -5 close (Retain earnings) / 2022 2022-12-31 journal: $ hledger close --retain -f 2022.journal -p 2022 >> 2022.journal 2022 (retain earnings) : $ hledger -f 2022.journal is not:desc:'retain earnings' / 2022-12-31 2023-01-01: $ hledger close --clopen -f 2022.journal -p 2022 # copy/paste the closing transaction to the end of 2022.journal # copy/paste the opening transaction to the start of 2023.journal 2022 (closing balances) : $ hledger -f 2022.journal bs not:desc:'closing balances' clopen:NEWYEAR / : $ hledger bs -Y -f 2021.j -f 2022.j -f 2023.j expr:'tag:clopen=2021 or not tag:clopen' $ hledger bs -Y -f 2021.j -f 2022.j expr:'tag:clopen=2021 or not tag:clopen' $ hledger bs -Y -f 2022.j -f 2023.j expr:'tag:clopen=2022 or not tag:clopen' $ hledger bs -Y -f 2021.j expr:'tag:clopen=2021 or not tag:clopen' $ hledger bs -Y -f 2022.j expr:'tag:clopen=2022 or not tag:clopen' $ hledger bs -Y -f 2023.j # unclosed file, no query needed examples/multi-year . rewrite . print --auto. Flags: --add-posting='ACCT AMTEXPR' add a posting to ACCT, which may be parenthesised. AMTEXPR is either a literal amount, or *N which means the transaction's first matched amount multiplied by N (a decimal number). Two spaces separate ACCT and AMTEXPR. --diff generate diff suitable as an input for patch tool . print QUERY . . : $ hledger-rewrite.hs ^income --add-posting '(liabilities:tax) *.33 ; income tax' --add-posting '(reserve:gifts) $100' $ hledger-rewrite.hs expenses:gifts --add-posting '(reserve:gifts) *-1"' $ hledger-rewrite.hs -f rewrites.hledger rewrites.hledger : = ^income amt:<0 date:2017 (liabilities:tax) *0.33 ; tax on income (reserve:grocery) *0.25 ; reserve 25% for grocery (reserve:) *0.25 ; reserve 25% for grocery (single quotes) bash . : $ hledger rewrite [QUERY] --add-posting "ACCT AMTEXPR" ... $ hledger rewrite ^income --add-posting '(liabilities:tax) *.33' $ hledger rewrite expenses:gifts --add-posting '(budget:gifts) *-1"' $ hledger rewrite ^income --add-posting '(budget:foreign currency) *0.25 JPY; diversify' --add-posting . ('*') . (commodity) . << >> ("Automated Transactions") . . $ rewrite-rules.journal : = ^income (liabilities:tax) *.33 = expenses:gifts budget:gifts *-1 assets:budget *1 ('=') . (query) . $ hledger rewrite -f input.journal -f rewrite-rules.journal > rewritten-tidy-output.journal (pipeline) : $ hledger rewrite -f input.journal '^income' --add-posting '(liabilities:tax) *.33' \ | hledger rewrite -f - expenses:gifts --add-posting 'budget:gifts *-1' \ --add-posting 'assets:budget *1' \ > rewritten-tidy-output.journal . ..SS Diff (batch) journal (unified diff) . $ hledger rewrite --diff -f examples/sample.journal '^income' --add-posting '(liabilities:tax) *.33' : --- /tmp/examples/sample.journal +++ /tmp/examples/sample.journal @@ -18,3 +18,4 @@ 2008/01/01 income - assets:bank:checking $1 + assets:bank:checking $1 income:salary + (liabilities:tax) 0 @@ -22,3 +23,4 @@ 2008/06/01 gift - assets:bank:checking $1 + assets:bank:checking $1 income:gifts + (liabilities:tax) 0 patch (posting) . --file include . . hledger print . : https://github.com/simonmichael/hledger/issues/99 rewrite print --auto print --auto : o rewrite . print --auto . o rewrite . print --auto . o rewrite journal . print --auto journal . (MAINTENANCE COMMANDS) check . Flags: no command-specific flags hledger . --strict check . check . : hledger check # run basic checks hledger check -s # run basic and strict checks hledger check ordereddates payees # run basic checks and two others Emacs flycheck-hledger journal . . ..SS " (Basic checks)" hledger : o parseable - include . . o autobalanced - . . o assertions - (balance assertions) . . -I/--ignore-assertions . ( -s/--strict hledger check assertions ). (Strict checks) -s/--strict ( strict mode) ( assertions ) . : o balanced - autobalanced (equity postings) . . o commodities - (commodity) . . o accounts - . . (Other checks) check : o tags - . . hledger . o payees - (payees) . . . o ordereddates - . . hledger check -s ordereddates . . o recentassertions - (posting) . / - . (hledger close --assert >>$LEDGER_FILE . ). o uniqueleafnames - ( checking assets:bank:checking). . (Custom checks) (add-on) . Cookbook > Scripting . hledger/bin/ : o hledger-check-tagfiles - / o hledger-check-fancyassertions - .SS diff . . Flags: no command-specific flags : (posting) ( ). (postings) (journal entry) . ( CSV): hledger . : $ hledger diff -f $LEDGER_FILE -f bank.csv assets:bank:giro These transactions are in the first file only: 2014/01/01 Opening Balances assets:bank:giro EUR ... ... equity:opening balances EUR -... These transactions are in the second file only: setup hledger. Flags: no command-specific flags setup hledger . hledger . hledger . (timeout) . ANSI NO_COLOR --color=n . (pager) . hledger PATH . ( ). : $ hledger setup Checking your hledger setup.. Legend: good, neutral, unknown, warning hledger * is a released version ? no hledger 1.42.99-gbca4b39c5-20250425, mac-aarch64 * is up to date ? yes 1.42.99 installed, latest is 1.42.1 * is a native binary for this machine ? yes aarch64 * is installed in PATH ? yes /Users/simon/.local/bin/hledger * has a system text encoding configured ? yes UTF-8, data files should use this encoding * has a user config file ? (optional) no * current directory has a local config ? yes /Users/simon/src/hledger/hledger.conf * the config file is readable ? yes /Users/simon/src/hledger/hledger.conf terminal * the NO_COLOR variable is defined ? no * --color is configured by config file ? no * hledger will use color by default ? yes * the PAGER variable is defined ? yes less * --pager is configured by config file ? no * hledger will use a pager when needed ? yes /opt/homebrew/bin/less * the LESS variable is defined ? yes * the HLEDGER_LESS variable is defined ? no * adjusting LESS variable for color etc. ? yes * --pretty is enabled by config file ? no tables will use ASCII characters * bash shell completions are installed ? ? * zsh shell completions are installed ? ? journal * the LEDGER_FILE variable is defined ? yes /Users/simon/finance/2025/2025.journal * a default journal file is readable ? yes /Users/simon/finance/2025/2025.journal * it includes additional files ? yes 15 * all commodities are declared ? yes 10 * all accounts are declared ? yes 160 * all accounts have types ? no 14 untyped * accounts of each type were detected ? yes ALERXCV * commodities/accounts are checked ? no use -s to check commodities/accounts * balance assertions are checked ? yes use -I to ignore assertions . Flags: no command-specific flags hledger hledger-lib stdout . . hledger (sanity-check) hledger . - ! -- -p tasty -- tasty . : $ hledger test # run all unit tests $ hledger test balance # run tests with "balance" in their name $ hledger test -- -h # show tasty's options : (PART 5: COMMON TASKS) hledger . (Getting help) : $ hledger # show available commands $ hledger --help # show common options $ hledger CMD --help # show CMD's options, common options and CMD's documentation help hledger . : $ hledger help # show the hledger manual with info, man or $PAGER (best available) $ hledger help journal # show the journal topic in the hledger manual $ hledger help --help # find out more about the help command https://hledger.org . https://hledger.org/support . (Constructing command lines) hledger . (OPTIONS) : o ( : hledger CMD OPTS ARGS) o hledger (hledger ui [ARGS]) (hledger-ui [ARGS]) o "" (single quotes) o o --debug=2 . journal hledger journal $HOME/.hledger.journal : $ hledger stats The hledger journal file "/Users/simon/.hledger.journal" was not found. Please create it first, eg with "hledger add" or a text editor. Or, specify an existing journal file with -f or LEDGER_FILE. LEDGER_FILE ( ). (version control) . : $ mkdir ~/finance $ cd ~/finance $ git init Initialized empty Git repository in /Users/simon/finance/.git/ $ touch 2023.journal $ echo "export LEDGER_FILE=$HOME/finance/2023.journal" >> ~/.profile $ source ~/.profile $ hledger stats Main file : /Users/simon/finance/2023.journal Included files : Transactions span : to (0 days) Last transaction : none Transactions : 0 (0.0 per day) Transactions last 30 days: 0 (0.0 per day) Transactions last 7 days : 0 (0.0 per day) Payees/descriptions : 0 Accounts : 0 (depth 0) Commodities : 0 () Market prices : 0 () LEDGER_FILE (shell) : $ echo 'export LEDGER_FILE=~/finance/main.journal' >> ~/.profile $ source ~/.profile : o env | grep LEDGER_FILE o hledger setup hledger files . LEDGER_FILE . (GUI) : 1. ~/.MacOSX/environment.plist : { "LEDGER_FILE" : "~/finance/main.journal" } 2. killall Dock ( ) . : o dock spotlight Emacs LEDGER_FILE . LEDGER_FILE C:\Users\USER\.hledger.journal . "I'm on Windows, how do I keep my files in AppData?" . : 1. (task bar) environment variables "Edit environment variables for your account" . 2. (User variables) LEDGER_FILE . : C:\Users\USER\finance\main.journal. 3. OK . 4. powershell . ( .) : 1. powershell : [Environment]::SetEnvironmentVariable("LEDGER_FILE", "C:\User\USER\finance\main.journal", [System.EnvironmentVariableTarget]::User) 2. powershell . ( .) : : o o o (administrator) o o o powershell o (command window) . o "Setting Windows PowerShell environment variables" "Adding path permanently to windows using powershell doesn't appear to work" . : o powershell $env:LEDGER_FILE o hledger setup ( ) hledger files ..SS ( ...) ( ...) . . . (journal) . : o : : 2023-01-01 * opening balances assets:bank:checking $1000 = $1000 assets:bank:savings $2000 = $2000 assets:cash $100 = $100 liabilities:creditcard $-50 = $-50 equity:opening/closing balances . * . " " . . = (balance assertions) . o : hledger add : $ hledger add Adding transactions to journal file /Users/simon/finance/2023.journal Any command line arguments will be used as defaults. Use tab key to complete, readline keys to edit, enter to accept defaults. An optional (CODE) may follow transaction dates. An optional ; COMMENT may follow descriptions or amounts. If you make a mistake, enter < at any prompt to go one step backward. To end a transaction, enter . when prompted. To quit, enter . at a date prompt or press control-d or control-c. Date [2023-02-07]: 2023-01-01 Description: * opening balances Account 1: assets:bank:checking Amount 1: $1000 Account 2: assets:bank:savings Amount 2 [$-1000]: $2000 Account 3: assets:cash Amount 3 [$-3000]: $100 Account 4: liabilities:creditcard Amount 4 [$-3100]: $-50 Account 5: equity:opening/closing balances Amount 5 [$-3050]: Account 6 (or . or enter to finish this transaction): . 2023-01-01 * opening balances assets:bank:checking $1000 assets:bank:savings $2000 assets:cash $100 liabilities:creditcard $-50 equity:opening/closing balances $-3050 Save this transaction to the journal ? [y]: Saved. Starting the next transaction (. or ctrl-D/ctrl-C to quit) Date [2023-01-01]: . commit . : $ git commit -m 'initial balances' 2023.journal ( hledger add) hledger-iadd hledger-web import CSV . hledger_journal(5) hledger.org : 2023/1/10 * gift received assets:cash $20 income:gifts 2023.1.12 * farmers market expenses:food $13 assets:cash 2023-01-15 paycheck income:salary assets:bank:checking $1000 (Reconciling) - hledger - ( !). () () . . . : 1. . . hledger (hledger bal cash). . (hledger reg cash). . : 2023-01-16 * adjust cash assets:cash $-2 = $105 expenses:misc 2. (checking). . ( cleared) hledger (hledger bal checking -C). () . hledger reg checking -C . . 3. / . : register hledger-ui : hledger-ui --watch --register checking -C * " " . (paycheck) * 2023-01-15 paycheck . (commit) : $ git commit -m 'txns' 2023.journal . : $ hledger print 2023-01-01 * opening balances assets:bank:checking $1000 assets:bank:savings $2000 assets:cash $100 liabilities:creditcard $-50 equity:opening/closing balances $-3050 2023-01-10 * gift received assets:cash $20 income:gifts 2023-01-12 * farmers market expenses:food $13 assets:cash 2023-01-15 * paycheck income:salary assets:bank:checking $1000 2023-01-16 * adjust cash assets:cash $-2 = $105 expenses:misc : $ hledger accounts --tree assets bank checking savings cash equity opening/closing balances expenses food misc income gifts salary liabilities creditcard : $ hledger balance $4105 assets $4000 bank $2000 checking $2000 savings $105 cash $-3050 equity:opening/closing balances $15 expenses $13 food $2 misc $-1020 income $-20 gifts $-1000 salary $-50 liabilities:creditcard -------------------- 0 : $ hledger bal assets liabilities -2 $4000 assets:bank $105 assets:cash $-50 liabilities:creditcard -------------------- $4055 : $ hledger bs -2 Balance Sheet 2023-01-16 || 2023-01-16 ========================++============ Assets || ------------------------++------------ assets:bank || $4000 assets:cash || $105 ------------------------++------------ || $4105 ========================++============ Liabilities || ------------------------++------------ liabilities:creditcard || $50 ------------------------++------------ || $50 ========================++============ Net: || $4055 " " . ( bse .) : hledger is Income Statement 2023-01-01-2023-01-16 || 2023-01-01-2023-01-16 ===============++======================= Revenues || ---------------++----------------------- income:gifts || $20 income:salary || $1000 ---------------++----------------------- || $1020 ===============++======================= Expenses || ---------------++----------------------- expenses:food || $13 expenses:misc || $2 ---------------++----------------------- || $15 ===============++======================= Net: || $1005 . : $ hledger register cash 2023-01-01 opening balances assets:cash $100 $100 2023-01-10 gift received assets:cash $20 $120 2023-01-12 farmers market assets:cash $-13 $107 2023-01-16 adjust cash assets:cash $-2 $105 : $ hledger activity -W 2019-12-30 ***** 2023-01-06 **** 2023-01-13 **** . close . git add . (BUGS) hledger (https://bugs.hledger.org) hledger (https://hledger.org/support) . : hledger ascii . hledger . ( Text encoding .) Microsoft Windows ascii ANSI / TAB add . ( powershell .) hledger Ledger . hledger ( ): PATH: "No command 'hledger' found" hledger PATH . unix stack hledger ~/.local/bin cabal ~/.cabal/bin . PATH / . LEDGER_FILE: LEDGER_FILE hledger o LEDGER_FILE . unix env | grep LEDGER_FILE . export (: https://stackoverflow.com/a/7411509). Windows $env:LEDGER_FILE . o . . : "Illegal byte sequence" "Invalid or incomplete multibyte or wide character" "commitAndReleaseBuffer: invalid argument (invalid character)" hledger (locale) . Text encoding Install: Text encoding . : hledger Ledger Ledger . hledger Ledger ..SH " (AUTHORS)" Simon Michael . http://hledger.org/CREDITS.html . (COPYRIGHT) 2007-2023 Simon Michael . (LICENSE) GNU GPL v3 . (SEE ALSO) hledger(1), hledger-ui(1), hledger-web(1), ledger(1) hledger-1.52 March 2026 HLEDGER(1)