Skip to content
CAI
Software that uses CAICheck a score

laravel/jetstream

48.6

Weak · 19 September 2026

8k

lines of production code

PHP

with JavaScript

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Laravel scaffolding package that provides starter kits for building multi-tenant web applications with authentication and team management. It supports two distinct frontend stacks—Livewire and Inertia.js—offering pre-built components for user registration, profile management, API tokens, and two-factor authentication. The system enables developers to quickly generate applications with configurable features such as team invitations, account deletion, and dark mode, while ensuring modern standards through PHP 8.2+ support and Vite-based asset compilation.

How it got here

2020 — Jetstream 5.x release and Inertia stack

50 changes.

This period focused on the release of Jetstream 5.x, introducing a new Inertia-based stack alongside the existing Livewire stack. The update modernized the frontend by migrating to Vue 3, Inertia v1, and Vite, while refactoring the backend to use numeric IDs and native PHP types. It also expanded team management features with invitations and account deletion, and updated the installation experience and test infrastructure.

2021–2024 — Vue 3 and Livewire stack modernization

10 changes.

This period focused on migrating the Inertia/Vue 3 stack to the Vue 3 Composition API and introducing comprehensive dark mode and RTL support across UI components. It also involved establishing new baseline stubs for the Livewire stack, adding Pest-based test suites, and refining core authentication and team management features with improved error handling and configuration defaults.

Features

Add Jetstream configuration stub with Inertia stack and Sanctum guard defaults

A new configuration stub file for Laravel Jetstream has been added to the project. This file sets the default application stack to Inertia, configures the authentication guard to use Sanctum, and includes the AuthenticateSession middleware. It also pre-configures the account deletion feature while leaving other optional features commented out, providing a baseline configuration for new installations.

stubs/config · high confidence

Add Team Invitation email class

A new \TeamInvitation\ mail class has been added to handle team invitation emails. This class constructs the email using the \emails.team-invitation\ markdown view, includes a signed URL for accepting the invitation, and sets the email subject to 'Team Invitation'.

src/Mail · high confidence

Added default database seeder for team-enabled installations

A new DatabaseSeeder has been introduced to the application's seeders directory. When the application is installed with team support enabled, this seeder automatically creates a default 'Test User' account ([e-mail redacted]) associated with a personal team, providing immediate access to the system for testing and initial setup purposes.

database/seeders · high confidence

Added team invitation email template stub

A new Blade view stub for team invitation emails has been added to the project's resource views. This template handles the logic for inviting users to a team, including conditional rendering for account creation if registration is enabled, and provides buttons for accepting the invitation or creating a new account.

stubs/resources/views/emails · high confidence

Adds Pest-based test stubs for authentication, registration, and password management

The stubs/pest-tests directory now includes a suite of Pest test files covering core authentication flows. These stubs provide ready-to-use tests for login screen rendering, user authentication, invalid password handling, email verification (with feature flag skipping), password confirmation, password reset workflows, and user registration (also respecting feature flags). A Pest.php configuration file sets up the test case to use RefreshDatabase and extends the base TestCase, ensuring database state is isolated between tests.

stubs/pest-tests · high confidence

Adds TeamFactory and enhances UserFactory with personal team support

The database factories now include a new TeamFactory to generate Team model instances, alongside an updated UserFactory. The UserFactory has been expanded to include all user table columns in its default state and introduces an unverified state for email verification handling. Additionally, it now supports creating users with a personal team via the withPersonalTeam method, which automatically links the user to a newly created team when team features are enabled.

database/factories · high confidence

Inertia-based route stubs for Laravel Jetstream

The application scaffolding now includes a new \stubs/inertia/routes/web.php\ file that defines the default Inertia-based routing structure. This stub sets up the root route to render a Welcome view with login/register availability and version info, and groups authenticated routes (protected by Sanctum, the configured auth session, and verified middleware) to render a Dashboard view.

stubs/inertia/routes · high confidence

Introduce Livewire stubs with dark mode support and updated components

This change adds new Blade view stubs for the Livewire stack, including a navigation menu, dashboard, policy, and terms pages. The navigation menu now supports dark mode styling and uses Alpine.js for the logout action. The dashboard view has been updated to use the new \x-welcome\ component instead of \x-jet-welcome\, and includes dark mode text adjustments.

stubs/livewire/resources/views · high confidence

Jetstream 5.x: New release notes, upgrade guide, and test infrastructure

This release introduces the official CHANGELOG.md and UPGRADE.md documentation files to help users track changes and migrate between versions (specifically 4.x to 5.x). It also updates the test infrastructure by adding a phpstan.neon.dist configuration for static analysis, a testbench.yaml for workbench setup, and migrating the phpunit.xml.dist configuration to PHPUnit 10 standards (including schema updates and cache directory configuration).

(repo-wide) · high confidence

Jetstream v5 introduces Inertia stack, team model customization, and account deletion features

This release adds a new Inertia-based stack alongside the existing Livewire stack, introducing Inertia-specific components like a new Agent class for user-agent detection and an InertiaManager for page rendering. It significantly enhances team management by allowing developers to customize the Team, Membership, and TeamInvitation models via static configuration methods, and adds support for team invitations and account deletion features. The HasTeams trait is updated with a new switchTeam method, improved null-safety in ownership checks, and role-based permission handling, while the HasProfilePhoto trait now supports custom storage paths and deletes photos properly. Additionally, the service provider has been refactored to remove Blade component registration in favor of Livewire components for the Livewire stack and Inertia middleware for the Inertia stack, and banner messages are now supported via RedirectResponse macros.

src · high confidence

New Livewire-based UI component stubs with dark mode and RTL support

This change introduces a new set of Blade view stubs for the Livewire stack, replacing the previous Jetstream-based components. The new components (such as banner, modal, dropdown, and navigation links) are styled with Tailwind CSS and include built-in dark mode support (e.g., \dark:bg-gray-800\) and Right-to-Left (RTL) compatibility (using \start-0\/\end-0\ instead of \left-0\/\right-0\). The dropdown component now uses PHP's \match\ expression for alignment logic and supports additional widths. These stubs serve as the foundation for new applications using the Livewire stack, providing a modern, responsive, and accessible UI baseline.

stubs/livewire/resources/views/components · high confidence

New Livewire-based authentication view stubs

The project now includes a complete set of new Blade view stubs for authentication flows (login, register, password reset, two-factor challenge, email verification, and password confirmation) tailored for the Livewire stack. These views integrate with the existing \x-guest-layout\ and \x-authentication-card\ components, support dark mode styling, utilize the \@session\ directive for status messages, and include proper autocomplete attributes to improve password manager compatibility.

stubs/livewire/resources/views/auth · high confidence

New team lifecycle events for extensibility

This update introduces new event classes—AddingTeam, InvitingTeamMember, and TeamMemberUpdated—to allow applications to hook into specific team management actions. Additionally, the base TeamEvent class has been updated to reference the modern \\App\\Models\\Team namespace, ensuring consistency with current Laravel conventions.

src/Events · high confidence

Removals

Removal of legacy Blade UI components

The \resources/views/components\ directory has been cleared of several legacy Blade components, including \button\, \confirmation-modal\, \danger-button\, \dropdown-link\, \input\, \modal\, \responsive-nav-link\, \secondary-button\, and \welcome\. These files have been deleted, indicating a shift away from the previous UI implementation in this location.

resources · high confidence

Removal of legacy Jetstream authentication view stubs

The authentication view stubs for forgot-password, login, register, reset-password, two-factor-challenge, and verify-email have been removed from the project. These files, which previously utilized the \x-jet-\*\ component namespace (e.g., \x-jet-authentication-card\, \x-jet-input\), are no longer part of the default stubs, indicating a shift away from the legacy Jetstream UI components in favor of a new authentication interface implementation.

stubs/resources/views/auth · high confidence

Removal of legacy Vue 2 Jetstream stubs

The Vue 2 Options API stubs for the Inertia stack have been removed from the project. This includes the deletion of core UI components such as Modal, Dropdown, Button, Input, and various layout sections (ActionSection, FormSection, etc.), as well as navigation and utility components like NavLink, ResponsiveNavLink, and SwitchableTeam. These files are no longer part of the default scaffolding, reflecting the shift away from the Vue 2 implementation.

stubs/inertia/resources/js/Jetstream · high confidence

Removed legacy Tailwind and Webpack Mix stubs

The default project stubs no longer include the legacy \tailwind.config.js\ and \webpack.mix.js\ files. This removes the pre-configured Tailwind CSS setup (including the Nunito font and @tailwindcss/ui plugin) and the Webpack Mix build configuration that previously handled compiling Sass and bundling JavaScript, indicating a shift away from this specific asset pipeline in new projects.

stubs · high confidence

Behavioural changes

Add API Token Management component with Inertia Vue 3 and Composition API

The ApiTokenManager partial has been rewritten to use the Vue 3 Composition API (via \<script setup\>) and Inertia.js for Vue 3, replacing the previous Options API implementation. This change introduces full support for creating, managing permissions, and deleting API tokens, including UI for displaying token values and handling form submissions with server-side validation errors.

stubs/inertia/resources/js/Pages/API/Partials · high confidence

Adds terms/privacy routes, configurable auth guards, and team invitation handling

The application now exposes /terms-of-service and /privacy-policy pages when the terms and privacy policy feature is enabled. Authentication middleware is configurable via the jetstream.guard and jetstream.auth\_session config options, allowing for custom guard usage. Additionally, team invitations can now be accepted via a signed route and deleted, and users can delete their profile photos.

routes · high confidence

AppLayout migrated to Vue 3 Composition API and Inertia v1 data structure

The application layout component has been rewritten to use the Vue 3 Composition API (script setup) and updated to align with Inertia v1 conventions. This includes migrating from Options API to Composition API, updating navigation links to use the Ziggy \route()\ helper instead of hardcoded paths, and adapting the data access pattern from the legacy \$page.user\ to the new \$page.props.auth.user\ structure. Additionally, the layout now supports dark mode styling, implements a team switcher dropdown for multi-tenant environments, and conditionally renders profile photo management based on Jetstream configuration.

stubs/inertia/resources/js/Layouts · high confidence

Eagerly prefetch Vite assets and register team invitation actions

The application now eagerly prefetches Vite assets with a concurrency of 3 to improve perceived performance, and the Teams feature explicitly registers actions for inviting and removing team members, allowing these capabilities to be overridden or customized.

stubs/app/Providers · high confidence

Enhanced user registration and profile update behaviors

The user registration stubs (CreateNewUser and CreateNewUserWithTeams) now support mandatory acceptance of terms of service and privacy policies when the feature is enabled, and password validation is delegated to a shared trait. Profile updates (UpdateUserProfileInformation) now enforce stricter image MIME types (jpg, jpeg, png) and handle email verification: changing an email address on a verified account resets the verification status and triggers a new verification email, while unverified users can update their email without re-verification.

stubs/app/Actions/Fortify · high confidence

Improved 2FA confirmation error handling and state management

The new \ConfirmsTwoFactorAuthentication\ trait introduces robust session-based state tracking for two-factor authentication confirmation flows. It ensures that if a user starts the 2FA confirmation process but fails to complete it (e.g., by reloading the page without entering a code), the system automatically disables 2FA for that user to prevent lockout. Additionally, it correctly timestamps session states to distinguish between initial disablement and active confirmation attempts, providing a more reliable user experience during 2FA setup and recovery.

src/Http/Controllers/Inertia/Concerns · high confidence

Inertia stubs updated to Vue 3 Composition API and new welcome design

The Inertia page stubs have been migrated from the Vue 2 Options API to the Vue 3 Composition API using \\<script setup\>\, including the Dashboard, Privacy Policy, and Terms of Service pages. The Welcome page has been completely redesigned with a new layout featuring documentation, Laracasts, and Laravel News cards, along with updated dark mode styling and Inertia \\<Head\>\ tag management for page titles.

stubs/inertia/resources/js/Pages · high confidence

Inertia-based authentication views for Vue 3

The authentication UI stubs in the Inertia stack have been converted to use Vue 3 and Inertia.js for the Login, Register, Forgot Password, Reset Password, Confirm Password, Verify Email, and Two-Factor Challenge pages. These views now leverage the Composition API (\\<script setup\>\) and the \@inertiajs/vue3\ client, replacing the previous Blade-based or older Inertia implementations. This change provides a consistent, modern client-side rendering approach for all core authentication flows, including proper handling of form state, validation errors, and navigation via Inertia's \Link\ and \useForm\ utilities.

stubs/inertia/resources/js/Pages/Auth · high confidence

Jetstream components migrated to Vue 3 Composition API with dark mode support

The Inertia stub components in the \Components\ directory have been rewritten from the Vue 2 Options API to the Vue 3 Composition API using \\<script setup\>\. This update introduces native dark mode styling across all UI elements (buttons, inputs, modals, and text) via Tailwind's \dark:\ variants. Additionally, the \Modal\ component now utilizes the native HTML \\<dialog\>\ element for better accessibility and behavior, and the \Banner\ component has been updated to correctly display flash messages from the page props.

stubs/inertia/resources/js/Components · high confidence

Major behavioral updates across Livewire authentication and profile components

This change introduces several significant behavioral updates to the Livewire components in src/Http/Livewire. The DeleteUserForm now requires password confirmation before account deletion and properly invalidates the session using the configured guard and session settings. The TwoFactorAuthenticationForm adds support for password confirmation and a mandatory confirmation step (OTP) when enabling 2FA, controlled by Fortify features. The TeamMemberManager now supports inviting team members via a new InvitesTeamMembers contract (if enabled) and allows canceling pending invitations. The UpdateProfileInformationForm now includes the email in its state, sends email verification notifications, and allows deleting profile photos, while also refreshing the navigation menu on updates. The LogoutOtherBrowserSessionsForm now respects the configured session connection and table, uses the auth identifier, and updates the session password hash after logout. The ApiTokenManager now uses the new dispatch method for events and clears the permissions management state after token deletion. The CreateTeamForm and DeleteTeamForm now use a RedirectsActions trait for consistent redirect handling. The NavigationMenu component has been moved from a stubbed AuthServiceProvider to a proper Livewire component that listens for refresh events. Various components have switched from emit to dispatch for event handling.

src/Http/Livewire · high confidence

Migrate API Token Manager to Livewire v3 and add internationalization

The API Token Manager view has been updated to support Livewire v3, replacing legacy \x-jet-\\ component aliases with standard \x-\\ equivalents (e.g., \x-form-section\, \x-button\) and adopting the new \wire:model.live\ syntax for modal state binding. Additionally, all user-facing text strings are now wrapped in translation functions (\\\()\), enabling full internationalization, and the token display input has been enhanced with security-focused attributes (autocorrect, autocapitalize, spellcheck) and auto-selection behavior.

stubs/livewire/resources/views/api · high confidence

Migrate Livewire stubs to Tailwind CSS v3 and Vite 5

The Livewire application stubs have been updated to use Tailwind CSS v3 (including the forms and typography plugins) and Vite 5 for asset bundling. This change replaces the previous PurgeCSS configuration with Tailwind's native content scanning and introduces a new \postcss.config.js\ and \tailwind.config.js\ to support the modern toolchain. Additionally, the \GuestLayout\ and \AppLayout\ view components now use PHP native type declarations for their \render()\ methods.

stubs/livewire · high confidence

Migrate database schema to numeric IDs and add anonymous migration syntax

The database schema has been updated to use auto-incrementing numeric IDs instead of UUIDs for users, teams, and team-user relationships, which changes the primary key type for these core entities. Additionally, the migration files have been converted to anonymous class syntax to support newer Laravel versions, and the users table migration now includes the creation of password\_reset\_tokens and sessions tables. A new team\_invitations table has also been added to support inviting users to teams with optional roles.

database/migrations · high confidence

Migrate layout stubs to Livewire v3, Vite, and dark mode support

The layout stubs in \stubs/livewire/resources/views/layouts\ have been updated to support Livewire v3, replacing the previous Alpine.js CDN and Vite asset compilation with \@livewireStyles\ and \@livewireScripts\ directives. The layouts now use Vite for bundling CSS and JavaScript, switch from Google Fonts to fonts.bunny.net, and include basic dark mode styling (e.g., \dark:text-gray-100\). Additionally, the guest layout has been moved to this new directory structure, and the app layout's navigation has been significantly simplified, removing the inline navigation menu in favor of a banner component.

stubs/livewire/resources/views/layouts · high confidence

Modernized installation experience with prompts and expanded options

The \jetstream:install\ command has been significantly updated to use Laravel Prompts for interactive input, replacing the previous argument-based flow. It now strictly validates the stack argument to only accept 'inertia' or 'livewire', and introduces new optional flags for dark mode, API support, email verification, Pest testing, and Inertia SSR. The installation process has also been refactored to use \ServiceProvider::addProviderToBootstrapFile\ for registering providers, automatically creates a storage link, copies email view stubs, and installs Pest test stubs when the \--pest\ flag is used or Pest is detected.

src/Console · high confidence

Modernizes Eloquent models and policies with native PHP types and factory support

The stubbed models (User, Team, UserWithTeams) now use the HasFactory trait with PHPDoc annotations instead of manual booting logic for ID generation, and cast definitions have moved from the $casts property to a typed casts() method. The User and UserWithTeams models no longer use string-based UUID primary keys by default, reverting to auto-incrementing integer IDs, and the password cast is now explicitly set to 'hashed'. A new TeamInvitation model has been added to support custom team invitation logic. Additionally, the TeamPolicy methods now have explicit boolean return types, replacing the previous mixed/void return types.

stubs/app/Models · high confidence

Modernizes Inertia app layout with Vite, dynamic language, and font migration

The Inertia application stub now uses Vite for asset management instead of Laravel Mix, dynamically sets the HTML language attribute based on the application locale, and switches the default font source from Google Fonts to fonts.bunny.net. Additionally, the CSRF token meta tag has been removed, and Inertia-specific directives (@routes, @vite, @inertiaHead) are now used to handle routing, script loading, and head management.

stubs/inertia/resources/views · high confidence

New Vue 3 Inertia team management stubs

The team management UI stubs in the Inertia/Vue 3 stack have been replaced with new Composition API components (CreateTeamForm, DeleteTeamForm, TeamMemberManager, UpdateTeamNameForm). These partials now use the \<script setup\> syntax, access user data via $page.props.auth.user, and integrate with Inertia's useForm and router for team creation, deletion, member invitation/role management, and name updates.

stubs/inertia/resources/js/Pages/Teams/Partials · high confidence

New team invitation acceptance and refined team switching logic

Users can now accept team invitations via a new TeamInvitationController, which handles both accepting an invitation (adding the user to the team and deleting the invitation) and canceling an invitation (requiring the 'removeTeamMember' gate check). Additionally, the CurrentTeamController's team-switching behavior has been updated to use the user's switchTeam method instead of directly updating the current\_team\_id attribute, ensuring consistent team association logic.

src/Http/Controllers · high confidence

Profile management UI migrated to Inertia Vue 3 with Composition API

The profile management interface has been rewritten using Inertia Vue 3 and the Composition API, replacing the previous implementation. This update introduces new partial components for managing account details, including DeleteUserForm, LogoutOtherBrowserSessionsForm, TwoFactorAuthenticationForm, UpdatePasswordForm, and UpdateProfileInformationForm. Users will now experience improved form handling via the Vue 3 \useForm\ hook, better accessibility through standardized autocomplete attributes on input fields, and consistent styling using Tailwind CSS utilities. The Two-Factor Authentication flow has been refined to support setup keys and recovery codes, while the Browser Sessions management now displays 'Unknown' for unrecognized user agents. Additionally, the UI supports dark mode and uses logical start/end spacing classes to ensure proper layout in right-to-left (RTL) languages.

stubs/inertia/resources/js/Pages/Profile/Partials · high confidence

Profile page refactored to use Composition API and partial components

The Profile page now uses the Vue 3 Composition API (via \<script setup\>) and imports individual form components from a new Partials directory instead of using the previous single-file forms. The layout switches from the \<app-layout\> component to \<AppLayout\> with a title prop, and section borders are now handled by a dedicated SectionBorder component. Feature visibility is controlled via $page.props.jetstream flags (e.g., canUpdateProfileInformation, canUpdatePassword, canManageTwoFactorAuthentication, hasAccountDeletionFeatures), and the TwoFactorAuthenticationForm now receives a requires-confirmation prop.

stubs/inertia/resources/js/Pages/Profile · high confidence

Profile views migrate to Jetstream v4 components, add password confirmation, and support dark mode

The profile section views have been updated to use the new Jetstream v4 component naming convention (e.g., \x-jet-\\ replaced by \x-\\), enabling full dark mode styling across all profile forms. A significant behavioral change is the addition of password confirmation for sensitive actions: deleting an account and logging out other browser sessions now require the user to enter their password before proceeding, and enabling two-factor authentication is wrapped in a password confirmation modal. The profile information form now includes a button to remove the profile photo, displays an unverified email status with a resend link, and adds autocomplete attributes to inputs for better password manager compatibility. Additionally, browser session details now display 'Unknown' if the user agent cannot be parsed, and all text strings are wrapped in translation functions.

stubs/livewire/resources/views/profile · high confidence

Refactor API Tokens page to use Composition API and partial components

The API Tokens management interface has been updated to use the Vue 3 Composition API (via \<script setup\>) and now delegates the token creation, management, and modal logic to a new partial component (ApiTokenManager.vue), while the main Index.vue page handles layout and data passing. This change simplifies the parent component, improves code organization by separating concerns, and aligns with modern Vue 3 best practices for Inertia.js applications.

stubs/inertia/resources/js/Pages/API · high confidence

Removal of InteractsWithErrorBags mixin

The InteractsWithErrorBags mixin has been removed from the Inertia stubs. This eliminates the previously available hasErrors and errorFor helper methods, meaning applications relying on this mixin for accessing error bags via $page.errorBags will need to update their error handling logic to use the current Inertia API directly.

stubs/inertia/resources/js/Mixins · high confidence

Removed default CSS stubs in favor of Vite

The default \stubs/public/css/app.css\ file has been deleted. This change is part of the migration to Vite (\#1068), meaning the project no longer ships with a pre-bundled, static CSS file containing normalize.css and Tailwind utilities; instead, styles are now expected to be processed via the Vite build pipeline.

stubs/public · high confidence

Restructure Inertia data sharing and enhance team authorization checks

The ShareInertiaData middleware now exposes a nested 'auth' object containing the user data, replacing the previous top-level 'user' key, which aligns with Inertia's recommended structure for authentication data. Additionally, the middleware now explicitly shares feature flags for password updates, profile information, email verification, account deletion, and terms/privacy policies within the 'jetstream' namespace. Team-related logic has been refined to use the Gate facade for checking 'create' permissions on new teams and to ensure 'all\_teams' returns a collection of values, while also correctly gating two-factor authentication status based on feature enablement.

src/Http/Middleware · high confidence

Security and behavioral updates to account and team management

Deleting your account or logging out from other browser sessions now requires password confirmation via Fortify, ensuring the session is properly invalidated and regenerated. Team management routes now enforce Gate policies for viewing, creating, and deleting teams, and team member IDs have shifted from strings to integers. The API token index now displays when each token was last used, and session queries respect the configured database connection and table settings.

src/Http/Controllers/Inertia · high confidence

Support for team invitations and refined team model structure

Users can now invite others to join their teams via a new TeamInvitation model and associated relationship. The Team model has been updated to remove string-based primary keys in favor of auto-incrementing IDs, and the user-team relationship now explicitly specifies the pivot model, simplifying the association definition.

laravel/jetstream · high confidence

Team management actions now enforce strict typing, authorization, and event dispatching

The stubbed team management actions (CreateTeam, AddTeamMember, InviteTeamMember, RemoveTeamMember, UpdateTeamName, DeleteTeam, DeleteUser, DeleteUserWithTeams) have been updated to use strict PHP type declarations for all parameters and return values. CreateTeam now dispatches an AddingTeam event and switches the user's current team upon creation. AddTeamMember and InviteTeamMember now dispatch AddingTeamMember and InvitingTeamMember events respectively before performing their operations. DeleteUser and DeleteUserWithTeams now explicitly delete the user's profile photo and all associated tokens before deleting the user record. Authorization checks are now explicitly performed using Gates in CreateTeam, AddTeamMember, InviteTeamMember, and UpdateTeamName.

stubs/app/Actions/Jetstream · high confidence

Team management contracts migrate to PHP native type declarations

The team management contracts in src/Contracts have been refactored to use PHP native type declarations. Existing interfaces (AddsTeamMembers, CreatesTeams, DeletesTeams, DeletesUsers, UpdatesTeamNames) now define method signatures using native types instead of PHPDoc comments, and two new contracts, InvitesTeamMembers and RemovesTeamMembers, have been added to support inviting and removing team members.

src/Contracts · high confidence

Team member role updates now dispatch an event and team deletion validation uses a specific error bag

When a team member's role is updated, the system now dispatches a TeamMemberUpdated event, allowing applications to react to this change. Additionally, validation errors for deleting a personal team are now scoped to the 'deleteTeam' error bag, enabling more precise error handling in the UI.

src/Actions · high confidence

Teams pages migrated to Vue 3 Composition API and component refactoring

The Teams feature pages (Create, Show) have been rewritten to use the Vue 3 Composition API via the \\<script setup\>\ syntax, replacing the previous Options API. This migration includes moving team management partials (CreateTeamForm, DeleteTeamForm, TeamMemberManager, UpdateTeamNameForm) from the Pages directory to a new Partials subdirectory, updating component imports to use the \.vue\ extension and path aliases, and adding dark mode support to the page headers. The Show page now explicitly defines its props using \defineProps\.

stubs/inertia/resources/js/Pages/Teams · high confidence

Teams views migrated to new component names, internationalization, and dark mode support

The Blade templates in the teams views have been updated to replace the legacy \x-jet-\\ component aliases with their new counterparts (e.g., \x-form-section\, \x-button\, \x-label\). All user-facing text strings are now wrapped in translation functions (\\\_()\), enabling internationalization. Additionally, the views now include dark mode styling classes (e.g., \dark:text-white\) and updated accessibility attributes, such as \alt\ text for profile images and \start\/\end\ directional utilities replacing \left\/\right\.

stubs/livewire/resources/views/teams · high confidence

Update Jetstream configuration defaults and features

The Jetstream configuration has been updated to enable account deletion by default while disabling profile photos and API support. The middleware configuration is now explicitly set to 'web', and the profile photo disk is configured to use 'public'.

config · high confidence

Update Tailwind CSS directives and add x-cloak support

The CSS stubs now use the modern @tailwind directives instead of the legacy @import syntax for base, components, and utilities. Additionally, a global \[x-cloak\] rule is included to hide Alpine.js elements until they are initialized, preventing content flicker during page load.

stubs/resources/css · high confidence

Updated Inertia.js stubs with modern tooling and Ziggy v2 compatibility

The Inertia.js application stubs have been updated to use Vite as the build tool, replacing previous configurations. The Tailwind CSS configuration now includes the \@tailwindcss/forms\ and \@tailwindcss/typography\ plugins, uses the 'Figtree' font family, and scans Vue files for content. The \HandleInertiaRequests\ middleware has been updated to share Ziggy route data in a format compatible with Ziggy v2, including the current request location. Additionally, a \jsconfig.json\ file is now included to support IDE path resolution for the \@/\ alias.

stubs/inertia · high confidence

Upgrade to Inertia.js v1 with Vue 3 and Vite

The Inertia frontend stack has been upgraded from Inertia.js v0.8.0 (Vue 2) to Inertia.js v1 (Vue 3), accompanied by a migration to the Vite build tool. This change replaces the legacy Vue 2 initialization and Jetstream-specific form handling with the modern \createInertiaApp\ API, enabling native support for server-side rendering (SSR) via the new \ssr.js\ entry point. Users benefit from improved performance, a smaller bundle size, and the ability to leverage Vue 3 features while maintaining seamless integration with Ziggy for route generation.

stubs/inertia/resources/js · high confidence

Test coverage

Added Inertia-based feature tests for Jetstream stubs; Added Livewire feature tests for Jetstream stubs; Added test stubs for authentication, registration, and password management; Expanded test coverage for team management, user profiles, and agent detection; Updated test fixtures for User and Admin models.

Dependencies

Major dependency upgrades and framework version support

This update raises the minimum PHP version to 8.2.0 and expands Laravel support to versions 11, 12, and 13. Key dependencies have been upgraded: Laravel Fortify is now required at version ^1.20, and the device detection library has switched from jenssegers/agent to mobiledetect/mobiledetectlib ^4.8.08. In development, PHPUnit has been replaced by PHPStan for static analysis, Mockery has been swapped for jasonmccreary/double, and testbench is updated to ^9.15\|^10.8\|^11.0. Additionally, Inertia.js support is updated to ^2.0, Sanctum to ^4.0, and Livewire to ^3.3, while Symfony Console support is extended to include version 8.0.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 49.

Lenses

  • Code Health 67
  • Architecture 86
  • Maturity 42
  • Readiness 60
  • Security 82
  • Accessibility 41

Changes since last survey

  • 300 commits — 263 feature/other, 37 fixes

By area

  • (root) — 103 commits
  • stubs/inertia — 43 commits
  • src/Console — 30 commits
  • .github/workflows — 26 commits
  • stubs/livewire — 18 commits
  • (repo) — 17 commits
  • src/Http — 13 commits
  • .github/ISSUE_TEMPLATE — 9 commits
  • stubs/app — 8 commits
  • src/JetstreamServiceProvider.php — 7 commits
  • database/factories — 6 commits
  • stubs/pest-tests — 4 commits
  • src/HasProfilePhoto.php — 3 commits
  • stubs/tests — 3 commits
  • resources/views — 2 commits
  • .github/SECURITY.md — 1 commit
  • .github/dependabot.yml — 1 commit
  • database/seeders — 1 commit
  • src/Agent.php — 1 commit
  • src/InteractsWithBanner.php — 1 commit

Notable commits

  • fix: Apply fixes from StyleCI
  • fix: Apply fixes from StyleCI
  • fix: Fix Fortify home route (#1432)
  • fix: Fix Livewire component premature registration (#1390)
  • fix: Fix failing tests (#1613)
  • fix: Fix incorrect annotations in Livewire components using "@return void" (#1467)
  • fix: Fix issue with page reload/refresh on two-factor-challenge page (#1291)
  • fix: Fix memory leak and potential caching issue with usePage (#1366)
  • fix: Fix modal closing on Escape key when closeable is false (#1510)
  • fix: Fix order v-if (#1208)
  • fix: Fix stubs workflow in CI (#1594)
  • fix: Fix: Remove bootstrap.js import for Laravel 13+ in Inertia stack (#1602)
  • fix: Fixed an issue causing install command to not add two_factor_confirmed_at column in users table if user decides to run migration from it. (#1496)
  • fix: Fixed and issue causing overflow in layout on ApiTokenManager page. (#1198)
  • fix: Fixed not redirecting after deleting the user (#1236)
  • fix: Fixes incorrect classes for Laracasts link (#1252)
  • fix: Fixes type from userPage to usePage (#1277)
  • fix: Fixes unhandled match case error (#1513)
  • fix: Laravel Pint fixes (#1351)
  • fix: Merge pull request #1605 from laravel/fix/pin-least-privilege-reusable-workflows
  • …and 280 more

Architecture

  • 0 containers · 1 bounded contexts · 0 dependency edges (baseline)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

laravel/jetstream was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 9b189b616d20be5a95bac8423113f0d24e364fba — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.