kucharovic/money-bundle
A Symfony bundle that integrates the moneyphp/money library, providing Doctrine DBAL types, form types, validators, and Twig helpers for working with monetary values safely and consistently.
What v1.3.0 changes. The release contains exactly one item: added support for Symfony 5.x. There are no new features, no changes to the Money domain surface, no deprecations, no license file, and — critically — no Laravel-relevant work of any kind. This is a compatibility bump that keeps an existing Symfony bundle installable on Symfony 5 applications. It does not introduce new extension points, new container behavior, or new value to a stack that is not Symfony.
Two observations matter more than the changelog line itself. First, the bump is to a framework major that is already past its useful life: Symfony 5.4 has been out of bug-fix support since November 2024 and is in security-only maintenance, so the bundle has been modernized to a version we would not start new work on. Second, the release demonstrates that the maintainer can still resolve a version constraint, but nothing more — there is no bug fix, no security review, no test or CI signal, and no indication of ongoing stewardship. This is a resurrection, not a revival.
Architecture fit. Unchanged and, if anything, reinforced. The package is a Symfony bundle whose entire value is Symfony-specific extension points: a Bundle subclass, a DependencyInjection\Extension with a semantic configuration tree, tagged service definitions for the Money library's services, and likely Twig extensions, Form types, Validator constraints, and Doctrine DBAL types. v1.3.0 makes those surfaces target Symfony 5, which moves the package further from anything Laravel exposes. A Laravel application still cannot install this meaningfully — no bundle registration, no Configuration tree, no tag compiler pass, no cache warmer. What remains transferable is a composer.json pulling in the upstream Money library plus XML/YAML service definitions a Laravel engineer would read and hand-translate. That is a reimplementation, not an integration.
Integration feasibility. Low, still not worth pursuing. The only transferable artifact is the upstream dependency — almost certainly moneyphp/money — a standalone, framework-agnostic library with no Symfony coupling. A Laravel team needing Money support should depend on it directly and write a thin service provider, an Eloquent cast, and a validation rule: roughly one engineer-day producing code you own, understand, and can upgrade. Nothing in v1.3.0 changes that arithmetic.
Technical risk.
| Risk | Severity | Notes |
|---|---|---|
| Framework mismatch | Blocking | Symfony bundle primitives have no Laravel analog; v1.3.0 deepens the Symfony 5 coupling rather than abstracting it |
| Abandonment | High | The 2020-01-06 / ~5-year-gap claim is now stale — v1.3.0 shipped — but a single constraint bump after a multi-year gap, with 22 stars and 0 dependents, is not a restored maintenance signal. Treat as low-activity, not active |
| License ambiguity | High | Still NOASSERTION. v1.3.0 does not add a LICENSE file or a license field. Most enterprise legal reviews reject a dependency with no clear grant; redistribution and modification rights remain unresolved |
| PHP version ceiling | Medium-High (unverified) | Symfony 5 requires PHP >= 7.2.5, so the bundle's php constraint has probably relaxed to admit 8.x — but we have not confirmed an upper bound, and Laravel 11/12 require PHP 8.2+/8.3+. Verify before assuming either resolution or conflict |
| Dead transitive surface | Medium | Bundles wire Twig, Form, Validator, Doctrine — Symfony components we would install into a Laravel app for no reason, now pinned to Symfony 5 branches |
| Supporting an EOL framework | Medium (new) | The release's headline feature targets a Symfony major in security-only maintenance; adopting it inherits that upgrade clock immediately |
| Quality signal | Medium | Composite score 1.07 with zero dependents remains consistent with a personal/experimental package, not an ecosystem component |
Key questions for the maintainer spike (if it proceeds at all).
moneyphp/money does v1.3.0 target, and are the service definitions trivially reproducible?LICENSE file in the repository, and can the author confirm a standard OSI license in writing? (v1.3.0 does not resolve this.)php constraint range in v1.3.0, and is there an upper bound that excludes 8.3/8.4?brick/money, or in-house value objects) that closes the gap?The opportunity score (4.78) should still be read as "there is value in the Money domain," not "there is value in this wrapper." v1.3.0 does not change that distinction — it is a Symfony-side maintenance release that scores well on domain relevance and zero on fit.
Stack fit. Adopt the domain library, reject the bundle — recommendation unchanged by v1.3.0. Target stack: moneyphp/money (MIT, actively maintained, PHP 8.2 compatible) plus Laravel-native glue. The glue surface is small and well-bounded:
MoneyServiceProvider binding a currency resolver and a money factory to the container.AsMoney Eloquent cast mapping a value object to two persisted columns (amount_minor BIGINT, currency CHAR(3)) that fails loudly on currency mismatch.MoneyRule validation rule accepting { "amount": "1234", "currency": "USD" } payloads in integer minor units.Migration path. Nothing to migrate from unless a Symfony service is being ported — and if it is, note that v1.3.0 targets Symfony 5, so any porting work should assume Symfony 5 idioms, not the 2020-era Symfony 4 configuration the original assessment described. Inventory the bundle's service configuration, map each service to a Laravel container binding, and delete the Symfony-specific decorators (Twig/Form/Validator) in favor of Laravel equivalents. If the package is already pinned in a legacy composer.json, removing it is the migration — verify no application code references bundle namespaces before deletion.
Compatibility. Pin moneyphp/money to a specific major (v4.x) and record the decision. Verify PHP 8.2/8.3 and the current Laravel LTS in CI. Keep the bundle out of the dependency graph even transitively — a NOASSERTION license in the tree is a procurement finding at audit time, and an unresolvable or upper-bounded PHP constraint surfaces six months later as a confusing Composer conflict. If the v1.3.0 PHP range turns out to admit 8.3+, that removes one objection but does not touch the blocking framework mismatch or the license.
Sequencing. (1) One-day spike confirming v1.3.0 adds no behavior we cannot reproduce, recording its php and Symfony constraints and its license status as a formal rejection rationale. (2) Approve moneyphp/money through standard dependency review. (3) Build and test the cast, rule, and serializer against a single reference entity. (4) Ratify the persistence convention (integer minor units + currency column) as an architecture decision record. (5) Roll out to remaining entities; add static analysis to block float-typed money fields.
Maintenance. The bundle is low-activity, and v1.3.0 is a single compatibility commit — it does not establish a cadence. Adopting it means owning a fork of code you did not write, in a framework you do not run, targeted at a Symfony major already in security-only support, to solve a problem upstream already solves. That last point is now sharper: adopting v1.3.0 starts you on an upgrade clock you did not choose. The upstream library, by contrast, has an active release cadence and a real user base. Ownership cost for the Laravel glue stays low: roughly 200–300 lines of well-tested code with a stable interface.
Support. Still no maintainer response path. Twenty-two stars and zero dependents means no community to fall back on and no evidence anyone has run this in production at scale. A six-year-latent constraint bump is not a support commitment. Escalation for a defect remains "read the XML and figure it out," which is the same work as writing the glue — but paid later, under incident pressure.
Scaling. Negligible runtime footprint either way — money conversion is CPU-trivial and stateless. The scaling concern is organizational: without a ratified persistence convention, teams independently invent representations (floats in one table, strings in another, formatted strings in a third), and reconciliation cost grows with the number of services rather than request volume.
Failure modes to design against.
Ramp-up. Under a day for any engineer familiar with Laravel to use the glue; the real ramp-up is domain discipline — minor units, ISO 4217, and where formatting belongs. Budget a short written standard alongside the code so the convention survives team turnover.
Verdict. Do not adopt kucharovic/money-bundle. v1.3.0 warrants a review note but not a change of recommendation: the framework mismatch remains disqualifying on its own, the license remains unresolved, and the headline feature is support for a Symfony major already past its bug-fix window. The release corrects one fact in the prior assessment — the package is not untouched since 2020 — without supplying any evidence of sustainable maintenance. Take the upstream Money library, write the thin Laravel glue, and record the rejection — with v1.3.0 cited — so it is not re-evaluated next quarter on the strength of a version bump.
How can I help you explore Laravel packages today?