Skip to content

Releases: chennurivarun/ledgerly

Ledgerly v0.2.0 — the Open Bank-Format Commons

Choose a tag to compare

@chennurivarun chennurivarun released this 24 Aug 08:16

The Open Bank-Format Commons

Bank statement PDFs are the hardest mundane problem in personal finance: most banks outside the US offer nothing else, and parsing them has always been someone's trade secret, someone's AI bill, or your own manual labor. v0.2.0 makes bank layouts a public commons.

Statement packs

A bank's statement layout, captured once as a small reviewable data file. A pack read runs deterministically in your browser — instant, offline, zero AI, zero cost, no provider configured — and it verifies itself: serial numbers must increment and the running balance must reconcile to the exact cent, or the whole read refuses. A real 24-page statement (728 transactions, 8 months) parses in ~9ms.

The distiller

No pack for your bank yet? Any AI provider (free tiers work) reads the statement once; you review the rows; Ledgerly derives the pack automatically from your confirmed data — then proves the draft by re-reading the entire statement through the verification engine before you can save it. Distilled packs contain layout only: digits, dates, and months are mechanically generalized away, and any literal words that survive are shown for your explicit confirmation before the pack can be saved or shared. Proven end-to-end: 40 confirmed rows from one month inferred a pack that read all 728.

Public domain, on purpose

Pack data (shared/packs/packs/) is dedicated to the public domain (CC0 1.0) — any project, open or commercial, can embed the packs with no obligations. The engine and app remain AGPL-3.0. The full host-agnostic spec lives in docs/PACKS.md: input is plain text lines, so any PDF extractor works and any finance tool can adopt the registry.

Also in this release

  • Local packs: distilled packs are live on your instance immediately — no waiting for an upstream merge.
  • validatePack rejects catastrophic-backtracking regex shapes, protecting every consumer of community packs.
  • Statements over 300 rows now import fully across successive review rounds (cap-order fix).
  • Statement reads no longer require an AI provider at all when a pack matches.
  • Endpoint errors now name their HTTP status; statement rounds use a patient 240s budget.

1,382 tests. Runs entirely on Cloudflare's free tier (Workers + D1 + R2).

Ledgerly v0.1.0 — your money, your account, your AI

Choose a tag to compare

@chennurivarun chennurivarun released this 12 Aug 10:51

The first public release of Ledgerly — a private, self-hosted personal-finance
dashboard that runs entirely in your own Cloudflare account: transactions
in your D1 database, receipts and statements in your R2 bucket, served by a
Worker you control. No vendor in the middle, nothing phones home. AGPL-3.0.

Highlights

The mail-in feed — bank sync with no bank connection. Your bank already
emails you transaction alerts, receipts, and statements. Route them to an
address you control and they become proposed transactions in seconds — no
bank credentials, no aggregator, works with any bank that can send an email.
Allow-listed senders only, everything is suggestion-only, and inbound email
never triggers AI. Bank formats are community-contributed parser packs.
Setup: docs/EMAIL-FEED.md.

Chat with your money (MCP). Ledgerly is a read-only MCP server — add
your instance to Claude Code, Claude Desktop, or any MCP client and ask
"what did I spend on dining last month?" Six deterministic tools behind a
bearer token; no mutating tool exists. Setup: docs/MCP.md.

AI that only ever suggests. Receipt extraction (one photo → one proposed
transaction with per-field confidence) and PDF statement extraction (one
statement → a reviewable batch with duplicate pre-flagging) via Workers AI
in your own account or bring-your-own-key Anthropic. Every field is
re-validated server-side; nothing enters your ledger without your click.

A deterministic core that learns. Repeated category corrections become
suggested rules you approve. The recurring-detection engine powers 30/60/90-
day cash-flow forecasts (income and expenses, calendar-exact). Weekly or
daily WhatsApp briefings via your own Meta Cloud API credentials.

Honest by construction. Empty states are empty — no sample data, ever.
Ambiguous imports ask. Uncertain extractions go to review. 883 tests.

Getting started

Local in two commands: npm install && npm run dev — no Cloudflare account
needed. Deploy to your own account in ~10 minutes: see the
README.

Full direction: Vision
· Roadmap