msgphp/user-bundle
Symfony bundle for user management with registration, login, password reset, and profile handling. It provides Doctrine-backed user entities and integrates with Symfony Security, with extensible design for custom user models and fields.
msgphp/user-bundle is a reference implementation of a decoupled User domain (entities, repositories, register/change-password style commands, domain events) rather than a full auth stack. It informs the "build vs. borrow" call for registration, profile, and credential lifecycle — but the answer it supports here is borrow the patterns, not the code.msgphp ecosystem (Doctrine, command bus). It is not a Laravel package and offers no Laravel integration. For a Laravel roadmap, the equivalent decisions are served by Fortify, Breeze, Jetstream, Sanctum, and spatie/laravel-permission — this package is out of scope.Adopt only under a narrow set of conditions, all of which must hold:
msgphp family (domain, doctrine, user) and accepts the shared abstractions and upgrade coupling.Look elsewhere if any of the following apply — and for most teams, several will:
Recommendation: treat this as a design reference, not a dependency. Read the command/event structure, lift the separation-of-concerns ideas, and implement on a maintained foundation.
To executives: This is a small, MIT-licensed reference library for modeling the user/account domain. It is not a supported product and not a fit for our stack — it is a Symfony component and we are on Laravel. The value is architectural: it shows a clean way to keep identity logic isolated from the framework. My recommendation is not to add it as a dependency; instead we adopt the pattern on top of a maintained, security-reviewed foundation. Net effect on the roadmap: a small design-spike cost now, avoided maintenance and security risk later.
To engineering: Read it for the bounded-context shape — User as a domain object, registration and credential changes as commands, state changes as events, persistence behind repositories. Do not take it as a dependency: it's Symfony/Doctrine/msgphp-specific, has essentially zero adoption, and sits directly on our most security-sensitive surface. If we want this separation, we implement it against Laravel's native primitives (Fortify for flows, Sanctum for tokens, an event/command layer of our own) so we keep patch coverage and a hiring pool.
Bottom line for the decision log: evaluated and rejected as a dependency; accepted as an internal design reference. Revisit only if we move to Symfony or the msgphp ecosystem gains meaningful maintenance and adoption.
How can I help you explore Laravel packages today?