Ship

Upgrades are a command, not a weekend.

What Laravel Shift sells as a separate service is part of the framework here. buddy upgrade pulls the next release into the app, refreshes dependencies, runs the migrations it brings, and raises the Bun version your CI and containers pin. Every change can be previewed first, and it will not overwrite framework files you edited and did not commit.

What you get.

All of it in the same install, with nothing to wire together first.

Preview first

buddy upgrade --dry-run lists every file a real run would change, from a snapshot of the release, without writing a byte to the project.

Your edits are safe

Uncommitted changes inside managed framework paths stop the upgrade unless you pass --force, so nothing hand-edited is silently replaced.

Dependencies and migrations

After the sync the dependencies are refreshed and the migrations the release brings are run, so the app and its schema land on the new version together.

CI and containers follow

The Bun version your workflows, Pantry config, and Dockerfiles pin moves up to the framework’s, and never down.

Config codemods

buddy config:migrate rewrites config keys a release renamed, as a reviewable text diff rather than a reformat of your file.

Coming from Laravel

buddy migrate:project --from laravel translates Eloquent models and migrations into defineModel() files and SQL, and writes a report of everything left to port by hand.

From the command line.

Buddy scaffolds, runs, and ships this the same way it does the rest of the app.

buddy upgrade --dry-run buddy upgrade buddy config:migrate

These share the same models, config, and types, so using them together costs nothing extra.