Laravel upgrades
Laravel upgrade checklist
Use this for a major-version upgrade, whether you are taking one step or several. The framework changes are often the short part; this list covers the work around them, where upgrades usually go wrong.
By itmarkerz Technologies. Updated 30 October 2026.
1. Take stock
- Run
php artisan aboutand record the Laravel, PHP and driver versions in production. - Note the PHP version for web, CLI, cron and queue workers separately. They can differ.
- Save
composer.lockand the output ofcomposer outdated --direct. - Run
composer auditand note any known advisories. - List the database and cache engines and their versions. Check them against the target release.
- List every integration: payment, email, ERP, CRM, webhooks, scheduled imports.
- Write down the flows that must not break, and who in the business can confirm each one.
2. Choose the target
- Check support dates on our Laravel versions page and aim for the latest supported release.
- Confirm your hosting offers a PHP version that target accepts.
- Run
composer why-not laravel/framework ^13.0to list blocking packages. - For each blocker, decide whether to update, replace or fork it.
- Read the official upgrade guide for every version on the route, in order, and mark the items that apply.
3. Prepare a safety net
- Bring the current test suite to green before changing anything, so failures later mean something.
- Add tests or scripted checks for any critical flow with no coverage.
- Set up a staging environment matching production PHP, database and queue configuration.
- Take a backup and restore it somewhere to prove that it works.
- Agree who decides on a rollback, and on what signal.
4. Make the changes
- If PHP has to move, release that separately first where you can.
- Work on a branch and take one major version at a time, committing at each stop.
- Update first-party packages along with the framework. Some, such as Sanctum and Passport, have their own upgrade guides.
- Compare your config files with the
laravel/laravelrepository, and adopt changes deliberately rather than copying them whole. - Replace deprecated names you find along the way, while the code is open.
- Run the static analysis and code style tools you already use.
5. Check data and behaviour
- Run
php artisan migrate --pretendagainst a copy of production to read the SQL before it runs. - Compare figures from the old and new versions for invoices, totals, tax and report outputs.
- Check date calculations. Carbon 3 changes what
diffIn*methods return. - Check cached data and sessions written by the old version can still be read by the new one.
- Process a queued job created by the old version, as jobs may be waiting during the release.
- Exercise integrations against sandboxes, including inbound webhooks.
- Have the people named in step 1 confirm their flows on staging.
6. Release
- Choose a window with low traffic and people available, including someone from the business.
- Take a fresh backup immediately before you start.
- Run the deployment as rehearsed on staging, with any zero-downtime configuration you normally use.
- Run
php artisan optimizeand restart long-running services withphp artisan reload. - Check
/upor your configured health route, then walk through the critical flows in production. - Keep the previous release ready to restore until you are satisfied.
7. The first week
- Watch error logs, failed jobs, sign-ins and payment success rates against your normal levels.
- Check scheduled tasks ran, including weekly and month-end ones when they fall due.
- Record new deprecation notices and schedule them.
- Remove compatibility shims, old branches and retired packages.
- Put the next support end date in the calendar, so the next upgrade isn’t a surprise.
Where to go next
For the details of a particular step, read our guides to Laravel 12 to 13 and moving off PHP 8.1. If you want the work done, our upgrade service is priced after a free assessment. To keep up afterwards, our maintenance plan at USD 99/month, invoiced in the customer's local currency, covers framework, package and PHP updates.
Upgrades we have delivered
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 print or save this checklist?
Yes. Use your browser's print or save-as-PDF option. There is no form to fill in.
Can I upgrade several major versions at once?
Yes, on one branch, but read each version's upgrade guide in order, because each has its own breaking changes. Release the end result rather than every stop along the way.
What should I do if I have no tests?
Before upgrading, write tests or a scripted manual check for the flows the business depends on, such as sign-in, payment and the main reports. You don't need full coverage, but you do need a way to notice a break.
More on Laravel upgrades
- 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 vs Symfony: an upgrade decisionSupport windows compared, and when changing framework makes sense.
Would you rather hand this over?
We will assess the application for free, then quote a fixed price for working through this list ourselves.
We reply within one business day (IST).