Releases: otherworld-dev/Budget
Releases · otherworld-dev/Budget
v2.30.2 — Bug fixes
Bug fixes
- Detect-and-add bills no longer fails with a 500 error (#278)
- Cancelling bulk actions no longer misaligns the transaction table (#279)
- Transaction-list dropdowns (column menu and in-cell editors) are no longer clipped on short tables — the table fills the available height (#280)
- The Tags column can now be shown/hidden in the Show/Hide Columns menu (#281)
Upgrades cleanly — no new migrations. See CHANGELOG.md.
v2.30.1 — Bug fixes
Bug fixes
- Adding a detected recurring bill no longer fails with a 500 error. The detect-and-add flow (the Detect Bills results and the new suggestions card) passed mis-ordered arguments into bill creation, throwing a server-side error for every detected bill. (#278)
- Cancelling bulk actions no longer misaligns the transaction table. The checkbox column header was hidden while the rows kept theirs, shifting every column until a page reload. (#279)
Upgrades cleanly from 2.30.0 — no new migrations. See CHANGELOG.md.
v2.30.0 — Budgeting Depth
Budgeting Depth
The workflows that make a money app a daily driver:
- Envelope (rollover) budgets — unspent budget carries into next month, overspend carries as a deficit; per-category toggle, always derived live from your real spending (docs)
- Statement reconciliation — enter the statement's ending balance, tick transactions off, watch the difference hit zero live; resumable sessions and per-account history (docs)
- Proactive bill suggestions — the Bills view spots recurring payments you aren't tracking; one-click create, permanent dismiss
- Budget digest — opt-in weekly/monthly summary as a notification and optional themed email
- Unusual spending alerts — "Groceries is 45% above your typical level" — median-based, noise-guarded, once per category per month
- Scheduled monthly PDF reports — auto-saved to your Files and/or emailed
Fixed
- Bill auto-detect patterns now actually work — imports and bank syncs mark matching bills as paid with the transaction linked (#274)
- Envelope carryover respects custom budget start days
- Transaction search case-insensitive on PostgreSQL/SQLite (shipped in 2.29.0, noted here for completeness)
3 database migrations run automatically on upgrade. See CHANGELOG.md for full details.
v2.29.0 — Nextcloud Integration Pack
Nextcloud Integration Pack
Budget now feels like a first-class Nextcloud citizen:
- Nextcloud dashboard widgets — Upcoming bills and a budget/balance overview on Nextcloud's own dashboard (enable via Customize)
- Unified search — Find transactions from the Nextcloud search bar; results open the app with the search pre-filled
- Bills calendar feed — Subscribe to your bills from Nextcloud Calendar, phones, or Thunderbird via a token-secured ICS feed (Bills → Calendar feed), including custom schedules and reminders as calendar alarms
- Receipt attachments — Attach receipts/invoices to transactions, stored in your own Files (upload or pick existing); 📎 badges, thumbnails, renames followed automatically
Fixed
- Bank sync connections no longer get permanently stuck after one failed sync — error-state connections now retry on manual sync and the daily job, and the real provider error is shown (#277)
- Transaction search is now case-insensitive on PostgreSQL and SQLite
- Deep links (
#/transactions,#/bills, …) are honored on page load
See CHANGELOG.md for full details.
v2.28.3
Security
- Closed a mass-assignment gap in the recurring-income update endpoint — a crafted payload could set internal fields such as the owning user (integrity only, no data disclosure). Update keys are now allowlisted like the other endpoints.
Fixed
- Auto-derived budgets (#269) now behave correctly and consistently everywhere: frequency math fixed (semi-annual was over-counted 6×, semi-monthly halved, custom schedules counted monthly, one-time bills counted every month), bill start/end dates respected, past months untouched — and the dashboard Budget Remaining hero, Budget Progress/Breakdown widgets, Budget Health score and budget alerts now apply the same recurring fallback as the Budget view.
- Recurring income summaries: semi-monthly income was counted at half its value; one-time income at full value every month until received. Transfers page monthly totals had the same gaps.
- Live forecast cache: invalidation never matched the stored key (changes like toggling "exclude from forecast" appeared to do nothing for up to 5 minutes), and the key now respects shared-account visibility.
- Editing a bill's amount without updating its split template is rejected when the stored splits no longer match; setting a split template via the API clears the bill-level category.
- Multi-account import partial failures (e.g. a deleted destination account) are reported instead of masquerading as full success, and balances are always recomputed for already-imported rows.
- Import preview parity: repeated bank transaction IDs (OFX FITIDs) within one file are flagged as the duplicates they are, including for accounts the import will create.
- The scheduled-transactions background job now derives balances from the ledger (last remaining hand-computed balance delta).
- Marking a bill paid warns specifically when linking the selected transaction failed.
See the full changelog for details.
v2.28.2
Fixed
- Account balances are now derived from the ledger instead of running deltas — the root cause behind every historical balance-discrepancy report (#3, #89, #124, #163, #187, #194, #274). Every transaction create/update/delete (plus imports, bank sync, retroactive rules and repairs) now recomputes
balance = opening balance + net of non-scheduled transactions, making drift impossible and self-healing past inconsistencies. A one-time migration backfills the opening balance so your displayed balances do not change on upgrade — any historical difference is folded into the account's opening balance, which you can correct once against your real bank balance (#274) - Dashboard could render half-empty (hero tiles only, widget grid invisible): a chart resize on a hidden tile's detached canvas threw during initialization and the grid was never revealed. Also likely behind data-dependent "nothing happens" reports (#273)
- Dashboard tiles with a saved account selection pointing at a deleted account no longer 404 and stay empty — stale selections fall back to all accounts
- Marking a bill as paid now warns loudly when no transaction was recorded (bill without an account, or creation failed) — previously the bill advanced silently and the balance never reflected the payment (#89, #274)
- "Skip Duplicate Transactions" disabled is now honored — the whole batch imports, including intentional duplicates (#275)
- Import duplicate detection no longer flags legitimately identical rows (e.g. two same-priced purchases on the same day) — identical rows in one file import as distinct transactions while re-imports still dedup correctly; re-importing an older statement recovers previously mis-skipped rows (#276)
- The app's export→import now preserves transaction status (scheduled rows no longer silently become balance-affecting after a migration)
See the full changelog for details.
v2.28.1
Fixed
- Install/upgrade crash on Nextcloud 32 and earlier — the
budget_import_templatesmigration created its primary key without an explicit name, so Nextcloud derived a default name and hit the Oracle-compatibility identifier limit ("Primary index name … too long"). The unprefixed table name is exactly 23 characters, which trips the>= 23check on NC ≤ 32 (the limit is 63 on NC 35, which is why it wasn't seen in testing). The primary key now has an explicit short name. Existing installs are unaffected. Thanks to @TheUnderdev for the report and fix (#272).
Supersedes v2.28.0 — see the full changelog for everything in the 2.28 series.
v2.28.0
Summary
A large feature release rolling up everything since v2.27.8.
New
- Shared savings goals — share a goal with another user; recipients can view, and with write access edit/add money (owner-only delete) (#255)
- Auto-derived budgets from recurring items — categories with no manual budget show their committed recurring total (bills + income) as an "auto" limit; type a value to override (#269)
- Exclude extraordinary/one-time items from the forecast — per-transaction flag, recurring bill/income flag, and an import-rule action; flagged amounts still affect your balance but not the projection (#270)
- Reusable CSV import templates + OFX/QIF account routing (#247)
- Bank sync: pending transactions with auto-reconcile when they clear (#257)
- Bill start dates (#268)
- "Shared with me" expenses view (#248)
- Dashboard period indicator on chart tiles (#250)
Fixed
- Mobile dashboard now collapses to a single column (#249)
- Excluded-from-reports categories hidden in Budget view (#266, #267); category chart income sign (#265); savings-goal tag totals (#264); recurring income description (#263); transfers excluded from dashboard totals (#262); per-account currency in Account Breakdown (#256); unauthenticated PageController crash (#259); iOS Quick Add date (#235)
See the full changelog for details.
v2.27.8
Summary
- Cross-currency transfer support — Transfers between different-currency accounts now show a destination amount field with auto-filled exchange rate (#254)
- Factory reset fix — Works on PostgreSQL now (DELETE with JOIN replaced with subquery pattern) (#253)
- PHP 8.4 compatibility — Fixed
str_getcsvdeprecation warning in CSV import (#252) - Transfer deletion fix — Deleting a linked transfer now unlinks the counterpart first (#254)
- Pension detail panel — Fixed missing DOM elements and display override
- German translations — Updated from Weblate
See the full changelog for details.
v2.27.7
Summary
- Shared account operations — Users with write access to shared accounts can now delete, update, and split transactions (#245)
- Categorized transfer totals — Properly handles excluded categories for all transfer types (bank↔bank vs bank→credit card) (#243)
- Quick Add iOS polish — Better link contrast, consistent input sizing, web app meta tags (#235)
See the full changelog for details.