Skip to content

Ledgerly v0.2.0 — the Open Bank-Format Commons

Latest

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).