Laravel has always been known for its clean, elegant syntax and organized structure. With Laravel 11, Taylor Otwell and the Laravel team have taken a bold step toward even leaner and more developer-focused scaffolding.
This isn’t just a cosmetic change — it’s a philosophical shift toward minimalism and performance-first development, while keeping extensibility intact.
In this post, we’ll explore every micro-detail about Laravel 11’s new structure, compare it with Laravel 10, and explain why these changes were made.
📂 1. Directory Structure: Before vs After
Laravel 10 Structure
app/
Console/
Exceptions/
Http/
Controllers/
Middleware/
Kernel.php
Models/
Providers/
bootstrap/
app.php
config/
database/
public/
resources/
routes/
api.php
web.php
storage/
tests/
Laravel 11 Structure
app/
bootstrap/
config/
database/
public/
resources/
routes/
api.php
console.php
web.php
storage/
tests/
What Changed:

Summary:
Laravel 11 starts you with fewer files. You only add what you need.
2. Service Providers: Where did they go?
Laravel 10:
// app/Providers/AppServiceProvider.php
public function boot() {
//
}
Laravel 11:
- No
AppServiceProvider
,AuthServiceProvider
,EventServiceProvider
, orRouteServiceProvider
out of the box. - Service provider auto-discovery is more powerful now. If you create a provider and register it, Laravel will auto-handle its bootstrapping.
- Framework providers remain internal unless published.
Tip: If you still want custom providers, just create them manually. Nothing is lost — it’s simply cleaner by default.
3. Exception Handling
Laravel 10:
app/Exceptions/Handler.php
Laravel 11:
- No
Handler.php
by default. - Laravel internally handles exceptions gracefully.
- If you need custom exception handling (logging, rendering, custom response formats), you can publish the exception handler manually.
Command:
php artisan exceptions:install
Key Point: Laravel 11 trusts you to publish exception handlers only if you need them.
4. Kernels (HTTP / Console)
Laravel 10:
app/Console/Kernel.php
app/Http/Kernel.php
Laravel 11:
- No
Kernel.php
files by default. - Console routes live in:
routes/console.php
- HTTP middleware stack is handled internally, middleware registration happens inside the bootstrap phase or via route groups.
If you need advanced middleware or scheduling, you can publish the kernels manually.
5. Routing Changes
Laravel 10:
Routing is done via:
routes/web.php
routes/api.php
app/Providers/RouteServiceProvider.php
Laravel 11:
No RouteServiceProvider
!
Routing is now directly handled in:
routes/web.php
routes/api.php
routes/console.php
No extra service providers required. Route caching is more efficient because of this lean setup.
Bonus: Middleware registration can now happen directly in the route file, reducing cross-file navigation.
Example:
use Illuminate\Support\Facades\Route;
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', DashboardController::class);
});
6. Config Files
Laravel 10:
config/app.php
Laravel 11:
config/app.php
is removed.- Laravel internally manages app configurations.
- Application-level configs are either set via environment variables or custom configuration files.
- No cluttered default app config — only what you explicitly define.
7. Packages and Publishing
Laravel 11 embraces on-demand scaffolding.
You only publish what you need:
php artisan install:exceptions
php artisan install:providers
php artisan install:middleware
This keeps your base app super minimal but gives you full control if you want to expand.
8. Performance Improvements (Bonus!)
Because Laravel 11’s structure is leaner:
- Faster bootstrap time (less filesystem scanning).
- Cleaner autoloading (autoload map is smaller).
- Improved route caching.
- Reduced first-party bindings in container (Laravel resolves classes only when needed).
Why Did Laravel Do This?
“Modern Laravel focuses on productivity and performance. By starting with a clean, minimal foundation, developers build only what they need.” — Taylor Otwell
- ✅ Faster startup time
- ✅ Cleaner for newcomers
- ✅ Professional customization for advanced users
- ✅ Aligns with minimal deployment environments like Laravel Octane, Vapor, and containerized applications
Laravel 11 Internal Request Flow Diagram
[ Incoming HTTP Request ]
│
▼
[ Public/index.php ]
│
▼
[ bootstrap/app.php ]
│
│ // Application instance is created
│ // Global middleware registered (optional)
│
▼
[ HTTP Kernel (internal) — no user file ]
│
│ // Middleware stack processed internally
│
▼
[ Route Resolution ]
│
│ routes/web.php
│ routes/api.php
│ (No RouteServiceProvider!)
│
▼
[ Controller Method Execution ]
│
│ // Dependency injection works as usual
│
▼
[ Response Generated ]
│
│ // Response returned to HTTP Kernel
│
▼
[ Send Response to Client ]
Explanation of Each Step:
- Incoming HTTP Request
- Browser or API client sends a request.
- Public/index.php
- Entry point for all Laravel applications.
- bootstrap/app.php
- Creates the application container.
- Registers services and middleware (if any).
- HTTP Kernel (Internal in Laravel 11)
- Manages middleware stack.
- Kernel file is internal, no longer user-maintained by default.
- Route Resolution
- Laravel resolves the route directly from
routes/web.php
orroutes/api.php
. - No
RouteServiceProvider
needed. - Middleware can be applied inline.
- Laravel resolves the route directly from
- Controller Method Execution
- Route points to a controller method (or closure).
- Services are injected as needed.
- Business logic runs here.
- Response Generated
- Controller returns a response (view, JSON, etc.).
- Send Response to Client
- Laravel sends the response back to the HTTP client.
Final Thoughts
Laravel 11’s structural changes are not just about tidiness — they reflect Laravel’s philosophy: simplicity without sacrifice.
Whether you’re building a quick MVP or a massive enterprise-grade app, Laravel 11 gives you:
- A clean slate,
- Less boilerplate,
- Faster performance,
- Total control when you need it.
If you love clarity and intentional design, Laravel 11 is a dream.
Pro Tip for Upgraders:
If you’re upgrading from Laravel 10, don’t worry — existing structures still work. Laravel 11 is backward compatible, and you can adopt the new structure gradually.
Comments