kantorge/yaffa
YAFFA is a self-hosted personal finance manager built with Laravel. Track accounts, transactions, budgets, and investments; import bank statements; categorize spending; and generate reports through a clean, responsive web interface with multi-currency support.
Budget entity with a combined Schedules and Budgets report, budget-vs-actual drill-down, inflation-adjusted forecasting, and dashboard widgets. v4.1.0 extends the reporting surface with dedicated payee and category show pages, i.e. entity-level drill-down rather than only aggregate reports. That is a modeled domain you would otherwise have to design and build — a concrete input to "do we build our own budget module or adopt this."APP_KEY on first boot, and HTTPS ships as a Caddy Compose profile with a configurable APP_PORT. "One command to a working, TLS-terminated instance" changes the hosting-cost side of the buy-vs-run comparison against per-seat subscriptions.rrule column, with ordinal weekday patterns ("first Wednesday of every month"), "N days before month end," and "last business day of month." If your roadmap includes subscriptions, payroll-like schedules, or reminders, this is a standards-based engine rather than a bespoke frequency/interval model.ext-bcmath removes rounding drift in split totals, investment values, and monthly summaries, and over-precise input is rejected instead of silently rounded. Use this to decide whether the numbers are trustworthy enough to show users, auditors, or downstream systems.read/write/settings) plus optional TOTP 2FA with recovery codes make it defensible to expose an API to customers or internal automation. v4.1.0 continues the security hygiene story (axios upgraded for a disclosed vulnerability, package.json vulnerability fixes) without changing the API contract — which is the pattern you want from a dependency you expose.sentry/sentry-laravel. If your run-cost model assumed built-in error tracking, add APM/log aggregation to the self-host column — this is a real (if small) shift in the run-vs-buy arithmetic.migrate:rollback. That forces a freeze window, a rehearsed migration, and a backup policy onto the roadmap — plan it as a project, not a dependency bump. v4.1.0 is a routine minor with no announced breaking changes, so it is a low-friction follow-on once you are on 4.x; the v4 cutover remains the expensive step.Confidence note: this assessment is derived from the v4.0.0 and v4.1.0 release notes only — there is no usage data, and no hands-on evaluation of v4.1.0 behavior, behind it.
Consider it when:
ext-bcmath; your team is comfortable operating PHP + Vue and is willing to run its own error tracking, now that the bundled Sentry integration is gone.php artisan app:check:budget-migration, back up the database, and follow UPGRADE.md.Look elsewhere when:
require into an existing app. This is a full application you fork and operate, not a drop-in package./api/v1/* are now decimal strings, not JSON numbers, and GET /api/v1/transactions/scheduled-items no longer accepts type=budget|budget_only|both|any. Both are silent-breakage risks for typed clients.RECAPTCHA_* variables are no longer read.For executives. This is a mature, self-hosted personal-finance and budgeting application on Laravel, not a paid subscription product. The commercial case is cost avoidance and data ownership: no per-seat fees, your financial data stays on infrastructure you control, and v4 made deployment genuinely cheap — docker compose up -d yields a working instance with a generated APP_KEY, and TLS is a Compose profile flag. The security posture also crossed a credibility threshold at 4.0: scoped API tokens, optional TOTP two-factor with recovery codes, and an XSS fix. v4.1.0 is a maintenance-and-polish release: it keeps the dependency stack patched (including a security upgrade to axios), adds payee and category drill-down pages, and tightens the AI document pipeline, with no breaking changes announced. Two caveats for the risk slide. First, the maintainer removed Sentry error tracking, so monitoring is now your responsibility. Second, the AI features are tied to third-party model IDs, and retired OpenAI models had to be deprecated in this release — capability does not decay, but the plumbing under it does. The core counterargument is unchanged: adopting this means forking and operating an application, not adding a dependency. Recommendation: pilot on a non-critical instance, and treat the 4.x upgrade as a small, well-defined project rather than a background chore.
For engineering. Stack is Laravel 13 and PHPUnit 13, with exact decimal arithmetic via ext-bcmath and RFC 5545 rrule recurrence replacing the old frequency/interval/count/end_date columns. Frontend is Vue with a cached formatter layer plus virtual scrolling on account history. From the 4.0 breaking set, the items to plan around remain: the transactions.budget flag is gone and budget-only rows are converted into Budget records and deleted from transactions; API money fields are decimal strings; the scheduled-items type filter is removed; reCAPTCHA is dropped; deleting an AI document no longer cascades to its transaction. Laravel 13 also changes default CACHE_PREFIX, REDIS_PREFIX, and SESSION_COOKIE — pin them in .env or you will silently invalidate existing cache and sessions. Sequence the cutover: latest 3.x → app:check:budget-migration → backup → 4.x, with no rollback path.
What 4.1.0 asks of you. No announced breaking changes, so this is a normal minor upgrade, but verify four things on a staging copy first: (1) sentry/sentry-laravel was removed — drop any Sentry DSN config and confirm your replacement error path; (2) the preferred import profile moved from account_entities to accounts, so check import defaults and anything reading that column directly; (3) Select2 was replaced with Tom Select, so re-test import/settings forms and any UI customizations layered on Select2; (4) AI extraction now depends on a currently supported OpenAI model — review configured model IDs, since gpt-4o and gpt-4o-mini are deprecated. Also in this release: composer/npm updates including axios 1.18.1 → 1.20.0, a Vue component refactor for data flow, Pest 5 browser tests added, and fixes to AI duplicate detection, related-AI-document layout, the monthly breakdown report layout, and payee/category preference validation. The test investment is a mild positive signal against single-maintainer risk; the Sentry removal is a mild negative for operability.
How can I help you explore Laravel packages today?