Laravel 12: Features, Helpers &amp; Upgrade Notes | Mohamed Said        [  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png)   Mohamed Said Laravel Backend Engineer  ](https://msaied.com) [ Home ](https://msaied.com) [ Projects ](https://msaied.com/projects) [ Articles  ](https://msaied.com/articles) [ Certificates ](https://msaied.com/certificates) [ Contact ](https://msaied.com#contact-section) 

       [  ](https://github.com/EG-Mohamed)       

 [ Home ](https://msaied.com) [ Projects ](https://msaied.com/projects) [ Articles ](https://msaied.com/articles) [ Certificates ](https://msaied.com/certificates) [ Contact ](https://msaied.com#contact-section) 

  [ home ](https://msaied.com)    [ articles ](https://msaied.com/articles)    Laravel 12: New Features, Helpers, and Practical Upgrade Notes        On this page       1. [  What Actually Changed in Laravel 12 ](#what-actually-changed-in-laravel-12)
2. [  Starter Kit Overhaul ](#starter-kit-overhaul)
3. [  Application Bootstrap Cleanup ](#application-bootstrap-cleanup)
4. [  Typed Route Model Binding Improvements ](#typed-route-model-binding-improvements)
5. [  Removed Deprecations Worth Noting ](#removed-deprecations-worth-noting)
6. [  Minimum PHP Version ](#minimum-php-version)
7. [  Upgrade Checklist ](#upgrade-checklist)
8. [  Key Takeaways ](#key-takeaways)

  ![Laravel 12: New Features, Helpers, and Practical Upgrade Notes](https://cdn.msaied.com/613/3ae9f2d6a41ea381d43aeed4c462ae97.png)

  #laravel   #laravel-12   #upgrade   #php  

 Laravel 12: New Features, Helpers, and Practical Upgrade Notes 
================================================================

     31 Aug 2026      3 min read    ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said  

       Table of contents

1. [  01   What Actually Changed in Laravel 12  ](#what-actually-changed-in-laravel-12)
2. [  02   Starter Kit Overhaul  ](#starter-kit-overhaul)
3. [  03   Application Bootstrap Cleanup  ](#application-bootstrap-cleanup)
4. [  04   Typed Route Model Binding Improvements  ](#typed-route-model-binding-improvements)
5. [  05   Removed Deprecations Worth Noting  ](#removed-deprecations-worth-noting)
6. [  06   Minimum PHP Version  ](#minimum-php-version)
7. [  07   Upgrade Checklist  ](#upgrade-checklist)
8. [  08   Key Takeaways  ](#key-takeaways)

 What Actually Changed in Laravel 12
-----------------------------------

Laravel 12 is a focused release. Rather than introducing sweeping new subsystems, it tightens existing APIs, removes long-deprecated paths, and ships opinionated starter kits that reflect how the community actually builds apps today. If you are running Laravel 11 on PHP 8.2+, the upgrade is low-friction — but a handful of changes will bite you if you skip the release notes.

---

### Starter Kit Overhaul

The most visible change is the replacement of the old Breeze and Jetstream scaffolding with a unified `laravel new` experience. The new stacks are:

- **React + Inertia** (TypeScript-first)
- **Vue + Inertia** (TypeScript-first)
- **Livewire** (Volt or class-based)
- **API-only** (no frontend)

The installer now asks which stack you want and wires everything — Vite config, auth scaffolding, and Pest — in one pass. There is no separate `breeze:install` step.

```bash
laravel new my-app
# Prompts: stack, testing framework, git init

```

Existing projects are unaffected; the starter kits are only relevant at project creation time.

---

### Application Bootstrap Cleanup

Laravel 12 removes the `Http/Kernel.php` and `Console/Kernel.php` files that were already deprecated in Laravel 11. If you upgraded from Laravel 10 and kept those files, they will now be ignored entirely — but any customisation inside them will silently disappear.

**Action required:** Audit your kernels before upgrading. Move any custom middleware registration to `bootstrap/app.php`:

```php
// bootstrap/app.php
return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
    )
    ->withMiddleware(function (Middleware $middleware) {
        $middleware->append(\App\Http\Middleware\EnforceJsonResponse::class);
    })
    ->withExceptions(function (Exceptions $exceptions) {
        $exceptions->render(fn (\App\Exceptions\DomainException $e, Request $r) =>
            response()->json(['error' => $e->getMessage()], 422)
        );
    })
    ->create();

```

---

### Typed Route Model Binding Improvements

Laravel 12 makes implicit route model binding respect PHP 8.x union types and intersection types on controller method signatures. Previously, a union-typed parameter would fall back to the default resolver. Now the container inspects the concrete type and resolves accordingly.

```php
// Before Laravel 12: union type caused silent fallback
public function show(Post|Page $resource): Response
{
    // $resource was always the raw route segment string
}

// Laravel 12: resolves the first bindable type found in the union
public function show(Post|Page $resource): Response
{
    // $resource is a hydrated Eloquent model
}

```

This is opt-in via the `Illuminate\Routing\Contracts\BindingRegistrar` interface on your model. If neither type implements it, the old behaviour is preserved.

---

### Removed Deprecations Worth Noting

| Removed | Replacement | |---|---| | `Route::prefix()` chained on group closures without array | Pass options array directly | | `$this->middleware()` in controllers (constructor style) | Use `#[Middleware]` attribute | | `Str::replaceArray()` | `Str::replaceMatches()` or native `str_replace()` | | `assertExactJson` strict key ordering | `assertExactJsonStructure` |

---

### Minimum PHP Version

Laravel 12 requires **PHP 8.2**. PHP 8.1 is dropped. If you are still on 8.1, upgrade PHP first — the language changes (readonly classes, `never` return type, `DNF` types) are worth it independently.

---

### Upgrade Checklist

- Run `composer require laravel/framework:^12.0` and fix any immediate constraint conflicts.
- Delete `app/Http/Kernel.php` and `app/Console/Kernel.php` after migrating their contents.
- Search for `Str::replaceArray` and `$this->middleware(` in controllers.
- Run `php artisan route:list` and confirm no routes silently broke.
- Execute your full Pest suite — binding changes can surface as 404s in feature tests.

---

### Key Takeaways

- The kernel files are gone; `bootstrap/app.php` is the single configuration surface.
- Starter kits are rebuilt from scratch — existing projects are unaffected.
- Union-typed route model binding now works correctly without a workaround.
- PHP 8.2 is the floor; plan your server upgrade before touching `composer.json`.
- The removed deprecations are small but silent — a thorough test suite is your safety net.

 Found this useful?

          [  ](https://twitter.com/intent/tweet?url=https%3A%2F%2Fmsaied.com%2Farticles%2Flaravel-12-new-features-helpers-and-practical-upgrade-notes-2&text=Laravel+12%3A+New+Features%2C+Helpers%2C+and+Practical+Upgrade+Notes) [  ](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fmsaied.com%2Farticles%2Flaravel-12-new-features-helpers-and-practical-upgrade-notes-2) 

 Frequently Asked Questions 
----------------------------

  3 questions  

     Q01  Do I need to rebuild my existing Laravel 11 app to use the new starter kits in Laravel 12?        No. The new starter kits only apply when you create a fresh project with `laravel new`. Upgrading an existing app to Laravel 12 does not touch your frontend scaffolding. 

      Q02  What happens if I upgrade to Laravel 12 but still have Http/Kernel.php in my project?        The file is silently ignored. Any custom middleware or exception handling registered there will stop working. You must migrate that logic to bootstrap/app.php before upgrading. 

      Q03  Is the union-type route model binding change backwards-compatible?        Yes, with a caveat. If neither type in the union implements the binding contract, the old behaviour is preserved. The change only activates when at least one type is a bindable Eloquent model, so existing routes are safe. 

  Continue reading

 More Articles 
---------------

 [ View all    ](https://msaied.com/articles) 

 [ ![Laravel Octane + FrankenPHP: Persistent Services, Shared State, and Safe Singletons](https://cdn.msaied.com/612/2bd17daafd0c48a0aa824a6d744fb403.png) laravel octane frankenphp 

### Laravel Octane + FrankenPHP: Persistent Services, Shared State, and Safe Singletons

Running Laravel under FrankenPHP workers means your service container lives across requests. Learn which singl...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 31 Aug 2026     4 min read  

  Read    

 ](https://msaied.com/articles/laravel-octane-frankenphp-persistent-services-shared-state-and-safe-singletons) [ ![Filament v3 Custom Table Columns: Rendering Complex UI Without Hacks](https://cdn.msaied.com/611/05db05ad084cfdd9a407ff7707dcfaf7.png) filament laravel livewire 

### Filament v3 Custom Table Columns: Rendering Complex UI Without Hacks

Learn how to build fully custom Filament v3 table columns with Blade views, state callbacks, and Alpine.js — w...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 30 Aug 2026     3 min read  

  Read    

 ](https://msaied.com/articles/filament-v3-custom-table-columns-rendering-complex-ui-without-hacks) [ ![CQRS Without Event Sourcing: Practical Read/Write Model Separation in Laravel](https://cdn.msaied.com/610/ed0ccf7bb832d7b82f057cb14f506e65.png) laravel cqrs architecture 

### CQRS Without Event Sourcing: Practical Read/Write Model Separation in Laravel

You don't need event sourcing to benefit from CQRS. This article shows how to split read and write models in a...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 30 Aug 2026     4 min read  

  Read    

 ](https://msaied.com/articles/cqrs-without-event-sourcing-practical-readwrite-model-separation-in-laravel) 

   [  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png)   Mohamed Said Laravel Backend Engineer  ](https://msaied.com)Senior Backend Engineer specializing in Laravel, scalable SaaS platforms, APIs, and cloud infrastructure. I build secure, high-performance web applications that help businesses grow.

Explore

- [Home](https://msaied.com)
- [Projects](https://msaied.com/projects)
- [Articles](https://msaied.com/articles)
- [Certificates](https://msaied.com/certificates)
- [Contact](https://msaied.com#contact-section)

Connect

- [   hello@msaied.com ](mailto:hello@msaied.com)
- [   +20 109 461 9204 ](tel:+201094619204)

© 2026 Mohamed Said. All rights reserved.

 [  ](https://github.com/EG-Mohamed) [  ](https://www.linkedin.com/in/msaiedm/) [  ](https://wa.me/201094619204) [  ](mailto:hello@msaied.com) [  ](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)
