Laravel 13 adds native team support to official starter kits

Laravel Daily////3 min read

Multi-tenancy arrives for Laravel starter kits

Laravel 13 introduces a long-awaited feature to its official starter kits: native team functionality. This shift means developers no longer need to reach for Laravel Jetstream or build custom multi-tenant logic from scratch just to handle basic group permissions. The integration is baked directly into the installation process, allowing for immediate scaffolding of team creation, member invitations, and role-based access control. Understanding this implementation is vital for anyone building SaaS products where users must collaborate within isolated workspaces.

Prerequisites and installation

To use this feature, you must use the Laravel installer and select specific options.

  • Livewire: You must choose the Livewire starter kit.
  • Class Components: You must select No when asked if you want single-file functional components; the team's logic currently relies on standard Livewire class components.
laravel new my-team-app
# Select Livewire -> Class Components -> Yes to Team Support

Database architecture and team logic

The team system relies on three core tables. The users table gains a current_team_id to track which workspace the user is currently viewing. The teams table stores the owner and the team name. Finally, team_invitations handles the state of pending members.

Under the hood, Laravel uses Laravel Fortify actions to handle the heavy lifting. When a user registers, the CreateNewUser action triggers a CreateTeam handle. This ensures every user has a personal "home" team by default, preventing null pointer errors when the application expects a team context.

Invitation workflows and role hierarchy

Accepting an invitation is currently a two-step process. A guest clicks a signed URL, which redirects them to a login or registration page. Once authenticated, the AcceptInvitation component validates the email match and attaches the user to the team. The system defines three specific roles:

  1. Owner: Full control over settings and deletion.
  2. Admin: Can rename teams and manage invitations.
  3. Member: Read-only access to team data.

Practical example: Role-based view logic

You can check permissions directly in your Blade templates or Livewire components using the provided traits. This allows you to hide the "Delete Team" button from anyone who isn't an owner, a best practice for maintaining data integrity in collaborative environments.

@if (auth()->user()->ownsTeam($team))
    <button wire:click="deleteTeam">Delete Team</button>
@endif

Tips and common gotchas

One notable quirk is the registration flow. If a user is invited via [email protected] but registers with a different email, they will not be automatically added to the team. Always ensure your users know the invitation is tied to the specific recipient email. Additionally, remember to run php artisan queue:work, as team invitations are dispatched as queued notifications by default.

Topic DensityMention share of the most discussed topics · 10 mentions across 7 distinct topics
Livewire
30%· products
Laravel
20%· products
Blade
10%· products
Laravel 13
10%· products
Laravel Fortify
10%· products
Other topics
20%
End of Article
Source video
Laravel 13 adds native team support to official starter kits

NEW in Laravel 13: TEAMS in Starter Kits! (I Tried it)

Watch

Laravel Daily // 10:47

Tutorials, and demo projects with Laravel framework. Host: Povilas Korop

Who and what they mention most
Laravel
39.4%26
Filament
19.7%13
LiveWire
16.7%11
PHP
13.6%9
3 min read0%
3 min read