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 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. ```bash 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 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. ```php @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.
Laravel Jetstream
Products
Laravel Daily (3 mentions) notes Laravel Jetstream's features were previously built-in, but modern starter kits now favor a custom approach, referencing videos like "Building Laravel Saas: Part 3/5 - Teams and User Invitations" and "NEW! Laravel Custom Community Starter Kits".
- Mar 29, 2026
- Dec 23, 2025
- Dec 19, 2025
- Dec 3, 2025
- Nov 24, 2025
Overview of Community Starter Kits Laravel 12 has introduced a paradigm shift in how developers initialize projects. With the release of Laravel Installer 5.14, users can now bypass official defaults in favor of community-crafted scaffolds. This feature addresses a common pain point: the desire for specific tech stacks—like pure Blade without Livewire or React—that the official Laravel starter kits may not prioritize. By leveraging the `--using` parameter, the installer now acts as a flexible bridge to the wider ecosystem. Prerequisites and Requirements Before utilizing this feature, ensure you have the Laravel Installer version 5.14 or higher. Familiarity with Composer, PHP 8.2+, and the terminal is essential. If you intend to build your own kit, your repository must be a full Laravel application—not a package—and must be hosted on Packagist. Key Libraries & Tools - **Laravel Installer 5.14**: The command-line tool that facilitates the `--using` flag. - **Tony Lee's Registry**: A curated repository by Tony Lee listing available community kits. - **Packagist**: The primary PHP package repository where these starter kits must reside. - **Laravel 12**: The underlying framework version supported by these new scaffolds. Code Walkthrough: Implementing Custom Kits To install a specific community kit, use the following syntax in your terminal: ```bash laravel new my-project --using="vendor/package" ``` Behind the scenes, the installer modifies the standard `composer create-project` command. It replaces the default Laravel repository URL with the one you provided. This bypasses the standard setup prompts for Breeze or Jetstream. For kit creators, your `composer.json` must include a `post-create-project-cmd` to handle setup tasks like environment configuration: ```json "scripts": { "post-create-project-cmd": [ "@php artisan app:install-features", "@php artisan migrate" ] } ``` Practical Examples: Blade and LaraSonic A standout example is the Blade Starter Kit by Christian Taylor. It recreates the modern Laravel dashboard design using only Blade templates, effectively stripping away Livewire or React dependencies. Another example is **LaraSonic**, which includes pre-built team management and subscription features right out of the box. Tips & Gotchas Community kits come with no official guarantee from the Laravel core team. You must verify the security and maintenance status of any third-party repository you use. Common issues include version conflicts between React or Vue dependencies and default environment variables—such as mandatory email verification—that might differ from standard Laravel behavior.
Mar 14, 2025Overview of the Jetstream Ecosystem Laravel Jetstream represents the sophisticated evolution of application scaffolding. While Laravel Breeze offers a minimal entry point, Jetstream provides a robust foundation for complex projects requiring professional-grade features out of the box. It manages the heavy lifting of authentication, team management, and API infrastructure so you can focus on core business logic. Prerequisites and Installation To get started, you should be comfortable with the PHP ecosystem and the basic Laravel directory structure. You can initiate a project using the Laravel installer by selecting Jetstream as your starter kit. During installation, you must choose between two frontend stacks: Livewire with Blade or Inertia.js with Vue.js. Key Libraries & Tools - **Laravel Sanctum**: Powers the API token system, allowing users to issue scoped permissions for third-party integrations. - **Livewire**: A framework for building reactive interfaces using only PHP. - **Inertia.js**: Bridges the gap between server-side routing and modern single-page applications. - **Tailwind CSS**: Handles the utility-first styling for the entire dashboard and profile views. Customizing the Logic with Action Classes Jetstream utilizes "Action" classes to handle core logic, found in `app/Actions/Jetstream`. This pattern keeps your controllers clean and your logic reusable. ```php // Example: Configuring permissions in JetstreamServiceProvider Jetstream::role('admin', 'Admin', [ 'create', 'read', 'update', 'delete', ])->description('Administrator users can perform any action.'); ``` You can modify these classes to inject custom validation or business rules directly into the user registration or team creation flows. For UI changes, navigate to `resources/views` (for Livewire) to edit the dashboard components or the welcome screen. Syntax Notes & Best Practices Jetstream leans heavily on **Service Providers** for configuration. Use the `JetstreamServiceProvider` to define user roles and granular permissions. One notable pattern is the use of the `features` array in `config/jetstream.php`. Toggling a boolean here can instantly enable Two-Factor Authentication (2FA) or profile photo uploads across your entire app. Tips & Gotchas Avoid treating Jetstream as a package you periodically update. Once installed, the code lives in your application's `app` and `resources` directories. It belongs to you. If you need to change the behavior of the registration process, modify the `CreateNewUser` action directly rather than trying to extend it. Always remember to run your migrations after enabling team support, as it requires specific database tables to track memberships.
Jul 18, 2024The Power of the Laravel Installer Setting up a new project often feels like a chore, but the Laravel Installer transforms this into a streamlined, interactive experience. While you can always rely on Composer to pull in the framework, the dedicated installer acts as a sophisticated wizard. It manages the boilerplate so you can focus on building features. If you use Laravel Herd, you already have this tool at your fingertips. Otherwise, a simple global installation via the command line gets you started. Prerequisites Before running your first command, ensure your environment meets these requirements: * **PHP 8.2+**: The latest Laravel versions require modern PHP features. * **Composer**: Essential for managing PHP dependencies. * **Database Driver**: Knowledge of SQLite, MySQL, or PostgreSQL. Interactive Project Scaffolding When you execute the `laravel new` command, the installer initiates a conversation. It doesn't just copy files; it configures your entire stack based on your preferences. ```bash Start a new project named 'nexus' laravel new nexus ``` You will choose between starter kits like Laravel Breeze for simple authentication or Laravel Jetstream for robust team management. You also decide on your frontend stack—Livewire for TALL stack enthusiasts or Vue.js with Inertia for those who prefer a single-page application feel. Choosing Your Testing Strategy Laravel prioritizes developer confidence. The installer asks whether you want to use PHPUnit or Pest. While PHPUnit is the industry standard, Pest provides a highly readable, functional syntax that many modern developers prefer for its expressive nature. Database and Migrations Modern development increasingly favors SQLite for its simplicity. The installer can automatically create your database file and run your initial migrations. This means that within seconds of finishing the prompt, you have a fully functional application with a working login system and database schema. Tips & Gotchas * **Latest Version Only**: The installer always pulls the latest stable release (e.g., Laravel 11). Use Composer directly if you need a specific legacy version. * **Git Initialization**: The installer offers to initialize a repository for you, saving another manual step in your workflow.
Jun 5, 2024The Mission to Lower the Barrier to Entry Software development moves fast, and even established ecosystems can accumulate technical debt in their documentation. For Laravel, the goal has always been to provide the most accessible entry point for web developers. However, as the stack evolved to include complex frontend tools and various local environment managers like Valet or Homestead, the onboarding process became fragmented. The introduction of Laravel Sail represents a fundamental shift toward a unified, containerized development environment that works regardless of the user's local machine configuration. The philosophy behind this update is simple: a developer should be able to go from a fresh laptop to a running application with nothing but Docker Desktop installed. By removing the need to manually configure local versions of PHP, MySQL, or Node.js, the framework eliminates the "it works on my machine" friction that often plagues newcomers. This isn't just about convenience; it is about ensuring the longevity of the ecosystem by making it the obvious choice for both students and seasoned professionals. Prerequisites and Environment Setup Before jumping into the commands, you need a basic understanding of Docker concepts, such as containers and images. While you don't need to be a Docker expert, knowing that your application runs in an isolated environment is key. Ensure you have Docker Desktop installed and running on your machine. For Windows users, Taylor Otwell strongly recommends using Windows Subsystem for Linux 2 (WSL2) to ensure the filesystem performance remains snappy. Key Libraries and Tools * **Laravel Sail**: A light CLI shim for interacting with Docker Compose. * **Laravel Breeze**: A minimal, simple starter kit for authentication using Blade and Tailwind CSS. * **Mailhog**: An email testing tool that captures outgoing mail for easy previewing. * **Composer** & **npm**: Dependency managers for PHP and JavaScript, respectively, both of which run inside the Sail containers. Code Walkthrough: Building Your First App The initialization starts with a simple curl command that fetches a specialized installation script. This script handles the Docker heavy lifting for you. ```bash curl -s https://laravel.build/example-app | bash ``` This command triggers a small, temporary Docker container that runs Composer to create the project directory. Once the process finishes, you navigate into the folder and start the environment: ```bash cd example-app ./vendor/bin/sale up ``` The `up` command initializes the Docker Compose stack defined in your `docker-compose.yml`. On the first run, this pulls the necessary images for PHP 8.0 (or 7.4), MySQL, Redis, and Mailhog. Once the containers are active, your application is live at `http://localhost`. To interact with the environment, Sail provides proxies for common commands. Instead of running a local version of Artisan or PHP, you prefix your commands with `sail`: ```bash sail artisan migrate sail composer require laravel/breeze --dev sail npm install && sail npm run dev ``` These commands execute inside the container, ensuring that the environment exactly matches what is defined in your project configuration. Syntax Notes and Best Practices A major convenience factor involves setting up a bash alias. Typing `./vendor/bin/sail` every time is tedious. By adding `alias sail='[ -f sail ] && sh sail || sh vendor/bin/sail'` to your shell profile, you can simply type `sail` for all interactions. Another notable pattern is the use of Laravel Breeze for authentication. While Jetstream offers advanced features like team management and two-factor authentication, Breeze is preferred for those learning the ropes because it publishes simple Blade templates and controllers directly into your app. This makes the code transparent and easy to modify. Practical Examples and Debugging One of the most practical features included in the default Sail stack is Mailhog. In a traditional environment, setting up an SMTP server for local testing is a chore. With Sail, you simply visit `http://localhost:8025` to see every email your application sends. If you need to perform manual database maintenance, you don't need a special Docker GUI. Tools like TablePlus can connect directly to `127.0.0.1` on port `3306`, as Sail maps the container's internal ports to your local host by default. Tips and Gotchas * **Permissions**: On Linux, you might encounter file permission issues when Docker creates files as the root user. Sail attempts to handle this by mapping your local user ID to the container user. * **Existing Services**: If you already have MySQL or Apache running on your host machine, Sail may fail to start because ports 80 or 3306 are already taken. Be sure to stop local services before running `sail up`. * **Version Switching**: You can easily toggle between PHP versions by changing the build context in your `docker-compose.yml` and rebuilding the containers with `sail build --no-cache`.
Dec 8, 2020