Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Uuid Extra Bundle Laravel Package

mcfedr/uuid-extra-bundle

A Symfony bundle that adds UUID support to your application, including Doctrine types, form types, validators, and generators so you can use UUIDs as primary keys and identifiers with less configuration.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — poor, unchanged. mcfedr/uuid-extra-bundle remains a Symfony bundle, not a framework-agnostic library. Its three deliverables are all bound to Symfony's kernel and component contracts:

  • ParamConverter — an HttpKernel ParamConverterInterface, registered through Symfony's converter service tag.
  • Normalizer — a symfony/serializer NormalizerInterface/DenormalizerInterface implementation.
  • Form Type — a symfony/form AbstractType for UUID input.

Laravel has no bundle registration mechanism, no param-converter chain, and does not ship symfony/serializer or symfony/form on the request path. Laravel's PackageManifest will never invoke the bundle's getContainerExtension(), so none of the three features self-activate. In a Laravel codebase the package is functionally inert — the only live artifact is its transitive ramsey/uuid dependency, which Laravel already uses internally (e.g. Str::uuid()). Release 4.2.0 changes dependency floors only; it adds no Laravel-facing surface, no service provider, no auto-discovery, and no new capability.

Integration feasibility — low, and the work is duplicative. Every capability maps to a first-class Laravel primitive:

Bundle feature Laravel equivalent
ParamConverter Implicit route model binding + getRouteKeyName() / Route::bind()
Normalizer Eloquent attribute casts, JsonResource / API Resources
Form Type FormRequest + prepareForValidation() + built-in uuid / ulid validation rules

Technical risk — moderate, and the risk profile has shifted rather than shrunk. 4.2.0 "drops support for older PHP and Symfony." Two consequences matter:

  1. The loud failure mode is largely gone. Previously the credible blocker was a Composer conflict between the bundle's 2022-era Symfony constraints and the Symfony 7.x components Laravel 11/12 pull in. With floors raised, the package will more likely install cleanly into a modern Laravel app — which converts a build-time error into a silent, harder-to-diagnose one: a developer sees a green composer require, assumes the ParamConverter/Normalizer work, and gets a raw string or a generic 500 at runtime instead.
  2. The versioning convention is loose. Dropping PHP and Symfony support is a breaking change; shipping it as a minor (4.2.0) means we cannot infer upgrade safety from the version number. Every future Symfony major will require a matching bundle release, and we have no signal that cadence is guaranteed.

The maintenance signal has improved marginally — there is an active release, which invalidates the earlier "no release in roughly four years" characterization — but it does not touch the structural mismatch. The bundle is still inert in Laravel regardless of how fresh its dependencies are.

Key questions for the team:

  1. What is the actual requirement — accepting/returning UUIDs as validated strings at the API boundary, or something more?
  2. Which PHP and Laravel versions are in scope? (4.2.0 raises the floor, so the resolution risk is lower than previously assessed — but confirm the resolved Symfony set against the framework's own.)
  3. Is UUID storage binary(16) or char(36)? This has more impact on performance than anything the bundle does.
  4. Do we need v4, v7 (ordered), or ULID? Laravel supports ordered UUIDs and ULIDs natively.
  5. Is there any reason to prefer Symfony's serializer over Laravel Resources beyond familiarity?
  6. Does a dependency-floor bump change our verdict? No — the blocker is framework contract, not version compatibility. Answer this explicitly in the design note so it isn't re-litigated at the next patch release.

Integration Approach

Stack fit — do not install. Treat this package as a reference implementation to read, not a dependency to adopt. The useful intellectual content is roughly 100–150 lines of logic across three small classes; porting it is cheaper than making it run. 4.2.0 does not change this calculus: a package that installs successfully and then does nothing is more expensive to own than one that fails at composer require, because the failure surfaces in code review or production rather than in CI.

Migration path (recommended):

  1. Add ramsey/uuid directly if not already present (it usually is, via the framework).
  2. Write an Attribute cast implementing CastsAttributes that hydrates a UuidInterface from storage and serializes back to canonical string form.
  3. Add a custom validation rule (or use the built-in uuid rule with a version constraint) plus prepareForValidation() in the relevant FormRequest.
  4. Add implicit route binding using the cast type — Laravel resolves a typed route parameter through the cast, giving the same "404 on malformed UUID" behavior the ParamConverter provides.
  5. Normalize outbound payloads in JsonResource::toArray() so the API contract is single-sourced.

Compatibility. Target PHP 8.2+/Laravel 11+. Avoid any path that requires Symfony's serializer or form components; if the team insists on Symfony-style normalization, wrap it behind our own interface so it can be swapped without touching controllers. Pin ramsey/uuid explicitly rather than letting the bundle's constraint decide it. Note that 4.2.0's raised floors now make the bundle installable alongside Laravel 11/12 — so "it installed fine" must not be treated as evidence of fitness. Add a CI guard (a test asserting the bundle is absent from composer.lock, or a dependency-review rule) if there is any risk of a developer adding it.

Sequencing. (1) Confirm UUID format and DB column type. (2) Land the cast. (3) Land the validation rule. (4) Land route binding. (5) Contract-test accept/reject behavior for malformed, uppercase, and hyphenless inputs. (6) Document that the bundle was evaluated and rejected — and that 4.2.0 was reviewed and does not change the verdict — so it isn't re-proposed at the next release.

Operational Impact

Maintenance. The package is still a liability, though the picture is now "sporadic maintenance" rather than "abandoned." A 4.2.0 that raises dependency floors without a Laravel-facing artifact tells us the maintainer is keeping Symfony compatibility current, not expanding scope. Adopting it means we eventually fork it — at which point we own Symfony component glue inside a Laravel app, which is the worst of both worlds. Also note the semver looseness: if dropping PHP/Symfony support lands in a minor, we cannot rely on version numbers to gate our own upgrades, so every bump needs a manual read of the changelog.

Support. No vendor support, negligible community (still ~18 stars, no meaningful dependents). Troubleshooting requires reading Symfony internals, a skill that is thin on most Laravel teams. Porting the logic in-house puts the code under our own review, tests, and on-call rotation.

Scaling. If genuinely unused, runtime cost is near zero — but so is value. The real scaling variable is storage format: binary(16) with a proper index versus char(36) strings is worth far more than the bundle's normalization layer. If we shoehorn Symfony Serializer in alongside API Resources, we pay a second serialization pass per request, more allocations, and a harder profile. 4.2.0 has no performance implications either way.

Failure modes to watch:

  • Silent non-registration (now the top risk). With 4.2.0 resolving cleanly, a developer expects ParamConverter behavior, gets a raw string, and no error is raised. Previously a Composer conflict would have stopped this at install.
  • Symfony major-version lag. The bundle must ship a release for each Symfony major; if that cadence slips, a future Laravel upgrade blocks on us waiting on a third party — the original conflict risk, deferred rather than eliminated.
  • Type mismatch: UuidInterface object compared against a string column, producing full table scans.
  • Divergent serialization paths yielding inconsistent JSON (uppercase vs lowercase, with/without hyphens).
  • SCA scanner noise from a low-popularity dependency in the SBOM, plus manual review overhead on each loosely-versioned release.

Ramp-up. Porting the three behaviors: one to two days for an engineer familiar with Eloquent casts and route binding. Attempting to operate Symfony components inside Laravel: several weeks plus a permanent maintenance tax — and it must be re-validated on every Laravel major and every Symfony major.

Recommendation. Do not adopt. 4.2.0 is a dependency-floor refresh with no Laravel-relevant capability change; it reduces install-time friction but leaves the package functionally inert and raises the cost of the most likely failure mode by making that failure silent. Cite the package as prior art in the design note, implement the cast, rule, and binding natively, and spend the saved effort on the storage-format decision, which is where the actual performance and correctness risk lives.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin