Skip to content
BOOSTER 0.1

PHP and Laravel upgrades · WELD stack

BOOSTER

Boosts your versions.

A booster shot keeps your immunity current. This one keeps your PHP current, and it stings less. BOOSTER plans the hops from the version your app runs today to one the policy still supports, then gives them one dose at a time: Rector rewrites the code, BOOSTER raises composer.json, and your tests must pass on the target PHP before the next hop starts.

  • One hop per dose
  • 50 files cap per hop
  • 0 commits made for you

Watch a plan launch Install

BOOSTER mark: a syringe that is also a rocket, gold flame below
Altitude
PHP 8.5
Stage
6 of 6
Gate
target-image tests

Dose by dose

Every hop a dose. Every gate a stamp.

This is booster plan for the example apps that ship with BOOSTER, written up the way your doctor would. Pick a patient, then launch.

Form B-01 · Version immunization record

examples/laravel-blade

App type
laravel-blade
Course
PHP 8.2 → 8.5 · Laravel 10 → 13
Policy
CREED snapshot
Next booster due
17 Mar 2028
  1. 01 laravel-10-to-11Move a Laravel 10 app to Laravel 11. PHP 8.2 · Laravel 11 booster-target:8.2 Gate passedPHP 8.228 Oct 2026
  2. 02 laravel-11-to-12Move a Laravel 11 app to Laravel 12. PHP 8.2 · Laravel 12 booster-target:8.2 Gate passedPHP 8.228 Oct 2026
  3. 03 php-82-to-83Move PHP 8.2 code to PHP 8.3. PHP 8.3 · Laravel 12 booster-target:8.3 Gate passedPHP 8.328 Oct 2026
  4. 04 laravel-12-to-13Move a Laravel 12 app to Laravel 13. PHP 8.3 · Laravel 13 booster-target:8.3 Gate passedPHP 8.328 Oct 2026
  5. 05 php-83-to-84Move PHP 8.3 code to PHP 8.4. PHP 8.4 · Laravel 13 booster-target:8.4 Gate passedPHP 8.428 Oct 2026
  6. 06 php-84-to-85Move PHP 8.4 code to PHP 8.5. PHP 8.5 · Laravel 13 booster-target:8.5 Gate passedPHP 8.528 Oct 2026

RESULT: PASS Review with git diff, run your own checks, then commit. BOOSTER never commits or pushes.

The overlap

Never on a pair Laravel doesn't support.

BOOSTER interleaves the PHP and Laravel hops so the app sits on a supported pair after every dose: Laravel 10 on PHP 8.1 to 8.3, 11 on 8.2 to 8.4, 12 on 8.2 to 8.5, 13 on 8.3 or newer. A target pair that cannot exist is refused before anything runs.

Targets must still be supported by CREED's policy. Passing through PHP 8.1 is fine; stopping there is not:

$ bin/booster plan --path=examples/raw-php --to-php=8.1
Php 8.1 is past security support; pick a version the policy still supports.
exit 2

supported pair not a pair Laravel supports the six doses for Laravel 10 on PHP 8.2

Grid of Laravel versions 10 to 13 against PHP 8.1 to 8.5. The path starts at Laravel 10 on PHP 8.2, moves to Laravel 11 and then 12 on PHP 8.2, PHP 8.3, Laravel 13, then PHP 8.4 and PHP 8.5.

Inside one dose

Four checks before the next stage fires.

  1. T−4

    Dry run and cap

    Rector previews the hop. If it reports errors, or wants to change more files than --max-changes (50 by default), the run stops before anything is written.

  2. T−3

    Rector for real

    Only that hop's rules, from BOOSTER's own vendor/, with the hop's PHP target set on purpose. An app on PHP 7.4 is rewritten by a Rector running on 8.3 or newer.

  3. T−2

    Raise the constraint

    The php or laravel/framework constraint in composer.json goes up, and config.platform.php moves with it. BOOSTER never runs composer update.

  4. T−1

    The gate

    Your tests run inside booster-target:<php>, built from docker/Dockerfile on the PHP the hop moves to. Red stops the run and leaves the changes for you to read; git checkout . undoes them.

Some hops are playbooks, not code: Rector does not read Vue, so vue-2-to-3 lists the steps and the official guide, and a person does the work. The PHP 7.4 to 8.0 hop is flagged as the one that needs the most review time.

Five commands

The whole kit.

Exit codes: 0 pass · 1 a hop was capped, errored or failed its gate · 2 bad usage or a target the policy does not support.

$ bin/booster detect --path=examples/vue-spa
path           examples/vue-spa
app_type       raw-php-vue
composer_json  yes
php            8.0
laravel        unknown
vue            2
wayne_cas      no

Get the shot

Install, then plan.

BOOSTER needs PHP 8.3 or newer. The app it upgrades does not: an app on PHP 7.4 is fine. The gate in run starts Docker itself, so the machine needs a Docker daemon.

git clone https://github.com/waynestate/booster.git
cd booster && composer install
bin/booster detect --path=../my-app
bin/booster plan   --path=../my-app
bin/booster run    --path=../my-app --dry-run
bin/booster run    --path=../my-app

The one-shot form, for a forced image upgrade

bin/booster run --path=../my-app --goal=php-74-to-84

On Packagist

It's waynestate/booster now, with no tagged release yet. BOOSTER runs on PHP 8.3 or newer even when the app does not, so give it its own folder: clone it as above, or composer create-project waynestate/booster booster dev-main.

Contraindications

What BOOSTER will not do.

Side effects are limited to the diff in your working copy. Read it, then merge it yourself.

  • Commit, push or open a merge request

    It edits the working copy and prints a report. A person reads the diff and merges it.

  • Start on a dirty tree

    run refuses a working copy that is not under git or has uncommitted changes, so the upgrade diff stands alone. --allow-dirty if you must.

  • Aim at an unsupported version

    An end-of-life target is refused; a security-only one comes with a warning. The dates come from CREED's policy.json, never from BOOSTER's code.

  • Run composer update

    It raises constraints. Resolving them is your call.

  • Pass quietly

    An unreadable policy, broken JSON, missing Docker or a Rector error fails closed with exit 1 or 2.

  • Trust your file names

    Subprocesses take argument arrays, and control characters are stripped from everything printed. It reads no secrets and makes no network calls of its own.

The care team

BOOSTER's place in WELD.

WELD is the Wayne State application stack. BOOSTER is its upgrade layer, and it works for all five shapes: raw PHP, raw PHP with a Vue SPA, Laravel with Blade, Blade with Vue islands, and Inertia with Vue.

  • WayneUIThe interface layer under everything, this page included.
  • CREEDWrites the version policy BOOSTER reads.
  • PROCTORMeasures an app against that policy; can ride in the gate.
  • PREFLIGHTThe CI templates BOOSTER's own checks run on.
  • SESAMESign-in; --sesame moves wayne-cas apps to it.
  • HELMETThe baseline runtime and its headers.
  • PinstripeThe coding standard BOOSTER is held to.
  • SourdoughStarters that are born current.
  • WELDThe whole stack, joined. BOOSTER keeps it current.
  • BOOSTERMoves apps forward, one dose at a time.You are here
  • SQUIRECarries the release out the door.
  • ROLLCALLEvery app answers “present”, with its PHP version.
  • ADVISORAsk what applies to your app, and what to do next.
  • DRAWBRIDGEThe sign-in gateway, lowered on request.