mothermachine

Browse / Invoicing and finance

Ledger CLI

Plain-text double-entry accounting from the command line; the CLI is the whole interface.

Operable ProductCLI Deterministic C++Python CLI License: BSD-3-Clause

Ledger reads a text journal of transactions and produces balance, register, budget and forecast reports with no database. It has been the reference plain-text accounting tool since 2003 and is scriptable by construction: an agent appends to the journal and runs reports. BSD-3-Clause, actively maintained.

Use it when
  • I keep my books in a text file in git and want reports without a GUI
  • I want my agent to append transactions and run balance checks in a script
Gotchas
  • No invoicing, no bank sync; you supply the journal
  • Python features (--import) need a Python-enabled build, which is off by default
  • Community Windows support is weaker than macOS and Linux

Last activity Aug 28, 2026. Fit: adaptable 1, operable 3.

Editions

Free · Free open source

  • Clonegit clone https://github.com/ledger/ledger
  • Installbrew install ledger
  • ImageContainer

For agents: JSON · Markdown

Operable: what an agent can drive

Interface

OfficialCLIpublished by the builderlocal

How an agent can drive an Operable Listing, in five levels: native (built for the agent as the primary interface), official (the Builder ships an agent interface), wrapped (a third party wraps the software's API), config (an agent can only drive it by editing files), gui (screen control only). An interface is official only when it is published by the same organization that ships the software. GUI-level Listings are allowed and sorted last.

Docs
www.ledger-cli.org/docs.html

Reach

Partial coverage. 8 of 9 jobs reachable through the stated interface.

JobThrough the interfaceEvidence
Balance reports by accountReachableledger balance (manual ch. 'Reports')
Register of transactions with filtersReachableledger register with account, payee and date expressions
Budgeting against periodic transactionsReachable--budget and --unbudgeted flags
ForecastingReachable--forecast option with periodic entries
Multi-commodity and price valuationReachableprice database, --market and --exchange
Periodic and custom-formatted reportsReachable--period, --format, csv and xml commands
Enter new transactionsReachableledger xact drafts a transaction from a payee; or append to the journal file
Import bank dataUndeterminedconvert command exists; --import needs a Python-enabled build
Close books and equityReachableequity command for opening balances

Code stack

Languages
C++Python
Frameworks
Boost
Package manager
cmake
Database
none
Hosting target
local machineDocker
Built
Human-written (recorded, never ranked)

Evidence and confidence

FieldWhere it was seenConfidence
formFactorUNIX command-line tool (README)95%
executionModelno model at runtime95%
operabilitythe CLI is the product; docs at ledger-cli.org by the Builder95%
effortno Customization surface beyond the journal and ~/.ledgerrc defaults; adapting means C++ fork70%
editionsBSD-3-Clause per LICENSE.md; free95%
activeGitHub pushedAt 2026-08-28; CLAUDE.md in repo–
reach85%

Open questions

  • Whether ~/.ledgerrc should count as a config file that makes this Adaptable at config-only; this analysis kept it Operable only

Sources