laravel/jetstream
48.6
Weak · 19 September 2026
8k
lines of production code
PHP
with JavaScript
1
measurement over time
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.