Releases: chennurivarun/ledgerly
Release list
Ledgerly v0.2.0 — the Open Bank-Format Commons
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.
validatePackrejects 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
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.