Skip to content

Latest commit

Β 

History

859 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Beancount.io logo

Beancount.io

Agentic plain-text accounting, from every surface you work in.
Open-source web and mobile clients, a Python CLI and reporting library, and skills for coding agents.

⭐ Star on GitHub · Web app · Mobile apps · Start building · Contribute · Roadmap · Issues

Star Beancount.io on GitHub Mobile CI Dashboard CI Python CI Skills CI Secret scan MIT license

Beancount.io income statement showing monthly net profit and detailed income and expense account trees

Turn a plain-text ledger into reports you can explore β€” open the live example.

Monthly expenses shown as a stacked bar chart Expenses shown as an interactive account hierarchy treemap

Beancount.io is a developer-friendly workspace for Beancount ledgers. Your books remain readable plain text while the surrounding tools add polished reports, transaction entry, Git-backed collaboration, automation, and access from the browser, phone, terminal, or a coding agent.

Mobile apps

Review your finances, add transactions, scan receipts, and edit ledger files from the native Beancount client. The same open ledger remains available from the web, terminal, Python, and agent workflows.

Beancount Mobile home dashboard with net worth trend and recent transactions Beancount Mobile reports with income, expenses, and category breakdowns Beancount Mobile balanced multi-posting transaction entry

Download Beancount on the App Store Β  Get Beancount on Google Play

Explore the mobile product tour or run the Expo app locally.

Why developers build with it

  • Open, inspectable data β€” ledgers are text files that work with Git, scripts, editors, and the wider Beancount ecosystem.
  • Useful at every layer β€” use the finished interfaces, automate local .bean files from Python, or build new workflows on the parsing and reporting library.
  • Modern, typed stacks β€” React 19, React Native, TypeScript, GraphQL, Python 3.12, strict type checking, and package-scoped CI.
  • Agent-ready workflows β€” the CLI and reusable skills give coding agents structured ways to create, validate, query, and update ledgers.
  • MIT licensed β€” clients, developer tools, and libraries can be studied, adapted, and extended.

What is here today

Package Status What you can build with it
dashboard/ Active web client Ledgers, journal, reports, Monaco editor, imports, collaboration, and an AI assistant. React 19 + TanStack Start + Apollo.
mobile/ Active iOS & Android client Native transaction entry, account views, budgets, receipt capture, ledger editing, light/dark themes, 13 locales, and runtime selection of a compatible self-hosted server. Expo + React Native + Apollo.
cli/ 0.1.0 One-install bea CLI: directives, check/format/query, reports, cloud, and local-ledger ask. Frontend never loads Beancount β€” a managed engine (Homebrew at install, PyPI on first use) runs natives and the helper. Python + Typer.
skills/ Active skills The agent-native accounting loop: scaffold a ledger with one bea install (optional Fava), import bank exports with dedup, author tested beangulp importers (bea engine enable beangulp), reconcile against statements, migrate from Mint/Monarch/QuickBooks, query your finances in plain language, run a month-end close, and record options trades β€” all confirm-gated and check-verified through bea.
backend-cluster/ Active backend The services behind the Beancount.io API: backend-v2 (GraphQL/REST gateway), ledger (rustledger-WASM ledger service), idl (OpenAPI specs + generated clients), and agent-box (Cloudflare Worker control plane for the Ask-AI sandbox). Run locally via deploy/docker-mac/ or self-host on one server via deploy/docker/.

The dashboard and mobile app are clients for the Beancount.io API, served by backend-cluster/ β€” hosted, or self-run via deploy/docker-mac/. The CLI and ledger skills also support local-first workflows that do not require the hosted service.

Skills have two audiences:

Audience Location Workflows
Beancount users skills/, with implementations in skills/.claude/skills/ The eight beancount-* ledger skills
Repository contributors .agents/skills/, documented in .agents/CLAUDE.md PM, shipping, mobile releases, QA, code maintenance, and Mermaid diagrams

The root .claude/skills links to .agents/skills so Claude Code and Codex share the internal development workflows.

Choose your entry point

There is no root package to install. Each package owns its dependencies and checks.

Web dashboard

Requires Node.js 22, Yarn 4 through Corepack, and a Beancount.io API endpoint.

cd dashboard
corepack enable
yarn install --immutable
cp .env.example .env
yarn dev

The app runs at http://localhost:5173. See the dashboard setup guide for environment variables and architecture.

Prefer everything in containers? deploy/docker-mac/ runs the full stack locally on macOS. For a persistent single-server installation with automatic HTTPS and durable Docker volumes, use deploy/docker/.

Mobile app

Requires Node.js 20.19.4 or newer and Yarn Classic.

cd mobile
yarn install
yarn start

Expo will guide you to iOS, Android, or a connected device. See the mobile development guide for the full workflow.

CLI and Python tooling

The beancount-io package installs one command, bea. You do not install Beancount yourself β€” Homebrew provisions a separate engine venv at install time; PyPI installs provision it on first local use. Install from the Homebrew tap or from PyPI:

brew install bex-co/tap/bea      # macOS and Linuxbrew
uv tool install beancount-io     # anywhere with uv and Python 3.12+

bea check                        # in a directory containing main.bean
bea format -i main.bean          # rewrite; default prints to stdout
bea upgrade                      # update through whichever manager installed it

Or from this checkout:

cd cli
uv sync --all-groups
uv run bea --help

Start with the first-month tutorial, then use the CLI reference for the command tree, the --file/--json/--no-input automation contract, exit codes, validation, formatting, queries, reports, authentication, and ledger management. Every flag is listed in the generated command reference.

Coding agent skills (local ledger)

Give Claude Code or Codex the eight beancount-* ledger workflows. Install the skills with a sparse Git clone and one install command, then ask a sample ledger a first question with the first-query walkthrough.

Coding agent (MCP)

Point an MCP client at a deployment to query and edit a ledger from an agent:

{
  "mcpServers": {
    "beancount": {
      "type": "http",
      "url": "https://your-deployment/api-gateway/mcp",
      "headers": { "Authorization": "Bearer bcio_your_ledger_scoped_key" }
    }
  }
}

Twenty-six tools β€” BQL queries, file listing, reads, edits, entry and receipt insertion, appending directives as plain Beancount text, statement parsing, pull requests, collaborators, API-key management, and bank import β€” plus sixty-four URI-addressed resources an agent fetches without spending a tool call: the ledger's vocabulary (payees, currencies, tags, …), its journals and analysis reads (trial balance, account reports, …), its linked banks, category suggestions, and file contents. Statements answer with totals and the accounts behind them rather than a chart payload, every failure names a machine code and the next call to make, and the transport's budget is sized for a whole agent session. Every eligible GraphQL operation now has a REST and MCP twin over the same protected service call β€” the parity gap is held at zero by CI. Bank imports are drivable end to end after a one-time browser link, with dry_run on everything that writes. Every call re-authorizes, so access revoked mid-session is refused on the next one. A credential can be pinned to one ledger or select ledger: "owner/name" per call. yarn mcp:conformance <base-url> tells you whether a deployment is connectable. See connecting an MCP client for the walkthrough and ADR 0007 for the endpoint's contract.

Quality bar

Every active package has path-filtered CI so unrelated changes stay fast:

Package Run before opening a PR
Dashboard cd dashboard && yarn format:check && yarn lint && yarn test && yarn build
Mobile cd mobile && yarn format:check && yarn lint && yarn typecheck && yarn test:unit
CLI cd cli && make check-all
Skills python3 skills/scripts/ci-check.py

A repository-wide secret scan also gates every push and pull request. Run scripts/lint-deadcode.sh from the repository root to check every executable package and support script for unused files and symbols. scripts/fix-deadcode.sh applies the available removals; review its diff and rerun the affected packages' full checks.

Contributing

Contributions are welcome across product UI, accounting workflows, accessibility, translations, tests, Python tooling, and agent skills. Start with the contributing guide, browse open issues and the public adoption roadmap, and keep changes focused on one package when possible.

If Beancount.io is the kind of open, programmable finance software you want to see more of, star the repository and help more developers find it.

Community

Acknowledgements

Beancount.io stands on Beancount and Fava β€” the vendored fava package inside cli/src/fava ships as bundled subprocess resources in the single beancount-io distribution, and the rest of the plain-text accounting stack (beanquery, beangulp, rustledger) is used as unmodified upstream dependencies. Full credits and how we comply with each upstream license: ACKNOWLEDGEMENTS.md.

License

MIT Β© Beancount.io β€” covers the code in this repository; upstream projects remain under their own licenses.

About

πŸ’° Double-entry bookkeeping made easy β€” plain-text accounting for humans and AI agents. Polished iOS & Android app built with React Native + Expo.

Topics

Resources

Contributing

Stars

268 stars

Watchers

5 watching

Forks

Releases

Packages

Contributors

Languages