tomatophp/filament-accounts
Filament Accounts Builder is a Laravel/Filament plugin for managing multiple accounts in one table with multi-auth and integrations, ideal for CRMs and multi-account apps. Includes account types, login-by, active/block status, avatars, impersonation, plus import and export.
Check your stack first. v5 requires PHP 8.2+, Laravel 12/13, Filament v5 and Livewire 4. If you are still on Filament v4, do not upgrade — stay on the v4 branch (4.x releases).
Installation
composer require tomatophp/filament-accounts
This pulls in tomatophp/filament-types ^5.0.1 (account types) and maatwebsite/excel (^3.1.64 or ^4.0).
Publish and migrate
php artisan vendor:publish --tag="filament-accounts-config"
php artisan vendor:publish --tag="filament-accounts-migrations"
php artisan migrate
Or run the package install command shipped with the plugin, which handles publishing + migrations for you.
Register the plugin in your panel provider:
public function panel(Panel $panel): Panel
{
return $panel->plugins([
\TomatoPHP\FilamentAccounts\FilamentAccountsPlugin::make(),
]);
}
Configure guards — the README ships an auth.php guard example. Point each guard at its model/guard pair before touching the UI.
config/filament-accounts.php for feature toggles (types, impersonation, import/export).config/auth.php for the guard setup the plugin expects.Open /admin/accounts, let the Accounts Types page generate the defaults, create one account per guard, then verify you can switch between them. That single flow exercises guards, types and the panel integration end to end.
Types are opt-in via the config and the useTypes() plugin method:
$panel->plugins([
\TomatoPHP\FilamentAccounts\FilamentAccountsPlugin::make()
->useTypes(),
]);
Without useTypes(), accounts are flat and the Types page adds no value. Decide this before seeding production data.
The Accounts Types page creates the default customer/account types the first time it's opened. In CI or fresh installs where nobody visits that page, seed the types explicitly so factories, imports and tests don't hit an empty type table.
The Excel actions are first-class and now support maatwebsite/excel 4.x (3.1.64+ also supported). Typical workflow:
Because actions were rebuilt on the Filament v5 schema() API, any custom action you wrote against v4 form arrays must be migrated.
The plugin exposes impersonation (documented in the README). Use it for support workflows rather than handing out guard credentials — combined with a permission check, it keeps the audit trail on the original admin account.
One account record can be reachable from several guards. Keep guard selection in config/auth.php and config/filament-accounts.php — not in ad-hoc middleware — so the panel, policies and impersonation all agree on which guard is active.
This is a major release:
tomatophp/filament-types must be ^5.0.1 — an older filament-types will block the install.maatwebsite/excel must be ^3.1.64 or ^4.0.schema().v4 branch. Don't try to mix.getUrl() signatureAccountTypes::getUrl() now matches the Filament page signature (fix #20). If you overrode or called it in a custom page/navigation entry, re-check the arguments — a mismatch surfaces as a TypeError, not a friendly error.
This was a real breakage for table columns rendered outside a panel context (exports, custom Livewire components, notifications). If you had a workaround guarding Filament::getCurrentPanel(), you can drop it — but verify the column still renders in your non-panel contexts after upgrading.
Config/guard changes and new plugin features routinely look "broken" until caches clear:
php artisan optimize:clear
composer dump-autoload
After a major version bump, also re-publish config and diff it against your existing file — new keys in v5 won't exist in an old published config.
filament-types resolved to ^5.0.1 (composer show tomatophp/filament-types).useTypes(), impersonation, import/export) over subclassing the plugin — the v5 rewrite touched the action layer, so subclassed actions are the most likely thing to break on the next major.How can I help you explore Laravel packages today?