Shift knows Laravel upgrades. AI knows your code.

Over a decade of automating Laravel upgrades, now guiding AI to finish the job. Together, the most automated and thorough upgrade.

Screenshot of a pull request with automated changes from the Laravel 13.x Shift

Upgrades automated

Prompts included

laravel-shift commented

The default values for CACHE_PREFIX, REDIS_PREFIX, and SESSION_COOKIE changed in Laravel 13.

In Laravel 12 and earlier, these were derived from `APP_NAME` using `Str::slug(env('APP_NAME', 'laravel'), '_')` as a base (e.g. `myapp_cache_`, `myapp_database_`, `myapp_session`). Check my app configuration to determine if it relied on the old defaults and suggest the explicit values I should set to preserve the previous behavior.

“If you're running an old version of Laravel, this is the fastest way to upgrade.”

Taylor Otwell
Creator of Laravel

years automating Laravel upgrades
10+
Laravel upgrades automated to date
181,316
of customers use Shift again
83%

01 — Why Shift + AI

Every change,
automated since 2015.

Shift’s goal is a fully upgraded Laravel app, as if it ran that version all along. Left alone, AI settles for compatible. With Shift’s changes and prompts to guide it, you get the most from both.

Shift · deterministic

Knows upgrades.

  • Every version since Laravel 4.2
  • Goes beyond the Upgrade Guide
  • Adopts latest conventions
  • Same result, every time

AI · generative

Knows your code.

  • Reads your codebase
  • Understands your edge cases
  • Writes code in your style
  • Adapts its approach each run

Together (with fewer tokens burned)

Fully upgraded.

  • Shift makes every reliable change
  • AI handles beyond what’s mechanical
  • Better context from Shift’s changes
  • Guide the rest with Shift’s prompts

02 — How it works

From outdated to upgraded in one PR.

  1. 01

    Connect

    with GitHub, GitLab, or Bitbucket and pick a repository.

  2. 02

    Shift

    Shift opens a PR with changes in nice, atomic commits.

  3. 03

    Finalize

    Anything needing a closer look gets a comment, often with an AI prompt.

  4. 04

    Merge

    When you’re ready, merge the PR, and continue with your next Shift.

03 — Your AI options

Finish with any AI.

Shift makes every reliable change. You choose how the rest gets done: bring your own AI, borrow ours, or let your agent drive Shift itself.

Copy the prompt

Included

Shift’s comments come with prompts written for your code. Paste them into any AI.

AI prompt

Upgrade acme/legacy-reports to a version compatible with Laravel 13. Review its changelog for breaking changes, then update any usage within app/Reports.

Add an AI Review

+$9

No AI handy? Shift runs one on your PR after it finishes, guided by its own comments. Tokens included.

[AI Review] Laravel 13.x Shift

Beta · runs automatically

Let your agent drive

Skills

Shift AI skills let Claude Code, Laravel Boost, and other agents analyze, run, and review Shifts for you.

❯ /shift:analyze

❯ /shift:run

❯ /shift:review

npx skills add laravel-shift/shift-ai

04 — What Shift knows

Over a decade of edge cases, automated.

Every release, every support email, and every run since 2015 has made Shift a little smarter.

Migrate folder structure Add user authentication Update pagination methods Use Validator contract Add new EncryptCookie middleware Shift RedirectResponse to helper Add new exceptions to $dontReport property Migration for sessions table Update FormRequest inheritance Remove old providers Convert implicit controller routes Rename collection methods Convert container methods Bump Laravel dependencies Convert dynamic "with" view variables Convert bcrypt to Hash::make Convert Blade or to PHP ?? Inject new request parameter Convert Cache TTL from minutes to seconds Leverage HOME constant Shift to Carbon 2 Shift Blade "tag components" Convert factory types to states Rename retryAfter and timeoutAt Convert route options to fluent methods Convert deprecated $dates property to $casts Convert optional() to nullsafe operator Convert removed $dates property to $casts Remove redundant typing in DocBlocks Remove default app files Convert $casts property to method Re-register exceptions Bump Composer dependencies Dispatch jobs directly Remove unused ValidatesRequests trait Remove base controller inheritance Adopt new PHP attributes for simple properties Shift ENV variables Bump community package dependencies Remove unnecessary $table property Convert validation rules to array syntax Convert to helper methods Leverage command autoloading Consolidate service providers Include helpful testing packages Generate HTTP tests for controllers Generate tests for console commands Namespace models under App\Models Bump laravel/framework Add npm dependencies Configure Vite Rename ENV variables Convert test helpers Swap dependencies Convert Html facade Adopt short array syntax
Adopt PSR-4 convention Convert blade output directives Convert to new helper methods Rename Commands and Handlers Migrate package language files Remove SelfHandling from Jobs Convert route helpers Remove default app folders Shift core files Migrate routes Migration for queue tables Rename session methods Convert to event helper Rename test assertions Update Eloquent method visibility Shift deprecated Resource class Move assets Remove explicit deleted_at date cast Replace deprecated Array and String helpers Convert Input to Request facade Add laravel/ui dependency Unindent vendor mail templates Remove web.config Set return type of base TestCase methods Shift to class based routes Add uuid to failed_jobs table Use Faker methods Add type hints for Laravel Shift config files Streamline config files Re-register HTTP middleware Re-register scheduled commands Adopt new PHP attributes in models Use Gate facade for controller authorization Modernize controller middleware Add Laravel composer run scripts Refactor deprecated request access Bump NPM dependencies Bump minimum constraints Leverage injected request object Streamline calls to orderBy Modernize Blade directives Set new ENV variables Re-register exception handling Generate model factories Generate unit tests for form requests Configure basic testing environment Condense Example into default Laravel namespace Bump fzaninotto/faker Update npm scripts Use ES modules Use new @vite Blade directive Update build command references Convert Form facade Convert Blade directives Convert string references to ::class

05 — Pricing

Pay per Shift.
Or subscribe.

Run a single Shift for a one-time price. Or subscribe to a Shifty Plan and run every Shift it includes, with automated PRs to keep you current.

Start here

A la carte

Automated Shifts

from $19 $19 $39 per Shift

  • One Shift for each Laravel version
  • Pay once. No subscription.
  • Add an AI Review for $9
Start here

Subscription

Shifty Plans

from $99 $899 per year, per repository

  • Every Laravel Shift in your plan
  • Weekly and monthly PRs to stay current
  • Full Shift Workbench access

06 — Loved by Laravel developers

Trusted for over a decade.
Even AI fans still use Shift.

“I can't tell you how much time Shift has saved us. By running the Shifts paired with AI, we were able to upgrade Laravel, Livewire, Unit Tests, Tailwind, and PHP with very little issue.”
Photo of Eric Umoh

Eric Umoh
IT Director at teamqualify.com

“We use Shift to upgrade all our projects every time a new version of Laravel is released.”
Photo of Freek Van der Herten

Freek Van der Herten
Laravel Package Creator

“I'll yeet everything else over the wall to AI, but not the upgrade. That's a job for Shift.”
Photo of Shawn Lindstrom

Shawn Lindstrom
Laravel Developer

“After spending a few hours on a manual upgrade, I opted to try out Shift. It went far beyond what I expected. I thought, "eh, I might not need to pay for that", but I'm walking away feeling the total opposite.”
Photo of Mark Bingham

Mark Bingham
Laravel Developer

“The amount of time and mental power Shift saves is worth much, much more than the cost.”
Photo of Matt Stauffer

Matt Stauffer
Partner at Tighten

“Just purchased another Shift and am so happy that this service exists. You seriously must give it a try.”
Photo of Jacob Bennett

Jacob Bennett
Host of Laravel News

“I used AI to upgrade a project from Laravel 8 to 12. It took about two weeks. Then I tested Shift for comparison. The result? Shift beat AI by miles.”
Photo of Jaber Al-Amari

Jaber Al-Amari
Principal Engineer at ProcureIn.net

“For 20 bucks, Shift is a no-brainer to upgrade your Laravel projects.”
Photo of Jeffrey Way

Jeffrey Way
Creator of Laracasts

“Tried to update an old Laravel app with AI. After a few hours wasted, I just paid for Shift and was done in an hour. I will never not use Shift. I need something I can trust.”
Photo of Marco Kaiser

Marco Kaiser
Creator of Questlog.app

07 — FAQ

Questions? Answers.

More in the Shift FAQ.

You can, and plenty of developers do. But AI aims for compatible, and it spends a lot of tokens rediscovering changes Shift has automated for over a decade. Use both. Shift applies every change it knows in atomic commits, then hands your AI a prompt for the rest.
Yes. A lot more. The Upgrade Guide focuses on new features and breaking changes, treating the rest as optional. Shift upgrades all changes, so your app looks like it ran that version of Laravel all along.
Shift handles the mechanical changes. For anything that needs judgment, it leaves a detailed comment on the PR with a copyable AI prompt. Paste it into your AI, or add an AI Review and Shift runs it for you.
Write access, so Shift can create a branch and open a PR. Nothing lands on your main branch until you merge. Your code lives on Shift’s server only while the upgrade runs, usually under a minute, then it’s removed. You can deauthorize Shift after you merge. If your code can’t leave your machine, Shift for Docker runs any Shift locally.
Any of them. The prompts are markdown text, so paste them anywhere. Shift AI skills work with Claude Code, Laravel Boost, and other agents that support skills.
Shifts run one version at a time, so you can verify each upgrade. A Shifty Plan lets you run every Shift it includes for one price.

Start with Shift.
Finish with AI.

Connect with Git and your first PR is a few clicks away.

Run a Shift