Release Notes

Versioning Scheme

Laravel and its other first-party packages follow Semantic Versioning. Major framework releases are released every year (~Q1), while minor and patch releases may be released as often as every week. Minor and patch releases should never contain breaking changes.

When referencing the Laravel framework or its components from your application or package, you should always use a version constraint such as ^10.0, since major releases of Laravel do include breaking changes. However, we strive to always ensure you may update to a new major release in one day or less.

Named Arguments

Named arguments are not covered by Laravel's backwards compatibility guidelines. We may choose to rename function arguments when necessary in order to improve the Laravel codebase. Therefore, using named arguments when calling Laravel methods should be done cautiously and with the understanding that the parameter names may change in the future.

Support Policy

For all Laravel releases, bug fixes are provided for 18 months and security fixes are provided for 2 years. For all additional libraries, including Lumen, only the latest major release receives bug fixes. In addition, please review the database versions supported by Laravel.

Version PHP (*) Release Bug Fixes Until Security Fixes Until
8 7.3 - 8.1 September 8th, 2020 July 26th, 2022 January 24th, 2023
9 8.0 - 8.2 February 8th, 2022 August 8th, 2023 February 6th, 2024
10 8.1 - 8.3 February 14th, 2023 August 6th, 2024 February 4th, 2025
11 8.2 - 8.3 March 12th, 2024 August 5th, 2025 February 3rd, 2026
End of life
Security fixes only

(*) Supported PHP versions

Laravel 10

As you may know, Laravel transitioned to yearly releases with the release of Laravel 8. Previously, major versions were released every 6 months. This transition is intended to ease the maintenance burden on the community and challenge our development team to ship amazing, powerful new features without introducing breaking changes. Therefore, we have shipped a variety of robust features to Laravel 9 without breaking backwards compatibility.

Therefore, this commitment to ship great new features during the current release will likely lead to future "major" releases being primarily used for "maintenance" tasks such as upgrading upstream dependencies, which can be seen in these release notes.

Laravel 10 continues the improvements made in Laravel 9.x by introducing argument and return types to all application skeleton methods, as well as all stub files used to generate classes throughout the framework. In addition, a new, developer-friendly abstraction layer has been introduced for starting and interacting with external processes. Further, Laravel Pennant has been introduced to provide a wonderful approach to managing your application's "feature flags".

PHP 8.1

Laravel 10.x requires a minimum PHP version of 8.1.

Types

Application skeleton and stub type-hints were contributed by Nuno Maduro.

On its initial release, Laravel utilized all of the type-hinting features available in PHP at the time. However, many new features have been added to PHP in the subsequent years, including additional primitive type-hints, return types, and union types.

Laravel 10.x thoroughly updates the application skeleton and all stubs utilized by the framework to introduce argument and return types to all method signatures. In addition, extraneous "doc block" type-hint information has been deleted.

This change is entirely backwards compatible with existing applications. Therefore, existing applications that do not have these type-hints will continue to function normally.

Laravel Pennant

Laravel Pennant was developed by Tim MacDonald.

A new first-party package, Laravel Pennant, has been released. Laravel Pennant offers a light-weight, streamlined approach to managing your application's feature flags. Out of the box, Pennant includes an in-memory array driver and a database driver for persistent feature storage.

Features can be easily defined via the Feature::define method:

1use Laravel\Pennant\Feature;
2use Illuminate\Support\Lottery;
3 
4Feature::define('new-onboarding-flow', function () {
5 return Lottery::odds(1, 10);
6});
1use Laravel\Pennant\Feature;
2use Illuminate\Support\Lottery;
3 
4Feature::define('new-onboarding-flow', function () {
5 return Lottery::odds(1, 10);
6});

Once a feature has been defined, you may easily determine if the current user has access to the given feature:

1if (Feature::active('new-onboarding-flow')) {
2 // ...
3}
1if (Feature::active('new-onboarding-flow')) {
2 // ...
3}

Of course, for convenience, Blade directives are also available:

1@feature('new-onboarding-flow')
2 <div>
3 <!-- ... -->
4 </div>
5@endfeature
1@feature('new-onboarding-flow')
2 <div>
3 <!-- ... -->
4 </div>
5@endfeature

Pennant offers a variety of more advanced features and APIs. For more information, please consult the comprehensive Pennant documentation.

Process Interaction

The process abstraction layer was contributed by Nuno Maduro and Taylor Otwell.

Laravel 10.x introduces a beautiful abstraction layer for starting and interacting with external processes via a new Process facade:

1use Illuminate\Support\Facades\Process;
2 
3$result = Process::run('ls -la');
4 
5return $result->output();
1use Illuminate\Support\Facades\Process;
2 
3$result = Process::run('ls -la');
4 
5return $result->output();

Processes may even be started in pools, allowing for the convenient execution and management of concurrent processes:

1use Illuminate\Process\Pool;
2use Illuminate\Support\Facades\Process;
3 
4[$first, $second, $third] = Process::concurrently(function (Pool $pool) {
5 $pool->command('cat first.txt');
6 $pool->command('cat second.txt');
7 $pool->command('cat third.txt');
8});
9 
10return $first->output();
1use Illuminate\Process\Pool;
2use Illuminate\Support\Facades\Process;
3 
4[$first, $second, $third] = Process::concurrently(function (Pool $pool) {
5 $pool->command('cat first.txt');
6 $pool->command('cat second.txt');
7 $pool->command('cat third.txt');
8});
9 
10return $first->output();

In addition, processes may be faked for convenient testing:

1Process::fake();
2 
3// ...
4 
5Process::assertRan('ls -la');
1Process::fake();
2 
3// ...
4 
5Process::assertRan('ls -la');

For more information on interacting with processes, please consult the comprehensive process documentation.

Test Profiling

Test profiling was contributed by Nuno Maduro.

The Artisan test command has received a new --profile option that allows you to easily identify the slowest tests in your application:

1php artisan test --profile
1php artisan test --profile

For convenience, the slowest tests will be displayed directly within the CLI output:

Pest Scaffolding

New Laravel projects may now be created with Pest test scaffolding by default. To opt-in to this feature, provide the --pest flag when creating a new application via the Laravel installer:

1laravel new example-application --pest
1laravel new example-application --pest

Generator CLI Prompts

Generator CLI prompts were contributed by Jess Archer.

To improve the framework's developer experience, all of Laravel's built-in make commands no longer require any input. If the commands are invoked without input, you will be prompted for the required arguments:

1php artisan make:controller
1php artisan make:controller

Horizon / Telescope Facelift

Horizon and Telescope have been updated with a fresh, modern look including improved typography, spacing, and design:

Comments

No Comments Yet

“Laravel” is a Trademark of Taylor Otwell.
The source documentation is released under MIT license. See laravel/docs on GitHub for details.
The translated documentations are released under MIT license. See cornch/laravel-docs-l10n on GitHub for details.