Laravel 13.31, weekly updates and tip

Laravel 13.31

Nice palindromic version this week with Laravel 13.31. Here are the highlights:

  • Add dropVectorIndex() to the schema blueprint in #61391
  • Add insertOrIgnoreReturning() to the Eloquent builder passthru in #61393
  • Add totalSize method to Queue in #61373
  • Add once assertions to the mail and notification fakes in #61415
  • Add devServerUrl() to Vite in #61465
  • Fix lazy() and lazyById() ignoring limit() and offset() in #61402

You may review the full branch diff on GitHub for a complete list of changes.

Weekly Journal

Last week I focused mostly on client work. I've kept a few contracts over the years and now with AI, I'm glad I did. I don't have a lot of "greenfield" work for Shift. So I use AI mostly for refactors I'd otherwise not do. Using it to plan and build has been more "fun".

In between, I promoted Double. It passed 10000 downloads last week. It's on pace to pass 50k this week. Double has feature parity with Mockery, and provides an improved developer experience. The only reason I haven't tagged 1.0 is adoption. I want to "battle-test" it in more projects. So, if you're interested in trying Double, please reach out. Also, if you'd like to see a side-by-side comparison with Mockery, you may watch this demo.

This week I'll finish up the client work and continue building the Shift MCP server.

Weekly Tip

I mentioned assimilating packages in a recent newsletter. This not only helps with compatibility, but also lessens the surface area of a "supply chain" attack. We see such attacks making tech headlines this year.

So, when working on client work or a Human Shift, once upgrade, one of the additional things I do is run this prompt to find unused dependencies:

Review all of the dependencies list in my `composer.json`, both `require`
and `require-dev`, one-by-one to see if they are actually used in my
codebase. As a first pass, you should review their `composer.json` to gather
their autoloaded references to search for. If none are founds, do a deeper
second pass for potential dynamic or otherwise autoloaded references. Be
sure to ignore references in any code comments, strings, or unused import
only references.
View Archives →