🚧 Groundwork is currently in Beta — free to download and use. Sign up for updates as we work toward v1.0.
What's changed

Changelog

Groundwork is in active beta. Everything shipped, honest and dated. Download the latest to get all of the below.

20260725-d21 July 25, 2026

Groundwork is now on macOS and Linux, plus a serious import fix

Fixed
  • Importing the same account once via CSV and again via QFX/OFX no longer creates duplicate transactions. Banks format the same transaction differently between file formats (a generic "Withdrawal" prefix in CSV, and QFX/OFX truncating long transaction descriptions) — the duplicate checker now recognizes these as the same transaction instead of silently doubling your spending totals.
  • A transaction added manually and then immediately edited or linked to a debt in the same session now behaves correctly — previously it could reference the wrong internal record until the page was reloaded.
  • Editing a debt's balance, APR, or payment on the Debt Payoff page now properly records that month's numbers, so the "your minimum payment is dropping" indicator can actually track your progress over time. It previously only recorded this from a secondary editing screen most people never use.
Added
  • Groundwork is now available for macOS (Apple Silicon and Intel) and Linux (x86_64) — no Python required for either, just download and run.
  • The Ledger's transaction rows now have a real button to attach a payment to a debt account, in both the collapsed row and the edit view — previously it only existed as a small icon that was easy to miss.
20260712-d20 July 12, 2026

Bug fixes and more accurate numbers

Fixed
  • Paying a debt down to exactly $0.00 now saves. Before, a zero balance would snap back to the old amount — so a card you'd paid off wouldn't stay at zero.
  • The dashboard no longer shows a debt-free date when your budget doesn't cover your minimum payments. It now tells you plainly that the budget falls short, instead of showing a date that couldn't happen.
  • Retirement projections are corrected: required minimum distributions (RMD) for ages 70–71, plus a few Social Security timing and Roth/Traditional cases, now match the current IRS and SSA figures.
  • Trying to record a sale of more investment shares than you own is now caught and explained, instead of quietly saving a transaction that doesn't add up.
  • The Trip Planner's dining estimate now reads your spending history correctly.
  • A debt card's balance now updates reliably everywhere it's shown — the balance you enter is the balance you see.
20260706-d19 July 6, 2026

Fixes intermittent 500 on data load

Fixed
  • Random 500 errors on transactions, net worth, and other endpoints — root cause was a SQLite connection pool that shared one connection across all threads. Some requests would collide and fail (bad parameter or other API misuse). Fixed by giving each request its own connection.
20260706-d18 July 6, 2026

Beta re-invitation build

Fixed
  • Record-transaction Account dropdown now populates and buys/sells save correctly (was silently failing on every submit)
  • Net Worth trend chart appears again — it had been invisible after a redesign dropped its container
  • Refresh Prices now says honestly that this beta doesn't include price lookups instead of blaming your internet
  • Sub-category creation from Settings works on desktop (was a silent no-op)
  • Recurring bills now appear in the dashboard's Upcoming card
  • Categorization no longer creates ghost buckets — unknown names land in Other where the budget can find them
Added
  • Downloads folder auto-import — bank exports downloaded from your browser land in Groundwork automatically
  • In-app update banner when a new version is available
  • Recurring-bill offer when you categorize a monthly merchant, alongside the import-rule offer
  • Full-text search inside the built-in help
  • Debt cards can link to an imported account for a bank-basis cross-check on balances
Improved
  • Every silent error path in the app now writes to a log the ⚑ Report button attaches
  • Ledger stays snappy on large histories (row cap with 'show all', debounced search)
  • Database gained performance indexes; imports and re-imports are noticeably faster
  • The deploy pipeline gates every release through 23 automated checks — no more version-string drift or silent regressions