jeffersongoncalves/filament-user
Filament User adds ready-made user management to your Filament panel: profile editing, avatar uploads, password changes, and a full user resource. Drop-in install, configurable fields, and styling that matches Filament out of the box.
Architecture fit. Unchanged. The package is a Filament plugin bundling a concrete Eloquent User model, a UserResource, a status-aware Login page, and panel registration glue — a fit only for a greenfield Filament panel whose auth, schema, and authorization model are still open. For any app that already owns App\Models\User, this remains an ownership inversion: the package takes custody of a core domain entity in exchange for admin UI. A TPM should still frame this as a model-ownership decision, not an admin-panel decision. The 3.2.0 release adds nothing to the architecture and does nothing to soften this.
Integration feasibility. Still cheap to install; 3.2.0 adds a new, non-trivial integration chore. The lang files moved from resources/lang/{locale}/user.php to resources/lang/{locale}/resources/user.php and every key was renamed (filament-user::user.model_label → filament-user::resources/user.navigation.singular, and so on). Any app that published translations or overrode strings must republish with --force and rewrite its overrides. That is a mechanical but mandatory step, and it must be repeated in every environment and every fork. Everything said previously about reconciling the User model — guards, relations, policies, factories, seeders, tokens, notifications, 2FA, teams — is untouched by this release.
Technical risk. Still high, and the risk profile has sharpened in two specific ways. First, semver discipline is now demonstrably absent: 3.2.0 is a minor bump containing a breaking, documented-as-breaking rename of a public translation namespace. A caret constraint is therefore unsafe; anything less than an exact pin is a live upgrade hazard. Second, the release's own rationale — "aligned with the other jeffersongoncalves filament-* packages" — confirms the original read: version numbers here track the author's portfolio consistency, not downstream consumer impact. The package is governed by an internal starter-kit family, and our interests are not the ones being optimized. Mitigating signal: the release adds a test asserting every locale has the same keys as en, which is the first concrete evidence of any CI in this package. That is a genuine, if narrow, improvement. The 2026-09-27 last-release anomaly from the prior assessment should still be verified. Upstream coupling to Filament internals remains the dominant structural risk: UserResource and the custom Login page break on Filament majors, handled by a single maintainer.
Key questions. All prior questions stand (supported Filament/Laravel/PHP/Livewire matrix; migrations published or shipped; is the User model class swappable; what "status-aware" does on an inactive account and whether it leaks account existence; guards, teams, 2FA, soft deletes). New for 3.2.0: does the --force republish overwrite app-local customizations in place, or does it need a diff-and-merge? Is the old user.* namespace aliased for backward compatibility, or hard-removed (the notes suggest hard removal)? Do we have any code or config referencing filament-user::user.* today? And what does a missing key render as — a raw key string in the UI, or an English fallback? The answer determines whether the failure is visible-and-embarrassing or silent.
Stack fit. Unchanged. Laravel + Filament assumed, no non-standard runtime dependencies. Greenfield panels fit cleanly; brownfield apps fit poorly, with friction concentrated in auth and schema. The 16 new locales (ar, az, de, fa, fr, hi, it, ja, nl, pl, pt, ru, tr, uk, uz, zh_CN; 19 total) modestly improve fit for apps shipping non-English admin UIs, but localization breadth is not a reason to adopt a package that wants to own your User model.
Migration path. Unchanged recommendation, and 3.2.0 strengthens path 2. Do not retrofit into a live application. Either (1) full adoption in a greenfield or prototype context, accepting the model and schema wholesale; or (2) vendor the UserResource and Login page into application code under MIT, keeping our own User model. The translation rename is a direct illustration of path 2's value: a vendored copy makes the translation keys ours, and this class of breaking change stops mattering. Attribution is cheap; a broken auth guard — or a UI full of raw translation keys the morning after a minor bump — is not.
Compatibility. Pin an exact version, not a range; 3.2.0 is proof that minor bumps can break. Beyond the prior checklist (Filament major pin, PHP/Laravel targets, how login is overridden, status column type and default, migration ordering), add: grep the codebase for filament-user::user. to find overrides that will break, and confirm the lang path change is compatible with our Laravel version's translation loader. If status is added by a package migration with no default, existing rows become ambiguous and the failure mode is a locked-out user, not a stack trace.
Sequencing. (1) Read composer.json for the supported version matrix. (2) Grep for filament-user::user. overrides and inventory them. (3) Install into a throwaway app, publish everything including translations, and diff the resulting schema and lang tree against ours. (4) Exercise login against four cases: active user, inactive user, null/legacy status, unknown email — the last two are where enumeration and lockout bugs live. (5) Switch the throwaway app to a non-English locale and confirm labels resolve after the path move, rather than rendering raw keys. (6) Inventory every User reference in our codebase to size the swap. (7) Decide: depend, fork, or copy. (8) If depending, pin the exact version, isolate plugin registration behind a config flag, and add the translation republish to the upgrade runbook.
Maintenance. Bus factor of one, and the 3.2.0 release shows what that means in practice: breaking changes arrive on the maintainer's portfolio-alignment schedule, in minor versions, with no deprecation window. If we fork, we become de facto maintainer. The mitigating factor is unchanged — a model, a resource, a page, a plugin class, and now a lang tree; small enough to read fully and own deliberately. Budget a source review on each upstream release, not just each Filament upgrade, and treat every version bump as potentially breaking regardless of the number.
Support. Effectively none. No issue-history corpus, no community answers, unknown response time, no deprecation policy. Do not route production incidents upstream. The translation-key migration is exactly the kind of question that would be answered instantly by a healthy community and is instead answered only by reading the diff.
Scaling. Runtime scaling remains a non-issue. Organizational scaling risk is unchanged and now has a concrete precedent: status semantics drifting between admin panel, API, and background jobs, and — newly — translation keys forking per team as each app hand-patches the rename differently. Fix the status enum and the translation override policy in a shared spec before the first adoption, or the second adoption will diverge.
Failure modes. Filament major upgrade breaking the resource or login contract; conflicting or duplicate users migrations; auth lockout when status is unset or legacy rows default to inactive; account enumeration via a distinguishable "disabled" response; silent breakage of relations and policies if the model class is swapped; abandonment forcing an emergency fork; and now, post-3.2.0, broken translation keys surfacing as raw key strings in the admin UI after an upgrade or a missed --force republish in one environment. The enumeration and lockout cases remain the two a TPM must see tested before sign-off; the translation regression is the first thing to check after any upgrade.
Ramp-up. Engineering ramp is still hours — small, idiomatic Filament code. The real ramp is product and process: validating fit, specifying status semantics, writing the depend-vs-copy decision record, defining an internal fork policy, and adding a version-pin-and-republish step to the upgrade runbook. Recommended posture: unchanged and slightly firmer — low commitment. Spike it; adopt as a dependency only if we are already on the author's starter kit, and otherwise copy the resource and login page under MIT and own them, translation keys included.
How can I help you explore Laravel packages today?