Skip to content

Laravel 12.x Shift#125

Merged
mattstauffer merged 13 commits intomainfrom
shift-167632
Feb 22, 2026
Merged

Laravel 12.x Shift#125
mattstauffer merged 13 commits intomainfrom
shift-167632

Conversation

@mattstauffer
Copy link
Member

This pull request includes the changes for upgrading to Laravel 12.x. Feel free to commit any additional changes to the shift-167632 branch.

Before merging, you need to:

  • Checkout the shift-167632 branch
  • Review all pull request comments for additional changes
  • Run composer update (if the scripts fail, try with --no-scripts)
  • Clear any config, route, or view cache
  • Thoroughly test your application (no tests?, no CI?)

If you get stuck, never hesitate to email support. If you need more help with your upgrade, check out the Human Shifts.

@mattstauffer
Copy link
Member Author

ℹ️ Laravel 12 removed the MAIL_ENCRYPTION environment variable. While a new MAIL_SCHEME environment variable was introduced, its available options are not the same. Your application will likely behave correctly with the new default values. However, if you were setting MAIL_ENCRYPTION to tls, you may want to review this Mastering Laravel Tip for more details.

@mattstauffer
Copy link
Member Author

⚠️ Laravel 12 changed the default values of the CACHE_PREFIX, REDIS_PREFIX, and SESSION_COOKIE to use dashes (-) instead of underscores (_). If you were not explicitly setting these environment variables, your application will use these new default values - which may result in unexpected behavior. For example, temporary cache misses or forced log out.

If your application uses cache prefixes or session cookies and you were not explicitly setting these ENVs, you may set them to their previous defaults to avoid any unexpected behavior.

@mattstauffer
Copy link
Member Author

⚠️ Laravel 12 removed the APP_TIMEZONE environment variable. The timezone now defaults to UTC. If you need to customize it, you may set the timezone configuration option directly within config/app.php and remove any uses of the APP_TIMEZONE environment variable.

@mattstauffer
Copy link
Member Author

⚠️ Later versions of Laravel 11 changed the default value of the DB_COLLATION from utf8mb4_0900_ai_ci to utf8mb4_unicode_ci for MySQL and utf8mb4_uca1400_ai_ci to utf8mb4_unicode_ci for MariaDB.

Shift did not detect a DB_COLLATION environment variable used within your committed files. You should verify your database configuration and, if necessary, set the DB_COLLATION value.

@mattstauffer
Copy link
Member Author

ℹ️ Laravel added a composer run dev script which starts php artisan serve, php artisan queue:listen --tries=1, php artisan pail, and npm run dev all in one command.

Shift has added this script, as well as the necessary packages. Once you run composer update and npm install, you will be able to use the new composer run dev script.

@mattstauffer
Copy link
Member Author

ℹ️ Laravel added a composer run setup script which runs commands like composer install, npm install, and others to set up your Laravel application. You are encouraged to customize this script for your project.

@mattstauffer
Copy link
Member Author

ℹ️ Laravel added a composer run test script which runs the new php artisan config:clear command, then php artisan test. This is provided as a convenience. You are welcome to customize this script for your test suite.

@mattstauffer
Copy link
Member Author

ℹ️ In a minor release of Laravel 11, the local storage disk was updated to use the storage/app/private folder. This keeps files organized within a subfolder, similar to the public disk.

Shift added the storage/app/private folder. However, to avoid potentially breaking your app, Shift did not change your configuration. If you want, you may migrate your files and update your local disk path in your config/filesystems.php file. If you are not using the local storage disk, you may go ahead and update the path.

@mattstauffer
Copy link
Member Author

ℹ️ Shift updated your dependencies for Laravel 12. While many of the popular packages are reviewed, you may have to update additional packages in order for your application to be compatible with Laravel 12. Watch dealing with dependencies for tips on handling any Composer issues.

@mattstauffer
Copy link
Member Author

ℹ️ If you are using the Laravel installer CLI tool to create new Laravel applications with laravel new, you should updated to the latest version to receive updates for Laravel 12 and the new starter kits.

You may update your installer by running:

composer global require laravel/installer

@mattstauffer
Copy link
Member Author

⚠️ Laravel 12 no longer includes the SVG image type when performing image validation. If your application allows SVG images, you should review your image validation rules and update them to use the new allow_svg option.

'cover' => ['required', 'image:allow_svg'],
'avatar' => ['required', File::image(allowSvg: true)],

@mattstauffer
Copy link
Member Author

ℹ️ The container now respects the default value of constructor parameters when resolving a class instance. If you were previously relying on the container to set a value, you will need to pass in this value when resolving the class instead.

@mattstauffer
Copy link
Member Author

🎉 Congratulations, you're now running the latest version of Laravel!

Next, you may optionally run the following Shifts to ensure your application is fully upgraded, adopts the latest Laravel conventions, and easier to maintain in the future:

  • Laravel Fixer automatically updates your code to the latest Laravel conventions.
  • Tests Generator intelligently generates model factories, HTTP Tests, and configuration for your application.
  • CI Generator intelligently generates CI jobs to lint PHP, check code style, and run tests, including Dusk.

You may also use the Shift Workbench to automate common tasks for maintaining your Laravel application.

@mattstauffer mattstauffer merged commit fa9e21c into main Feb 22, 2026
1 check passed
@mattstauffer mattstauffer deleted the shift-167632 branch February 22, 2026 19:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants