Case study · Laravel upgrade

Upgrading a production app from Laravel 10 to 12

A live Laravel 10 application needed to move to Laravel 12 to stay supported and secure. I planned and carried out a sequential 10 → 11 → 12 upgrade, including the move to PHP 8.2+ and Carbon 3, without putting production at risk.

FromLaravel 10
ToLaravel 12
RuntimePHP 8.2+ · Carbon 3
My rolePlanning & execution
Why upgrade

Staying supported and secure

Every Laravel major version eventually stops receiving bug and security fixes, and packages drop support for old versions. Staying on Laravel 10 meant falling further behind on security fixes, PHP versions and the package ecosystem, and each skipped version makes the eventual upgrade harder.

Approach

One major version at a time

Jumping straight from 10 to 12 would have mixed two sets of breaking changes, making failures hard to trace. Instead, I took a sequential path:

  • Audit first: list every Composer dependency, check each one's support for Laravel 11 and 12 and for PHP 8.2+, and note which needed updates or replacements.
  • 10 → 11: update the framework and dependencies, work through the upgrade guide's breaking changes, and test the application.
  • 11 → 12: repeat the process for the next major version.
  • PHP 8.2+ and Carbon 3: resolve the behaviour changes these bring, especially in date and time handling.

Doing it step by step meant every failure could be traced to one specific change, so the fix was quick and safe.

Challenges

Dependencies and breaking changes

The real work in a Laravel upgrade is rarely the framework itself. It is the packages around it and the places where the app relied on old behaviour. I resolved dependency conflicts in Composer, updated or replaced packages that lagged behind, and fixed code affected by framework and Carbon changes, testing each area before moving on.

Outcome

Results

Laravel version
12
Before10
After12
Major versions upgraded, one at a time
2
Current & supportedApplication now on Laravel 12 and PHP 8.2+.
Traceable changesEach major version upgraded and verified on its own.
Dependencies resolvedComposer conflicts and lagging packages updated or replaced.
Ready for the futureA clean base that makes the next upgrade small.

Tech stack

  • Laravel 10
  • Laravel 11
  • Laravel 12
  • PHP 8.2+
  • Carbon 3
  • Composer

Stuck on an old Laravel version?

I can plan and carry out your upgrade step by step, without risking production.