ph-il/money-bundle
ph-il/money-bundle brings structured money handling to Laravel/PHP apps, with helpers for monetary values, currencies, formatting, and conversions. Use it to keep prices, totals, and currency logic consistent and reusable across your project.
Architecture fit — unchanged: still poor for a Laravel target. v6.4.1 is a dependency-hygiene patch (Remove unuse requirement); it does not alter the package's shape. It remains a Symfony bundle — a Bundle subclass, a DI extension with a configuration tree, and optional Twig/Doctrine/formatter wiring — none of which is reachable from a Laravel ServiceProvider. The new release notes confirm rather than soften this: the roadmap is expressed entirely in Symfony terms (Symfony 7.4|8, then Symfony 8.0), so the maintainer's investment is going into the framework glue we cannot use. The package still resolves, in a Laravel context, to "moneyphp/money plus dead code."
Integration feasibility — unchanged: low as-is, high if decoupled. The release notes are pure roadmap and requirement bookkeeping; no new integration surface, no bridge, no framework-agnostic core. Decoupling remains the only sane path: require moneyphp/money directly.
Technical risk — the vendor risk is now higher, not lower, despite a more active maintainer.
The release notes are the substantive change here. They are not release notes for a patch release; they are a forward plan embedded in a bugfix tag, and they materially sharpen three of our earlier concerns:
| Signal | Reading |
|---|---|
| "Version 6.4 will require php 8.4+ and Symfony 7.4 | 8" |
| "Version 8.0 will have lots of rewrite... more modern way" | A committed major rewrite with explicit API-change language and no migration guide, no deprecation timeline. For a package with 0 dependents there is no ecosystem pressure to preserve backward compatibility, and no downstream test suites to catch a break. |
| "Project will move to it's new organization with next version" | Repo/org move is a Composer-metadata and supply-chain churn event: namespace, repo URL, Packagist vendor name, and issue/security-advisory routing all shift. Prior repo-vs-package naming drift already flagged immature hygiene; this compounds it. |
| "phpStan instead of Psalm... will be change in 8" | Mild positive: evidence of intended static-analysis discipline. But it is scheduled for the major after the one that requires PHP 8.4, so the quality signal is 12–18 months out and unverifiable today. |
| "Remove unuse requirement" (the actual 6.4.1 change) | A patch release whose only content is fixing a composer.json requirement. That is a packaging defect that shipped and had to be walked back — small, but it is the third independent signal of dependency-manifest carelessness. |
| Still 1 star, 0 dependents, single maintainer | Unchanged, and now paired with an announced rewrite. Zero downstream validation is most dangerous precisely when the upstream is planning breaking change. |
| MIT license | Clean; unaffected. |
Net: the maintainer is more engaged than the prior assessment credited, and the roadmap shows intent. But engagement in the wrong framework plus an unversioned rewrite plan plus an org migration adds churn risk without adding a single capability we can consume. The underlying moneyphp/money recommendation is untouched.
Key questions to close before any decision
composer.json at 6.4.1 — is the PHP 8.4 / Symfony 7.4|8 floor already enforced, or merely announced? A patch tag that mixes a manifest fix with a future requirement statement is a documentation-accuracy smell worth one composer show to resolve.moneyphp/money major? phpStan "in version 8" implies no static analysis gate now.Stack fit. Unchanged and unaffected by this release. moneyphp/money fits our stack (immutable value objects, integer minor units, pluggable bcmath/gmp arithmetic, no framework coupling). The bundle does not fit, and v6.4.1 gives us no new reason — or mechanism — to bring it in.
Recommended path. Do not adopt ph-il/money-bundle. Adopt moneyphp/money directly behind a thin internal adapter:
MoneyServiceProvider binding a configured MoneyFactory and an application currency context.{ amount: minor units as string, currency: ISO 4217 } into two columns — never a float column.One to two days of build, and a smaller surface than the bundle would have provided even in Symfony. Note the roadmap reinforces this: pinning a bundle whose next major is a self-described "lots of rewrite" means our adapter would be the stable layer regardless.
Migration path. Still greenfield — 0 dependents, no internal adoption. The v8 rewrite slightly improves our position: there is nothing of ours to migrate, and no upstream API we have bet on. If a Symfony service using the bundle is ever acquired, plan for it to be stranded on the pre-8 line; the bundle's config is small by construction and can be inlined while keeping moneyphp/money pinned.
Compatibility gates.
moneyphp/money's supported PHP range against our Laravel runtime (Laravel 10/11/12 imply PHP 8.1/8.2+). Irrelevant to the bundle decision, but relevant to which moneyphp major we pin.ext-bcmath or ext-gmp in every environment, including CI and container images — still the most common silent failure.BIGINT or string columns for minor units, not INT.Sequencing.
Maintenance. Whoever adopts this bundle owns it, and v6.4.1 makes that ownership more expensive, not less. The roadmap commits to: an org migration, a static-analysis toolchain swap, a PHP floor jump, and a self-described "lots of rewrite" — all in the next two majors, all announced without dates, deprecation policy, or migration guidance. With one maintainer and no dependents, none of that lands on a schedule we can influence. A ~200-line adapter we wrote is still strictly less maintenance: its blast radius is code we can read in one sitting, and it has no upstream roadmap at all.
Support. No vendor, no SLA, no advisory channel we can currently name — and the advisory channel is about to move, with the new org not yet stated. For payments-adjacent code that is a governance gap, and it remains the strongest single argument against adoption. The phpStan commitment is a genuine positive signal about intent; it is not a support commitment.
Scaling. Performance remains a non-issue — thin wrappers over integer arithmetic; throughput is dominated by our own DB and serialization choices. The thing that does not scale is organizational coupling to an integration layer with an unannounced rewrite on its roadmap. Library-plus-shared-internal-package scales fine.
Failure modes to design against.
RoundingMode and assert it in tests.moneyphp/money major into a build with no integration tests — now compounded by an upstream v8 rewrite that may change both its own API and its dependency constraints at once.bcmath/gmp in a new environment failing at first monetary operation rather than at boot.Ramp-up. Unchanged and low: the Fowler Money pattern is well documented, moneyphp/money has a clear API and active user base. Budget half a day per engineer, plus a short alignment session with finance on rounding, allocation, and cash-rounding rules. That conversation is where the real risk sits, and no package in this space — bundle, library, or rewrite — will have it for us.
Bottom line. v6.4.1 does not change the recommendation, and it slightly strengthens it. The release is a manifest-hygiene fix carrying a roadmap: an org move, a PHP 8.4 / Symfony 7.4|8 floor, a linter swap, and an announced v8 rewrite, all with no dates, no deprecation policy, and still zero downstream users to validate any of it. That is more maintainer activity in a direction we cannot consume, attached to more churn than we want in a payments path. Reject the bundle; standardize on moneyphp/money behind a small internal adapter we control. Score holds in the low-3s — the maintainer's intent is now visibly better, but the deliverable is still a single-maintainer, zero-adoption, wrong-framework wrapper whose next two majors are explicitly unstable.
How can I help you explore Laravel packages today?