rawilk/profile-filament-plugin
A Filament plugin that adds a customizable user profile to any panel, with multi-factor authentication, password management, session management, and more. Opinionated yet flexible, it handles the boilerplate so you can ship faster.
Architecture fit. rawilk/profile-filament-plugin is a Filament v3 panel plugin, not a standalone domain package. It ships its own pages, routes, views, compiled CSS, migrations, config, service classes (Mfa, Agent), and a ProfileFilamentPlugin::make() registration hook. It fits cleanly if — and only if — the host application already runs Filament 3.2+ panels and expects Filament-native navigation, clusters, actions, and layout. It assumes an Eloquent User model with standard auth semantics (password hashes, email verification, remember tokens) and a database-backed session driver for the "active devices" page. Teams running Livewire/nova/custom admin UIs will get little value.
Functionally it covers a well-scoped slice of account self-service: profile details, password change, TOTP/passkey MFA, sudo (password re-confirmation) challenges, pending email change with verification, and session/device revocation. That is a meaningful build-vs-buy delta — these are the flows every SaaS rebuilds badly at least once.
Integration feasibility. The install path is intentionally short: composer require, publish profile-filament-migrations, php artisan migrate, publish profile-filament-config, register the plugin in a panel provider. Realistically a one-to-two week effort for a mid-level Laravel engineer including customization, not a multi-sprint project. The friction lands in the second week: reconciling the package's expected user columns, deciding whether to migrate existing MFA/2FA data into its schema, and re-skinning pages to match design system conventions.
Technical risk. The dominant risk is API volatility, not code quality. The README is explicit that the package is pre-release and that "API and functionality are subject to change without a major version bump." The v0.3.0 release is the proof point: page classes were moved from Filament\Pages\* to Filament\Clusters\Profile\*, plugin methods (addPage, navigation) were removed, a trait was dropped, a dependency was dropped, and the minimum Filament version was raised — all inside a 0.x line. Any team that subclassed or extended those classes took a breaking hit from a patch-adjacent upgrade.
Secondary risks:
0.x package. Expect more of these; the question is whether your review process catches them before users do.rawilk/filament-password-input, bacon/bacon-qr-code ^3.0, @simplewebauthn/browser (compiled asset — you inherit their build, not yours), and passkey/WebAuthn concepts borrowed from spatie/laravel-passkeys. Each is an upgrade gate.Key questions for the team.
0.x minor bump breaks a page subclass or route — hours or a sprint?User model, guard configuration, and session driver match the package's assumptions, or does it need adaptation?Stack fit. Laravel 10/11, PHP 8.x, Filament 3.2+, MySQL/Postgres, database or redis session driver. The package is opinionated about page structure and navigation grouping — teams that have already customized Filament navigation heavily should expect to reconcile.
Migration path.
"rawilk/profile-filament-plugin": "0.7.9"), commit composer.lock, and treat upgrades as deliberate change requests with a review gate. Do not allow ^0.7 in a production branch.database/migrations and own them. Never rely on vendor:publish at deploy time; that couples deploy determinism to a package tag.config/profile-filament.php, with environment-specific overrides for password rules, MFA enforcement policy, and session listing behavior.Compatibility.
@simplewebauthn/browser — the plugin ships compiled JS; browser/webauthn API changes are outside your control.Sequencing.
Maintenance. Budget roughly 10–15% of one backend engineer's time ongoing: tracking CHANGELOG and releases, rebasing the fork, re-running acceptance tests, and handling Filament version upgrades. The true cost is not the package's churn in isolation — it is the coupling of that churn to your Filament upgrade calendar. Every Filament minor bump becomes a two-package upgrade with a plugin compatibility question. Add recurring cost for keeping the compiled front-end assets consistent with your app's Tailwind build if you customize styling.
Support. MIT license, no SLA, GitHub issues as the only channel, single maintainer. There is no commercial backing and no vendor escalation path. This is acceptable for internal admin tooling; it is a harder sell for a customer-facing auth surface. Mitigate by: forking so you can patch unilaterally, maintaining an internal runbook for each profile flow, and pre-authoring the "disable MFA / reset passkey" support procedure your help desk will need on day one.
Scaling. The package itself is not a throughput concern — pages are Filament/Livewire UI, and the expensive operations are ordinary Eloquent writes on the users table. Two things to watch:
sessions table without an index on user_id, this becomes a slow page. Verify indexing and consider a retention/cleanup job.Failure modes. Ranked by severity:
Ramp-up. Documentation lives at randallwilk.dev/docs/profile-filament-plugin and includes installation, configuration, and customization guides — materially better than most 0.x packages. Expect 3–5 days for a Laravel-fluent engineer to be productive and 2–3 weeks for genuine fluency in the MFA/sudo internals (which is what you need to review security-sensitive changes). Onboarding risk is concentrated: if one engineer owns this integration and leaves, you inherit an auth surface nobody understands. Assign a named secondary owner and require that the acceptance tests and runbook live in the app repo, not in someone's head.
Overall read. Technically well-shaped for the narrow case of "Filament app that needs a real profile/security page set." The build-vs-buy math on MFA + passkeys + sudo + session management is genuinely favorable. The cost is a pre-1.0 dependency on your authentication surface with a single maintainer, thin adoption, and a demonstrated willingness to break 0.x APIs. Approve as a pinned, forked, security-reviewed integration with a feature flag and rollback path; reject as a floating dependency dropped into a customer-facing auth flow without an owning engineer.
How can I help you explore Laravel packages today?