Laravel 13.15, weekly updates and tip

Laravel 13.15

A few patch and minor releases bring us all the way to Laravel 13.15 this week. Here are the highlights:

  • Fix Request::createFromBase() compatibility with Symfony 8.1 in #60354
  • Allow enums in Queue::route in #60402
  • Add units to DebounceFor in #60388
  • Add Macroable to InvokedProcess in #60392
  • Add Prohibitable to cache:clear and queue:flush in #60430
  • Add JSON Schema array deserializer in #60384
  • Add typed translation accessors in #60443
  • Add multi-type union support to Illuminate JsonSchema in #60455

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

Weekly Journal

Last week I was mostly support mode - patching super minor bugs reported for Shift. I also fixed some minor issues on laravelshift.com. The only one of note was from the big refactors I did a few weeks back with AI. A bit of JavaScript wasn't firing on the Shift pages due to a cookie rename that was missed. Probably something only I noticed. But, nonetheless, its fixed.

Other than that, I worked on my latest side-project. I got a majority of the work done last Thursday and Friday. That put me in a good place to finish up yesterday. I'll probably use my livestream tomorrow to launch it. I'm not expecting much traction on this side-project. It's not related to code. But, of course, I used the TALL stack to build it (Tailwind, Alpine, Livewire, Laravel). The project also gave me a chance to use the new Laravel AI SDK.

Anyway, I wanted it done because, well honestly, I'm tired of not finishing side-projects. But also because I came up with my next Shift related side-project. I'll share more on that in the coming weeks, but I want to prove the idea a bit more first.

Weekly Tip

The AI responses I received in my latest project contained Markdown. So I was using Str::markdown() a lot. But did you know there's an Str::inlineMarkdown(). I didn't. It was added way back in Laravel 9.

Essentially all Markdown is wrapped in a p tag - even if it doesn't contain any line breaks.

So Str::markdown('**Shift**') produces <p><strong>Shift</strong></p>.

However, Str::inlineMarkdown('**Shift**') produces <strong>Shift</strong>. No wrapping <p> tag.

Any line breaks within the Markdown will be preserved. inlineMarkdown never wraps in <p> tags. In fact, you never get any block-level tags at all. Underneath it uses CommonMark's InlinesOnlyExtension. Which, "configures the parser to only render inline elements - no paragraph tags, headers, code blocks, etc."