- Laravel October Product Updates
- Laravel Framework changelog — October 2026
- Laravel Framework changelog RSS
Laravel Framework
Releases in October
In addition to the main features in the official changelog, the dates and versions below were checked against the release notes.
The sections below cover the nine items listed in the official changelog. For minor fixes and dependency changes, see each release note.
Defining searches with a request body using QUERY routes
v13.35.0 addedRoute::query(), which supports the HTTP QUERY method. You can define routes that receive search conditions in the request body instead of the GET query string.
Route::any() also matches QUERY requests, and the route list recognizes the method. The SearchProductsController above stands for an invokable controller in your application that implements the search.
Primary sources: Register QUERY Routes, Laravel 13 official routing.md. Related pages: Routing, CSRF protection
Avoiding stale reads in later requests after a write
With a read/write split database, a read right after an update can go to a read replica that has not synced yet. The existingsticky option only covers the same request. The PreventStaleDatabaseReads middleware added in v13.38.0 also protects later requests in the same session for a set period.
In bootstrap/app.php, import Illuminate\Foundation\Http\Middleware\PreventStaleDatabaseReads and add it inside the withMiddleware() callback with $middleware->web(append: [PreventStaleDatabaseReads::class]);. It is not enabled automatically.
The middleware records the time of writes to the default database connection in the session. By default, it sends reads on that connection to the write database for 2 seconds after a write. You can change the period by registering PreventStaleDatabaseReads::for(5) or similar instead of the class.
Because it uses the session, it must run after StartSession. It does not switch reads for other sessions or other database connections, and it does not detect when the replica has finished syncing.
Primary sources: Avoid Stale Reads After Database Writes, Laravel 13 official database.md. Related pages: Database, Session
Reading from the write database for specific operations only
Connection::usingWritePdo(), also added in v13.38.0, switches reads on that connection to the write database only while the callback runs. Use it when you want your application to mark exactly which reads are critical, rather than protecting a whole session.
Running schedules on one server by default
To reduce forgottenonOneServer() calls when the scheduler runs on multiple servers, v13.35.0 added Schedule::alwaysOnOneServer(). Call it in the boot() method of AppServiceProvider to apply it to all eligible scheduled tasks at once.
onOneServer() requires a central cache shared by all servers. The drivers listed in the official documentation are database, memcached, dynamodb, and redis. Adding the setting alone does not provide a cross-server locking backend.Asserting fake dispatches by their properties
Since v13.35.0, the Queue, Bus, Event, and Notification fakes accept an array of expected properties. You no longer need to write a callback every time just to compare attributes. For example, with aShipOrder job that has a public order property and an $order prepared in the test, you can assert like this:
is(), so a different instance representing the same model also matches. Fakes verify the dispatch, not the result of running the job itself.
Primary sources: Assert Fake Dispatches by Their Properties, Laravel 13 official queues.md. Related pages: Queues, Mocking
Setting worker memory limits as percentages
Since v13.35.0, the--memory option of queue:work accepts a percentage of PHP’s memory_limit. You can tune the worker’s exit threshold to the PHP setting without recalculating a fixed MB value for each environment.
memory_limit is unlimited (-1), use an MB value instead of a percentage. Restarting a worker that exited at the threshold is left to a process monitor such as Supervisor.
Primary sources: Set Queue Worker Memory Limits as Percentages, Laravel 13 official queues.md
Returning Markdown with a dedicated Content-Type
v13.35.0 addedmarkdown() to the response factory. It returns a Markdown body as text/markdown, and you can also pass a status code and extra headers.
wantsMarkdown(). It does not convert Markdown to HTML. It is an API for serving the Markdown itself as the response.
Primary sources: Return Markdown Responses, Laravel 13 official responses.md. Related pages: Responses
Running analytical queries in OLAP mode on Vitess
v13.36.0 addedisVitess() and olap() to MySQL connections. You can detect whether you are using Vitess or PlanetScale and run analytical queries with the OLAP workload.
Discovering existing validation rules through builders
v13.36.0 addedRule builder methods for many rules that previously had to be written as strings. Methods such as requiredWith(), acceptedIf(), regex(), and timezone() are easier to find through IDE completion, and you can choose either style while keeping the existing validation behavior.
Laravel Cloud
The official monthly blog post introduces the following three items.
Primary sources: Laravel October Product Updates — Laravel Cloud, Laravel Cloud changelog. Related pages: Introducing Laravel Cloud
Laravel Forge
- PHP security update notices: Forge shows, for each server, which versions are affected by the October PHP security releases and whether fixed versions are available. Recheck versions checks the version that is actually installed. Rechecking the display and updating PHP are separate actions.
- Handling provisioning failures: Servers that cannot finish provisioning are shown in a failed state, with notifications, guidance on next steps, and a delete action. PHP and Nginx installs are also retried before the failure is confirmed.
Related articles
September 2026 updates
A look back at building AI providers at runtime, search extensions, Mercure, and isolated preview environments in Cloud.
Database guide
Review read/write splitting and the basics of database connections.