Laravel 13.36 is a maintenance release for applications running Laravel 13. It targets everyday development and production operations without requiring a major redesign.
use Illuminate\Validation\Rule;
$request->validate([
'phone' => [
Rule::requiredWithout('email'),
],
'website' => [
'nullable',
Rule::url()->protocols(['https']),
],
'device_id' => [
Rule::uuid()->version(4),
],
]);Validation now offers fluent Rule:: builders for more rules that previously relied on strings. The API covers conditions such as requiredWithout, URL protocols, UUID versions, case-insensitive distinct values, and confirmed passwords. String rules remain available. The builder form improves editor completion and keeps parameters structured, which avoids ambiguity when values contain commas.
The new DB::olap() method runs a callback with an analytical workload on supported Vitess-based MySQL environments, including PlanetScale. Laravel restores the previous workload after the callback. On other database connections, the callback runs normally. The method does not rewrite SQL or promise faster execution. Indexes, query design, and data limits still matter. Suitable uses include revenue reports, historical inventory summaries, customer analytics, and large aggregation jobs.
Long-running queue workers can now clear sticky read/write connection state between jobs. Applications can opt in through Worker::$flushStickyConnections = true in AppServiceProvider. The setting is disabled by default because some workflows rely on a later job seeing data through the write connection. Teams using replicas or read/write splitting should test the change carefully.
Mercure-only broadcast events are now published synchronously by default. Events that also use another broadcaster remain queued. Applications that need asynchronous Mercure publishing can set MERCURE_URL="${APP_URL}/.well-known/mercure" and MERCURE_ASYNC=true. Synchronous delivery adds work to the current request, while asynchronous delivery requires queue processing.
Queued mailables now honor #[DeleteWhenMissingModels]. If a referenced model has disappeared, Laravel discards the job without raising a ModelNotFoundException. The #[FailOnTimeout] attribute also works for queued mailables, marking timed-out jobs as failed. A provider may have accepted an email before the timeout, so this does not remove every risk of duplicate delivery.
The release fixes Markdown mail handling for user-supplied values by escaping backslashes together with brackets. This prevents crafted input from changing the intended link target. The issue matters for emails built from profiles, comments, order data, or external APIs.
Filesystem changes add named S3 credential providers and Cloud IAM disks. JSON queue-worker output now reports connection information in relevant paused, resumed, and stopped messages. Redis recovery rebuilds the client when no cluster node is reachable and releases persistent sockets before rebuilding it. Further fixes cover notification locales, schema column lookup, queries, event streams, queue processing, and other framework internals.
Upgrade work should start with the official changelog and the changes from Laravel 13.35 to 13.36. Test in development or staging, run validation, queue, notification, and broadcasting tests, review Mercure and database connection settings, and check queue workers and cloud storage integrations. After deployment, monitor logs, failed jobs, and database behavior. The release does not require every feature to be adopted immediately.




Comments
No comments yet — be the first.
Open the discussion
No account or password needed — just enter your e-mail and we’ll send you a one-time sign-in link. First time here? You’re set up automatically.
Your rating will be applied automatically after you sign in.
Check your inbox
We’ve sent a sign-in link to …. Open it on this device — this tab will sign you in automatically.
Nothing arrived? Check your spam folder — and mark the mail as "Not spam" so it lands in your inbox next time.