Ultimate

Migrating from Laravel

The concept map for a Laravel app. The runbook — phases, exit conditions, stop conditions — is Migrating an existing app; this page says what each Laravel term becomes. As of 2026-11, against the current release (laravel.com/docs).

Concept map

LaravelUltimate
routes/web.php + a controller that returns a viewa route file: Routes and render modes
a controller that writes, a form requestan action, its input schema: Actions
an Eloquent modelan entity(): Entities and migrations
a query scope, the query buildera query: Queries and live queries
php artisan make:migration, migratex db gen "<name>", then x db migrate
php artisan make:*x g <kind> <name> (CLI reference)
a queued joba job: Jobs and workflows
the scheduler (schedule:run)a task: Scheduled tasks
Breeze, Fortify, SanctumAuth
gates and policiesa policy: Policies and authz
broadcasting (Reverb, Pusher)a live query: Realtime
MailablesMail
Storage disksStorage and uploads
Nova, FilamentAdmin dashboard
lang/*.phpone flat catalog per locale: I18n
Pest, PHPUnitTesting
php artisan servex dev

What does not map

LaravelWhy
PHP and its packagesBun only. A Composer package is rewritten or bought as a service
MySQL, SQLite, SQL ServerPostgres only, by design: Home
Blade, Livewirepages render with SolidJS; interactive parts are islands. No converter
model events and observersno implicit hooks: the write is an action or a mutator that says what it does (Actions)
polymorphic relations (morphTo)model each target as its own foreign key (Entities and migrations)

Schema adoption

Laravel ids are bigint ($table->id()) and timestamps are created_at / updated_at. Phase 1 of the runbook declares the existing tables with the physical-name overrides it gives, then x db gen until x verify --only drift agrees: Migrating an existing app.

Identity cutover

Laravel storesBranch
users.password as $2y$… — bcrypt, Laravel's default driverproceed: verified natively, rewritten as argon2id on first login (Migrating an existing app)
$argon2id$… (the argon2id driver)proceed: rehashed when weaker than the policy
the session: an encrypted cookie keyed by APP_KEYbridge it with your own verifier behind configureAuthenticator(), or keep the Laravel login until every user has signed in once (Auth)

Edit this page on GitHubThis page as markdown