Archive
Laravel
Laravel releases, upgrades, and what they cost in practice.
-
Laravel 13 and the first-party AI SDK
Three months on Laravel 13 in our internal ops app: what the AI SDK replaced in our ticket triage code, the numbers we measured, the 0.x release that broke our structured output, and the parts we did not turn on.
-
Laravel 12: the release where almost nothing broke
Our internal ops app went from Laravel 11 to 12 in under an hour of real work. The only genuine breakage was Carbon 3, which quietly flattened a finance report. Notes from three months in.
-
Laravel 11 and the missing Kernel.php
Notes from moving our internal ops app from Laravel 10 to 11: why we kept both kernel files, how per-second rate limiting fixed a courier webhook, and what the /up route is really doing.
-
Laravel 10 in an internal app: native types, the Process facade, and Pennant
Our internal ops app went 9 to 10 in nine hours, not the ten minutes the upgrade guide estimates. Notes on two silent breaks, replacing exec() with the Process facade, and the Pennant gotcha that bit us.
-
Laravel 9: Symfony 6 underneath, and a smaller upgrade than expected
Seven hours of work, one silent upload bug, and a framework that mostly got out of the way. Notes on Flysystem 3, the PHP 8.0.2 floor, the new accessor syntax and full text search.
-
Laravel 8, and why we stayed on Blade
Notes from taking a small client dashboard to Laravel 8.15: namespaced seeders, class-based factories, squashed migrations, job batching. Then the argument we actually had, which was whether to adopt Livewire, and why we did not.
-
Laravel 5.6 for a client dashboard, from a Symfony habit
My first substantial Laravel project after four years of Symfony: facades versus constructor injection, an N+1 that cost 118 queries, the 5.6 logging rewrite, and the scheduled report that ran three times.