Quick Summary
Laravel 9 marks the next major step for the leading PHP framework, introducing powerful features that make building modern web apps faster and more intuitive. With support for PHP 8, improved routing, anonymous migrations, new query builder tools, enhanced debugging, full-text search, and updated APIs, it delivers better performance, security, and developer experience. Explore what’s new and why upgrading unlocks the future of Laravel development.
Table of Contents
Created by Taylor Otwell, Laravel has been a leading PHP framework for a long time. The system is scalable, flexible, and adaptable, which makes it a popular choice for engineers and companies who work with PHP. Now, Laravel 9 is on its way, with a number of new features.
It has a bunch of advanced features such as built-in authentication and authorization support. Flexible, scalable, and adaptable, it provides the ability to create web applications of every size.
This blog will dive deep into the latest iteration of Laravel 9 and what it brings to this framework and the web development space overall. Let’s begin.
Overview of Laravel 9
Laravel always strives to improve; consequently, each release brings new features and enhancements. The framework has undergone several updates and has become the preferred PHP system for building web applications because of its features and functionality.
Laravel 9 introduces many new features that can be used in various ways, including improvements to Laravel Scout, the accessor/mutator API, better Enum casting support, and forced scope bindings.

From the release support policy documentation, here’s what you can expect going forward with tentative dates of upcoming releases:
| Version | PHP (*) | Release | Bug Fixes Until | Security Fixes Until |
|---|---|---|---|---|
| 6 (LTS) | 7.2 -8.0 | September 3rd, 2019 | January 25th, 2022 | September 6th, 2022 |
| 7 | 7.2 -8.0 | March 3rd, 2020 | October 6th, 2020 | March 3rd, 2021 |
| 8 | 7.3 – 8.1 | September 8th, 2020 | July 26th, 2022 | January 24th, 2023 |
| 9 | 8.0 – 8.1 | February 8th, 2022 | August 8th, 2023 | February 8th, 2024 |
| 10 | 8.1 | February 7th, 2023 | August 7th, 2024 | February 7th, 2025 |
Laravel 9 is the next long-term support version (LTS) that will receive bug fixes until February 2024 and security fixes until February 2025. Here are some of the major features that we’ve covered in detail and let’s have a look at what is coming to the Laravel 9 post:
What’s New in Laravel 9?
- New Design for routes:list
- PHP 8 is Laravel 9’s minimum version
- New test –coverage option displays coverage directly in the terminal
- Anonymous Stub Migrations are now the default
- New Query Builder Interface
- PHP 8 String Functions
- Symfony Mailer has replaced SwiftMailer as the mailer functionality
- Flysystem 3.x
- Improved Eloquent Accessors/Mutators
- Implicit Route Bindings With Enums (PHP 8.1)
- Controller Route Groups
- Enum Eloquent Attribute Casting
- Forced Scoped Bindings
- Laravel Breeze API & Next.js
- Laravel Scout Database Engine
- Full-Text Indexes / Where Clauses
- Rendering Inline Blade Templates
- Soketi Echo Server
- Optional Bootstrap 5 Pagination Views
- Improved Ignition Exception Page
- New str() and to_route() helper functions
Features of Laravel 9

1. Controller Route Groups
Laravel 9 lets us define common routes as controller group routes, making route definition more readable and easy. Let’s see how it looks
use App\Http\Controllers\PostController;
Router controller (Post Controllers.class)->group(function() {
Route::get("/posts/(sd)', 'show'); Route: Epost('/posts', 'store');
>}
2. Minimum PHP Requirement
A number of other prerequisites will be specified in the future for Laravel 9. You will need PHP 8, PHPUnit 9, and other prerequisites. The Laravel framework depends on several community-driven packages and Symfony 9 libraries.
Due to Symfony’s plan to release v6.0 by November 2021, Laravel delayed the release of version 9 due to that dependency. PHP version benchmarks highlight the advancements and features of PHP 8, from the Just-In-Time (JIT) compiler to constructor property promotion.
3. Anonymous Migration Classes
Laravel sets to introduce anonymous stub migration as a default behavior when you execute the popular migration command:
php artisan make:migration
The anonymous stub migration feature was first introduced in Laravel 8.37 to solve the Github issue. Multiple migrations in the same class name can cause issues when attempting to recreate the entire database. Stub migrations resolve this issue.
When you execute the popular migration command in Laravel, anonymous stub migration is the default behavior:
php artisan make:migration add_users_nick_name --table=users
The stub migration feature eliminates migration class name collisions. For example, the migration class looks like the following:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
/*
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->string('nick name')->nullable();
});
}
/**
* Reverse the migrations.
*
* @return void
/*
public function down()
{ Schema::table('users', function (Blueprint $table) {
$table->dropColumn('nick_name');
});
}
};
4. New Helper Functions
In Laravel 9, type hinting will become more reliable for refactoring, static analysis, and code completion. There are no shared interfaces/inheritances between Query/Builder, Eloquent/Builder, and Eloquent/Relation. In addition, Laravel 9 will help developers use a new query builder interface for type hints, refactoring, and static analysis.
5. Refreshed Ignition Error Page
Designed for Laravel projects, Ignition provides a beautifully designed, customizable error page. Laravel’s error page has been redesigned by the Ignition team. The team can suggest solutions and provide documentation to solve common issues. The best part? Everything can be automatically fixed with a single click.
Laravel versions 6 and up include Ignition pre-installed. Ignition can be installed with Composer in older versions (5.5+). All Laravel-specific debug information is nicely presented when you have to dive deep.
6. Render a Blade String
This next addition isn’t something you reach for too often, but it’s there when you need it. A Blade-formatted string can now be rendered to HTML via a method call.
Blade, Laravel’s templating engine, is a powerful and beautiful tool. However, the blade engine will only compile templates that are written to a file (as far as I know). Generally, this is not a significant limitation, but you may need to compile a string one day.
7. Forced Scope Bindings
Laravel 9 allows you to force scope bindings in route declarations with a simple method call. Hopefully, this adds a bit more clarity and intent.
8. Test Coverage with XDebug
Laravel recently added a PHP Artisan test command to trigger the suite. The functionality of this tool has now been extended to include generating code coverage reports.
9. Laravel Scout Database Engine
Algolia was originally the focus of Laravel Scout. However, over the course of time, a variety of alternatives have been developed. You may use the new database engine in Laravel 9 for small to medium-sized applications.
10. Full Text Indexing
Laravel 9 also includes full-text indexing for MySQL and PostgreSQL. New migrations will include a fulltext() method and a whereFulltext() method on your Eloquent builder.
11. Enum Attribute Casting
Eloquent attribute casting to and from enums is now included in Laravel 9, because PHP 8 provides native support for enums.
12. Simplified Accessors & Mutators
Laravel’s getXAttribute and setXAttribute API for declaring accessors and mutators will remain unchanged, but a simplified approach will be recommended going forward.
13. PHP 8 String Functions
Because Laravel 9 targets PHP 8, Laravel merged this PR, suggesting using the new string functions in PHP 8. The class /Illuminate/Support/Str uses functions str_contains(), str_starts_with(), and str_ends_with().
14. New Query Builder Interface
In its IDE, Laravel 9 has type hinting support for refactoring, static analysis, and code completion. Query/Builder, Eloquent/Builder, and Eloquent/Relation do not share an interface or inheritance. With Laravel 9, developers will still be able to take advantage of the new query builder interface for type hinting, refactoring, and static analysis.
<?php
return Model::query()
->whereNotExists(function($query) {
// $query is a Query\Builder
}}
->whereHas('relation', function($query) {
// $query is an Eloquent\Builder }}
->with('relation', function($query) {
// $query is an Eloquent\Relation
});
15. Bootstrap 5 Pagination Views
The framework makes it easy to deal with pagination in your projects if you have ever encountered it. The automatic pagination in Laravel eliminates the need for manual pagination.
Laravel 9.0, however, makes this process even easier. Jared Lewis contributed the Bootstrap 5 pagination views. For its pagination view, Laravel 9 will use Bootstrap 5. It should be called in the boot method of your App\Providers\AppServiceProvider class.
16. Checked/Selected Blade Directives
Ashley Allen and Taylor Otwell contributed, checked, and selected Blade directives. In the older version, we had to specify a specific condition for selecting the checkbox and dropdown.
Laravel’s version 9 addresses this issue by adding @checked and @selected blade components for selecting data, and it will only select data if a specific condition is met.
@checked:- it will echo checked if the provided condition is true.
17. Improved route: list CLI Output
Laravel is also notable for its command-line interface (CLI). With Laravel, you can create or modify anything without having to browse folders and files. Command-line interfaces allow you to interact with databases as well.
With version 9 it even got better, as the new version introduces a new design of route list in the command line interface.
So, want to leverage these features of the version 9 for your website or web app? Then consult with a Laravel development company.
Why Move From Laravel 8 to 9?

Flysystem 2.0
Laravel 9. x has migrated from Flysystem 1. x to 2. x. Flysystem is responsible for all the record manipulation strategies provided by Capacity. You may need to make some changes to your application as a result. In any case, we have attempted to create this move as consistent as conceivable.
Symfony Mailer
With Laravel 9. x, SwiftMailer, which won’t be maintained after December 2021, is being replaced by Symfony Mailer. It was nevertheless Laravel’s goal to make this move as consistent as possible for your applications. As a result, it would be ideal if you reviewed all of the changes on the following list in order to ensure your application is fully compliant.
Custom Casts & null
In earlier Laravel versions, the set method of custom cast classes didn’t run when the cast attribute was null, even though the documentation said it should. In Laravel 9.x, null is now passed as the $value to the set method, so custom casts must be able to handle null values correctly.
Default HTTP Client Timeout
HTTP clients now include a default timeout of 30 seconds. If the server does not respond within 30 seconds, an exception will be thrown. Currently, the HTTP client does not have a default timeout length, leading to requests sometimes “hanging” indefinitely. If you wish to specify a longer timeout for a given request, you may do so using the timeout method:
$response = Http::timeout(120)->get(...);
The lang Directory
As of Laravel 9. x applications, the resources/lang directory is located within the root project directory (lang). In order to publish language files in this directory, you should use the app()->langPath() rather than a hard-coded path.
The Password Rule
The password rule has been renamed to current_password and now checks that the input matches the authenticated user’s current password. Also, many framework classes provide when and unless methods to conditionally perform actions based on the first argument’s value.
$collection->when(true, function ($collection) {
$collection->merge([1, 2, 3]);
});
Previously, closures passed to Laravel’s when or unless methods always evaluated as true, causing conditional actions to run unexpectedly. In Laravel 9.x, the closure’s return value is now used as the boolean condition instead.
How to Install the Latest Laravel 9.0?
Laravel 9 can be installed and tested locally for development and testing purposes. This framework is compatible with PHP 8 only. Therefore, check your PHP version before installing and testing. If you want to upgrade your existing projects efficiently, consider using Laravel Shift to automate the migration to the latest Laravel version.
Execute the Following Commands to Deploy Laravel 9 Utilizing Composer
The Laravel Global CLI can also be used to create a new Laravel project. Then, build a new project from the developer branch.
After you’ve finished installing Laravel 9, go to the new directory (laravel-dev) and evaluate the current version with the artisan command. To learn more about identifying your setup quickly, see our guide on how to check Laravel version.
cd laravel-9-dev
php artisan --version
Wrapping Up!
This PHP framework is gaining more and more attention among developers. Laravel 9 is the first to follow a 12-month release cycle, and we can already experience its “juicy” new features. The Laravel team is likely to announce new features and updates in the future. So make sure to bookmark this post as we’ll cover them in future updates.
It is Laravel 9’s Creator’s goal to provide the best solution to their users, and they strive to do so by releasing updated versions every year. However, it took two years for Laravel 9 to be released. You will be able to easily develop web apps with this new version of Laravel 9.
You can hire Laravel developers to get the best of this latest version today!
Is upgrading from Laravel 8 to Laravel 9 difficult?
Upgrading is generally smooth, especially with tools like Laravel Shift that automate most changes. You’ll mainly update PHP to 8+, review any deprecated packages, and ensure compatibility with the new mailer, Flysystem changes, and casting behavior. Testing thoroughly before deployment is recommended.
Who should consider adopting Laravel 9 right now?
Teams building new applications or actively maintaining evolving products benefit most. Laravel 9 is an LTS release, making it ideal for long-term commercial projects requiring extended security support. It’s also a great fit for developers leveraging PHP 8’s features, such as enums and performance enhancements.
Does Laravel 9 help with scalability or performance?
Yes, Laravel 9 builds on PHP 8 optimizations, a faster filesystem layer, improved query handling, and updated dependencies like Symfony 6. These enhancements help applications scale more efficiently while keeping code clean, consistent, and easier to maintain as project demands grow.
How does Laravel 9 fit into the larger Laravel release cycle?
Laravel 9 fits into the larger Laravel release cycle as the next long-term support version following Laravel 8, marking a shift to consistent yearly releases. After Laravel 9, each major version continues to refine performance, developer experience, and modern PHP adoption, including:
->What’s new in Laravel 10
->What’s new in Laravel 11
->What’s new in Laravel 12
It will ensure teams can plan upgrades confidently and keep their applications secure, scalable, and future-ready.
Need guidance on adopting Laravel 9’s latest tools and features?
Connect with our Laravel specialists to explore the smoothest migration path.


