Laravel 13 Is Here: What Laravel + Vue Teams Should Actually Do Next

March 12, 2026

Laravel 13 shipped in March 2026. The release is lighter on breaking changes than most major versions, but that does not mean you should upgrade blindly. If you are running a Laravel 12 + Vue 3 + Inertia stack, here is what actually matters, what to check before you touch composer.json, and whether upgrading now is worth the risk.

Table of Contents

  1. What Is New in Laravel 13
  2. What to Review Before You Upgrade
  3. Dependency Compatibility Checks
  4. Testing Strategy
  5. Rollout Plan
  6. Upgrade Checklist
  7. Upgrade Now vs. Wait

What Is New in Laravel 13

The headline feature is PHP Attributes for framework configuration. Instead of defining model properties like $fillable, $hidden, and $table as class properties, you can now use native PHP 8 attributes:

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Attributes\Table;

#[Table('products')]
#[Fillable('name', 'price', 'sku')]
#[Hidden('internal_notes')]
class Product extends Model
{
    // No more $fillable, $hidden, or $table properties
}

The same pattern extends to queue jobs (#[Tries], #[Timeout], #[Backoff]), console commands (#[Signature], #[Description]), form requests, and more. This is purely additive — your existing property-based code still works.

Other notable additions:

  • Cache::touch() method. Extends a cached item’s TTL without fetching or re-storing the value. Useful for session-like patterns where you want to keep hot data alive without the overhead of a full get/set cycle.
  • PHP 8.3 minimum requirement. Laravel 12 required PHP 8.2. Laravel 13 bumps the floor to PHP 8.3 and supports up to PHP 8.5.
  • Support window. Bug fixes through Q3 2027, security patches through Q1 2028.

For Vue/Inertia teams specifically, none of these changes touch the frontend layer directly. Your Inertia setup, Vue components, and Vite configuration are unaffected by the Laravel 13 upgrade itself. The work is almost entirely backend and infrastructure.

What to Review Before You Upgrade

PHP Version

This is the single biggest blocker for most teams. Laravel 13 requires PHP 8.3+. Check every environment where your code runs:

  • Local development (Docker images, Homebrew, system PHP)
  • CI/CD pipelines (GitHub Actions runners, GitLab CI images)
  • Staging and production servers
  • Any serverless or PaaS platforms (Vapor, Forge, shared hosting)

Run php -v everywhere. If any environment is stuck on 8.2, fix that first before touching Laravel.

Middleware Registration

If you upgraded to Laravel 12 from an older version, you may still have remnants of the old Http\Kernel.php middleware registration. Laravel 13 continues the pattern introduced in Laravel 11 where middleware is registered in bootstrap/app.php. Verify your HandleInertiaRequests middleware is registered there:

// bootstrap/app.php
->withMiddleware(function (Middleware $middleware) {
    $middleware->web(append: [
        \App\Http\Middleware\HandleInertiaRequests::class,
    ]);
})

Config and Route Caching

Clear and rebuild caches after upgrading. This is standard practice but easy to forget:

php artisan config:clear
php artisan route:clear
php artisan view:clear
php artisan cache:clear

Dependency Compatibility Checks

This is where upgrades actually break. Laravel itself may be smooth, but your third-party packages need to support Laravel 13.

How to Check

Before running composer update, audit your dependencies:

composer show --direct | awk '{print $1}' | while read pkg; do
    echo "--- $pkg ---"
    composer show "$pkg" | grep -E "requires|laravel"
done

Packages to pay close attention to:

  • inertiajs/inertia-laravel — Should be compatible, but verify the version. Inertia’s server-side adapter generally keeps pace with Laravel releases.
  • laravel/sanctum, laravel/horizon, laravel/telescope — First-party packages usually have same-day support.
  • spatie/* packages — Spatie is fast but not instant. Check their GitHub repos for Laravel 13 compatibility tags.
  • tightenco/ziggy — If you use Ziggy for route sharing with Vue, confirm it supports Laravel 13.

If a critical package does not yet support Laravel 13, you have two options: wait, or pin to a dev branch temporarily using minimum-stability: dev with prefer-stable: true in your composer.json. The latter works but introduces risk in production.

Frontend Dependencies

The frontend stack (Vue 3, Vite, @inertiajs/vue3) is independent of the Laravel version. You do not need to update npm packages just because you upgraded Laravel. That said, if you are doing a major upgrade anyway, it is a reasonable time to bump your frontend dependencies too — just do it in a separate commit so you can isolate issues.

Testing Strategy

Do not upgrade and deploy in the same PR. Here is a structured approach:

1. Upgrade in an Isolated Branch

git checkout -b upgrade/laravel-13

Update composer.json to require laravel/framework:^13.0, then run composer update -W to let Composer resolve the full dependency tree.

2. Run Your Existing Test Suite First

Before writing any new tests, run what you already have. The goal is to see what breaks with zero code changes:

php artisan test

Pay attention to:

  • Database migrations. Run php artisan migrate:fresh --seed to confirm your migrations and seeders work on the new framework version.
  • Feature tests that hit controllers. These exercise the full middleware stack and will surface any Inertia or auth-related regressions.
  • Queue and job tests. If you adopt the new #[Tries] / #[Timeout] attributes later, test that existing property-based configs still work.

3. Manual Smoke Test Critical Flows

Automated tests catch regressions, but you should also manually test:

  • Login and registration flows
  • Form submissions through Inertia (especially file uploads)
  • Any pages using SSR
  • API endpoints if you have a mixed Inertia + API setup

4. Frontend-Specific Testing

Since the Laravel upgrade does not change your Vue code, frontend tests should pass unchanged. But run them anyway:

npm run build
# If you have Vitest or Jest tests
npm run test

Confirm the Vite build completes without warnings. Check the browser console for runtime errors after the upgrade.

Rollout Plan

For Small Teams / Side Projects

  1. Create the upgrade branch.
  2. Run composer update -W and fix any dependency conflicts.
  3. Run tests, fix failures.
  4. Deploy to staging, smoke test.
  5. Deploy to production.

Total time: a few hours to a day.

For Larger Teams / Production Apps

  1. Week 1: Create upgrade branch. Resolve Composer dependency conflicts. Get CI green.
  2. Week 2: Deploy to a staging environment that mirrors production. Run integration tests and have QA do manual regression testing.
  3. Week 3: Deploy to production with a rollback plan. Monitor error tracking (Sentry, Flare, Bugsnag) closely for 48 hours.
  4. Week 4+: Begin adopting new features like PHP Attributes where they improve readability. Do this incrementally — you do not need to convert every model on day one.

Keep your rollback plan simple: tag the current release before deploying, and make sure you can revert to the previous composer.lock and redeploy within minutes.

Upgrade Checklist

  • Confirm PHP 8.3+ is running in all environments (local, CI, staging, production)
  • Audit third-party Composer packages for Laravel 13 compatibility
  • Update composer.json to require laravel/framework:^13.0
  • Run composer update -W and resolve conflicts
  • Run php artisan migrate:fresh --seed on a test database
  • Clear all framework caches (config, route, view, cache)
  • Verify HandleInertiaRequests middleware is in bootstrap/app.php
  • Run full backend test suite and fix failures
  • Run npm run build and confirm clean Vite output
  • Run frontend tests if applicable
  • Manual smoke test: login, forms, file uploads, SSR pages
  • Deploy to staging and run regression tests
  • Monitor error tracking for 48 hours post-production deploy
  • (Optional) Begin incremental adoption of PHP Attributes in models and jobs

Upgrade Now vs. Wait: The Honest Verdict

Upgrade now if:

  • You are on PHP 8.3+ already. The biggest friction point is gone.
  • Your Composer dependencies all support Laravel 13. Check before you commit.
  • You are starting a new project. There is zero reason to start on Laravel 12 today.
  • You want to adopt PHP Attributes. They make Eloquent models and queue jobs meaningfully cleaner, especially in larger codebases.

Wait if:

  • You are still on PHP 8.2 and upgrading PHP is non-trivial in your infrastructure. Do the PHP upgrade first as a separate project.
  • Critical packages in your stack do not support Laravel 13 yet. Forcing dev branches in production is asking for trouble.
  • You are mid-sprint on a feature. Finish the feature, ship it, then upgrade. Mixing framework upgrades with feature work guarantees confusion when something breaks.

The bottom line: Laravel 13 is a low-drama upgrade for most Vue + Inertia teams. The PHP 8.3 requirement is the only real gate. The new features are nice-to-have, not must-have — PHP Attributes improve code readability but your existing code works fine without them. There is no urgent security or performance reason to rush.

If your dependencies are ready and your PHP version is current, upgrade in a dedicated branch this week. If not, wait until your ecosystem catches up. Either way, do not skip straight to production — run the checklist, test in staging, and monitor after deploy.

References


Published by Laravel & Vue.js who lives and works in Sydney building useful things.