Skip to content

Releases: otherworld-dev/Budget

v2.30.2 — Bug fixes

13 Jun 17:54

Choose a tag to compare

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

13 Jun 14:27

Choose a tag to compare

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

13 Jun 00:38

Choose a tag to compare

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

12 Jun 20:50

Choose a tag to compare

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.

Documentation

v2.28.3

12 Jun 01:13

Choose a tag to compare

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

11 Jun 18:05

Choose a tag to compare

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

08 Jun 11:54

Choose a tag to compare

Fixed

  • Install/upgrade crash on Nextcloud 32 and earlier — the budget_import_templates migration 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 >= 23 check 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

07 Jun 21:16

Choose a tag to compare

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

02 Jun 12:40

Choose a tag to compare

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_getcsv deprecation 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

31 May 13:55

Choose a tag to compare

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.