- Is kantorge/yaffa a Laravel package I can install with Composer into an existing app?
- No. YAFFA is a complete self-hosted Laravel application, not a drop-in library. Composer adoption means deploying the app and integrating with its /api/v1 endpoints and web UI. Treat it as an application dependency with its own release cadence, not a package you compose into an existing codebase.
- What are the requirements to install and run YAFFA?
- YAFFA follows standard Laravel conventions: PHP 8.x with ext-bcmath, MySQL or PostgreSQL, Redis, a queue worker, and the scheduler via cron. Configuration is handled through .env, with the usual artisan migrate and storage linking steps. A Docker setup is provided, though v4 moves Caddy to an https Compose profile, so hand-maintained reverse-proxy configs may need updating.
- Which Laravel and PHP versions does kantorge/yaffa support?
- Version 4 of YAFFA requires Laravel 13 and PHP 8.x with the bcmath extension enabled. That combination changes your base image, PHP build, and Composer constraints together, so it is not a routine composer update. Check the release notes for the exact supported matrix before planning an upgrade from v3.
- Does YAFFA have a REST API for machine-to-machine integrations?
- Yes. YAFFA exposes a versioned /api/v1 surface covering accounts, transactions, scheduled items, investments, and reports. v4 introduces scoped API tokens plus TOTP two-factor authentication, which is the first credible machine-to-machine access story. There are no webhooks or event egress, so any external system must poll the API or read the database directly.
- Why do money and quantity fields return as decimal strings in the YAFFA v4 API?
- v4 switches to exact decimal arithmetic backed by ext-bcmath, so money and quantity fields are serialized as decimal strings rather than floats. Typed clients with strict JSON schema or model binding will either throw or silently coerce, which is the risk. Audit every consumer that parses those fields as numbers before cutover, and note that report endpoints are explicitly unaffected.
- What breaks when upgrading to YAFFA v4?
- Expect decimal-string money fields across /api/v1, removal of the type=budget|budget_only|both|any parameter from the scheduled-items endpoint, and new ext-bcmath and Laravel 13 requirements. Laravel 13 also changes default CACHE_PREFIX, REDIS_PREFIX, and SESSION_COOKIE, which can log every user out or cause key collisions on shared Redis unless you pin them. The reCAPTCHA integration is removed without a stated replacement, so review public registration exposure.
- Is the YAFFA v4 database migration reversible?
- No. Budget-only transactions are converted into Budget rows and deleted from the transactions table, and migrate:rollback cannot restore them. Pivot-table deduplication and key or index changes also happen inside the migration, which can cause long locks on large datasets. Take a verified backup, rehearse the migration against production-scale data, and define an RTO before you cut over.
- Does YAFFA support multi-tenancy, SSO, or SAML?
- No. YAFFA is single-tenant per instance, with no multi-tenancy, SSO, or SAML support. Access control is limited to TOTP two-factor authentication, recovery codes, and scoped API tokens. If your finance-adjacent use case mandates enterprise identity federation, that gap likely disqualifies YAFFA as-is.
- How should I test a YAFFA upgrade before touching production?
- Stand up a staging copy with realistic transaction and pivot volumes, run the migrations, and time how long they take. Replay every API consumer against the new payloads to catch decimal-string coercions and the dropped type= filter on scheduled items. Compare totals before and after to quantify rounding differences, and confirm the queue worker, scheduler, and cache prefixes behave as expected.
- What are the alternatives to YAFFA for a Laravel personal finance app?
- Firefly III is the closest self-hosted comparison, and building finance tracking directly into your own Laravel app is the other common route. YAFFA makes sense when you want a maintained, Laravel-native app with long-term planning, budgets, and multi-currency support out of the box. It is a poor fit if you need an embeddable package, multi-tenancy, SSO, or webhook-driven event integration.