Team management plugin for Filament 5. This is the exact implementation of Laravel 13 Starter Kit Teams functionality, just in Filament.
Adds full team functionality — creating teams, switching between them, inviting members, managing roles — wired into Filament's panel with zero configuration on your part.
Here's a 7-minute YouTube video with package demo.
For reference, I also have a 33-minute video course on Laravel 13 Teams customizations.



This package is designed to be installed on a fresh Filament project, right after filament:install --panels. It creates its own database tables and takes over the panel's tenancy system, so it's best to set it up before building your resources and pages on top.
composer require laraveldaily/filateams
Add the HasTeamMembership interface and HasTeams trait:
use LaravelDaily\FilaTeams\Concerns\HasTeams;
use LaravelDaily\FilaTeams\Contracts\HasTeamMembership;
class User extends Authenticatable implements HasTeamMembership
{
use HasTeams;
// ... rest of your model
}
use LaravelDaily\FilaTeams\FilaTeamsPlugin;
public function panel(Panel $panel): Panel
{
return $panel
// ... your existing config
->registration() // enable if not already
->plugin(FilaTeamsPlugin::make());
}
php artisan migrate
That's it. No additional configuration needed.
/admin/new/admin/{team}/settings, with sections for:
| Permission | Owner | Admin | Member |
|---|---|---|---|
| Update team name | Yes | Yes | - |
| Delete team | Yes | - | - |
| Add/remove members | Yes | - | - |
| Change member roles | Yes | - | - |
| Create invitations | Yes | Yes | - |
| Cancel invitations | Yes | Yes | - |
The built-in roles and permissions can be replaced entirely. Publish the config and point enums.role and enums.permission to your own string-backed enum classes that implement TeamRoleContract and TeamPermissionContract:
// config/filateams.php
'enums' => [
'role' => App\Enums\MyTeamRole::class,
'permission' => App\Enums\MyTeamPermission::class,
],
See src/Contracts/TeamRoleContract.php for the full interface your custom role enum must satisfy.
If you install the package on a project that already has users, those users won't have teams yet. Create personal teams for them:
use App\Models\User;
use LaravelDaily\FilaTeams\Actions\CreateTeam;
$action = new CreateTeam;
User::whereDoesntHave('teams')->each(function ($user) use ($action) {
$action->handle($user, [
'name' => $user->name . "'s Team",
'is_personal' => true,
]);
});
You can run this in tinker or in a seeder/migration.
Publish the config file:
php artisan vendor:publish --tag=filateams-config
This creates config/filateams.php:
return [
// Override the role and permission enum classes
'enums' => [
'role' => LaravelDaily\FilaTeams\Enums\TeamRole::class,
'permission' => LaravelDaily\FilaTeams\Enums\TeamPermission::class,
],
// Override model classes if you need to extend them
'models' => [
'team' => LaravelDaily\FilaTeams\Models\Team::class,
'membership' => LaravelDaily\FilaTeams\Models\Membership::class,
'invitation' => LaravelDaily\FilaTeams\Models\TeamInvitation::class,
],
// How long invitations are valid
'invitation' => [
'expires_after_days' => 7,
],
// Create a personal team when a user registers
'create_personal_team_on_registration' => true,
];
To publish the language files to your application:
php artisan vendor:publish --tag=filateams-translations
This copies the files to lang/vendor/filateams/ where you can modify existing translations or add new languages by creating a folder named after the locale (e.g. lang/vendor/filateams/de/filateams.php).
The package creates three tables and adds one column:
teams — id, name, slug (unique), is_personal, timestamps, soft_deletes
team_members — id, team_id, user_id, role, timestamps (unique on team_id + user_id)
team_invitations — id, code (unique, 64 chars), team_id, email, role, invited_by, expires_at, accepted_at, timestamps
users — adds current_team_id (nullable foreign key to teams)
This schema matches the Laravel 13 starter kit exactly.
MIT
How can I help you explore Laravel packages today?