Laravel upgrades
Upgrading Laravel 5–9: step through each version or rebuild?
There are three routes off an old Laravel application: step through each version, move the code into a fresh install, or rebuild. For most applications, the middle route gives the best balance. Rebuilding is justified far less often than people expect.
By itmarkerz Technologies. Updated 30 October 2026.
Where the old versions stand
| Laravel | PHP | Released | Security fixes ended |
|---|---|---|---|
| 9 | 8.0–8.2 | February 8, 2022 | February 6, 2024 |
| 8 | 7.3–8.1 | September 8, 2020 | January 24, 2023 |
| 7 | 7.2–8.0 | March 3, 2020 | March 3, 2021 |
| 6 | 7.2–8.0 | September 3, 2019 | September 6, 2022 |
The dates are from Laravel’s 8.x and 10.x release notes. For the current versions, see Laravel versions. The destination is Laravel 13, which has security fixes until March 17, 2028.
The PHP column is the real pressure. Of the PHP versions these releases support, only 8.2 still has security support on php.net, and that ends on 31 December 2026. So you’re exposed at two levels, and your hosting provider may be the one that forces the issue.
Route 1: step through each version
Upgrade one major at a time, running tests and releasing at each stage. It’s the safest route if your tests are good, because every failure traces back to a single version’s changes. The cost is repetition: you update packages again and again, and you also have to find an intermediate PHP version at each step.
These are the steps with the most in them, according to Laravel’s upgrade guides:
- To 6: the
str_andarray_helpers move to thelaravel/helperspackage. Installing it buys you time. Laravel’s estimate for this step is an hour. - To 7: Symfony 5 arrives, which reaches your exception handler’s method signatures.
- To 8: class-based model factories replace the old style.
laravel/legacy-factorieslets you defer rewriting them. - To 9: Symfony Mailer replaces SwiftMailer, and Flysystem 3 arrives. Anything that customises mail or storage needs attention.
- 10 onwards: covered in our 10 to 11, 11 to 12 and 12 to 13 guides.
Automated tools help here. Laravel Shift charges per step, so a long chain is several purchases, though each is small next to the work it saves.
Route 2: move the code into a fresh install
Create a new Laravel 13 application, then bring your models, controllers, views and routes across in stages, fixing each as it lands. Your database stays as it is, or changes only through small, planned migrations. You skip the in-between versions and their package churn, and you end up with a clean skeleton rather than years of leftovers.
The risk is that it’s easy to lose behaviour that lived in odd places: a middleware, a config value, a scheduled command nobody mentioned. So list what the old application does first, including routes, scheduled tasks, queues and outgoing integrations, and tick each one off as it arrives. We’d use this route for most applications on Laravel 8 or older, when tests are thin.
Route 3: rebuild
Rebuilding means new code and often a new data model, working from what the business needs today. It’s the most expensive route and the riskiest, because the old code holds rules that nobody remembers until they’re missing. We’d consider it only when at least one of these is true:
- The application no longer matches how the business works, so much of it would change anyway.
- The data model is the real problem, and can’t be fixed in steps.
- The front end has to be replaced regardless, and it’s tangled through the back-end code.
- The old application barely follows the framework, so there’s little to upgrade.
How to choose
| If this is true | We’d lean towards |
|---|---|
| Good tests, Laravel 8 or 9, few custom packages | Step through |
| Thin tests, conventional code, the business rules are still right | Fresh install, moved in stages |
| Packages with no modern release at the centre of the application | Fresh install, with those parts replaced |
| The business process or data model has to change anyway | Rebuild, in stages, with the old system running beside it |
| You can’t say what the application does | Stop and audit first |
Packages can decide this for you. filament/filament 2 and livewire/livewire 2 both stop at Laravel 10, so an admin panel built on them is a project of its own. Check yours against the package compatibility matrix.
What two real legacy moves took
Neither of these started on an old Laravel version. Both started on plain PHP 5.6, so they’re a harder case than most readers of this page have. They do show how far scope moves the timescale.
We moved a loyalty-card management system we’d originally built ourselves onto Laravel in two months, keeping every card, balance and rule. We knew the code, and the job was to preserve it.
A cabinet manufacturer’s system took about eight months: ordering, dealer portal and inventory moved to Laravel 13, PHP 8.5 and MySQL 8, with a new Next.js front end. We audited the old code first, validated the database migration at each stage, and checked workflows against the old system running in parallel.
The second approach is how we’d handle anything with thin tests. If the old and new systems give the same answer on real work, you have evidence no test suite written after the fact can match.
What to do next
Our upgrade service starts by reading your code, and a route comes out of that. Published prices run $799–$2,999+ in USD by application size, and older systems can go beyond the top tier. Our cost guide explains why. If you’ve inherited the application and nobody can explain it, start with our first 10 days guide.
The two upgrades described above
Cabinet manufacturer's ordering, dealer-portal and inventory system moved from PHP 5.6 and MySQL 5.0 to Laravel 13 on PHP 8.5 and MySQL 8, with a new Next.js front end. Eight months, workflows preserved, now live.
- Sector
- Manufacturing
- Region
- Canada and US
- Stack
- Laravel 13, PHP 8.5, MySQL 8, Next.js
- Engagement
- Upgrade, about eight months, live
Loyalty-card management system we first built on PHP 5.6, re-platformed onto Laravel with all cards, balances and rules preserved. Two months, live since mid-2026, Indian client.
- Sector
- Retail & loyalty
- Region
- India
- Year
- 2026
- Stack
- Laravel
- Engagement
- Upgrade of our own earlier build, two months
Questions
Can I run Laravel 8 on PHP 8.3?
It isn’t supported. Laravel’s table lists PHP 7.3–8.1 for Laravel 8. Newer PHP versions raise deprecations and errors in older framework code, and the framework’s security fixes ended on January 24, 2023. Upgrade the framework and PHP together.
Can I jump straight from Laravel 6 to Laravel 13?
Composer only needs the final constraint, but your code still has to absorb every change in between. A direct jump works best on small applications where you can read all the code. On larger ones, stepping through, or moving code into a fresh install, makes faults easier to trace.
Is it cheaper to rebuild?
Rarely, if the application still does what the business needs. A rebuild has to rediscover every rule the old code holds. It starts to make sense when the front end, the data model or the business process has to change anyway.
What about Laravel 5?
The same reasoning applies, with further to go. The oldest release in Laravel’s published support tables that we track is Laravel 6, and code from 5.x often needs PHP changes that are as large as the framework ones. Treat it as a re-platforming project, and get a code assessment before committing to a route. Our published prices run $799–$2,999+ by application size, and an application this old can go beyond the top tier.
More on Laravel upgrades
- Laravel package compatibility matrixWhich release of each common package allows which Laravel and PHP version.
- Laravel 12 end of life: what to do firstThe security deadline, and the two things that block Laravel 13.
- PHP 8.2 end of life for Laravel teamsChoosing between PHP 8.3, 8.4 and 8.5 before the deadline.
- Laravel on PHP 8.5: what actually breaksDeprecations to search for, including the PDO constants.
- Upgrading from Laravel 11 to 12Carbon 3, UUIDs and file paths: the changes that throw no errors.
- Upgrading from Laravel 10 to 11You can keep your structure. Here’s what you can’t keep.
- Laravel Shift or an upgrade teamWhen an automated tool is enough, and when it isn’t.
- Filament upgrade path to Laravel 13Which order to move in from Filament 2, 3, 4 or 5.
- Which Laravel version do you need for the AI SDK?The version floors, and what to do if you’re below them.
- Laravel 14: release window and how to planWhat’s known, what isn’t, and what to do today.
- Inherited a Laravel app? The first 10 daysAccess, backups, an inventory and a safe deploy, before any new features.
- Laravel 11 end of life: what to do nowStop at Laravel 12 or go straight to 13.
- Laravel 10 end of life: your upgrade optionsFour routes off Laravel 10, and the breaking changes in the first step.
- How much does a Laravel upgrade cost?Our published prices by application size, and what moves a quote.
- Upgrading from Laravel 12 to 13The changes that matter, in the order we would check them.
- PHP 8.1 end of life and LaravelWhy PHP can move before the framework does.
- Laravel upgrade checklistEvery step from inventory to the first week after release.
- Laravel vs Symfony: an upgrade decisionSupport windows compared, and when changing framework makes sense.
Running an old Laravel version?
Send us the repository. The assessment is free, and you’ll get a route, a fixed price, and an honest view on whether to rebuild.
We reply within one business day (IST).