bkpr
I wanted Mint's touch with a real ledger's resolution. bkpr turns bank and card statements into a proper set of books; you set it up, it runs, and the only recurring work is re-categorizing a couple of things every once in a while. It's driven entirely through commands, so it doesn't matter whether a person or an agent operates it.
-
Oct 8, 2026
import: settle the default window before the fetch is built, so the bank actually reads it
importConnector built the fetch closure (which copies its options) before importWindow set from/to from the last balance check. The note printed the window; the bank script got no BK_IMPORT_HISTORY_FROM and read the site's short default. Lines between two…
-
Oct 1, 2026
Lay the PDF invoice out like the HTML one and encode PDF text as WinAnsi
The PDF invoice now follows the HTML document of record: a right-aligned bold title and letterhead, the reference and date, a bold Bill To: on its own line with PAID beside it, line items with the amount at the right and no header row, a rule above a bold…
-
Sep 12, 2026
import: default window starts at the account's last check, so gaps between runs are covered
-
Sep 12, 2026
pcfinancial: click through to Transactions when sign-in lands on the dashboard
-
Sep 12, 2026
-
Sep 12, 2026
Simplii: force the accounts overview before clicking the account path
simplii-chequing and simplii-loc share one login and run back to back in the same persistent profile. Simplii is a hash-routed SPA that resumes whatever route the profile last left off on, so revisiting the bare origin after the LOC run leaves the page on the…
-
Aug 31, 2026
-
Aug 31, 2026
Fix PDF table columns overlapping on wide content
pdfReport.Table() split page width equally across columns and drew each cell with fpdf's CellFormat, which does not clip or wrap -- content wider than an equal share overflowed into the next column. On real data this broke register -format pdf: transaction…
-
Aug 31, 2026
Add -format pdf and -out to accounts due
accounts due gains pdf alongside table and json, plus -out (previously it always wrote to stdout). Same binary-needs-out rule as receipt and register.
-
Aug 31, 2026
Add -format pdf and -out to register
register gains -format text|pdf (default text, matching the prior behaviour) and -out , neither of which existed before. pdf is binary and always needs -out, same rule as receipt.
-
Aug 31, 2026
Add -format pdf to receipt, requiring -out since PDF is binary
renderInvoicePDF lays out the same fields the text and HTML renderers show (letterhead, reference/date, PAID, bill-to, line items, total) on the shared pdfReport helper.
-
Aug 31, 2026
Add a shared PDF report helper on go-pdf/fpdf
A deliberate break from bkpr's zero-dependency stance: PDF export needs real page layout, which the stdlib does not offer. go-pdf/fpdf is a maintained, pure-Go, no-cgo library, so it keeps the tool a single static binary. pdfReport wraps just enough of fpdf's…
-
Aug 11, 2026
Extract browser-script bank connectors from bkpr
-
Aug 7, 2026
Add a manual fallback to the release workflow
Both v0.2.1's tag push and ci.yml's push-to-main trigger silently missed the same underlying push event (no run of either workflow exists for that commit), so a tag push can occasionally never reach Actions - not a bug in this file's trigger syntax, which…
-
Aug 6, 2026
Widen register -dups to catch weekend-shifted reposts (FR-25)
register -dups only caught exact same-date twins, missing a duplicate whose reported posting date drifted a couple of days on reimport (a weekend or holiday shifting a bank's posted date). Add nearDateGroups: a ±3-day match that also requires the payee and…
-
Aug 6, 2026
Add unvoid to reverse a mistaken void
void's help text promised a later fact could supersede it, but nothing did: categorize refused a voided fingerprint outright, and the only correction path was re-importing the same transaction through a new door. unvoid appends the missing inverse event,…
-
Aug 6, 2026
Add reconcile -history to bisect when a delta first appeared
reconcile only ever compared the books to the latest bank-asserted balance for an account, so a gap that appeared somewhere in the middle of the reconciled window could only be found by hand-parsing the log or getting a fresh manual anchor to bisect with.…
-
Aug 6, 2026
Warn on categorize when the line twins an already-categorized one
FR-17's detector only ran against the lines an import just landed, so a duplicate created weeks earlier by a different door -- one side already categorized, its twin still sitting in Uncategorized -- went undetected until someone hand-categorized it, with no…
-
Aug 6, 2026
Have accounts due/list show the reconciled balance, not a raw sum
accounts due and accounts list folded every transaction on an account since the beginning of the log, unanchored, so a backfill import that landed history no balance assertion covered could drift the reported balance far from the real one -- reconcile stayed…
-
Aug 4, 2026
Adds docs/logo.svg (dark badge with a balance scale mark) as the org logo concept, referenced near the top of the README. Also renders docs/favicon.png, docs/favicon-16.png, and docs/org-avatar.png from the SVG with rsvg-convert for use as a favicon and…
-
Aug 1, 2026
Carry a mixed-commodity entry whose foreign commodity self-cancels (#9)
Balance an entry per commodity, as a ledger does, instead of folding every posting into the statement's one commodity. A non-currency commodity whose own postings cancel to zero (a Property unit moved from equity into an asset in a purchase opening entry)…
-
Aug 1, 2026
Carry an invoice's number through export, and read a 409 as skipped (#8)
The rent app now accepts an optional reference on the rent-roll record endpoint and appends it to the description it generates ("Rent for August 2026 (Invoice 2086)"). A deposit that settles a numbered invoice is the one case bkpr has a number worth citing,…
-
Aug 1, 2026
Name the module after the repository and scrub the real book (#6)
Two changes ride together because they land on the same 100-odd files, and one review of a rename is cheaper than two. The module was bkpr.pro/bkpr on the reasoning that a domain we own outlasts whoever hosts the code. That is true, and it is still not…
-
Aug 1, 2026
Set the printable invoice in monospace (#5)
The HTML document was styled with the system sans-serif stack, which is not what these invoices look like. They have always been set in a mono face, and the PDFs the template was modelled on are mono throughout. It is not only habit. The document's one table…
-
Aug 1, 2026
Let the book issue the next invoice number (#4)
The number on an invoice was held in a person's head and typed in by hand, both on `invoice raise` and on the `categorize` that tags the paying line. The book already knows every number it has issued, and the person does not: the real book has skipped…