<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/vendor/feed/atom.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US">
                        <id>https://laravel.com/rss/oss-changelog</id>
                                <link href="https://laravel.com/rss/oss-changelog" rel="self"></link>
                                <title><![CDATA[OSS Changelog]]></title>
                    
                                <subtitle>New updates and improvements to Laravel&#039;s open source products.</subtitle>
                                                    <updated>2026-03-31T23:59:59+00:00</updated>
                        <entry>
            <title><![CDATA[Laravel 13 - Laravel AI SDK]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-laravel-13-laravel-ai-sdk</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Laravel 13 introduces the first-party <a href="https://laravel.com/ai">Laravel AI SDK</a>, providing a unified API for text generation, tool-calling agents, embeddings, audio, images, and vector-store integrations.</p>
<p>With the AI SDK, you can build provider-agnostic AI features while keeping a consistent, Laravel-native developer experience.</p>
<p>For example, a basic agent can be prompted with a single call:</p>
<pre><code class="language-php">use App\Ai\Agents\SalesCoach;

$response = SalesCoach::make()-&gt;prompt('Analyze this sales transcript...');

return (string) $response;
</code></pre>
<p>The Laravel AI SDK can also generate images, audio, and embeddings:</p>
<p>For visual generation use cases, the SDK offers a clean API for creating images from plain-language prompts:</p>
<pre><code class="language-php">use Laravel\Ai\Image;

$image = Image::of('A donut sitting on the kitchen counter')-&gt;generate();

$rawContent = (string) $image;
</code></pre>
<p>For voice experiences, you can synthesize natural-sounding audio from text for assistants, narrations, and accessibility features:</p>
<pre><code class="language-php">use Laravel\Ai\Audio;

$audio = Audio::of('I love coding with Laravel.')-&gt;generate();

$rawContent = (string) $audio;
</code></pre>
<p>And for semantic search and retrieval workflows, you can generate embeddings directly from strings:</p>
<pre><code class="language-php">use Illuminate\Support\Str;

$embeddings = Str::of('Napa Valley has great wine.')-&gt;toEmbeddings();
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel 13 - JSON:API Resources]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-laravel-13-jsonapi-resources</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Laravel now includes first-party <a href="/docs/eloquent-resources#jsonapi-resources">JSON:API resources</a>, making it straightforward to return responses compliant with the JSON:API specification.</p>
<p>JSON:API resources handle resource object serialization, relationship inclusion, sparse fieldsets, links, and JSON:API-compliant response headers.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel 13 - Request Forgery Protection]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-laravel-13-request-forgery-protection</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>For security, Laravel's <a href="/docs/csrf#preventing-csrf-requests">request forgery protection</a> middleware has been enhanced and formalized as <code>PreventRequestForgery</code>, adding origin-aware request verification while preserving compatibility with token-based CSRF protection.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel 13 - Queue Routing]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-laravel-13-queue-routing</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Laravel 13 adds <a href="/docs/queues#queue-routing">queue routing by class</a> via <code>Queue::route(...)</code>, allowing you to define default queue / connection routing rules for specific jobs in a central place:</p>
<pre><code class="language-php">Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'podcasts');
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel 13 - Expanded PHP Attributes]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-laravel-13-expanded-php-attributes</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Laravel 13 continues to expand first-party PHP attribute support across the framework, making common configuration and behavioral concerns more declarative and colocated with your classes and methods.</p>
<p>Notable additions include controller and authorization attributes like <a href="/docs/controllers#controller-middleware"><code>#[Middleware]</code></a> and <a href="/docs/controllers#authorization-attributes"><code>#[Authorize]</code></a>, as well as queue-oriented job controls like <a href="/docs/queues#max-job-attempts-and-timeout"><code>#[Tries]</code></a>, <a href="/docs/queues#dealing-with-failed-jobs"><code>#[Backoff]</code></a>, <a href="/docs/queues#max-job-attempts-and-timeout"><code>#[Timeout]</code></a>, and <a href="/docs/queues#failing-on-timeout"><code>#[FailOnTimeout]</code></a>.</p>
<p>For example, controller middleware and policy checks can now be declared directly on classes and methods:</p>
<pre><code class="language-php">&lt;?php

namespace App\Http\Controllers;

use App\Models\Comment;
use App\Models\Post;
use Illuminate\Routing\Attributes\Controllers\Authorize;
use Illuminate\Routing\Attributes\Controllers\Middleware;

#[Middleware('auth')]
class CommentController
{
    #[Middleware('subscribed')]
    #[Authorize('create', [Comment::class, 'post'])]
    public function store(Post $post)
    {
        // ...
    }
}
</code></pre>
<p>Additional attributes have also been introduced across Eloquent, events, notifications, validation, testing, and resource serialization APIs, giving you a consistent attribute-first option in more areas of the framework.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel 13 - Cache TTL Extension]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-laravel-13-cache-ttl-extension</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Laravel now includes <a href="/docs/cache"><code>Cache::touch(...)</code></a>, which lets you extend an existing cache item's TTL without retrieving and re-storing its value.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Semantic / Vector Search]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-semantic-vector-search</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Laravel 13 deepens its semantic search story with native vector query support, embedding workflows, and related APIs documented across <a href="/docs/search#semantic-vector-search">search</a>, <a href="/docs/queries#vector-similarity-clauses">queries</a>, and the <a href="/docs/ai-sdk#embeddings">AI SDK</a>.</p>
<p>These features make it straightforward to build AI-powered search experiences using PostgreSQL + <code>pgvector</code>, including similarity search against embeddings generated directly from strings.</p>
<p>For example, you may run semantic similarity searches directly from the query builder:</p>
<pre><code class="language-php">$documents = DB::table('documents')
    -&gt;whereVectorSimilarTo('embedding', 'Best wineries in Napa Valley')
    -&gt;limit(10)
    -&gt;get();
</code></pre>
<p>Inertia v3 is here — a ground-up rethink of the developer experience with a focus on zero-config setup, smaller bundles, and powerful new primitives for building modern apps. Axios and <code>qs</code> have been replaced with a built-in XHR client, SSR works automatically during development without a separate Node process, and a new Vite plugin eliminates nearly all boilerplate. On top of that, v3 introduces optimistic updates, instant visits, standalone HTTP requests via <code>useHttp</code>, layout props, and fine-grained exception handling — all designed to make Inertia apps feel faster to build and faster to use. Here's what's new:</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Vite Plugin]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-vite-plugin</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>A new <code>@inertiajs/vite</code> plugin eliminates the boilerplate that traditionally lived in your app entry point — no more manual <code>resolve</code>, <code>setup</code>, or separate SSR entry files. Pages auto-resolve from <code>./Pages</code>, code splitting and lazy-loading are handled automatically, and SSR is wired up with zero config. Your app entry point can be as simple as <code>createInertiaApp()</code> with no arguments. A new <code>withApp</code> callback also lets you modify the root app instance (register plugins, provide values) before rendering, on both client and server.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - SSR in Development]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-ssr-in-development</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>SSR now works automatically during <code>npm run dev</code> — no separate Node.js process required. Pages are server-rendered out of the box in development, while the production workflow (<code>vite build &amp;&amp; vite build --ssr</code>) remains unchanged. Error reporting has been overhauled: errors now log the component name, URL, and actionable hints, and a <code>SsrRenderFailed</code> event is dispatched for monitoring. You can also disable SSR on specific routes via middleware or the Inertia facade.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Axios Removed]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-axios-removed</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Axios and <code>qs</code> have been removed as dependencies entirely. A lighter built-in XHR client handles all HTTP communication, reducing bundle size and the dependency footprint. If you rely on Axios interceptors or other Axios-specific features, an adapter is available to keep things working during your migration.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Standalone HTTP Requests]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-standalone-http-requests</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>A new <code>useHttp</code> hook brings <code>useForm</code>-like ergonomics to plain HTTP requests outside of Inertia's page lifecycle. It provides reactive state management, error handling, file upload progress tracking, and request cancellation — ideal for API calls, external service requests, or any HTTP interaction that doesn't involve an Inertia page visit. It also supports optimistic updates and Precognition out of the box.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Optimistic Updates]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-optimistic-updates</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>UI updates now apply immediately before server confirmation via a chainable <code>.optimistic()</code> method. Your callback receives current props and returns the optimistic values, which are applied instantly. When the server responds, real data takes over seamlessly — and if the request fails, changes auto-revert. Multiple concurrent optimistic updates are tracked independently, and the feature works across <code>router</code> visits, <code>&lt;Form&gt;</code>, <code>useForm</code>, and <code>useHttp</code>.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Instant Visits]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-instant-visits</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Navigate to a target page component immediately while the server request fires in the background. The page renders right away using shared props, giving the user an instant transition, and page-specific props merge in when the server responds. This is especially effective for pages where the layout and shell can render before data-heavy content arrives.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Layout Props]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-layout-props</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Layouts now receive props directly as regular component props via a tuple syntax: <code>layout: [AppLayout, { title: 'Dashboard' }]</code>. Pages can derive layout props dynamically from page data using a callback, and update them at any time via <code>setLayoutProps()</code>. This eliminates the need for event buses or provide/inject patterns. Named layouts and nested layouts are fully supported.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Exception Handling]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-exception-handling</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p><code>Inertia::handleExceptionsUsing()</code> gives full control over how exceptions like 404s and 500s are rendered — including exceptions that occur outside of Inertia's middleware. Use <code>withSharedData()</code> to explicitly include shared props in error pages, or return <code>null</code> to fall through to Laravel's default exception rendering.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Nested Prop Types]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-nested-prop-types</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p><code>Inertia::optional()</code>, <code>Inertia::defer()</code>, and <code>Inertia::merge()</code> now work inside nested arrays with dot-notation support for partial reloads, giving you more granular control over which parts of your response are loaded and when.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Form Component Generics]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-form-component-generics</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>TypeScript generics on the <code>&lt;Form&gt;</code> component provide type-safe errors and slot props, improving the developer experience for TypeScript users.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Blade Components]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-blade-components</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>New <code>&lt;x-inertia::app&gt;</code> and <code>&lt;x-inertia::head&gt;</code> Blade components serve as alternatives to the <code>@inertia</code> and <code>@inertiaHead</code> directives. <code>&lt;x-inertia::app&gt;</code> accepts an optional <code>id</code> attribute (defaults to <code>&quot;app&quot;</code>), and <code>&lt;x-inertia::head&gt;</code> supports a fallback slot for when SSR is unavailable.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia v3 - Event System Changes]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-inertia-v3-event-system-changes</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>The event system has been renamed for clarity: <code>invalid</code> is now <code>httpException</code> and <code>exception</code> is now <code>networkError</code>, with corresponding per-visit callbacks <code>onHttpException</code> and <code>onNetworkError</code>.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Starter Kits - Vite 8 Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-starter-kits-vite-8-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Supports Vite 7 and 8, with Vite 6 dropped. The internal utility library has also been migrated from <code>lodash-es</code> to <code>es-toolkit</code>, a modern tree-shakable alternative (raising the minimum JS target to ES2022).</p>
<p>Read the upgrade guide: <a href="https://inertiajs.com/docs/v3/getting-started/upgrade-guide">https://inertiajs.com/docs/v3/getting-started/upgrade-guide</a></p>
<p>Our first-party <a href="https://laravel.com/starter-kits">starter kits</a> have all been upgraded to use <strong>Laravel 13</strong> and <strong>Inertia v3</strong> from day one. Spin up a fresh app with the latest stack today!</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[AI SDK - Teams]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-ai-sdk-teams</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>We also shipped the new <a href="https://laravel.com/docs/starter-kits#teams">Teams feature</a> across all starter kit flavors, giving you out-of-the-box team management screens for creating teams, switching between teams, inviting members, and updating team details.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[AI SDK - Add Failover Support for Insufficient Credits and Quota Errors]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-ai-sdk-add-failover-support-for-insufficient-credits-and-quota-errors</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/ai/pull/249">@meirdick</a></p>
<p>When a provider runs out of credits or hits a quota limit, Laravel AI now automatically fails over to your next configured provider instead of throwing an exception. Billing errors from Anthropic, OpenAI, OpenRouter, and DeepSeek are all detected and routed through the standard <a href="https://laravel.com/docs/ai-sdk#failover">failover mechanism</a> - no code changes required.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add Support for Configuring Provider Options on Agents]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-boost-add-support-for-configuring-provider-options-on-agents</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/ai/pull/166">@shafimsp</a></p>
<p>Agents can now pass provider-specific options - like OpenAI's <code>reasoning.effort</code> - by implementing the new <code>HasProviderOptions</code> interface. This is especially useful for reasoning models where the default effort level may burn unnecessary tokens for simple tasks:</p>
<pre><code class="language-php">use Laravel\Ai\Contracts\Agent;
use Laravel\Ai\Contracts\HasProviderOptions;

class MyAgent implements Agent, HasProviderOptions
{
    use Promptable;

    public function providerOptions(): array
    {
        return [
            'reasoning' =&gt; ['effort' =&gt; 'low'],
        ];
    }
}
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add `laravel-best-practices` Skill]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-boost-add-laravel-best-practices-skill</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/628">@pushpak1300</a></p>
<p>A new built-in skill covering 125+ best practices across 21 categories, from database performance and security to caching, testing, and deployment. Your AI agent now has a comprehensive reference for writing idiomatic Laravel code.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add Security Audit to `add-skill` Command]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-boost-add-security-audit-to-add-skill-command</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/616">@pushpak1300</a></p>
<p>When you install a third-party skill, Boost now runs a non-blocking security audit via partner services. Results appear as a color-coded table so you can make an informed decision before proceeding. Skip it anytime with <code>--skip-audit</code>:</p>
<pre><code class="language-bash">php artisan boost:add-skill owner/repo --all
php artisan boost:add-skill owner/repo --all --skip-audit
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add Upgrade Laravel v13 MCP Prompt]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-boost-add-upgrade-laravel-v13-mcp-prompt</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/658">@pushpak1300</a></p>
<p>A new MCP prompt that walks your AI assistant through upgrading from Laravel 12.x to 13.0. It auto-registers for apps running Laravel 12 and disappears once the upgrade is complete.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add `UpgradeInertiaV3` Prompt for Inertia v2 to v3 Upgrades]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-boost-add-upgradeinertiav3-prompt-for-inertia-v2-to-v3-upgrades</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/636">@pushpak1300</a></p>
<p>Similar to the Laravel 13 upgrade prompt, this one provides step-by-step guidance for moving from Inertia v2 to v3. It detects your frontend framework (React, Vue, or Svelte) and renders only the relevant migration steps.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Support JSON-Formatted Log Entries in Log Reading Tools]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-boost-support-json-formatted-log-entries-in-log-reading-tools</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/650">@HeathNaylor</a></p>
<p>Boost's log reading tools now auto-detect JSON-formatted logs and parse them correctly. If you're using Monolog's <code>JsonFormatter</code>, <code>LogstashFormatter</code>, or <code>LogglyFormatter</code>, the <code>LastError</code> and <code>ReadLogEntries</code> tools handle them seamlessly alongside standard PSR-3 logs.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add `--discover` Flag to `boost:update`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-boost-add-discover-flag-to-boostupdate</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/651">@MrPunyapal</a></p>
<p>Running <code>php artisan boost:update --discover</code> now detects new guideline packages and skills that have been published since your last update, prompting you to select which ones to add.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add Support for Ampcode]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-boost-add-support-for-ampcode</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/598">@dringrayson</a></p>
<p><a href="https://ampcode.com">Amp</a> is now a supported AI agent in Boost. Running <code>boost:install</code> will detect and configure the MCP server for Amp automatically, bringing it to parity with Claude Code, Cursor, Windsurf, and others.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Envoy - Add Summary Mode to `DatabaseSchema` Tool]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-envoy-add-summary-mode-to-databaseschema-tool</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/595">@sulimanbenhalim</a></p>
<p>The <code>DatabaseSchema</code> tool now accepts a <code>summary</code> parameter that returns only table names and column types - roughly 83% fewer tokens. AI agents can call summary first for an overview, then drill down with <code>filter</code> on specific tables when they need the full picture.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Livewire Starter Kit - Allow Calling Stories From Other Stories]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-livewire-starter-kit-allow-calling-stories-from-other-stories</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/envoy/pull/287">@vpratfr</a></p>
<p>Stories can now reference other stories, making it easy to compose complex deployment workflows from reusable building blocks:</p>
<pre><code>@story('deploy')
    build
    migrate
@endstory

@story('full-deploy')
    deploy
    clear-caches
    notify-team
@endstory
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[MCP - Add Blaze]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-mcp-add-blaze</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/livewire-starter-kit/pull/249">@joetannenbaum</a></p>
<p>The Livewire starter kit now ships with Caleb Porzio's <a href="https://blazephp.dev/">Blaze</a> compiler, resulting in up to 97% reduction in compilation overhead.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Passport - Add Image and Audio Content Types With Storage Integration]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-passport-add-image-and-audio-content-types-with-storage-integration</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/mcp/pull/155">@pushpak1300</a></p>
<p>MCP tools can now return images and audio natively. A new <code>Response::fromStorage()</code> method auto-detects content type from your <a href="https://laravel.com/docs/filesystem">Laravel filesystem</a> and handles the base64 encoding for you:</p>
<pre><code class="language-php">// From raw binary data
Response::image($rawBytes, 'image/png');
Response::audio($rawBytes, 'audio/wav');

// From any Laravel disk with automatic MIME detection
Response::fromStorage('photos/avatar.jpg');
Response::fromStorage('recordings/clip.mp3', disk: 's3');
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Passport - Add Middleware Attribute]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-passport-add-middleware-attribute</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/passport/pull/1897">@axlon</a></p>
<p>A new <code>TokenCan</code> attribute lets you declare required token scopes directly on controller methods:</p>
<pre><code class="language-php">class PhotoController
{
    #[TokenCan('read')]
    public function index() { /* ... */ }

    #[TokenCan('write')]
    public function store() { /* ... */ }
}
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Pint - Allow Custom Middleware to Be Registered]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-pint-allow-custom-middleware-to-be-registered</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/passport/pull/1892">@timacdonald</a></p>
<p>You can now add custom middleware to Passport's registered routes via config - great for enforcing rules like UUID validation on <code>client_id</code> before it ever hits the database.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Pint - Adds `Pint/phpdoc_type_annotations_only` Custom Rule]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-pint-adds-pintphpdoc-type-annotations-only-custom-rule</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>An opt-in rule that strips all PHPDoc comments except type annotations. Enable it in your <code>pint.json</code>:</p>
<pre><code class="language-json">{
    &quot;Pint/phpdoc_type_annotations_only&quot;: true
}
</code></pre>
<p>Before:</p>
<pre><code class="language-php">/**
 * Register any application services.
 */
public function register(): void
</code></pre>
<p>After:</p>
<pre><code class="language-php">public function register(): void
</code></pre>
<p>Type annotations like <code>@var list&lt;string&gt;</code> are preserved. The <code>config</code> directory is excluded by default. Best suited for new projects - enable with care on existing codebases.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Precognition - Improvement to `fully_qualified_strict_types` Rule]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-precognition-improvement-to-fully-qualified-strict-types-rule</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Now enabled by default in the Laravel preset, this improvement automatically converts fully qualified class names in PHPDoc annotations to regular imports:</p>
<pre><code class="language-diff">+ use Database\Factories\UserFactory;

  class User extends Authenticatable
  {
-     /** @use HasFactory&lt;\Database\Factories\UserFactory&gt; */
+     /** @use HasFactory&lt;UserFactory&gt; */
      use HasFactory, Notifiable;
</code></pre>
<p>This applies automatically when you update Pint.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prompts - [2.x] Replace Axios With Built-in `fetch` Client]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-prompts-2x-replace-axios-with-built-in-fetch-client</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/precognition/pull/138">@pascalbaljet</a></p>
<p>Precognition v2 ships with a built-in <code>fetch</code>-based HTTP client, dropping Axios as a hard dependency and reducing bundle size by up to 50%. The new client handles XSRF tokens, FormData conversion, and AbortController support out of the box. If you still need Axios for interceptors or other features, an adapter is provided:</p>
<pre><code class="language-typescript">import { client, axiosAdapter } from &quot;laravel-precognition&quot;;

client.useHttpClient(axiosAdapter());
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prompts - Datatable Prompt]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-prompts-datatable-prompt</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/prompts/pull/231">@joetannenbaum</a></p>
<p>A brand new prompt for browsing, searching, and selecting from tabular data. Navigate with arrow keys, press <code>/</code> to search across all columns, or pass a <code>filter</code> closure for custom logic:</p>
<pre><code class="language-php">$selected = datatable(
    label: 'Select a team member',
    headers: ['Name', 'Twitter', 'Role'],
    rows: [
        'taylor' =&gt; ['Taylor Otwell', '@taylorotwell', 'CEO'],
        'jess'   =&gt; ['Jess Archer', '@jessarchercodes', 'Developer'],
    ],
);
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prompts - Title Prompt]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-prompts-title-prompt</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/prompts/pull/221">@joetannenbaum</a></p>
<p>Set and update the terminal window title at any point during execution:</p>
<pre><code class="language-php">title('Deploying to Cloud...');
// ... work happens ...
title('Deployed!');
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prompts - Stream Prompt]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-prompts-stream-prompt</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/prompts/pull/222">@joetannenbaum</a></p>
<p>Stream text to the terminal with automatic word wrapping and a pleasant fade-in effect - perfect for displaying AI responses in real time:</p>
<pre><code class="language-php">$stream = stream();

foreach ($events as $event) {
    $stream-&gt;append($event-&gt;delta);
}

$stream-&gt;close();
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prompts - Task Prompt]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-prompts-task-prompt</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/prompts/pull/223">@joetannenbaum</a></p>
<p>Display output from a running task with a spinner, real-time label updates, and scrollable log lines. Handles ANSI escape sequences and supports partial-line output for streaming.</p>
<pre><code class="language-php">task('Installing dependencies', function (Logger $log) {
    Process::run(
        'composer install',
        fn ($type, $output) =&gt; $log-&gt;line($output)
    );
});
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prompts - Autocomplete Prompt]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-prompts-autocomplete-prompt</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/prompts/pull/226">@joetannenbaum</a></p>
<p>A new prompt that suggests matching values as the user types while still allowing free-form text input. Accepts a static list or a closure for dynamic suggestions.</p>
<pre><code class="language-php">$key = autocomplete(
    label: 'New config key',
    options: collect(Arr::dot(config()-&gt;all()))-&gt;keys()-&gt;all(),
    placeholder: 'e.g. app.name, mail.from, database.default',
    required: true,
);
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prompts - Allow for Dynamic Secondary Info on Select-Type Prompts]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-prompts-allow-for-dynamic-secondary-info-on-select-type-prompts</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/prompts/pull/227">@joetannenbaum</a></p>
<p>Select, multiselect, and search prompts now support a secondary info panel. Pass a string or closure to the new <code>info</code> parameter to show context about the currently highlighted item.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Reverb - Notify Prompt]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-reverb-notify-prompt</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/prompts/pull/228">@joetannenbaum</a></p>
<p>Send native desktop notifications straight from your CLI commands. Supports macOS (via <code>osascript</code>) and Linux (via <code>notify-send</code>):</p>
<pre><code class="language-php">notify('Build complete', 'Deployed to production');

// With macOS-specific options
notify(
    title: 'Build complete',
    body: 'Deployed to production',
    sound: 'Glass',
);
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Scout - [1.x] Adds Support for Rate Limiting]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-scout-1x-adds-support-for-rate-limiting</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/reverb/pull/371">@joedixon</a></p>
<p>Reverb now supports per-application rate limiting, using Laravel's built-in rate limiter under the hood. Configure limits per app to protect your WebSocket server from abuse.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - [11.x] Add Support for `where($field, $operator, $value)` on `Builder` Class]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-vs-code-extension-11x-add-support-for-wherefield-operator-value-on-builder-class</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/scout/pull/969">@gdebrauwer</a></p>
<p>Scout's query builder now accepts operators in <code>where()</code> clauses, making range queries straightforward without dropping into engine-specific callbacks:</p>
<pre><code class="language-php">User::search('taylor')
    -&gt;where('created_at', '&gt;', now()-&gt;subMonth()-&gt;timestamp)
    -&gt;get();
</code></pre>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Link Livewire Page Routes to Components]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-vs-code-extension-link-livewire-page-routes-to-components</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/616">@TitasGailius</a></p>
<p>Routes registered with <code>Route::livewire()</code> now link directly to the Livewire component. Clicking a route name navigates to the component file, and hovering shows the full component hover card.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Support Intermediate (non-Leaf) Translation Keys]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-03" />
            <id>https://laravel.com/docs/changelog#item-2026-03-31-vs-code-extension-support-intermediate-non-leaf-translation-keys</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/609">@TitasGailius</a></p>
<p>Intermediate translation keys like <code>__('validation.attributes')</code> now produce clickable links and hover info without false diagnostics. Previously only the deepest leaf keys were recognized.</p>
]]>
            </summary>
                                    <updated>2026-03-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Add Support for `temporaryUploadUrl` to the `local` Filesystem]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-laravel-framework-12x-add-support-for-temporaryuploadurl-to-the-local-filesystem</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58499">@mnapoli</a></p>
<p>You can now generate <a href="https://laravel.com/docs/filesystem#temporary-upload-urls">temporary upload URLs</a> even when you're using the <code>local</code> driver, making it much easier to build consistent upload flows across local, staging, and production environments.</p>
<pre><code class="language-php">use Illuminate\Support\Facades\Storage;

$url = Storage::disk('local')-&gt;temporaryUploadUrl(
    'uploads/incoming/video.mp4',
    now()-&gt;addMinutes(10),
    ['Content-Type' =&gt; 'video/mp4']
);
</code></pre>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `makeMany` Method to Factory]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-laravel-framework-12x-12x-add-makemany-method-to-factory</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58795">@jackbayliss</a></p>
<p><code>makeMany()</code> gives you a clean, expressive way to generate multiple in-memory model instances without persisting anything. It's ideal for tests, previews, and shaping data before a write.</p>
<pre><code class="language-php">$users = User::factory()-&gt;makeMany(3);

$payload = $users-&gt;map-&gt;only(['name', 'email']);
</code></pre>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Allow Closures for Values in `firstOrCreate` and `createOrFirst`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-laravel-framework-12x-12x-allow-closures-for-values-in-firstorcreate-and-createorfirst</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58639">@gcavanunez</a></p>
<p>You can now lazily compute attribute values only when a record is actually being created. That means fewer unnecessary queries and less wasted work when the model already exists.</p>
<pre><code class="language-php">$location = Location::firstOrCreate(
    ['address' =&gt; $address],
    fn () =&gt; ['coordinates' =&gt; Geocoder::resolve($address)],
);
</code></pre>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Support `afterSending` Method on Notification]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-laravel-framework-12x-12x-support-aftersending-method-on-notification</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58654">@gdebrauwer</a></p>
<p><code>afterSending()</code> lets you hook into the lifecycle after a <a href="https://laravel.com/docs/notifications">notification</a> is dispatched, which is perfect for audit logging, metrics, or cleanup work without cluttering your notification channels.</p>
<pre><code class="language-php">class BookingNotification extends Notification
{
    public function __construct(
		public Booking $booking;
	) {
        //
	}

	public function via()
	{
		return ['mail'];
	}

	public function toMail()
	{
		// ...
	}

	public function afterSending($notifiable, $channel, $response)
	{
		$this-&gt;booking-&gt;update(['notified_at' =&gt; now()]);
	}
}
</code></pre>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `whenFails` and `whenPasses` Methods on `Validator`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-laravel-framework-12x-12x-add-whenfails-and-whenpasses-methods-on-validator</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58655">@gdebrauwer</a></p>
<p>These helpers are particularly useful when you use the validator to validate data outside the request cycle where the error would not get picked up automatically by the HTTP handler.</p>
<pre><code class="language-php">Validator::make(
    ['file' =&gt; $file],
    ['file' =&gt; 'required|image|dimensions:min_width=100,min_height=200']
)-&gt;whenFails(function () {
    throw new InvalidArgumentException('Provided file is invalid');
});
</code></pre>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `withoutheader` Method to Response]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-laravel-framework-12x-12x-add-withoutheader-method-to-response</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58671">@miladev95</a></p>
<p>Removing headers is now straightforward with <code>withoutHeader()</code>, which is handy when you need to strip inherited headers (like caching or debug headers) before returning a <a href="https://laravel.com/docs/responses">response</a>.</p>
<pre><code class="language-php">return response($content)-&gt;withoutHeader('X-Debug');
</code></pre>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Exclude Decorative ASCII Art SVG from Exception Page in Non-Browser Contexts]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-laravel-framework-12x-12x-exclude-decorative-ascii-art-svg-from-exception-page-in-non-browser-contexts</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58580">@serhiilabs</a></p>
<p>Console and non-browser contexts no longer receive the decorative ASCII SVG payload, keeping error output cleaner in logs, CI, agent, and API responses. Furthermore...</p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Use JS to Create the Laravel ASCII SVG Logo on the Fly]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-laravel-framework-12x-12x-use-js-to-create-the-laravel-ascii-svg-logo-on-the-fly</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58719">@markjaquith</a></p>
<p>The exception page ASCII SVG is now generated on the fly with JavaScript, keeping output leaner and better suited to different rendering contexts.</p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add Typed Getters on Cache]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-laravel-framework-12x-12x-add-typed-getters-on-cache</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58451">@ahinkle</a></p>
<p>Typed cache getters reduce repetitive casting and make intent obvious when reading cached values, helping you avoid subtle bugs from unexpected types.</p>
<pre><code class="language-php">$count = Cache::integer('downloads.count', 0);
$enabled = Cache::boolean('features.new_checkout', false);
</code></pre>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[AI SDK - [12.x] Add `InteractsWithData::clamp()`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-ai-sdk-12x-add-interactswithdataclamp</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58608">@cosmastech</a></p>
<p>A <code>clamp()</code> method has been added to the <code>InteractsWithData</code> trait, giving you a tidy way to bound numeric input values, which is great for pagination, limits, sliders, and any user-controlled numbers.</p>
<pre><code class="language-php">// Instead of:
/** @var int&lt;PHP_INT_MIN, PHP_INT_MAX&gt; $perPage */
$perPage = request()-&gt;integer('per_page', 50);

// You can now do:
/** @var int&lt;1, 100&gt; $perPage */
$perPage = request()-&gt;clamp('per_page', 1, 100, 50);
</code></pre>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[AI SDK - Make Provider Default Models Configurable]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-ai-sdk-make-provider-default-models-configurable</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/ai/pull/183">@pfrug</a></p>
<p>The default models used for text, images, audio, transcription, and embeddings may are now configurable in your application's <code>config/ai.php</code> file. This gives you granular control over the exact models you'd like to use if you don't want to rely on the package defaults.</p>
<pre><code class="language-php">return [
    'models' =&gt; [
        'text' =&gt; [
            'default' =&gt; 'claude-sonnet-4-6',
            'cheapest' =&gt; 'claude-haiku-4-5-20251001',
            'smartest' =&gt; 'claude-opus-4-6',
        ],
    ],
],
</code></pre>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[AI SDK - Add Support for Timeouts in Transcription]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-ai-sdk-add-support-for-timeouts-in-transcription</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/ai/pull/176">@NietThijmen</a></p>
<p>Transcription now supports timeouts, giving you better control in production workloads and preventing long-running requests from tying up workers.</p>
<pre><code class="language-php">$transcript = Transcription::fromPath('./podcast.mp3')-&gt;timeout(240)-&gt;generate(Lab::ElevenLabs);
</code></pre>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - New Providers Added]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-boost-new-providers-added</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<h4>Azure OpenAI</h4>
<p>Pull request by <a href="https://github.com/laravel/ai/pull/60">@imYashGupta</a></p>
<h4>Mistral AI</h4>
<p>Pull request by <a href="https://github.com/laravel/ai/pull/40">@jackbayliss</a></p>
<h4>Voyage AI</h4>
<p>Pull request by <a href="https://github.com/laravel/ai/pull/47">@jackbayliss</a></p>
<h4>DeepSeek</h4>
<p>Pull request by <a href="https://github.com/laravel/ai/pull/29">@ihxnnxs</a></p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Added Support for Loading Guidelines and Skills Directly from Vendor Packages]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-boost-added-support-for-loading-guidelines-and-skills-directly-from-vendor-packages</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/566">@pushpak1300</a></p>
<p>Guidelines and skills can now be loaded directly from vendor packages, ensuring that guidelines always match the package version you are using and will never go stale.</p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add Support for Nightwatch MCP]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-boost-add-support-for-nightwatch-mcp</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/575">@jessarcher</a></p>
<p>Nightwatch MCP support improves the integration story for observability-driven workflows, so you can connect monitoring context to your tools more seamlessly.</p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[MCP - Enhance Database-Schema Tool with Full Column Metadata]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-mcp-enhance-database-schema-tool-with-full-column-metadata</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/541">@alanost</a></p>
<p>The database schema tool now exposes richer column metadata, which improves the quality of schema-aware tooling and reduces incorrect assumptions (types, defaults, nullability).</p>
<p>This is particularly helpful when generating code, validating migrations, or building assistants that reason about your database structure.</p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prompts - Change JSON Response Formatting to Compact by Default]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-prompts-change-json-response-formatting-to-compact-by-default</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/mcp/pull/151">@pushpak1300</a></p>
<p>JSON responses are now compact by default, trimming payload size and making tool-to-tool communication faster and less noisy in logs.</p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Stream - Add `number` Prompt]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-stream-add-number-prompt</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/prompts/pull/214">@joetannenbaum</a></p>
<p>A new <code>number</code> <a href="https://laravel.com/docs/prompts">prompt</a> makes it easy to collect numeric input with validation baked in, perfect for CLI setup flows and interactive tooling. Features automatic clamping of the min/max values and adjusting the value via the up and down arrows.</p>
<pre><code class="language-php">$retries = number('How many retries?', default: 3, min: 0, max: 10);
</code></pre>
<p><video src="https://github.com/user-attachments/assets/c8fa5f39-0745-46e1-961d-ec42df123997" controls></video></p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Svelte Package]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-vs-code-extension-svelte-package</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/stream/pull/22">@joetannenbaum</a></p>
<p>The new <code>@laravel/stream-svelte</code> package makes it trivial to <a href="https://laravel.com/docs/responses#consuming-streamed-responses">consume streaming output</a> from your server in your Svelte app. If you're shipping real-time UI, this helps you move from prototype to production faster.</p>
<p>Pull request by <a href="https://github.com/laravel/svelte-starter-kit/pull/1">@joetannenbaum</a></p>
<p>The new Svelte <a href="https://laravel.com/starter-kits">starter kit</a> gets you up and running with Inertia, Svelte, and Laravel conventions quickly, so you can spend time on product code instead of scaffolding.</p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Test Runner Integration]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-vs-code-extension-test-runner-integration</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/583">@TitasGailius</a></p>
<p>Integrating with VS Code's built-in test runner makes it easier to run and iterate on your suite from within your IDE, shortening the edit-test loop and helping you stay in flow.</p>
<p><img src="https://github.com/user-attachments/assets/d819be37-93e5-4dc3-9f2d-a2afc5c44bde" alt="Browsing tests in VS Code" /></p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Livewire Props]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-02" />
            <id>https://laravel.com/docs/changelog#item-2026-02-28-vs-code-extension-livewire-props</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/553">@TitasGailius</a></p>
<p>New support for hovering over Livewire 3 and 4 props means that you can see the relevant type and docblock information directly from the PHP class, reducing context switching in your Livewire and Blade components.</p>
<p><img src="https://github.com/user-attachments/assets/40c0ba1a-6446-4dee-b03a-185c43f110e0" alt="Livewire prop hovering in VS Code" /></p>
]]>
            </summary>
                                    <updated>2026-02-28T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `@includeIsolated` Directive for Isolated Blade Includes]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-laravel-framework-12x-12x-add-at-includeisolated-directive-for-isolated-blade-includes</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58311">@KennedyTedesco</a></p>
<p>When you need to reuse a partial without accidentally leaking variables in (or out), <code>@includeIsolated</code> gives you a clean, predictable boundary - great for shared UI components and emails where &quot;mystery data&quot; can be costly to debug.</p>
<pre><code class="language-blade">{{-- Only receives what you pass explicitly --}}
@includeIsolated(&quot;partials.alert&quot;, [&quot;type&quot; =&gt; &quot;success&quot;, &quot;message&quot; =&gt; $message])
</code></pre>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `Cache::withoutOverlapping()` to Wrap `Cache::lock()->block()`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-laravel-framework-12x-12x-add-cachewithoutoverlapping-to-wrap-cachelock-block</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58303">@mathiasgrimm</a></p>
<p>This adds a tidy, expressive wrapper around cache locks, so you can prevent overlapping work with less boilerplate. Perfect for cron jobs, report generation, and any &quot;only one at a time&quot; tasks.</p>
<pre><code class="language-php">Cache::withoutOverlapping('reports:daily')
    -&gt;block(10, function () {
        // This work will not run concurrently.
        GenerateDailyReport::run();
    });
</code></pre>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Support for Vector Embeddings in the Database]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-laravel-framework-12x-support-for-vector-embeddings-in-the-database</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58337">@taylorotwell</a></p>
<p>This work moves Laravel's &quot;vector&quot; capabilities forward, helping set the stage for richer integrations and smoother workflows when dealing with embeddings and similarity search. If you're exploring AI-powered features, this one's for you.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `Collection::containsManyItems()` Method]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-laravel-framework-12x-12x-add-collectioncontainsmanyitems-method</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58312">@stevebauman</a></p>
<p>A new <code>containsManyItems</code> method was added to complement the existing <code>containsOneItem</code>, enabling you to do a quick check to see if a collection contains two or more items.</p>
<pre><code class="language-php">match (true) {
    $collection-&gt;isEmpty() =&gt; '...',
    $collection-&gt;containsOneItem() =&gt; '...',
    $collection-&gt;containsManyItems() =&gt; '...',
};
</code></pre>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] `JSON:API` Resource]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-laravel-framework-12x-12x-jsonapi-resource</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57571">@crynobone</a></p>
<p>This introduces JSON:API resource support, making it easier to ship standards-compliant APIs with consistent structure across teams and services. If you're standardizing responses (or integrating with clients that expect JSON:API), this helps reduce custom formatting and makes your API surface more predictable.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `BackedEnum` Support for Session Keys]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-laravel-framework-12x-12x-add-backedenum-support-for-session-keys</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58241">@ahinkle</a></p>
<p>You can now use backed enums as <a href="https://laravel.com/docs/session">session keys</a>, which keeps key names centralized and typo-proof, especially helpful in larger apps where session keys tend to spread over time.</p>
<pre><code class="language-php">enum CheckoutSession: string
{
    case Cart = 'checkout.cart';
    case ShippingAddress = 'checkout.shipping_address';
    case PaymentMethod = 'checkout.payment_method';
}

session()-&gt;put(CheckoutSession::Cart, $items);
session()-&gt;get(CheckoutSession::Cart);
</code></pre>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Allow `BackedEnum` for Cache Keys]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-laravel-framework-12x-12x-allow-backedenum-for-cache-keys</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58246">@jackbayliss</a></p>
<p>Same productivity boost, now for cache: backed enums can be used as <a href="https://laravel.com/docs/cache">cache keys</a>, helping you standardize key naming and avoid subtle collisions. Great fit for teams that want a single source of truth for cache identifiers.</p>
<pre><code class="language-php">enum CacheKey: string
{
    case Settings = 'settings.global';
}

Cache::put(CacheKey::Settings, $settings, now()-&gt;addHour());

$settings = Cache::get(CacheKey::Settings);
</code></pre>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - [12.x] Add `--readable` Flag to `env:encrypt` for Visible Key Names]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-inertia-12x-add-readable-flag-to-envencrypt-for-visible-key-names</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58262">@mathiasgrimm</a></p>
<p>A practical quality-of-life improvement: <code>--readable</code> makes encrypted env output easier to audit by keeping key names visible, which helps during reviews and incident response while still protecting secret values. If you're hardening deployments, this pairs nicely with Laravel's <a href="https://laravel.com/docs/configuration#encrypting-environment-files">environment encryption</a> workflow.</p>
<pre><code class="language-bash">php artisan env:encrypt --readable
</code></pre>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Add `async` and `sync` Options to `cancelAll` Method]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-inertia-add-async-and-sync-options-to-cancelall-method</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2814">@pascalbaljet</a></p>
<p>Replacing the deprecated <code>router.cancel()</code>, you can now get the same functionality with <code>router.cancelAll({ async: false })</code>. Giving you more control over request cancellation means smoother UX under heavy navigation or rapid input.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - [2.x] Add Form Context Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-inertia-2x-add-form-context-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2671">@laserhybiz</a></p>
<p>The new <code>useFormContext</code> hook allows child components to know about parent component forms without having to do a bunch of unnecessary prop drilling.</p>
<pre><code class="language-vue">&lt;!-- Parent.vue --&gt;
&lt;template&gt;
    &lt;Form action=&quot;/users&quot; method=&quot;post&quot;&gt;
        &lt;Input name=&quot;name&quot; /&gt;
    &lt;/Form&gt;
&lt;/template&gt;

&lt;!-- Input.vue --&gt;
&lt;script setup&gt;
import { useFormContext } from &quot;@inertiajs/vue3&quot;;

defineProps({
    name: {
        type: String,
        required: true,
    },
});

const form = useFormContext();
&lt;/script&gt;

&lt;template&gt;
    &lt;input type=&quot;text&quot; :name=&quot;name&quot; /&gt;

    &lt;div v-if=&quot;form.errors[name]&quot;&gt;
        {{ form.errors[name] }}
    &lt;/div&gt;
&lt;/template&gt;
</code></pre>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Starter Kits - Add `dontRemember()` Method to Form Helper]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-starter-kits-add-dontremember-method-to-form-helper</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2792">@pascalbaljet</a></p>
<p>This gives you a straightforward way to opt out of Inertia's form remembering behavior when it's not desired. This is handy for sensitive forms or one-time flows where you don't want old values sticking around (e.g., password resets, invite flows).</p>
<p>We made a slew of updates to all of our Starter Kits this month! Amongst the various tune-ups:</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Starter Kits - Add Safer Defaults to `AppServiceProvider`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-starter-kits-add-safer-defaults-to-appserviceprovider</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/blank-livewire-starter-kit/pull/11">@WendellAdriel</a></p>
<p>Safer defaults in the <code>AppServiceProvider</code> reduce the &quot;oops&quot; factor on new projects, helping you start with a more secure, production-friendly baseline while keeping the kit lightweight and easy to customize.</p>
<p>- Enforcing immutable dates with <code>CarbonImmutable</code><br>
- Not allowing destructive commands in production<br>
- Requiring safer passwords by default in production</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Starter Kits - Livewire 4 Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-starter-kits-livewire-4-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/blank-livewire-starter-kit/pull/9">@calebporzio</a></p>
<p>The Livewire starter kits are now ready for Livewire 4, so you can begin new builds on the latest Livewire foundation without spending time on upgrade plumbing. If you're planning a fresh app, this keeps your starting line modern.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add Pint Config File and Util Composer Scripts for Linting]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-boost-add-pint-config-file-and-util-composer-scripts-for-linting</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/blank-livewire-starter-kit/pull/8">@WendellAdriel</a></p>
<p>Out-of-the-box linting makes teams faster: consistent formatting, fewer style nits in code review, and easier onboarding. The included <a href="https://laravel.com/docs/pint">Pint</a> config plus utility scripts make &quot;format everything&quot; a one-command habit.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Boost 2.0]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-boost-boost-20</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>We shipped Skills in Laravel <a href="https://github.com/laravel/boost/releases/tag/v2.0.0">Boost 2.0</a>, a major upgrade to how AI agents understand and work with your Laravel applications.</p>
<p>This update transitions many package guidelines into agent skills, enabling significantly better context management. By loading package-specific knowledge only when it is relevant, agents produce more accurate, higher-quality Laravel code with far less context noise. This is a must-have upgrade for getting the best results from AI agents when building Laravel applications.</p>
<p>As a result, existing guidelines are now roughly ~ 40 percent leaner, making agent responses more focused and much higher quality.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add Laravel Code Simplifier Prompt]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-boost-add-laravel-code-simplifier-prompt</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/416">@pushpak1300</a></p>
<p>A dedicated &quot;code simplifier&quot; prompt helps you quickly turn verbose or repetitive Laravel code into clean, idiomatic patterns, great for polishing PRs and accelerating refactors when you're moving fast.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Echo - Add Livewire 4 Upgrade Prompt]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-echo-add-livewire-4-upgrade-prompt</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/424">@pushpak1300</a></p>
<p>Upgrading is easier when you have a focused guide. This prompt helps you identify the key changes for Livewire 4 and work through them systematically, reducing upgrade risk and cutting down on &quot;why did this break?&quot; time.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Echo - Resolve Performance Issues and Stale Closure Bugs in `useEcho`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-echo-resolve-performance-issues-and-stale-closure-bugs-in-useecho</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/echo/pull/472">@pataar</a></p>
<p>This improves hook reliability and performance by addressing stale closure issues, meaning fewer head-scratching realtime UI bugs and smoother rendering under heavy event traffic. If you're building reactive dashboards or chat experiences, this makes your client-side behavior more dependable.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Echo - Add a Connection Status Hook]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-echo-add-a-connection-status-hook</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/echo/pull/469">@nexxai</a></p>
<p>A connection status hook is a big UX unlock: you can clearly reflect &quot;connected / reconnecting / offline&quot; states and handle them gracefully in your UI. Great for realtime-heavy apps where user trust depends on knowing whether updates are truly live.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Horizon - Events Overloading]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-horizon-events-overloading</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/echo/pull/470">@joetannenbaum</a></p>
<p>Event overloading expands how you can map and handle events, making advanced realtime patterns easier to express without workaround code. Useful when you're consolidating many event types into a cleaner, more maintainable client-side layer.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Pint - Add `horizon:listen` Command]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-pint-add-horizonlisten-command</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/horizon/pull/1689">@mathiasgrimm</a></p>
<p>Introducing a new <code>horizon:listen</code> command that watches for file changes and automatically restarts <a href="https://laravel.com/docs/horizon">Horizon</a> during development. This new command mirrors Laravel's built-in <code>queue:listen</code> command behavior.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prompts - Adds an `agent` Format]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-prompts-adds-an-agent-format</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/pint/pull/415">@nunomaduro</a></p>
<p>A new <code>--format agent</code> flag was added that gets automatically used when <a href="https://laravel.com/docs/pint">Pint</a> is executed within OpenCode or Claude Code.</p>
<p>The default Pint output is designed for humans: colorful, with progress dots and formatted summaries. AI agents need something different: structured JSON they can reliably parse, unambiguous status values like <code>&quot;status&quot;:&quot;pass&quot;</code> instead of inferring from formatted text, minimal output that saves context window and reduces token cost, and deterministic results without ANSI colors or formatting noise.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Pulse - Add Grid Component]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-pulse-add-grid-component</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/prompts/pull/210">@pushpak1300</a></p>
<p>The new <code>grid</code> component in <a href="https://laravel.com/docs/prompts">Prompts</a> allows developers to easily create responsive grid-based layouts and present data clearly.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Add Livewire 4 Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-vs-code-extension-add-livewire-4-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/pulse/pull/474">@joshhanley</a></p>
<p><a href="https://laravel.com/docs/pulse">Pulse</a> is ready for Livewire 4, keeping your application observability UI compatible as you move forward. That means fewer blockers when modernizing your stack.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Livewire 4 Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-vs-code-extension-livewire-4-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/549">@TitasGailius</a></p>
<p>First-class Livewire 4 support in the extension helps you stay in flow with better editor understanding as you build components: less context switching, more shipping.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Docker Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-vs-code-extension-docker-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/537">@TitasGailius</a></p>
<p>Improved Docker support makes Laravel development inside containers feel more natural in VS Code, helping teams standardize environments and reduce &quot;works on my machine&quot; friction.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Add Markdown Hover Links for Scopes to the Implementation]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-vs-code-extension-add-markdown-hover-links-for-scopes-to-the-implementation</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/527">@N1ebieski</a></p>
<p>Hover links turn query scopes into a navigable experience, jumping from usage to implementation faster, which is especially valuable in large codebases with lots of shared scopes.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Support for Laravel Attributes]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-vs-code-extension-support-for-laravel-attributes</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/542">@N1ebieski</a></p>
<p>Better attribute support helps the editor understand modern Laravel patterns, improving navigation and reducing false positives. If your project leans on PHP attributes, this makes day-to-day editing noticeably smoother.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Integration Artisan Make Commands with VS Code Explorer]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-vs-code-extension-integration-artisan-make-commands-with-vs-code-explorer</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/466">@N1ebieski</a></p>
<p>Generate files where you're already working: integrating <code>artisan make:*</code> into the explorer and context menu cuts down on terminal hopping and keeps scaffolding close to your project structure.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Support for Autocompletion Rules in `FormRequest`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-vs-code-extension-support-for-autocompletion-rules-in-formrequest</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/336">@N1ebieski</a></p>
<p>Smarter autocomplete for <code>FormRequest</code> <a href="https://laravel.com/docs/validation#available-validation-rules">validation rules</a> means fewer typos and faster validation authoring, which is particularly helpful when you're juggling complex rule sets.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Add Scope Parameters to the Repository and Docblock Generator]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2026-01" />
            <id>https://laravel.com/docs/changelog#item-2026-01-31-vs-code-extension-add-scope-parameters-to-the-repository-and-docblock-generator</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/487">@N1ebieski</a></p>
<p>Docblocks and repository hints that include scope parameters improve autocomplete accuracy and make &quot;discoverability&quot; better for teammates, so using existing scopes becomes as easy as reading the method signature.</p>
]]>
            </summary>
                                    <updated>2026-01-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add Ability to Run Callbacks After Building an HTTP Response]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-laravel-framework-12x-12x-add-ability-to-run-callbacks-after-building-an-http-response</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/58088">@cosmastech</a></p>
<p>A new <code>afterResponse</code> method was added to the <a href="https://laravel.com/docs/http-client">HTTP Client</a>, which allows the user to inspect and mutate the response returned from an HTTP call:</p>
<pre><code class="language-php">Http::acceptJson()
    -&gt;withHeader('X-Shopify-Access-Token', $credentials-&gt;token)
    -&gt;baseUrl(&quot;https://{$credentials-&gt;shop_domain}.myshopify.com/admin/api/2025-10/&quot;)
    -&gt;afterResponse(
        // Report any deprecation notices that were in the header
        function (Response $response) use ($credentials) {
            if ($header = $response-&gt;header('X-Shopify-API-Deprecated-Reason')) {
                event(new ShopifyDeprecationNotice($credentials-&gt;shop, $header));
            }
        })
    -&gt;afterResponse(
        // Map the response into our own custom response class
        fn (Response $response) =&gt; new ShopifyResponse($response-&gt;toPsrResponse()),
    )
    -&gt;afterResponse(
        // Report the cost of the query
        static fn (ShopifyResponse $response) =&gt; QueryCostResponse::report(
            $response-&gt;getQueryCost(),
            $credentials-&gt;shop
        ),
    );
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Introduce `FluentPromise` to Allow for Cleaner Chaining in Pool]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-laravel-framework-12x-12x-introduce-fluentpromise-to-allow-for-cleaner-chaining-in-pool</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57967">@cosmastech</a></p>
<p>Userland chaining in <a href="https://laravel.com/docs/http-client#request-pooling"><code>Http::pool</code></a> is now possible with the introduction of <code>FluentPromise</code>. Previously, the chain would return the original response, limiting flexibility. With this change, users can access the underlying array and return whatever they wish:</p>
<pre><code class="language-php">$response = Http::pool(function (Pool $pool) {
    $pool-&gt;as('cosmatech')
        -&gt;get('https://cosmastech.com')
        -&gt;then(
            fn ($response) =&gt; strlen($response-&gt;body())
        );
    $pool-&gt;as('laravel')
        -&gt;get('https://laravel.com')
        -&gt;then(
            fn ($response) =&gt; strlen($response-&gt;body())
        );
});

/*
array:2 [
  &quot;cosmatech&quot; =&gt; 9095
  &quot;laravel&quot; =&gt; 1422023
]
*/
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Introduce `lazy` Object and `proxy` Object Support Helpers]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-laravel-framework-12x-introduce-lazy-object-and-proxy-object-support-helpers</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57831">@timacdonald</a></p>
<p>Two new helpers, <code>lazy</code> and <code>proxy</code>, were added to make PHP's new <a href="https://www.php.net/manual/en/language.oop5.lazy-objects.php">lazy objects</a> more ergonomic to use.</p>
<pre><code class="language-php">&lt;?php

use Illuminate\Support\Facades\Http;
use Vendor\Facades\ResultFactory;
use Vendor\Result;
use function Illuminate\Support\lazy;
use function Illuminate\Support\proxy;

$response = Http::get(...);

$instance = lazy(Result::class, fn () =&gt; [$response-&gt;json()]);
$instance = proxy(Result::class, fn (): Result =&gt; ResultFactory::make($response-&gt;json()));
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add Reload Command and Allow Services to Register]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-laravel-framework-12x-12x-add-reload-command-and-allow-services-to-register</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57923">@barryvdh</a></p>
<p>A new <code>php artisan reload</code> command was introduced, allowing service providers to add their own commands for reloading. This makes it easier for services to specify one command to include in their deployment steps after the deployment is completed.</p>
<p>The applicable reload commands have already been added to Laravel <a href="https://github.com/laravel/horizon/pull/1671">Horizon</a>, <a href="https://github.com/laravel/pulse/pull/469">Pulse</a>, <a href="https://github.com/laravel/reverb/pull/355">Reverb</a>, and <a href="https://github.com/laravel/octane/pull/1081">Octane</a>.</p>
<pre><code class="language-php">public function boot()
{
    $this-&gt;reloads('reverb:restart');
}
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Wayfinder - Modernize Email Template]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-wayfinder-modernize-email-template</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57987">@taylorotwell</a></p>
<p>The default Laravel email template was cleaned up and modernized, giving it a fresh coat of paint and an elevated, professional appearance.</p>
<p>The next version of <a href="https://github.com/laravel/wayfinder/tree/next">Wayfinder</a> entered public beta.</p>
<p>This version generates <em>far</em> more TypeScript from your Laravel app than the previous version, including routes and controller actions, named routes, form requests, Eloquent models, PHP enums, Inertia.js page props, Inertia shared data, broadcast channels, broadcast events, environment variables, and more.</p>
<p>Two new packages used by Wayfinder were also introduced into public beta:</p>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Wayfinder - Surveyor]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-wayfinder-surveyor</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p><a href="https://github.com/laravel/surveyor">Laravel Surveyor</a> is a powerful (mostly) static analysis tool designed to extract detailed PHP and Laravel-specific information from your code. It parses and analyzes PHP files to extract comprehensive metadata about classes, methods, properties, return types, and more, making this information available in a structured, consumable format for use by other tools and packages.</p>
<pre><code class="language-php">use Laravel\Surveyor\Analyzer\Analyzer;

$analyzer = app(Analyzer::class);

// Analyze a file by path
$result = $analyzer-&gt;analyze('/path/to/your/File.php');

// Access the analyzed scope
$scope = $result-&gt;analyzed();

// Access the class result
$classResult = $result-&gt;result();
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Ranger]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-inertia-ranger</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p><a href="https://github.com/laravel/ranger">Laravel Ranger</a> is a supercharged introspection library for Laravel applications. It walks through your codebase and collects detailed information about your application's components, including routes, models, enums, broadcast events, environment variables, and Inertia.js components.</p>
<p>It uses Surveyor under the hood and extracts the results into detailed data transport objects for straightforward consumption.</p>
<pre><code class="language-php">use Laravel\Ranger\Ranger;
use Laravel\Ranger\Components;
use Illuminate\Support\Collection;

$ranger = app(Ranger::class);

// Register callbacks for individual items
$ranger-&gt;onRoute(function (Components\Route $route) {
    echo $route-&gt;uri();
});

$ranger-&gt;onModel(function (Components\Model $model) {
    foreach ($model-&gt;getAttributes() as $name =&gt; $type) {
        //
    }
});

$ranger-&gt;onEnum(function (Components\Enum $enum) {
    //
});

$ranger-&gt;onBroadcastEvent(function (Components\BroadcastEvent $event) {
    //
});

// Or register callbacks for entire collections
$ranger-&gt;onRoutes(function (Collection $routes) {
    // Called once all of the routes have been discovered and processed
});

$ranger-&gt;onModels(function (Collection $models) {
    // Called once all of the models have been discovered and processed
});

// Walk through the application and trigger all callbacks
$ranger-&gt;walk();
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Support for Flash Data]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-inertia-support-for-flash-data</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2757">@pascalbaljet</a></p>
<p>Unlike regular props, Flash Data isn't persisted in the browser's history state, making it ideal for one-time notifications like toasts. On the frontend, Flash Data is available on <code>page.flash</code>. You can also listen for Flash Data using the global <code>flash</code> event or the <code>onFlash</code> callback.</p>
<pre><code class="language-vue">&lt;template&gt;
    &lt;div v-if=&quot;page.flash.toast&quot; class=&quot;toast&quot;&gt;
        {{ page.flash.toast.message }}
    &lt;/div&gt;
&lt;/template&gt;
</code></pre>
<pre><code class="language-ts">router.on(&quot;flash&quot;, (event) =&gt; {
    if (event.detail.flash.toast) {
        showToast(event.detail.flash.toast);
    }
});

router.post(&quot;/users&quot;, data, {
    onFlash: ({ newUserId }) =&gt; {
        // ...
    },
});
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - First-Party Support for Precognition]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-inertia-first-party-support-for-precognition</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull requests by @pascalbaljet: <a href="https://github.com/inertiajs/inertia/pull/2684">#2684</a>, <a href="https://github.com/inertiajs/inertia/pull/2700">#2700</a></p>
<p><a href="https://laravel.com/docs/precognition">Laravel Precognition</a> is now baked directly into the <code>useForm</code> hook and the <code>Form</code> component; there is no need to install additional libraries. Live validation has never been easier.</p>
<pre><code class="language-vue">&lt;template&gt;
    &lt;Form action=&quot;/users&quot; method=&quot;post&quot; #default=&quot;{ errors, invalid, validate, validating }&quot;&gt;
        &lt;div&gt;
            &lt;input name=&quot;name&quot; @change=&quot;validate('name')&quot; /&gt;
            &lt;p v-if=&quot;invalid('name')&quot;&gt;{{ errors.name }}&lt;/p&gt;
        &lt;/div&gt;

        &lt;div&gt;
            &lt;input name=&quot;email&quot; @change=&quot;validate('email')&quot; /&gt;
            &lt;p v-if=&quot;invalid('email')&quot;&gt;{{ errors.email }}&lt;/p&gt;
        &lt;/div&gt;

        &lt;p v-if=&quot;validating&quot;&gt;Validating...&lt;/p&gt;
    &lt;/Form&gt;
&lt;/template&gt;
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Optimize Page Data Size and Parsing]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-inertia-optimize-page-data-size-and-parsing</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2687">@bram-pkg</a></p>
<p>Opt-in support was added for loading the initial Inertia page data from a <code>&lt;script type=&quot;application/json&quot;&gt;</code> element instead of the <code>body</code> tag. This results in a greatly reduced initial page data size, faster parsing, and makes the initial page data a breeze to inspect with your browser's dev tools.</p>
<p>You can opt in to this behavior as follows:</p>
<pre><code class="language-ts">createInertiaApp({
    // ...
    defaults: {
        future: {
            useScriptElementForInitialPage: true,
        },
    },
});
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Support for `once()` Props]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-boost-support-for-once-props</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2732">@pascalbaljet</a></p>
<p>Some data rarely changes, is expensive to compute, or is simply large. Rather than including this data in every response, <code>once</code> props are remembered by the client and reused on subsequent pages that include the same prop.</p>
<pre><code class="language-php">return Inertia::render('Billing', [
    'plans' =&gt; Inertia::once(fn () =&gt; Plan::all()),
]);
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Echo - Add Resource and Prompts for Package Guidelines]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-echo-add-resource-and-prompts-for-package-guidelines</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/389">@pushpak1300</a></p>
<p>Previously, all third-party package guidelines needed to be added to the global context, which could grow unbounded as more packages were integrated.</p>
<p>Boost is now reducing global context bloat by adding guidelines for only actively used packages that are loaded, thereby improving token efficiency and leaving room for more application-specific information.</p>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[MCP - Event Payload Type Inference]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-mcp-event-payload-type-inference</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/echo/pull/470">@joetannenbaum</a></p>
<p>Event payloads are now automatically inferred from the <a href="https://laravel.com/docs/broadcasting#defining-broadcast-events">broadcast event</a> if the user provides a module override file, resulting in a cleaner <code>useEcho</code> experience and less type management for the user.</p>
<pre><code class="language-ts">import { App } from &quot;./types&quot;;

declare module &quot;@laravel/echo-react&quot; {
    interface Events {
        &quot;.App.Events.UserCreated&quot;: {
            user: App.Models.User;
        };
        &quot;.App.Events.OrderShipped&quot;: {
            order: App.Models.Order;
            user: App.Models.User;
        };
    }
}
</code></pre>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[MCP - Add Completion Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-mcp-add-completion-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/mcp/pull/127">@pushpak1300</a></p>
<p>Support was added for the <a href="https://modelcontextprotocol.io/specification/2025-11-25/server/utilities/completion">MCP completion utility</a>, allowing servers to provide IDE-like autocompletion suggestions for prompt arguments and resource template variables.</p>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[MCP - Add Annotation Support on Resources]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-mcp-add-annotation-support-on-resources</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/mcp/pull/111">@pushpak1300</a></p>
<p>Three annotation types are now available for use with Resource classes: <code>audience</code>, <code>priority</code>, and <code>lastModified</code>. This adheres to the <a href="https://modelcontextprotocol.io/specification/2025-06-18/server/resources#annotations">MCP specs</a> and allows the server to provide hints to clients about how to use or display the resource.</p>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Add `structuredContent` and `outputSchema` Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-vs-code-extension-add-structuredcontent-and-outputschema-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/mcp/pull/83">@macbookandrew</a></p>
<p>Support for output schemas and structured content was added to the MCP package, enabling better integration with ChatGPT Apps and AI clients that need parseable tool results.</p>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Add Scope Parameters to the Repository and Docblock Generator]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-vs-code-extension-add-scope-parameters-to-the-repository-and-docblock-generator</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/487">@N1ebieski</a></p>
<p>Model scope parameters now appear in model helper docblocks, making it clear to the user which parameters are required by the query scopes they are using.</p>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Add a Command That Generates Namespace]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-12" />
            <id>https://laravel.com/docs/changelog#item-2025-12-31-vs-code-extension-add-a-command-that-generates-namespace</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/463">@N1ebieski</a></p>
<p>A new &quot;Generate Namespace&quot; command was added to the extension, allowing the user to quickly generate the correct namespace for a class.</p>
]]>
            </summary>
                                    <updated>2025-12-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Add `daysOfMonth()` Method to Schedule Tasks on Specific Days]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-laravel-framework-12x-add-daysofmonth-method-to-schedule-tasks-on-specific-days</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57817">@yousefkadah</a></p>
<p>Previously, there wasn't a way to <a href="/docs/scheduling#schedule-frequency-options">schedule tasks</a> on multiple arbitrary days of the month (e.g., 1st, 10th). A <code>daysOfMonth()</code> method was added that allows scheduling tasks to run on multiple specific days of the month with a clean, intuitive API.</p>
<pre><code class="language-php">$schedule-&gt;command('process-payroll')
    -&gt;daysOfMonth(1, 15) // 1st and 15th of each month
    -&gt;timezone('America/New_York');
</code></pre>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `encoding` Validation Rule for Uploaded Files]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-laravel-framework-12x-12x-add-encoding-validation-rule-for-uploaded-files</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57823">@ziadoz</a></p>
<p>A new <code>encoding</code> <a href="/docs/validation#available-validation-rules">validation rule</a> was added that checks the contents of a file or string matches a specific encoding using <code>mb_check_encoding()</code>, ensuring that uploaded files are encoded as expected before processing.</p>
<pre><code class="language-php">Validator::validate($input, [
    'attachment' =&gt; [
        'required',
        File::types(['csv'])-&gt;encoding('utf-8'),
    ],
]);
</code></pre>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Interval Helper Functions]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-laravel-framework-12x-interval-helper-functions</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57856">@taylorotwell</a></p>
<p>New <a href="/docs/helpers#interval-functions">interval helper functions</a> were added for fluently getting the current time with adjustments:</p>
<pre><code class="language-php">use Illuminate\Support\{ now, minutes }

Cache::put('name', 'Taylor', minutes(5));

Invitation::create([
    'expires_at' =&gt; now()-&gt;plus(hours: 6),
]);
</code></pre>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Queue Pause/Resume]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-laravel-framework-12x-queue-pauseresume</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57800">@yousefkadah</a></p>
<p>Sometimes you may need to temporarily prevent a queue worker from processing new jobs without stopping the worker entirely. Now you can with <a href="/docs/queues#pausing-and-resuming-queue-workers">newly added artisan commands</a>:</p>
<pre><code class="language-bash">php artisan queue:pause database:default
php artisan queue:continue database:default
</code></pre>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] New `@hasStack` Blade Directive]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-laravel-framework-12x-12x-new-at-hasstack-blade-directive</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57788">@browner12</a></p>
<p>The new <code>@hasStack</code> directive can be used to wrap <code>@stack</code> directives for conditional output depending on if the stack is empty or not. This is useful if you want some markup to wrap the stack only if it is not empty.</p>
<pre><code class="language-blade">@hasStack(&quot;list&quot;)
&lt;ul&gt;
    @stack(&quot;list&quot;)
&lt;/ul&gt;
@endif
</code></pre>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Add `--middleware` Filter to `route:list`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-laravel-framework-12x-add-middleware-filter-to-routelist</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57797">@jasonmccreary</a></p>
<p>A <code>--middleware</code> option was added to the <code>route:list</code> command to filter output by middleware. This can be a single middleware class name or a middleware group name, allowing you to easily see routes with the specified middleware applied.</p>
<pre><code class="language-bash">php artisan route:list --middleware=api
php artisan route:list --middleware=ThrottleRequests
</code></pre>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Introduce `WithCachedRoutes` Testing Trait]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-laravel-framework-12x-12x-introduce-withcachedroutes-testing-trait</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57623">@cosmastech</a></p>
<p>A new testing trait called <code>WithCachedRoutes</code> was introduced. This testing trait stores the routes as a static property within a <code>Testing\CachedState</code> object during test setup, ensuring subsequent tests do not need to read from disk.</p>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] New `Factory@insert()` Method]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-laravel-framework-12x-12x-new-factory-at-insert-method</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57600">@cosmastech</a></p>
<p>The <code>insert()</code> method was added to Eloquent Factories, allowing you to perform a mass insert of models. This increases performance during testing with numerous of database records.</p>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - [12.x] Add `ucwords` to `Str` and `Stringable`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-boost-12x-add-ucwords-to-str-and-stringable</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57581">@braxey</a></p>
<p>A <code>ucwords</code> method was added to <code>Stringable</code>, allowing fluent uppercasing of the first letter of a string. Note that this differs from <code>title</code> in that the rest of the string remains untouched.</p>
<pre><code class="language-php">// Taylor Otwell, Creator Of Laravel
$name = $this-&gt;string('taylor otwell, creator of laravel')-&gt;ucwords();
</code></pre>
<p>A number of packages were updated to ensure they maintained compatibility with the <a href="https://www.php.net/releases/8.5/en.php">newly released PHP 8.5</a>, including:</p>
<ul>
<li><a href="https://github.com/laravel/framework/pull/57835">Laravel Framework</a></li>
<li><a href="https://github.com/laravel/dusk/pull/1181">Dusk</a></li>
<li><a href="https://github.com/laravel/folio/pull/154">Folio</a></li>
<li><a href="https://github.com/laravel/fortify/pull/621">Fortify</a></li>
<li><a href="https://github.com/laravel/helpers/pull/40">Helpers</a></li>
<li><a href="https://github.com/laravel/horizon/pull/1667">Horizon</a></li>
<li><a href="https://github.com/laravel/installer/pull/449">Installer</a></li>
<li><a href="https://github.com/laravel/jetstream/pull/1588">Jetstream</a></li>
<li><a href="https://github.com/laravel/pail/pull/59">Pail</a></li>
<li><a href="https://github.com/laravel/pennant/pull/155">Pennant</a></li>
<li><a href="https://github.com/laravel/pulse/pull/467">Pulse</a></li>
<li><a href="https://github.com/laravel/reverb/pull/353">Reverb</a></li>
<li><a href="https://github.com/laravel/sanctum/pull/576">Sanctum</a></li>
<li><a href="https://github.com/laravel/scout/pull/954">Scout</a></li>
<li><a href="https://github.com/laravel/socialite/pull/755">Socialite</a></li>
<li><a href="https://github.com/laravel/telescope/pull/1658">Telescope</a></li>
<li><a href="https://github.com/laravel/tinker/pull/192">Tinker</a></li>
</ul>
<p><img src="/images/changelog/2025-11/inertia-refresh.png" alt="Inertia Website Share Image" /></p>
<p>The Inertia <a href="https://inertiajs.com">website</a> and <a href="https://inertiajs.com/docs">docs</a> got a major glow up!</p>
<p>Inertia finally has the website it deserves, showing off all of its power and flexibility as the best way to create a SPA with the backend and frontend of your choice.</p>
<p>Furthermore, <a href="https://inertiajs.com/docs">the docs</a> are now hosted on Mintlify and received a complete refresh that supercharges them with cleaner formatting, an AI chat, and a more comprehensive search. Both users and LLMs should be very satisfied with this update.</p>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add Gemini]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-boost-add-gemini</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/360">@iruoy</a></p>
<p>Google's <a href="https://gemini.google.com/">Gemini</a> has been added to Boost. This addition marks the completion of our support for all major code environments, further empowering developers with enhanced Laravel capabilities.</p>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Put User-Defined Guidelines at the Top]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-boost-put-user-defined-guidelines-at-the-top</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/332">@phpfour</a></p>
<p>User guidelines now take precedence over the Boost presets while maintaining the overrides strategy, giving developers more control over how instructions are interpreted by agents.</p>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add Sail Support in Guidelines]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-boost-add-sail-support-in-guidelines</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/329">@pushpak1300</a></p>
<p>Sail now has first-class support across all guidelines. When a project installs Boost with Sail enabled, agent instructions now automatically switch to Sail-specific commands rather than native CLI commands.</p>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Remove Filament Guidelines]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-boost-remove-filament-guidelines</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/349">@pushpak1300</a></p>
<p>With the new <a href="https://github.com/laravel/boost?tab=readme-ov-file#third-party-package-ai-guidelines">third-party guidelines</a> feature, these guidelines can now live within the Filament package and automatically stay full up to date with any new Filament features introduced.</p>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[MCP - Add OpenCode Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-mcp-add-opencode-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/88">@calebdw</a></p>
<p>Developers now have seamless integration of <a href="https://opencode.ai/">OpenCode</a> in their workflows, with the ability to take advantage of its power just like any other agent.</p>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[MCP - Add `_meta` Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-11" />
            <id>https://laravel.com/docs/changelog#item-2025-11-30-mcp-add-meta-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/mcp/pull/106">@pushpak1300</a></p>
<p>The MCP package now fully supports the <code>_meta</code> field as documented in the <a href="https://modelcontextprotocol.io/specification/2025-06-18/basic#meta">MCP specification</a>. Users can now attach metadata at three different levels: on tools/resources/prompts (in listings), on the result envelope (for execution metadata), and on individual content items.</p>
<pre><code class="language-php">public function handle(Request $request): Response
{
    return Response::text('The content generated by the tool.')
        -&gt;withMeta('x', 'y');
}
</code></pre>
]]>
            </summary>
                                    <updated>2025-11-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Ensure HTTP Batch Results Are Returned in the Same Order as Requested]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-laravel-framework-12x-12x-ensure-http-batch-results-are-returned-in-the-same-order-as-requested</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57483">@jessarcher</a></p>
<p>Previously, <code>Http::batch</code> results were sorted in the order that the responses came back, rather than the order that the requests were defined:</p>
<pre><code class="language-php">dump(Http::batch(fn (Batch $batch) =&gt; [
    $batch-&gt;get('https://httpbin.org/delay/3'),
    $batch-&gt;get('https://httpbin.org/delay/2'),
    $batch-&gt;get('https://httpbin.org/delay/1'),
])-&gt;send());

array:3 [
  2 =&gt; Illuminate\Http\Client\Response {#419}
  1 =&gt; Illuminate\Http\Client\Response {#374}
  0 =&gt; Illuminate\Http\Client\Response {#328}
]
</code></pre>
<p>The results are now sorted before they are returned, respecting any requests named with the <code>as</code> method. <a href="https://laravel.com/docs/http-client#request-batching">Learn more about request batching</a>.</p>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Add Support for Additional Editors in `ResolvesDumpSource`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-laravel-framework-12x-add-support-for-additional-editors-in-resolvesdumpsource</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull requests by <a href="https://github.com/laravel/framework/pull/57392">@cseknowledge</a>, <a href="https://github.com/laravel/framework/pull/57298">@miguilimzero</a>, <a href="https://github.com/laravel/framework/pull/57363">@OmarFaruk-0x01</a>, <a href="https://github.com/laravel/framework/pull/57359">@Sajid-al-islam</a>, and <a href="https://github.com/laravel/framework/pull/57377">@Rakib01</a></p>
<p>Several PRs introduced new config values for <code>app.editor</code>, allowing dumps to link correctly for several new IDEs: <code>neovim</code>, <code>zed</code>, <code>kiro</code>, <code>fleet</code>, and <code>windsurf</code>.</p>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Add Clickable File Reference for Thrown Exception]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-laravel-framework-12x-add-clickable-file-reference-for-thrown-exception</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57400">@jasonmccreary</a></p>
<p>The recently introduced new exception page now includes a new file reference and line number that opens the file directly in your IDE of choice.</p>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add SQS FIFO and Fair Queue `messagegroup()` Method Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-laravel-framework-12x-12x-add-sqs-fifo-and-fair-queue-messagegroup-method-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57421">@patrickcarlohickman</a></p>
<p>Instead of using the <code>onGroup()</code> method at the time of dispatch, you can now define a <code>messageGroup()</code> directly method on the job class, removing an inconsistency where event listeners supported the <code>messageGroup()</code> method on the class, but all the other job types required calling <code>onGroup()</code>.</p>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Deferred Queue]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-laravel-framework-12x-deferred-queue</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57428">@taylorotwell</a></p>
<p>Using <a href="https://laravel.com/docs/queues#deferred-dispatching">deferred synchronous dispatching</a>, you can dispatch a job to be processed during the current process, but after the HTTP response has been sent to the user. This allows you to process &quot;queued&quot; jobs synchronously without slowing down your user's application experience. To defer the execution of a synchronous job, dispatch the job to the <code>deferred</code> connection:</p>
<pre><code class="language-php">RecordDelivery::dispatch($order)-&gt;onConnection('deferred');
</code></pre>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Failover Cache]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-laravel-framework-12x-failover-cache</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57430">@taylorotwell</a></p>
<p>The <code>failover</code> <a href="https://laravel.com/docs/cache#cache-failover">cache driver</a> provides automatic failover functionality when interacting with the cache. If the primary cache store fails for any reason, Laravel will automatically attempt to use the next configured store in the list. This is particularly useful for ensuring high availability in production environments where cache reliability is critical.</p>
<pre><code class="language-php">'failover' =&gt; [
    'driver' =&gt; 'failover',
    'stores' =&gt; [
        'database',
        'array',
    ],
],
</code></pre>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] PostgreSQL Virtual Columns]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-laravel-framework-12x-12x-postgresql-virtual-columns</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57290">@tpetry</a></p>
<p>PostgreSQL 18 was recently released, along with it support for virtual generated columns. The <code>virtualAs</code> column modifier now has backwards compatible support this new PostgreSQL feature.</p>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Failover Queue]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-laravel-framework-12x-failover-queue</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57341">@taylorotwell</a></p>
<p>The <code>failover</code> <a href="https://laravel.com/docs/queues#deferred-dispatching">queue driver</a> provides automatic failover functionality when pushing jobs to the queue. If the primary queue connection fails for any reason, Laravel will automatically attempt to push the job to the next configured connection in the list. This is particularly useful for ensuring high availability in production environments where queue reliability is critical.</p>
<pre><code class="language-php">'failover' =&gt; [
    'driver' =&gt; 'failover',
    'connections' =&gt; [
        'redis',
        'database',
        'sync',
    ],
],
</code></pre>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - [12.x] Add Defer Method to HTTP Batch]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-inertia-12x-add-defer-method-to-http-batch</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57387">@WendellAdriel</a></p>
<p>When the new <code>defer</code> method is invoked on <code>Http::batch</code>, <a href="https://laravel.com/docs/queues#deferred-dispatching">the batch of requests is not executed immediately</a>. Instead, Laravel will execute the batch after the current application request's HTTP response has been sent to the user, keeping your application feeling fast and responsive:</p>
<pre><code class="language-php">use Illuminate\Http\Client\Batch;
use Illuminate\Support\Facades\Http;

$responses = Http::batch(fn (Batch $batch) =&gt; [
    $batch-&gt;get('http://localhost/first'),
    $batch-&gt;get('http://localhost/second'),
    $batch-&gt;get('http://localhost/third'),
])-&gt;then(function (Batch $batch, array $results) {
    // All requests completed successfully...
})-&gt;defer();
</code></pre>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Configure Global Defaults and Update During Runtime]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-inertia-configure-global-defaults-and-update-during-runtime</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2655">@pascalbaljet</a></p>
<p>Inertia now supports setting <a href="https://inertiajs.com/client-side-setup#configuring-defaults">app-wide defaults</a>, with the ability to update values at runtime. You can pass a default config object to the <code>createInertiaApp()</code> method:</p>
<pre><code class="language-ts">createInertiaApp({
    // resolve, setup, etc.
    defaults: {
        form: {
            recentlySuccessfulDuration: 5_000,
        },
        prefetch: {
            cacheFor: 60_000,
        },
        visitOptions: (href: string, options: VisitOptions) =&gt; {
            return { headers: { ...options.headers, &quot;X-Foo&quot;: &quot;Bar&quot; } };
        },
    },
});
</code></pre>
<p>Each adapter now also exports a <code>config</code> instance to update any values at runtime:</p>
<pre><code class="language-ts">import { config } from &quot;@inertiajs/vue3&quot;;

config.set(&quot;form.recentlySuccessfulDuration&quot;, 1000);
</code></pre>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Support for Type-Hinting Shared Page Props]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-boost-support-for-type-hinting-shared-page-props</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2636">@pascalbaljet</a></p>
<p><code>usePage()</code> now supports a global type definition file, allowing you to type-hint shared page props:</p>
<pre><code class="language-ts">// resources/js/types/globals.d.ts

declare module &quot;@inertiajs/core&quot; {
    export interface InertiaConfig {
        sharedPageProps: {
            auth: { user: { id: number; name: string } | null };
            flash: { success?: string; error?: string };
        };
    }
}
</code></pre>
<p>Shared page props are now automatically type-hinted throughout the app when you use <code>usePage()</code>:</p>
<pre><code class="language-js">const page = usePage();
const successMessage = page.props.flash.success;
</code></pre>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Dynamic NPM Package Runner]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-boost-dynamic-npm-package-runner</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/145">@imliam</a></p>
<p>Boost now detects which NPM package manager should be used to run any given script (<code>npm</code>, <code>pnpm</code>, <code>yarn</code> and <code>bun</code>). This assists the AI in using the correct CLI tools when running <code>npm</code> commands based on the project's existing dependencies.</p>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Fortify - Add Support for Custom Code Environments]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-fortify-add-support-for-custom-code-environments</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/280">@pushpak1300</a></p>
<p>You can now create custom code environments (IDEs and AI agents) for Boost. Previously, Boost only supported a hardcoded list of environments, which made it difficult to add support for new IDEs or agents directly within the official Boost repository.</p>
<pre><code class="language-php">use Laravel\Boost\Contracts\Agent;
use Laravel\Boost\Contracts\McpClient;
use Laravel\Boost\Install\CodeEnvironment\CodeEnvironment;

class MyCustomIDE extends CodeEnvironment implements Agent, McpClient
{
    // Implementation
}
</code></pre>
<p>Registering your custom code environment:</p>
<pre><code class="language-php">use Laravel\Boost\Boost;

Boost::registerCodeEnvironment('myide', MyCustomIDE::class);
</code></pre>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Horizon - Add Laravel Fortify Guidelines for Boost]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-horizon-add-laravel-fortify-guidelines-for-boost</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/fortify/pull/614">@pushpak1300</a></p>
<p>AI guidelines were added which can be used by Laravel Boost's <a href="https://github.com/laravel/boost?tab=readme-ov-file#keeping-guidelines-up-to-date">Third-Party Package AI Guidelines</a>. This is completely opt-in for each user, they can choose if they want additional intelligence around Fortify's usage with their Laravel application.</p>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Installer - Allow Naming of Horizon Instances]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-installer-allow-naming-of-horizon-instances</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/horizon/pull/1621">@timacdonald</a></p>
<p>When you have several <a href="https://laravel.com/docs/horizon#running-horizon">Horizon</a> instances running in different regions, all within a single application, it can be difficult to determine with instance of Horizon a notification is originating from. You can now specify a name for each instance, making identification straightforward.</p>
<p>Before:</p>
<pre><code class="language-txt">Long Wait Detected
[Nightwatch] The &quot;{queue}&quot; queue on the &quot;{connection}&quot; connection has a wait time of {seconds} seconds.
</code></pre>
<p>After:</p>
<pre><code class="language-txt">Long Wait Detected
[eu-central-1] The &quot;{queue}&quot; queue on the &quot;{connection}&quot; connection has a wait time of {seconds} seconds.
</code></pre>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Starter Kits - Pass Flags for Alternative Node Package Managers]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-starter-kits-pass-flags-for-alternative-node-package-managers</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/installer/pull/442">@joetannenbaum</a></p>
<p>When running <code>laravel new</code>, there are now additional flags you can pass to specify which Node package manager you'd like to use: <code>--npm</code>, <code>--pnpm</code>, <code>--bun</code>, or <code>--yarn</code>. Passing one of these flags will also update any <code>composer</code> script that references a Node command to reflect the correct command specific to the selected package manager.</p>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Scout - Integration of Additional Fortify Features]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-scout-integration-of-additional-fortify-features</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull requests by <a href="https://github.com/pushpak1300">@pushpak1300</a></p>
<p>All starter kits now use Fortify for login, registration, password reset, and email verification. Fortify is a battle-tested solution, removing code from your codebase that is rarely changed, keeping your application code streamlined and maintainable.</p>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Scout - Full-Text Improvements]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-10" />
            <id>https://laravel.com/docs/changelog#item-2025-10-31-scout-full-text-improvements</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/scout/pull/947">@taylorotwell</a></p>
<p>Several improvements to full-text support were added when using the <code>database</code> engine. First up, you can now pass multiple columns to <code>orWhereFullText</code> in a single call. Secondly, when using Postgres and no other developer-provided ordering has been defined, Scout automatically adds relevance-based ordering by default to match MySQL's built-in ordering behavior.</p>
]]>
            </summary>
                                    <updated>2025-10-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Introduce `after` Rate Limiting]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-laravel-framework-12x-12x-introduce-after-rate-limiting</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57125">@timacdonald</a></p>
<pre><code class="language-php">use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Symfony\Component\HttpFoundation\Response;

/*
 * Ensure a user can only hit ten 404 responses in a minute before they are
 * rate limited to ensure user's cannot enumerate resource IDs.
 */
RateLimiter::for('resource-not-found', function (Request $request) {
    return Limit::perMinute(10)
        -&gt;by(&quot;user:{$request-&gt;user()-&gt;id}&quot;)

        // The new `after` hook...
        -&gt;after(function (Response $response) {
            return $response-&gt;getStatusCode() === 404;
        });
});
</code></pre>
<p>The new <code>RateLimiter::after</code> hook lets you apply rate limiting based on the response as well as the request.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `Http::batch`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-laravel-framework-12x-12x-add-httpbatch</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56946">@WendellAdriel</a></p>
<pre><code class="language-php">$responses = Http::batch(fn (Batch $batch) =&gt; [
    $batch-&gt;get('http://localhost/first'),
    $batch-&gt;get('http://localhost/second'),
    $batch-&gt;get('http://localhost/third'),
])-&gt;before(function (Batch $batch) {
    // This runs before the first HTTP request is executed.
})-&gt;progress(function (Batch $batch, int|string $key, Response $response) {
    // This runs after each successful HTTP request from the Batch.
})-&gt;catch(function (Batch $batch, int|string $key, Response|RequestException $response) {
    // This runs after each failed HTTP request from the Batch.
})-&gt;then(function (Batch $batch, array $results) {
    // This runs ONLY IF all the HTTP requests from the Batch are successful and the batch is not cancelled.
})-&gt;finally(function (Batch $batch, array $results) {
    // This runs after all the HTTP requests from the Batch finish and the batch is not cancelled.
})-&gt;send();
</code></pre>
<p>The new <code>Http::batch</code> method allows you to hook into the lifecycle of each HTTP call when making multiple requests in parallel.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Adds `Macroable` Trait to `Illuminate/Support/Benchmark`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-laravel-framework-12x-12x-adds-macroable-trait-to-illuminatesupportbenchmark</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57107">@1tim22</a></p>
<pre><code class="language-php">use Closure;
use Illuminate\Support\Benchmark;
use Illuminate\Support\Facades\Log;

Benchmark::macro('log', fn (Closure $callback) =&gt;
    Log::debug(Benchmark::measure($callback))
);

Benchmark::log(fn () =&gt; sleep(1));
</code></pre>
<p><code>Benchmark</code> is now updated with the <code>Macroable</code> trait to allow arbitrary macro registration.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `--whisper` Option to `schedule:work` Command]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-laravel-framework-12x-12x-add-whisper-option-to-schedulework-command</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56969">@thojo0</a></p>
<p>You can now pass a <code>--whisper</code> option to the <code>schedule:work</code> command. The option is passed through to the <code>schedule:run</code> command, which hides the &quot;No scheduled commands are ready to run&quot; message from the output, producing cleaner logs and terminal output and reducing noise for monitoring tools.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x]: Cache Session Driver]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-laravel-framework-12x-12x-cache-session-driver</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56887">@joaopalopes24</a></p>
<pre><code class="language-php">$discount = $request-&gt;session()-&gt;cache()-&gt;get('discount');

$request-&gt;session()-&gt;cache()-&gt;put(
    'discount', 10, now()-&gt;addMinutes(5)
);
</code></pre>
<p>The new session cache provides a convenient way to cache data that is scoped to an individual user session. Unlike the global application cache, session cache data is automatically isolated per session and is cleaned up when the session expires or is destroyed.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add Support for #[UseResource(...)] and #[UseResourceCollection(...)] Attributes on Models]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-laravel-framework-12x-12x-add-support-for-useresource-and-useresourcecollection-attributes-on-models</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56966">@Lukasss93</a></p>
<pre><code class="language-php">use App\Http\Resources\MyCustomNameResource;
use App\Http\Resources\MyCustomNameCollectionResource;

#[UseResource(MyCustomNameResource::class)]
#[UseResourceCollection(MyCustomNameCollectionResource::class)]
class MyModel extends Model {
    //
}

// Now you can call:
$model-&gt;toResource();
$collection-&gt;toResourceCollection();
</code></pre>
<p>You can now define resources classes directly on your Eloquent models using PHP attributes.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add `--json` Option to `schedule:list`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-laravel-framework-12x-12x-add-json-option-to-schedulelist</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57006">@dxnter</a></p>
<pre><code class="language-json">[
    {
        &quot;expression&quot;: &quot;0 0 15 * *&quot;,
        &quot;repeat_seconds&quot;: null,
        &quot;command&quot;: &quot;php artisan backup:run&quot;,
        &quot;description&quot;: &quot;Run daily backup process&quot;,
        &quot;next_due_date&quot;: &quot;2025-09-15 00:00:00 +00:00&quot;,
        &quot;next_due_date_human&quot;: &quot;5 days from now&quot;,
        &quot;timezone&quot;: &quot;UTC&quot;,
        &quot;has_mutex&quot;: false
    }
]
</code></pre>
<p>The <code>schedule:list</code> command now accepts a <code>--json</code> flag to allow programmatic consumption of scheduled task data for monitoring and integration purposes.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add Prepend Option for `Str::plural()`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-laravel-framework-12x-12x-add-prepend-option-for-strplural</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56802">@caseydwyer</a></p>
<pre><code class="language-blade">{{-- Instead of: --}}
We had {{ number_format($attendees-&gt;count()) . ' ' . Str::plural('attendee', $attendees-&gt;count()) }} at Laracon 2025.

{{-- Now we can: --}}
We had {{ Str::plural('attendee', $attendees-&gt;count(), prependCount: true) }} at Laracon 2025.
</code></pre>
<p>The <code>Str::plural</code> helper now accepts a new argument, <code>prependCount</code>, that will prepend the count to the string automatically.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - [12.x] Add Support for SQS Fair Queue]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-laravel-framework-12x-12x-add-support-for-sqs-fair-queue</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56763">@crynobone</a></p>
<p><a href="https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-fair-queues.html">SQS fair queues</a> are now supported.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - [12.x] Update Local Exception Page]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-inertia-12x-update-local-exception-page</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/57036">@avosalmon</a></p>
<p><img src="/images/changelog/2025-09/new-exception-page.jpeg" alt="New local exception page" /></p>
<p>The exception page was given a refresh, making local errors clearer and more actionable.</p>
<p>This month, we switched all of our NPM packages over to <a href="https://docs.npmjs.com/trusted-publishers">Trusted Publishing</a>. Now you'll know where the latest release originated and you can verify that it came from us.</p>
<p><img src="/images/changelog/2025-09/trusted-publishing.png" alt="NPM provenance statement" /></p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Introduction of the `<InfiniteScroll>` Component]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-inertia-introduction-of-the-infinitescroll-component</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2580">@pascalbaljet</a></p>
<pre><code class="language-vue">&lt;template&gt;
    &lt;InfiniteScroll data=&quot;users&quot;&gt;
        &lt;div v-for=&quot;user in users.data&quot; :key=&quot;user.id&quot;&gt;{{ user.name }}&lt;/div&gt;
    &lt;/InfiniteScroll&gt;
&lt;/template&gt;
</code></pre>
<p>A new <code>&lt;InfiniteScroll&gt;</code> component was introduced for React, Vue, and Svelte that allows you to easily create infinite scroll interfaces by wrapping your items in the new component.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Support for Merging Nested Prop Paths]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-inertia-support-for-merging-nested-prop-paths</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2561">@pascalbaljet</a></p>
<p>A new middle ground was added between <code>Inertia::merge()</code> and <code>Inertia::deepMerge()</code> so you can have fine-grained control over what should be merged.</p>
<p>The front-end will replace the entire object, except the <code>data</code> array. The new items will be appended to the existing items:</p>
<pre><code class="language-php">Inertia::merge(User::paginate())-&gt;append('data');
</code></pre>
<p>There's also <code>prepend()</code>, and you can also combine multiple calls:</p>
<pre><code class="language-php">Inertia::merge($complexObject)
    -&gt;append('users', matchOn: 'username')
    -&gt;prepend('messages.data');
</code></pre>
<p>Then there's a new <code>Inertia::scroll()</code> function which you can pass paginated resources:</p>
<pre><code class="language-php">Inertia::scroll(User::paginate());
</code></pre>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Progress Indicator API]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-boost-progress-indicator-api</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2581">@pascalbaljet</a></p>
<pre><code class="language-ts">import { progress } from &quot;@inertiajs/vue3&quot;;

progress.start(); // Begin progress animation
progress.set(0.25); // Set to 25% complete
progress.finish(); // Complete and fade out
progress.reset(); // Reset to start
progress.remove(); // Complete and remove from DOM
progress.hide(); // Hide progress bar
progress.reveal(); // Show progress bar

progress.isStarted(); // Returns boolean
progress.getStatus(); // Returns current percentage or null
</code></pre>
<p>The internal methods used to drive the <a href="https://inertiajs.com/progress-indicators">Progress indicator</a> are now exposed publicly, giving developers control over the progress bar.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - [1.x] Adds `boost:update` + Allows Package Authors to Publish Guidelines]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-boost-1x-adds-boostupdate-allows-package-authors-to-publish-guidelines</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/277">@nunomaduro</a></p>
<p>Boost can now self-update with the new <code>boost:update</code> command. In addition, third-party packages can now auto-register their own guidelines by including a <code>resources/boost/guidelines/core.blade.php</code> file in their package.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Echo - Allow Guideline Overriding]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-echo-allow-guideline-overriding</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/219">@ashleyhindle</a></p>
<p>Users can now override guideline files, specifying that Boost should use their guidelines in specific instances instead of the default guidelines that come with Boost.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Fortify - Add `stopListeningForNotification`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-fortify-add-stoplisteningfornotification</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/echo/pull/459">@thoresuenert</a></p>
<pre><code class="language-ts">const callback = (notification) =&gt; {
    console.log(notification.type);
};

// Start listening...
Echo.private(`App.Models.User.${userId}`).notification(callback);

// Stop listening (callback must be the same)...
Echo.private(`App.Models.User.${userId}`).stopListeningForNotification(
    callback
);
</code></pre>
<p>A new <code>stopListeningForNotification</code> method was added to stop listening for notifications without leaving the channel.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Installer - Regenerate Session on Register]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-installer-regenerate-session-on-register</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/fortify/pull/610">@valorin</a></p>
<p>The session and session and CSRF token are now regenerated on user registration.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Installer - Check for New Version of Installer on `new`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-installer-check-for-new-version-of-installer-on-new</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/installer/pull/438">@joetannenbaum</a></p>
<p>The installer now checks if there are updates available on Packagist to ensure you are using the latest version when running <code>laravel new</code>.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Installer - Support PNPM and Yarn Package Managers]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-installer-support-pnpm-and-yarn-package-managers</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/installer/pull/433">@adrum</a></p>
<p>The installer now detects lock files for the PNPM and Yarn package managers, falling back to NPM if neither are found.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[MCP - Add the Ability to Use a Git Repo as Custom Kit]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-mcp-add-the-ability-to-use-a-git-repo-as-custom-kit</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/installer/pull/432">@adrum</a></p>
<pre><code class="language-bash">laravel new --using https://gitub.com/user/project
</code></pre>
<p>You can specify a git repo as a custom starter kit when running <code>laravel new</code>.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Prompts - First Official "Beta" Release of Laravel MCP Package]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-prompts-first-official-beta-release-of-laravel-mcp-package</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p><a href="https://github.com/laravel/mcp">https://github.com/laravel/mcp</a></p>
<p>Laravel MCP allows you to rapidly build MCP servers for your Laravel applications. MCP servers allow AI clients to interact with your Laravel application through the <a href="https://modelcontextprotocol.io/docs/getting-started/intro">Model Context Protocol</a>.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Reverb - Improve Display of Progress Bars With High Step Counts]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-reverb-improve-display-of-progress-bars-with-high-step-counts</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/prompts/pull/204">@jessarcher</a></p>
<p><img src="/images/changelog/2025-09/progress-after.png" alt="New progress display" /></p>
<p>The display of the progress bar when using a large number of steps is improved by adding thousands separators and extra spacing.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - [1.x] Adds Optional Application Level Connection Limits]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-vs-code-extension-1x-adds-optional-application-level-connection-limits</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/reverb/pull/347">@joedixon</a></p>
<p>You can specify connection limits for those users who wish to limit the number of active connections to a given application as <a href="https://pusher.com/docs/channels/library_auth_reference/pusher-websockets-protocol/#4000-4099">supported by the Pusher protocol</a>.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Add Commands That Refactor Class Attributes in Blade Files]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-vs-code-extension-add-commands-that-refactor-class-attributes-in-blade-files</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/432">@N1ebieski</a></p>
<p><img src="/images/changelog/2025-09/vs-code-refactor-class-attributes.gif" alt="Refactor class attributes" /></p>
<p>Commands are now available that refactor the selected or all class attributes to the <code>@class</code> directive.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Add a Command That Wraps Selected Text With a Helper]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-vs-code-extension-add-a-command-that-wraps-selected-text-with-a-helper</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/431">@N1ebieski</a></p>
<p><img src="/images/changelog/2025-09/vs-code-wrap-with-helper.gif" alt="Wrap with helper" /></p>
<p>Commands are now available that wrap the selected text with a helper, such as <code>dd</code>, <code>collect</code>, <code>dump</code>, and <code>str</code>.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Pint Commands + Run Pint on Save]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-09" />
            <id>https://laravel.com/docs/changelog#item-2025-09-30-vs-code-extension-pint-commands-run-pint-on-save</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/448">@joetannenbaum</a></p>
<p>Commands are now available to &quot;Run Pint&quot;, &quot;Run Pint on Dirty Files&quot;, and &quot;Run Pint on Current File&quot;. There is also now an optiont to run Pint on save for the current file.</p>
]]>
            </summary>
                                    <updated>2025-09-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Add `withHeartbeat` Method to `LazyCollection`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-laravel-framework-12x-add-withheartbeat-method-to-lazycollection</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56477">@JosephSilber</a></p>
<pre><code class="language-php">$collection
    -&gt;withHeartbeat(CarbonInterval::minutes(5), function () {
        // ...
    })
    -&gt;each(function ($item) {
        // ...
    });
</code></pre>
<p>The new <code>withHeartbeart</code> method allows you to run a callback at regular time intervals while the collection is being lazily enumerated, particularly useful for long-running processes.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Add `toPrettyJson` Method]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-laravel-framework-12x-add-toprettyjson-method</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56697">@WendellAdriel</a></p>
<pre><code class="language-php">$collection = collect([1,2,3]);

// Instead of this:
$collection-&gt;toJson(JSON_PRETTY_PRINT);

// You can now do this:
$collection-&gt;toPrettyJson();
</code></pre>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Add `allowedUrls` Through `preventStrayRequests`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-laravel-framework-12x-add-allowedurls-through-preventstrayrequests</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56645">@rabrowne85</a></p>
<pre><code class="language-php">Http::allowStrayRequests([
    'http://127.0.0.1:13714/*',
]);
</code></pre>
<p>The <code>Http::allowStrayRequests</code> method now accepts an argument that allows you to specify URLs that tests are allowed to send requests to when using <code>Http::preventStrayRequests</code>.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Add "Copy as Markdown" Button to Error Page]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-laravel-framework-12x-add-copy-as-markdown-button-to-error-page</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56657">@mpociot</a></p>
<p>There is now a &quot;Copy as Markdown&quot; button on the Laravel exception page. When clicking this button, a markdown representation of the exception is copied to the users clipboard, which can then be used for AI agents/LLMs.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Add New `mergeVisible`, `mergeHidden` and `mergeAppends` Methods]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-laravel-framework-12x-add-new-mergevisible-mergehidden-and-mergeappends-methods</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56678">@jonerickson</a></p>
<pre><code class="language-php">protected function initializeTwoFactorAuthentication(): void
{
    $this-&gt;mergeHidden([
        'app_authentication_secret',
        'app_authentication_recovery_codes',
    ]);

    $this-&gt;mergeCasts([
        'app_authentication_secret' =&gt; 'encrypted',
        'app_authentication_recovery_codes' =&gt; 'encrypted:array',
    ]);
}
</code></pre>
<p>Additional attribute helper methods added to Eloquent models for merging visibility-related arrays, bringing them in line with existing helpers like <code>mergeCasts</code>, <code>mergeFillable</code>, and <code>mergeGuarded</code>.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Add `Arr::push()`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-inertia-add-arrpush</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56632">@inxilpro</a></p>
<pre><code class="language-php">if ($this-&gt;hasChanges($data)) {
    Arr::push($result, 'pending.changes', $data);
}
</code></pre>
<p>A new <code>Arr</code> method that allows you to push something to an array if the array exists, or initialize it to an empty array and then push to it if it doesn't.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Introduction of the `Form` Component]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-inertia-introduction-of-the-form-component</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2474">@pascalbaljet</a></p>
<pre><code class="language-vue">&lt;script setup&gt;
import { Form } from &quot;@inertiajs/vue3&quot;;
&lt;/script&gt;

&lt;template&gt;
    &lt;Form action=&quot;/users&quot; method=&quot;post&quot;&gt;
        &lt;input type=&quot;text&quot; name=&quot;name&quot; /&gt;
        &lt;input type=&quot;email&quot; name=&quot;email&quot; /&gt;
        &lt;button type=&quot;submit&quot;&gt;Create User&lt;/button&gt;
    &lt;/Form&gt;
&lt;/template&gt;
</code></pre>
<p>A new <code>&lt;Form&gt;</code> component that behaves much like a classic HTML form and simply allows Inertia to intercept the network call on form submission. This new component greatly reduces the boilerplate needed to create a form with Inertia.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Support for Passing Wayfinder Objects to Router Methods]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-inertia-support-for-passing-wayfinder-objects-to-router-methods</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2497">@pascalbaljet</a></p>
<pre><code class="language-js">import UserController from &quot;@/actions/App/Http/Controllers/UserController&quot;;

// Regular visits
router.visit(UserController.store());

// Prefetching
router.prefetch(UserController.index());
router.getPrefetching(UserController.index());
router.getCached(UserController.index());
router.flush(UserController.index());
</code></pre>
<p>Adds support for passing Wayfinder-like objects into router methods instead of specifying the URL and method manually.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Tag-Based Cache Invalidation for Prefetch Requests]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-inertia-tag-based-cache-invalidation-for-prefetch-requests</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2484">@pascalbaljet</a></p>
<pre><code class="language-jsx">// Specify cache tags via the Link component
&lt;Link href=&quot;/users/1&quot; prefetch=&quot;hover&quot; :tags=&quot;['user', 'profile']&quot;&gt;
    View Profile
&lt;/Link&gt;

// Or via prefetch method on the route
router.prefetch(
  '/users',
  { method: 'get', data: { page: 2 } },
  { cacheFor: '1m', tags: ['users'] }
)

// Flushes all cache entries tagged with 'user'
router.flushByTags(['user'])

// Flushes entries tagged with 'user' OR 'product'
router.flushByTags(['user', 'product'])

// Flush via visit
router.visit('/users', {
  invalidate: ['user']
})

// Flush via useForm helper
form.post('/users', { invalidate: ['users'] })
</code></pre>
<p>Introduces tag-based cache invalidation for prefetch requests. This enables better control over the prefetch cache without having to flush everything.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Support for Passing Custom Component to `as` Prop of `Link` Component]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-boost-support-for-passing-custom-component-to-as-prop-of-link-component</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2443">@pascalbaljet</a></p>
<pre><code class="language-jsx">&lt;Link as={CustomButton} method=&quot;post&quot; href=&quot;/user&quot; data={{ test: &quot;data&quot; }}&gt;
    Custom Component with Data
&lt;/Link&gt;
</code></pre>
<p>The Inertia <code>Link</code> component now supports custom components instead of just HTML tags such as <code>a</code> or <code>button</code>.</p>
<p><a href="https://github.com/laravel/boost">Laravel Boost</a> was released this month! Not only was it just released, it is already aware and up-to-date with the just-released Pest 4 and Filament 4.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Boost - Add `enabled` Option to Config]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-boost-add-enabled-option-to-config</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/143">@xiCO2k</a></p>
<p>Adds a <code>config('boost.enabled')</code> option to allows users to specifically enable/disable Boost in certain scenarios outside of environment constraints.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[React + Vue Starter Kits - Update Pint Guideline to Use `--dirty` Flag]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-react-vue-starter-kits-update-pint-guideline-to-use-dirty-flag</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/boost/pull/43">@yitzwillroth</a></p>
<p>Updates Boost guidelines to prefer the usage of Pint with the <code>--dirty</code> flag for cleaner diffs and PRs.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[React + Vue Starter Kits - Migrate `useForm` to New Inertia `Form` Component]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-react-vue-starter-kits-migrate-useform-to-new-inertia-form-component</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/react-starter-kit/pull/149">@joetannenbaum</a></p>
<pre><code class="language-tsx">import { Form } from &quot;@inertiajs/react&quot;;

export default function Login() {
    return (
        &lt;Form action=&quot;/login&quot; method=&quot;post&quot;&gt;
            {/* Form fields */}
        &lt;/Form&gt;
    );
}
</code></pre>
<p>Reduces the boilerplate for all forms in the <a href="https://laravel.com/starter-kits">starter kits</a> by replacing <code>useForm</code> with the new Inertia <code>Form</code> component.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[React + Vue Starter Kits - Replace Ziggy With Wayfinder]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-react-vue-starter-kits-replace-ziggy-with-wayfinder</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/react-starter-kit/pull/151">@joetannenbaum</a></p>
<pre><code class="language-tsx">import AuthenticatedSessionController from &quot;@/actions/App/Http/Controllers/Auth/AuthenticatedSessionController&quot;;
import { Form } from &quot;@inertiajs/react&quot;;

export default function Login() {
    return (
        &lt;Form {...AuthenticatedSessionController.store.form()}&gt;
            {/* Form fields */}
        &lt;/Form&gt;
    );
}
</code></pre>
<p>Removes Ziggy from the starter kits and replaces it with the current version of Laravel Wayfinder, bringing end-to-end type safety to your routes.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Sail - 100% Baseline Test Coverage]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-sail-100-baseline-test-coverage</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/react-starter-kit/pull/152">@JaavierR</a></p>
<p>Adds the missing feature tests so that fresh projects start with 100% test coverage.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Allow Sail to Run Pest 4 Browser Tests]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-vs-code-extension-allow-sail-to-run-pest-4-browser-tests</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/sail/pull/812">@rogerio-pereira</a></p>
<p>Docker configuration updates to allow you to run Pest 4 browser tests in Sail.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Add DDEV Support]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-vs-code-extension-add-ddev-support</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/398">@damms005</a></p>
<p>Adds proper support for DDEV, Docker-based PHP environments.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Add Support for Custom View Extensions]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-vs-code-extension-add-support-for-custom-view-extensions</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/429">@ryangjchandler</a></p>
<p>The extension now recognizes custom registered view extensions such as <code>.blade.sh</code> or <code>.blade.ts</code> and will now autocomplete and link correctly to these files.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Support for Configs in Subfolders]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-vs-code-extension-support-for-configs-in-subfolders</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/427">@N1ebieski</a></p>
<p>The extension now supports configs in nested subfolders (e.g. <code>config/foo/bar/baz.php</code>), providing better autocomplete and linking.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Link Directly to Problem Files]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-vs-code-extension-link-directly-to-problem-files</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/415">@N1ebieski</a></p>
<p>Now, when the extension warns you about an invalid value, such as a config key, the warning will directly link you to the file where you can fix the issue.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Wayfinder - Autocompletion for `Route::is` and `routeIs` Methods]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-wayfinder-autocompletion-for-routeis-and-routeis-methods</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/411">@N1ebieski</a></p>
<p>Full autocomplete and linking support for the <code>Route::is</code> and <code>routeIs</code> methods.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Wayfinder - Introduce Route Utility Types for Improved DX]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-wayfinder-introduce-route-utility-types-for-improved-dx</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/wayfinder/pull/68">@istiak-tridip</a></p>
<pre><code class="language-ts">import type { RouteDefinition } from &quot;@/wayfinder&quot;;

const sendRequest = (route: RouteDefinition&lt;&quot;post&quot;&gt;) =&gt; {
    //
};

sendRequest(StorePostController());
</code></pre>
<p>Utility types are now exported, making them easier to consume if your app requires them.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Wayfinder - Support for Providing Default URL Parameters via the Frontend]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-08" />
            <id>https://laravel.com/docs/changelog#item-2025-08-31-wayfinder-support-for-providing-default-url-parameters-via-the-frontend</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/wayfinder/pull/75">@owenconti</a></p>
<pre><code class="language-ts">  setup({ el, App, props }) {
    const root = createRoot(el);

    setUrlDefaults({
      workspace: props.initialPage.props.workspace.slug
    });

    root.render(&lt;App {...props} /&gt;);
  },
</code></pre>
<p>In instances where Wayfinder is unable to determine the proper default URL params as defined by the server, you can now specify them on the client side using <code>setUrlDefaults</code>.</p>
]]>
            </summary>
                                    <updated>2025-08-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Added Verbose Output for `queue:work`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-07" />
            <id>https://laravel.com/docs/changelog#item-2025-07-31-laravel-framework-12x-added-verbose-output-for-queuework</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull requests by <a href="https://github.com/laravel/framework/pull/56086">@seriquynh</a> &amp; <a href="https://github.com/laravel/framework/pull/56095">@amirhshokri</a></p>
<pre><code class="language-bash">php artisan queue:work --verbose
// App\Jobs\UrgentAction 85 high
// App\Jobs\NormalAction 84 default
</code></pre>
<p>With <code>--verbose</code>, you’ll now see queue names alongside each job and job ID, making multi-queue debugging straightforward and saving you time when tracing issues.</p>
]]>
            </summary>
                                    <updated>2025-07-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - `Uri` Implements `JsonSerializable`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-07" />
            <id>https://laravel.com/docs/changelog#item-2025-07-31-laravel-framework-12x-uri-implements-jsonserializable</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56097">@devajmeireles</a></p>
<pre><code class="language-php">echo json_encode(new Uri('/path?x=1'));
// &quot;http://localhost:8000/path?x=1&quot;
</code></pre>
<p>This release fixes a serialization bug, properly converting the URI to a string when serializing a larger JSON object that contains the URI as a value.</p>
]]>
            </summary>
                                    <updated>2025-07-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Added `doesntStartWith()` & `doesntEndWith()`  `Str` Methods]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-07" />
            <id>https://laravel.com/docs/changelog#item-2025-07-31-laravel-framework-12x-added-doesntstartwith-doesntendwith-str-methods</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56168">@balboacodes</a></p>
<pre><code class="language-php">str('apple')-&gt;doesntStartWith('b'); // true
str('apple')-&gt;doesntEndWith('e'); // false
</code></pre>
<p>The inverse of <code>startsWith</code>/<code>endsWith</code>, these new methods allow you to fluently test for starting and ending characters in your string.</p>
]]>
            </summary>
                                    <updated>2025-07-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Pint - Closure Support in `pluck()`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-07" />
            <id>https://laravel.com/docs/changelog#item-2025-07-31-pint-closure-support-in-pluck</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/56188">@ralphjsmit</a></p>
<pre><code class="language-php">$users-&gt;pluck(fn($u) =&gt; $u-&gt;email, fn($u) =&gt; strtoupper($u-&gt;name));

</code></pre>
<p>You can now dynamically generate keys and values via callbacks. Instead of mapping then plucking, you get a single, flexible method that reduces steps and keeps intent clear.</p>
]]>
            </summary>
                                    <updated>2025-07-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Telescope - Added `--parallel` Option]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-07" />
            <id>https://laravel.com/docs/changelog#item-2025-07-31-telescope-added-parallel-option</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/pint/pull/376">@nunomaduro</a></p>
<pre><code class="language-bash">./vendor/bin/pint --parallel

</code></pre>
<p>By leveraging PHP CS Fixer’s parallel runner, <a href="https://laravel.com/docs/12.x/pint">Pint</a> now formats files concurrently. On large codebases that once took minutes, you’ll see results in seconds, speeding up both local workflows and CI pipelines for a clear quality of life win.</p>
]]>
            </summary>
                                    <updated>2025-07-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Octane - Migrated to Vite]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-07" />
            <id>https://laravel.com/docs/changelog#item-2025-07-31-octane-migrated-to-vite</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/telescope/pull/1598">@nckrtl</a></p>
<p>Telescope’s frontend now uses <a href="https://laravel.com/docs/12.x/vite">Vite</a> instead of Mix. Asset builds finish faster, hot-reloads are more reliable, and you benefit from a modern toolchain without changing your workflow.</p>
]]>
            </summary>
                                    <updated>2025-07-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - FrankenPHP’s File Watcher]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-07" />
            <id>https://laravel.com/docs/changelog#item-2025-07-31-inertia-frankenphps-file-watcher</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/octane/pull/971">@kohenkatz</a></p>
<p><a href="https://laravel.com/docs/12.x/octane">Octane</a> now relies on <a href="https://frankenphp.dev">FrankenPHP</a>’s native file watcher for reloading the server on file changes. This removes the NodeJS dependency and eases the local development process significantly.</p>
]]>
            </summary>
                                    <updated>2025-07-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Reset Form State and Clear Errors with a Single Method]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-07" />
            <id>https://laravel.com/docs/changelog#item-2025-07-31-inertia-reset-form-state-and-clear-errors-with-a-single-method</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2414">@pascalbaljet</a></p>
<pre><code class="language-jsx">const form = useForm({ name: &quot;&quot;, email: &quot;&quot; });

// Instead of:
form.reset();
form.clearErrors();

// You can now:
form.resetAndClearErrors();
</code></pre>
<p>You can now concisely reset all fields and errors in one go, bringing your form back to square one.</p>
]]>
            </summary>
                                    <updated>2025-07-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Prevent Minifying JavaScript Builds and Test Apps]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-07" />
            <id>https://laravel.com/docs/changelog#item-2025-07-31-inertia-prevent-minifying-javascript-builds-and-test-apps</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2424">@pascalbaljet</a></p>
<p>Inertia no longer distributes minified builds, aligning it with the strategy of other popular libraries. This makes debugging more straightforward and allows for local patching if the need arises.</p>
]]>
            </summary>
                                    <updated>2025-07-31T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Added `encrypt()` and `decrypt()` String Helper Methods]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-06" />
            <id>https://laravel.com/docs/changelog#item-2025-06-30-laravel-framework-12x-added-encrypt-and-decrypt-string-helper-methods</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/55931">@KIKOmanasijev</a></p>
<p>You can now chain <code>encrypt()</code> and <code>decrypt()</code> directly on a <code>Str</code> instance, so instead of piping your string through separate encryption calls, you can write:</p>
<pre><code class="language-php">$value = Str::of('secret')-&gt;encrypt()-&gt;prepend('Encrypted: ');
$original = Str::of($value)-&gt;decrypt();
</code></pre>
<p>This keeps your string-manipulation chains concise (no need to write separate, extra code to handle encryption) and you don’t have to manually wrap a value in encryption calls each time.</p>
<p>Learn more about <a href="https://laravel.com/docs/12.x/helpers#method-encrypt"><code>encrypt</code></a> and <a href="https://laravel.com/docs/12.x/helpers#method-decrypt"><code>decrypt</code></a></p>
]]>
            </summary>
                                    <updated>2025-06-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Laravel Framework 12.x - Added `broadcast_if()` and `broadcast_unless()` Utilities]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-06" />
            <id>https://laravel.com/docs/changelog#item-2025-06-30-laravel-framework-12x-added-broadcast-if-and-broadcast-unless-utilities</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/55967">@taylorotwell</a></p>
<p>You now have two methods for conditional broadcasting in a single call:</p>
<pre><code class="language-php">broadcast_if($order-&gt;isPaid(), new OrderShipped($order));
broadcast_unless($user-&gt;isActive(), new InactiveUserAlert($user));
</code></pre>
<p>This replaces multi-line conditionals around <code>broadcast()</code> and makes your event logic more readable, improving the overall developer experience.</p>
<p>Read the docs about <a href="https://laravel.com/docs/12.x/broadcasting">event broadcasting in Laravel</a></p>
]]>
            </summary>
                                    <updated>2025-06-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Added `--batched` Flag to `make:job`]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-06" />
            <id>https://laravel.com/docs/changelog#item-2025-06-30-vs-code-extension-added-batched-flag-to-makejob</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/framework/pull/55929">@hafezdivandari</a></p>
<p>The <code>php artisan make:job</code> command now accepts a <code>--batched</code> option:</p>
<pre><code class="language-bash">php artisan make:job ProcessPodcast --batched
</code></pre>
<p>This command scaffolds the job with the <code>Batchable</code> trait already applied, so you don’t have to add it manually. It saves you a manual step and ensures consistency.</p>
<p>Learn more about <a href="https://laravel.com/docs/12.x/queues#defining-batchable-jobs">defining batchable jobs</a></p>
<p><img src="/images/changelog/2025-06/vs-code-performance-improvements.png" alt="VS Code Performance Improvements" /></p>
]]>
            </summary>
                                    <updated>2025-06-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[VS Code Extension - Memory Improvements]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-06" />
            <id>https://laravel.com/docs/changelog#item-2025-06-30-vs-code-extension-memory-improvements</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/402">@joetannenbaum</a></p>
<p>We fixed a memory-leak issue in the extension’s background processes, reducing its long-term footprint and preventing slowdowns during extended coding sessions.</p>
]]>
            </summary>
                                    <updated>2025-06-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Improved Startup Time]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-06" />
            <id>https://laravel.com/docs/changelog#item-2025-06-30-inertia-improved-startup-time</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/laravel/vs-code-extension/pull/404">@joetannenbaum</a></p>
<p>Initialization with the VS Code extension now completes in under one second (down from 5–7 seconds) by deferring heavy setup until it’s actually needed. You’ll notice the extension loads almost instantly so you can start building faster.</p>
<p>Get started with the <a href="https://github.com/laravel/vs-code-extension">Laravel VS Code extension</a></p>
]]>
            </summary>
                                    <updated>2025-06-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Allow `deepMerge` on Custom Properties]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-06" />
            <id>https://laravel.com/docs/changelog#item-2025-06-30-inertia-allow-deepmerge-on-custom-properties</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2344">@mpociot</a></p>
<p>When implementing infinite scrolling with Inertia or other paginated data merges, you can now specify a key (<code>matchOn</code>) to do a deep merge, matching items by ID and replacing or appending as appropriate. This provides greater flexibility, prevents duplicated entries, and keeps your client-side data consistent.</p>
<pre><code class="language-php">Inertia::render('Users/Index', [
    'users' =&gt; Inertia::deepMerge($users)-&gt;matchOn('data.id'),
]);
</code></pre>
<p><a href="https://inertiajs.com/merging-props#server-side">Learn more in the Inertia docs</a></p>
]]>
            </summary>
                                    <updated>2025-06-30T23:59:59+00:00</updated>
        </entry>
            <entry>
            <title><![CDATA[Inertia - Prevent Duplicate Render in React]]></title>
            <link rel="alternate" href="https://laravel.com/docs/changelog#log-2025-06" />
            <id>https://laravel.com/docs/changelog#item-2025-06-30-inertia-prevent-duplicate-render-in-react</id>
            <author>
                <name><![CDATA[Taylor Otwell]]></name>
            </author>
            <summary type="html">
                <![CDATA[<p>Pull request by <a href="https://github.com/inertiajs/inertia/pull/2377">@pascalbaljet</a></p>
<p>We fixed a React-specific issue in <code>&lt;StrictMode&gt;</code> where the initial Inertia page would render twice. Now you get a single, clean first render without flicker, improving perceived performance.</p>
<p>Get started with the <a href="https://www.youtube.com/watch?v=_sw61Ew1FHQ">Laravel + React Starter Kit</a></p>
]]>
            </summary>
                                    <updated>2025-06-30T23:59:59+00:00</updated>
        </entry>
    </feed>
