# Laravel: what changed from 12 to 13 - Product: Laravel (https://whatsnew.fyi/product/laravel) - Vendor: Laravel - Range: changelog entries numbered after v12.69.1 up to and including v13.30.1, stable releases only - Entries below: 14 releases (newest first) - Resolved: 12 is v12.69.1 and 13 is v13.30.1, the newest stable release of each major we track - Carrying security changes: 0 · CVEs mentioned: 0 · Mentioning breaking changes: 0 · Removing or deprecating something: 2 - Page: https://whatsnew.fyi/product/laravel/compare/12...13 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## What changed (192 changes, grouped by kind) ### Added #### v13.30.1 (2026-09-01) - Add connection and queue to WorkerStopping event - Add insertOrIgnoreReturning() to the Eloquent builder passthru - Add dropVectorIndex() to the schema blueprint #### v13.30.0 (2026-09-01) - Output the worker stop reason in queue:work - Ability to opt out of vendor/default commands in DevCommands - Support Microsoft SQL Server DSN connection strings - Cloud enhancements - Allow retrieving command by name without resolving all commands - Expose methods - Add totalXSize methods to Cloud Queue - Add chunkBy to collections - Add createPayloadUsing directly to the queue manager - Set visibility on files that only exist on a read-through disk's fallback #### v13.27.0 (2026-08-25) - Add `refreshForUpdate()` method to Eloquent models - Add Queue `totalXSize` methods - Add `whereBinary()` to the query builder - Add `stop()` and `ensureNotTimedOut()` to `FakeInvokedProcess` - Introduce `InteractsWithTestCaseLifecycle::flushState()` - Introduce a Cloud facade - Add Postgres keepalive DSN options - Allow masking query bindings in exception messages #### v13.26.0 (2026-08-18) - Add JobReleased event to Worker - Add managedQueues() to the Cloud queue - Add closure support to wherePivot and orWherePivot - Add orWhereKey and orWhereKeyNot to Eloquent Builder - Add debounceable queued listeners - Add dedicated exception for idle process timeouts - Add process fake assertion helpers - Introduce Queue::forward() - Add getRelatedClass to Relation #### v13.25.0 (2026-08-11) - Add foreignUlidFor schema helper - Add uuid to queue fake for inspection methods - Add a UniqueJobSkipped event - Add the timeout in JobTimedOut #### v13.24.0 (2026-08-04) - Add modelKeys() to Eloquent query builder - Add an array_keys validation rule - Add dominant color detection to image driver - Add HEIC and additional AVIF support - Add NumberPrompt fallback #### v13.23.0 (2026-07-27) - Add a monthly log driver - Add SES tenant support to the SES v2 transport - Add monthly channel to logging config #### v13.22.0 (2026-07-24) - Add exception to JobReleasedAfterException - Implement creationTimeOfOldestPendingJob on the QueueFake - Support stream bodies in HTTP fake responses - Allow RateLimiter to be Macroable - Add a #[BindWhen()] attribute to conditionally bind into the container - Add multi-queue support to queue:clear command - Allow faking DNS lookups in validation rules - Support Delay attribute when using Bus::batch & bulk #### v13.20.0 (2026-07-14) - Add missing $separator parameter to Storage facade append/prepend docblocks - Add beforePushing and afterPushing methods on QueueFake class - Add memory usage to WorkerStopping - Add assertEmpty to the Storage facade - Add first-party support for image processing - Add WithoutMiddleware controller middleware attribute - Add incrementEachQuietly and decrementEachQuietly to Eloquent models - Add ability to set session prefix for Redis - Add #[SensitiveParameter] to parameters carrying secrets #### v13.19.0 (2026-07-07) - Support inspecting reserved jobs on the queue fake - Add `reduceInto` method to collection - Add `counted` method to `Str` and `Stringable` - Add `query` and `queryJson` HTTP testing helpers - Add `Http::query()` method to the HTTP client #### v13.18.1 (2026-07-02) - Add input() method to console commands - Support inspecting delayed jobs on the queue fake - Add Release queue middleware ### Changed #### v13.30.0 (2026-09-01) - Confine Storage::path() to the configured disk root - Use spl_object_id over hash - Disable html by default on Laravel exception page tooltip #### v13.27.0 (2026-08-25) - Prevent duplicate scoped instance registrations - Add MariaDB support for vector distance queries - Make eager-load constraint closures static to break Builder reference cycle - Share cached AWS credentials across processes for SQS queue connections #### v13.26.0 (2026-08-18) - Accept enums in inOrderOf() - Surface paused queues in the queue worker output - Pass a connector to PhpRedisClusterConnection so it can rebuild its client - Allow read through filesystems to optionally not copy - Allow some Redis commands to retry on transient failures - Remove the pinned @laravel/multiplex version - Make process pools iterable - Support Guzzle 8 - Support array commands in process fake assertions - Promote nested data to top-level managed queue event - Preserve input key order when merging files in Request::all() #### v13.25.0 (2026-08-11) - Improve return type for Arr::prependKeysWith() - Respect after-commit dispatch when bulk pushing to DatabaseQueue - Configure a socket timeout for the Cloud log driver - Respect backed enum queue names when queueing mailables #### v13.24.0 (2026-08-04) - Respect job delays when bulk pushing to QueueFake - Use immutable timestamps in batch testing fakes - Avoid rebuilding every cached Route on CompiledRouteCollection lookups - Re-evaluate unmatched BindWhen attributes - Memoize TestResponse::decodeResponseJson() - Escape single quotes in Postgres JSON path attributes - Preserve relation constraints when resolving attributes during noConstraints - Respect job delays when bulk pushing to FailoverQueue - Fix validation stalling for minutes on large arrays #### v13.23.0 (2026-07-27) - Improve types in Image class - Allow ImageManager fromStorage disk to accept enums - Improve Collection::select generic types - Allow ->using(...) in ->change() migrations for PostgreSQL compatibility - Use a timing-safe comparison for the maintenance mode bypass secret #### v13.22.0 (2026-07-24) - Use new Stringable() instead of Str::of()/str() internally - Optimize Str::ucfirst and Str::lcfirst using native PHP 8.4 functions - Mark HTTP testing credentials as sensitive #### v13.20.0 (2026-07-14) - Make MailFake::assertQueuedTimes() public - Sync more getter return types with their property generics - Normalize HTTP client request header lookups - Support null for shortcut field in return type array for HasParameters::getOptions - Add capitalize parameter to Stringable::initials() #### v13.19.0 (2026-07-07) - Ensure `deletedAtColumn` is passed to `assertSoftDeleted` and `assertNotSoftDeleted` - Pop managed queue jobs from the cloud-agent instead of SQS - Terminate default style value with a semicolon in ComponentAttributeBag::merge() - Allow mail config options without name - Send bulk SQS jobs via SendMessageBatch #### v13.18.1 (2026-07-02) - Allow assertDatabaseEmpty to handle iterable - Handle api / json routes with Down (Maintenance) command - Update docblocks of Blueprint foreignUuid and foreignUlid to match foreignId ### Fixed #### v13.30.1 (2026-09-01) - Fix limit() being ignored on update() for SQL Server - Prevent orphaned Redis tagged cache entries #### v13.30.0 (2026-09-01) - Avoid quadratic wildcard rule expansion - Fix resource loading - Fix incorrect $startTime type in Worker::stopIfNecessary docblock - Restore the facade application after route:cache boots a fresh application - Gracefully handle missing param value or strings with request clamps - Restore default database connection when seeding fails #### v13.27.0 (2026-08-25) - Throw on unsuccessful responses when creating images from URLs - Re-introduce orWhereKey() and orWhereKeyNot() without breaking Builder subclasses - Don't force release a unique lock the job never acquired - Fix `quietly()` making `throw()` unreachable on process results - Guard against `false` returns in `PhpRedisConnection::mget()` and `hmget()` - Move and copy files that only exist on a read-through disk's fallback - Fix route name lost when RouteRegistrar action is not callable - Start a new max wait window after a debounced job runs #### v13.26.0 (2026-08-18) - Respect readonly=false in Microsoft SQL Server configuration - Avoid cross-slot reads when checking paused queues - Only register pail dev command when installed - Fix constantly asking to install multiplex and starting vite on project without vite - Fix Redis pipeline facade annotation - Stricten upload to be fetch only from request's query string for temporary upload urls - Improves in validation rule from getting bypass via loose comparison - Retry timed-out cloud agent long-polls - Scan every master node in phpredis cluster connections - Fix uncaptured setTestNow now() reuse in tests - Report seeder progress in db:seed command when a specific class is specified - Fix infinite scan loop when pruning stale cache tags on a Redis cluster - Keep the Redis connection usable when a pipeline or transaction fails - Escape single quotes in Postgres JSON path attributes - Prevent TypeError when JSON:API query parameters are arrays - Fix expectsQuestion() docblock to allow array answers - Rebuild the phpredis client after a cluster response error - Fix throwUnless() silently doing nothing when given a closure - Keep the assertion failure message when session errors are JSON serialized #### v13.25.0 (2026-08-11) - Prevent fatal errors when logging deprecations fails (also in v13.23.0) - Fix Factory::insert() with a count of zero - Fix schedule:list timezone conversion for range, step, and wildcard cron expressions (also in v13.23.0) - Fix getMigrationBatches return type annotation - Ensure Container::call cleans up build stack after exceptions - Reject non-stream resources in HTTP fake response bodies - Fix incorrect image dimensions for HEIC - Fix Str::numbers() type annotation - Normalize enum keys in typed cache getters - Isolate cloud agent requests from global HTTP client configuration - Fix missing check for #[WithoutTimestamps] on model ignore touch - Restore missing model deletion for broadcast events - Skip unsupported values in LazyCollection::flip() #### v13.24.0 (2026-08-04) - Fix DumpCommand return type - Fix PendingProcess losing falsy command strings on run()/start() - Detect circular alias references in Container - Fix pagination edge cases - Prevent TypeError in Validator::validateDistinct() - Fix appended accessors receiving null in toArray() #### v13.23.0 (2026-07-27) - Fix null handling in Arr::last() method - Fix default handling in CookieJar::queued() #### v13.22.0 (2026-07-24) - Fix PHP extensions in sqlite workflow job - Check traits in resolveClassAttribute - Fix queue name parameter in Mailer::later() - Restore iterable support to Arr::every() and Arr::some() - Fix Cache::touch() expiration handling - Fix iterable support in Arr::last() #### v13.20.0 (2026-07-14) - Fix operator precedence in SqsQueue size fallbacks - Fix guessResourceName() namespace collision when class name is a substring of a parent namespace segment - Fix Str::containsAll() returning true for an empty needles array - Fix stale transformations being reapplied when branching an Image after toBytes() - Fix Number::forHumans() and abbreviate() returning "-0" for tiny negative values - Fix providesTemporaryUploadUrls should return true for s3 driver #### v13.18.1 (2026-07-02) - Respect channel name for on-demand log stacks - Respect the encoding in Str::mask() when building the end of the string - Support scalar Predis retry config to allow config:cache ### Removed #### v13.26.1 (2026-08-18) - Remove orWhereKey and orWhereKeyNot methods from Eloquent Builder #### v13.19.0 (2026-07-07) - Remove deprecated `StaticCallOnNonStaticToInstanceCallRector` fixer rule _2 releases carry no categorized changes yet: v13.29.0, v13.21.1._ ## Release notes ### v13.30.1 - Date: 2026-09-01 - Version: v13.30.1 - Original notes: https://github.com/laravel/framework/releases/tag/v13.30.1 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.30.1 - **added** — Add connection and queue to WorkerStopping event - **added** — Add insertOrIgnoreReturning() to the Eloquent builder passthru - **added** — Add dropVectorIndex() to the schema blueprint - **fixed** — Fix limit() being ignored on update() for SQL Server - **fixed** — Prevent orphaned Redis tagged cache entries * [13.x] Add connection and queue to WorkerStopping by @jackbayliss in https://github.com/laravel/framework/pull/61387 * [13.x] Add `insertOrIgnoreReturning()` to the Eloquent builder passthru by @xurshudyan in https://github.com/laravel/framework/pull/61393 * [13.x] Add `dropVectorIndex()` to the schema blueprint by @xurshudyan in https://github.com/laravel/framework/pull/61391 * [13.x] Fix `limit()` being ignored on `update()` for SQL Server by @xurshudyan in https://github.com/laravel/framework/pull/61394 * [13.x] Prevent orphaned Redis tagged cache entries by @drewmt in https://github.com/laravel/framework/pull/61385 ### v13.30.0 - Date: 2026-09-01 - Version: v13.30.0 - Original notes: https://github.com/laravel/framework/releases/tag/v13.30.0 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.30.0 - **fixed** — Avoid quadratic wildcard rule expansion - **fixed** — Fix resource loading - **added** — Output the worker stop reason in queue:work - **fixed** — Fix incorrect $startTime type in Worker::stopIfNecessary docblock - **added** — Ability to opt out of vendor/default commands in DevCommands - **changed** — Confine Storage::path() to the configured disk root - **added** — Support Microsoft SQL Server DSN connection strings - **fixed** — Restore the facade application after route:cache boots a fresh application - **fixed** — Gracefully handle missing param value or strings with request clamps - **fixed** — Restore default database connection when seeding fails - **added** — Cloud enhancements - **added** — Allow retrieving command by name without resolving all commands - **added** — Expose methods - **added** — Add totalXSize methods to Cloud Queue - **added** — Add chunkBy to collections - **changed** — Use spl_object_id over hash - **added** — Add createPayloadUsing directly to the queue manager - **added** — Set visibility on files that only exist on a read-through disk's fallback - **changed** — Disable html by default on Laravel exception page tooltip * [12.x] Backport #60908: Avoid quadratic wildcard rule expansion by @matteo-palazzo in https://github.com/laravel/framework/pull/61232 * Fix resource loading by @taylorotwell in https://github.com/laravel/framework/pull/61323 * [13.x] Output the worker stop reason in queue:work by @jackbayliss in https://github.com/laravel/framework/pull/61339 * Fix incorrect $startTime type in Worker::stopIfNecessary docblock by @il-m-tomita in https://github.com/laravel/framework/pull/61347 * [13.x] Ability to opt out of vendor/default commands in DevCommands by @jackbayliss in https://github.com/laravel/framework/pull/61344 * [13.x] Confine `Storage::path()` to the configured disk root by @KIKOmanasijev in https://github.com/laravel/framework/pull/61343 * [13.x] Support Microsoft SQL Server DSN connection strings by @HenkPoley in https://github.com/laravel/framework/pull/61341 * [13.x] Restore the facade application after route:cache boots a fresh application by @reiarseni in https://github.com/laravel/framework/pull/61346 * [13.x] Gracefully handle missing param value or strings with request clamps by @kylemilloy in https://github.com/laravel/framework/pull/61355 * [13.x] Restore default database connection when seeding fails by @sayful1411 in https://github.com/laravel/framework/pull/61354 * [13.x] Cloud enhancements by @timacdonald in https://github.com/laravel/framework/pull/61360 * [13.x] Allow retrieving command by name without resolving all commands by @timacdonald in https://github.com/laravel/framework/pull/61361 * [13.x] Expose methods by @timacdonald in https://github.com/laravel/framework/pull/61362 * [13.x] Add basic test for query explain by @imanghafoori1 in https://github.com/laravel/framework/pull/61363 * [13.x] Add totalXSize methods to Cloud Queue by @jackbayliss in https://github.com/laravel/framework/pull/61352 * [13.x] Add `chunkBy` to collections by @JosephSilber in https://github.com/laravel/framework/pull/61357 * [13.x] spl_object_id over hash by @jackbayliss in https://github.com/laravel/framework/pull/61372 * [13.x] Add createPayloadUsing directly to the queue manager by @jackbayliss in https://github.com/laravel/framework/pull/61367 * [13.x] Set visibility on files that only exist on a read-through disk's fallback by @sulimanbenhalim in https://github.com/laravel/framework/pull/61375 * [12.x] Disable html by default on Laravel exception page tooltip by @crynobone in https://github.com/laravel/framework/pull/61381 ### v13.29.0 - Date: 2026-08-25 - Version: v13.29.0 - Original notes: https://github.com/laravel/framework/releases/tag/v13.29.0 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.29.0 ### v13.27.0 - Date: 2026-08-25 - Version: v13.27.0 - Original notes: https://github.com/laravel/framework/releases/tag/v13.27.0 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.27.0 - **added** — Add `refreshForUpdate()` method to Eloquent models - **added** — Add Queue `totalXSize` methods - **added** — Add `whereBinary()` to the query builder - **added** — Add `stop()` and `ensureNotTimedOut()` to `FakeInvokedProcess` - **added** — Introduce `InteractsWithTestCaseLifecycle::flushState()` - **added** — Introduce a Cloud facade - **added** — Add Postgres keepalive DSN options - **added** — Allow masking query bindings in exception messages - **changed** — Prevent duplicate scoped instance registrations - **changed** — Add MariaDB support for vector distance queries - **changed** — Make eager-load constraint closures static to break Builder reference cycle - **changed** — Share cached AWS credentials across processes for SQS queue connections - **fixed** — Throw on unsuccessful responses when creating images from URLs - **fixed** — Re-introduce orWhereKey() and orWhereKeyNot() without breaking Builder subclasses - **fixed** — Don't force release a unique lock the job never acquired - **fixed** — Fix `quietly()` making `throw()` unreachable on process results - **fixed** — Guard against `false` returns in `PhpRedisConnection::mget()` and `hmget()` - **fixed** — Move and copy files that only exist on a read-through disk's fallback - **fixed** — Fix route name lost when RouteRegistrar action is not callable - **fixed** — Start a new max wait window after a debounced job runs * [13.x] Prevent duplicate scoped instance registrations by @jordanhavard in https://github.com/laravel/framework/pull/61251 * [13.x] Add `refreshForUpdate()` method to Eloquent models by @stevebauman in https://github.com/laravel/framework/pull/61247 * [13.x] Fix PHPUnit and Mockery deprecations in tests by @lucasmichot in https://github.com/laravel/framework/pull/61244 * [13.x] Throw on unsuccessful responses when creating images from URLs by @Button99 in https://github.com/laravel/framework/pull/61254 * Apply fixes from StyleCI by @taylorotwell in https://github.com/laravel/framework/pull/61256 * [13.x] Skip scheduled workflows on forks by @MrPunyapal in https://github.com/laravel/framework/pull/61239 * [13.x] Consolidate tearDown boilerplate into AfterEachTestSubscriber by @lucasmichot in https://github.com/laravel/framework/pull/61245 * [13.x] Pin rector version by @lucasmichot in https://github.com/laravel/framework/pull/61257 * [13.x] Re-introduce orWhereKey() and orWhereKeyNot() without breaking Builder subclasses by @kevariable in https://github.com/laravel/framework/pull/61242 * [13.x] Don't force release a unique lock the job never acquired by @sulimanbenhalim in https://github.com/laravel/framework/pull/61234 * [13.x] Convert foreach-loop tests to data providers by @lucasmichot in https://github.com/laravel/framework/pull/61258 * [13.x] Simplify testImageBmp by @lucasmichot in https://github.com/laravel/framework/pull/61259 * [13.x] Add missing test coverage for Str and Stringable by @lucasmichot in https://github.com/laravel/framework/pull/61260 * [13.x] Add Queue `totalXSize` methods by @jackbayliss in https://github.com/laravel/framework/pull/61231 * Add MariaDB support for vector distance queries by @Rhaima96 in https://github.com/laravel/framework/pull/61250 * [13.x] Add `whereBinary()` to the query builder by @xiCO2k in https://github.com/laravel/framework/pull/61261 * [13.x] Fix `quietly()` making `throw()` unreachable on process results by @xurshudyan in https://github.com/laravel/framework/pull/61227 * Revert "[13.x] Consolidate tearDown boilerplate into AfterEachTestSubscriber (#61245)" by @crynobone in https://github.com/laravel/framework/pull/61262 * Use `nick-fields/retry` to verify clustered redis ports are available by @crynobone in https://github.com/laravel/framework/pull/61263 * [13.x] Guard against `false` returns in `PhpRedisConnection::mget()` and `hmget()` by @matthewfarrugia in https://github.com/laravel/framework/pull/61267 * [13.x] Add `stop()` and `ensureNotTimedOut()` to `FakeInvokedProcess` by @xurshudyan in https://github.com/laravel/framework/pull/61266 * [13.x] Make eager-load constraint closures static to break Builder reference cycle by @mspasov in https://github.com/laravel/framework/pull/61264 * [13.x] Move and copy files that only exist on a read-through disk's fallback by @sulimanbenhalim in https://github.com/laravel/framework/pull/61272 * [13.x] Adjust QueueTest by @jackbayliss in https://github.com/laravel/framework/pull/61284 * [13.x] Introduce `InteractsWithTestCaseLifecycle::flushState()` by @cosmastech in https://github.com/laravel/framework/pull/61288 * [13.x] Fix route name lost when RouteRegistrar action is not callable by @KalimeroMK in https://github.com/laravel/framework/pull/61285 * [13.x] Start a new max wait window after a debounced job runs by @sulimanbenhalim in https://github.com/laravel/framework/pull/61281 * [13.x] Fix nested includes not being limited when maxRelationshipDepth is zero by @martinsoenen in https://github.com/laravel/framework/pull/61297 * [13.x] Give each Redis Cluster node its own data directory in CI by @cyppe in https://github.com/laravel/framework/pull/61294 * [13.x] Ensure test namespaces are correct by @jackbayliss in https://github.com/laravel/framework/pull/61304 * [13.x] Fix flaky memcached touch test by pinning time by @mspasov in https://github.com/laravel/framework/pull/61301 * [13.x] Adjust database.yml timeout to 10 minutes by @ _[Truncated at 4000 characters — full notes: https://github.com/laravel/framework/releases/tag/v13.27.0]_ ### v13.26.1 - Date: 2026-08-18 - Version: v13.26.1 - Original notes: https://github.com/laravel/framework/releases/tag/v13.26.1 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.26.1 - **removed** — Remove orWhereKey and orWhereKeyNot methods from Eloquent Builder * Revert "[13.x] feat: add orWhereKey and orWhereKeyNot to Eloquent Builder" by @taylorotwell in https://github.com/laravel/framework/pull/61236 ### v13.26.0 - Date: 2026-08-18 - Version: v13.26.0 - Original notes: https://github.com/laravel/framework/releases/tag/v13.26.0 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.26.0 - **added** — Add JobReleased event to Worker - **added** — Add managedQueues() to the Cloud queue - **added** — Add closure support to wherePivot and orWherePivot - **added** — Add orWhereKey and orWhereKeyNot to Eloquent Builder - **added** — Add debounceable queued listeners - **added** — Add dedicated exception for idle process timeouts - **added** — Add process fake assertion helpers - **added** — Introduce Queue::forward() - **added** — Add getRelatedClass to Relation - **changed** — Accept enums in inOrderOf() - **changed** — Surface paused queues in the queue worker output - **changed** — Pass a connector to PhpRedisClusterConnection so it can rebuild its client - **changed** — Allow read through filesystems to optionally not copy - **changed** — Allow some Redis commands to retry on transient failures - **changed** — Remove the pinned @laravel/multiplex version - **changed** — Make process pools iterable - **changed** — Support Guzzle 8 - **changed** — Support array commands in process fake assertions - **changed** — Promote nested data to top-level managed queue event - **changed** — Preserve input key order when merging files in Request::all() - **fixed** — Respect readonly=false in Microsoft SQL Server configuration - **fixed** — Avoid cross-slot reads when checking paused queues - **fixed** — Only register pail dev command when installed - **fixed** — Fix constantly asking to install multiplex and starting vite on project without vite - **fixed** — Fix Redis pipeline facade annotation - **fixed** — Stricten upload to be fetch only from request's query string for temporary upload urls - **fixed** — Improves in validation rule from getting bypass via loose comparison - **fixed** — Retry timed-out cloud agent long-polls - **fixed** — Scan every master node in phpredis cluster connections - **fixed** — Fix uncaptured setTestNow now() reuse in tests - **fixed** — Report seeder progress in db:seed command when a specific class is specified - **fixed** — Fix infinite scan loop when pruning stale cache tags on a Redis cluster - **fixed** — Keep the Redis connection usable when a pipeline or transaction fails - **fixed** — Escape single quotes in Postgres JSON path attributes - **fixed** — Prevent TypeError when JSON:API query parameters are arrays - **fixed** — Fix expectsQuestion() docblock to allow array answers - **fixed** — Rebuild the phpredis client after a cluster response error - **fixed** — Fix throwUnless() silently doing nothing when given a closure - **fixed** — Keep the assertion failure message when session errors are JSON serialized * [13.x] Add JobReleased event to Worker by @jackbayliss in https://github.com/laravel/framework/pull/61108 * [13.x] Fix QueueWorkerTest by @jackbayliss in https://github.com/laravel/framework/pull/61134 * [13.x] Avoid cross-slot reads when checking paused queues by @lazerg in https://github.com/laravel/framework/pull/61139 * [13.x] Add managedQueues() to the Cloud queue by @jackbayliss in https://github.com/laravel/framework/pull/61149 * [13.x] Accept enums in `inOrderOf()` by @ziadoz in https://github.com/laravel/framework/pull/61147 * [13.x] Surface paused queues in the queue worker output by @jackbayliss in https://github.com/laravel/framework/pull/61142 * [13.x] Respect readonly=false in Microsoft SQL Server configuration by @HenkPoley in https://github.com/laravel/framework/pull/61141 * [12.x] Stricten `upload` to be fetch only from request's query string for temporary upload urls by @crynobone in https://github.com/laravel/framework/pull/61145 * Read-through filesystem by @taylorotwell in https://github.com/laravel/framework/pull/61140 * [13.x] Pass a connector to PhpRedisClusterConnection so it can rebuild its client by @tgivslife in https://github.com/laravel/framework/pull/61161 * [13.x] Only register pail dev command when installed by @jackbayliss in https://github.com/laravel/framework/pull/61157 * [13.x] feat: add closure support to wherePivot and orWherePivot by @calebdw in https://github.com/laravel/framework/pull/61150 * [13.x] feat: add orWhereKey and orWhereKeyNot to Eloquent Builder by @calebdw in https://github.com/laravel/framework/pull/61154 * [13.x] allow read through filesystems to optionally not copy by @jimbojsb in https://github.com/laravel/framework/pull/61155 * [13.x] Fix constantly asking to install `multiplex` & starting `vite` on project without vite by @nunomaduro in https://github.com/laravel/framework/pull/61167 * [13.x] Add debounceable queued listeners by @stevebauman in https://github.com/laravel/framework/pull/61169 * [13.x] Add test to ensure pail is ignored if not installed by @jackbayliss in https://github.com/laravel/framework/pull/61168 * Allow some Redis commands to retry on transient failures by @taylorotwell in https://github.com/laravel/framework/pull/61175 * Fix Redis pipeline facade annotation by @MNazikk in https://github.com/laravel/framework/pull/61173 * [13.x] Remove the pinned `@laravel/multiplex` version by @joetannenbaum in https://github.com/laravel/framework/pull/61171 * [13.x] Fix FoundationDevCommandsTest by @jackbayliss in https://github.com/laravel/framework/pull/61170 * [12.x] Improves `in` validation rule from getting bypass via loose comparison by @crynobone in https://github.com/laravel/framework/pull/61146 * [13.x] Retry timed-out cloud agent long-polls by @kieranbrown in https://github.com/laravel/framework/pull/61177 * [12.x] Retry timed-out cloud agent long-polls by @kieranbrown in https://github.com/laravel/framework/pull/61178 * [13.x] Scan every master node in phpredis cluster connections by @tgivslife in https://github.com/laravel/framework/pull/61174 * [13.x] Fix uncaptured setTestNow now() reuse in tests by @lucasmichot in https://github.com/laravel/framework/pull/61190 * [13.x] Make process pools iterable by @xurshudyan in https://github.com/laravel/framework/pull/61184 * [13.x] Report seeder progress in db:seed command - when a specific class is specified by @iz-ahmad in https://github.com/laravel/framework/pull/61186 * [13.x] Fix infinite scan loop when pruning stale cache tags on a Redis cluster by @tgivslife in https://github.com/laravel/framework/pull/61181 * [13.x] Add a dedicated exception for idle process timeouts by @xurshudyan in https://github.com/laravel/framework/pull/61182 * [13.x] Keep the Redis connection usable when a pipeline or transaction fails by @tgivslife in https://github.com/laravel/framework/pull/61183 * [12.x] Escape single quotes in Postgres JSON path attributes by @crynobone in https://github.com/laravel/framework/pull/61 _[Truncated at 4000 characters — full notes: https://github.com/laravel/framework/releases/tag/v13.26.0]_ ### v13.25.0 - Date: 2026-08-11 - Version: v13.25.0 - Original notes: https://github.com/laravel/framework/releases/tag/v13.25.0 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.25.0 - **fixed** — Prevent fatal errors when logging deprecations fails - **fixed** — Fix Factory::insert() with a count of zero - **fixed** — Fix schedule:list timezone conversion for range, step, and wildcard cron expressions - **fixed** — Fix getMigrationBatches return type annotation - **added** — Add foreignUlidFor schema helper - **changed** — Improve return type for Arr::prependKeysWith() - **added** — Add uuid to queue fake for inspection methods - **changed** — Respect after-commit dispatch when bulk pushing to DatabaseQueue - **added** — Add a UniqueJobSkipped event - **fixed** — Ensure Container::call cleans up build stack after exceptions - **fixed** — Reject non-stream resources in HTTP fake response bodies - **fixed** — Fix incorrect image dimensions for HEIC - **fixed** — Fix Str::numbers() type annotation - **fixed** — Normalize enum keys in typed cache getters - **fixed** — Isolate cloud agent requests from global HTTP client configuration - **changed** — Configure a socket timeout for the Cloud log driver - **fixed** — Fix missing check for #[WithoutTimestamps] on model ignore touch - **changed** — Respect backed enum queue names when queueing mailables - **fixed** — Restore missing model deletion for broadcast events - **added** — Add the timeout in JobTimedOut - **fixed** — Skip unsupported values in LazyCollection::flip() * [12.x] Prevent fatal errors when logging deprecations fails by @GrahamCampbell in https://github.com/laravel/framework/pull/60907 * [12.x] Fix Factory::insert() with a count of zero by @alies-dev in https://github.com/laravel/framework/pull/60911 * [12.x] Fix schedule:list timezone conversion for range, step, and wildcard cron expressions by @xiCO2k in https://github.com/laravel/framework/pull/60913 * [12.x] Fix getMigrationBatches return type annotation by @wouterj in https://github.com/laravel/framework/pull/60973 * [13.x] Add foreignUlidFor schema helper by @talaridisTh in https://github.com/laravel/framework/pull/61036 * [13.x] Improve return type for `Arr::prependKeysWith()` by @axlon in https://github.com/laravel/framework/pull/61034 * [13.x] Add uuid to queue fake for inspection methods by @jackbayliss in https://github.com/laravel/framework/pull/60966 * [13.x] Respect after-commit dispatch when bulk pushing to DatabaseQueue by @Faiyajz in https://github.com/laravel/framework/pull/60996 * [13.x] Add a UniqueJobSkipped event by @jackbayliss in https://github.com/laravel/framework/pull/61039 * [13.x] Ensure Container::call cleans up build stack after exceptions by @Faiyajz in https://github.com/laravel/framework/pull/61041 * [13.x] Reject non-stream resources in HTTP fake response bodies by @GrahamCampbell in https://github.com/laravel/framework/pull/61047 * [13.x] Fix incorrect image dimensions for HEIC by @zachiler in https://github.com/laravel/framework/pull/61010 * [13.x] Simplify most of the exceptions expectations by @lucasmichot in https://github.com/laravel/framework/pull/61049 * [13.x] Fix Str::numbers() type annotation by @lucasmichot in https://github.com/laravel/framework/pull/61053 * [13.x] Fix flaky Str::random distribution test by @lucasmichot in https://github.com/laravel/framework/pull/61052 * [13.x] Normalize enum keys in typed cache getters by @Amirhf1 in https://github.com/laravel/framework/pull/61056 * Simplify remaining exception expectations by @lucasmichot in https://github.com/laravel/framework/pull/61058 * Apply fixes from StyleCI by @taylorotwell in https://github.com/laravel/framework/pull/61059 * [13.x] Isolate cloud agent requests from global HTTP client configuration by @kieranbrown in https://github.com/laravel/framework/pull/61064 * [13.x] Fix flaky circuit breaker release delay assertions by @GrahamCampbell in https://github.com/laravel/framework/pull/61062 * [13.x] Bump minimum versions by @lucasmichot in https://github.com/laravel/framework/pull/61033 * [13.x] Configure a socket timeout for the Cloud log driver by @jessarcher in https://github.com/laravel/framework/pull/61065 * [13.x] Fix: add missing check for `#[WithoutTimestamps]` on model ignore touch by @bram-pkg in https://github.com/laravel/framework/pull/61073 * [12.x] Isolate cloud agent requests from global HTTP client configuration by @kieranbrown in https://github.com/laravel/framework/pull/61068 * [13.x] Fix getRememberToken return type documentation by @keibass in https://github.com/laravel/framework/pull/61067 * [13.x] Respect backed enum queue names when queueing mailables by @Faiyajz in https://github.com/laravel/framework/pull/61066 * [13.x] Restore missing model deletion for broadcast events by @Faiyajz in https://github.com/laravel/framework/pull/61074 * [13.x] Use new Collection instead of Collection::make in tests by @lucasmichot in https://github.com/laravel/framework/pull/61079 * [13.x] Add the timeout in JobTimedOut by @jackbayliss in https://github.com/laravel/framework/pull/61060 * [12.x] Configure a socket timeout for the Cloud log driver by @jessarcher in https://github.com/laravel/framework/pull/61082 * [13.x] Move Testbench-based tests to tests/Integration by @lucasmichot in https://github.com/laravel/framework/pull/61080 * Use serve defaults for dev command by @n3crosis in https://github.com/laravel/framework/pull/61090 * [13.x] Skip unsupported values in LazyCollection::flip() by @Amirhf1 in https://g _[Truncated at 4000 characters — full notes: https://github.com/laravel/framework/releases/tag/v13.25.0]_ ### v13.24.0 - Date: 2026-08-04 - Version: v13.24.0 - Original notes: https://github.com/laravel/framework/releases/tag/v13.24.0 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.24.0 - **added** — Add modelKeys() to Eloquent query builder - **added** — Add an array_keys validation rule - **added** — Add dominant color detection to image driver - **added** — Add HEIC and additional AVIF support - **added** — Add NumberPrompt fallback - **changed** — Respect job delays when bulk pushing to QueueFake - **changed** — Use immutable timestamps in batch testing fakes - **changed** — Avoid rebuilding every cached Route on CompiledRouteCollection lookups - **changed** — Re-evaluate unmatched BindWhen attributes - **changed** — Memoize TestResponse::decodeResponseJson() - **changed** — Escape single quotes in Postgres JSON path attributes - **changed** — Preserve relation constraints when resolving attributes during noConstraints - **changed** — Respect job delays when bulk pushing to FailoverQueue - **changed** — Fix validation stalling for minutes on large arrays - **fixed** — Fix DumpCommand return type - **fixed** — Fix PendingProcess losing falsy command strings on run()/start() - **fixed** — Detect circular alias references in Container - **fixed** — Fix pagination edge cases - **fixed** — Prevent TypeError in Validator::validateDistinct() - **fixed** — Fix appended accessors receiving null in toArray() * [13.x] Add `modelKeys()` to Eloquent query builder by @ziadoz in https://github.com/laravel/framework/pull/60924 * [13.x] Add an array_keys validation rule by @nebarg in https://github.com/laravel/framework/pull/60918 * [13.x] Respect job delays when bulk pushing to QueueFake by @Faiyajz in https://github.com/laravel/framework/pull/60916 * [13.x] Use immutable timestamps in batch testing fakes by @alies-dev in https://github.com/laravel/framework/pull/60912 * [13.x] Avoid rebuilding every cached Route on CompiledRouteCollection lookups by @lucasmichot in https://github.com/laravel/framework/pull/60909 * [13.x] Fix `DumpCommand` return type. by @KentarouTakeda in https://github.com/laravel/framework/pull/60934 * [13.x] Re-evaluate unmatched BindWhen attributes by @Faiyajz in https://github.com/laravel/framework/pull/60933 * [13.x] Add if-related rector rules by @lucasmichot in https://github.com/laravel/framework/pull/60930 * [13.x] Use self::SUCCESS/self::FAILURE in console commands by @lucasmichot in https://github.com/laravel/framework/pull/60928 * [13.x] Fake the pwnedpasswords API in ValidationPasswordRuleTest by @lucasmichot in https://github.com/laravel/framework/pull/60927 * fix typo by @theHocineSaad in https://github.com/laravel/framework/pull/60942 * [13.x] Memoize TestResponse::decodeResponseJson() by @lucasmichot in https://github.com/laravel/framework/pull/60929 * [13.x] Consolidate Artisan command $name/getArguments()/getOptions() into $signature by @lucasmichot in https://github.com/laravel/framework/pull/60926 * [13.x] Escape single quotes in Postgres JSON path attributes by @kpanuragh in https://github.com/laravel/framework/pull/60923 * [13.x] Preserve relation constraints when resolving attributes during noConstraints by @hamdyelbatal122 in https://github.com/laravel/framework/pull/60931 * [13.x] Replace throw_if/throw_unless with explicit if/throw in src/ by @lucasmichot in https://github.com/laravel/framework/pull/60944 * [13.x] Adds dominant color detection to image driver by @dr-codswallop in https://github.com/laravel/framework/pull/60932 * Fix PendingProcess losing falsy command strings on run()/start() by @lucasmichot in https://github.com/laravel/framework/pull/60947 * [13.x] Use Collection only()/diff() instead of filter()/reject() with in_array() by @lucasmichot in https://github.com/laravel/framework/pull/60945 * [13.x] Use enum_value() helper in a few more places by @lucasmichot in https://github.com/laravel/framework/pull/60983 * [13.x] Remove redundant m::close() by @lucasmichot in https://github.com/laravel/framework/pull/60981 * [13.x] Add missing conditionable, reflection, macroable requires by @lucasmichot in https://github.com/laravel/framework/pull/60980 * [13.x] Use Stringable::explode() instead of new Collection(explode()) by @lucasmichot in https://github.com/laravel/framework/pull/60979 * [13.x] Prefer isEmpty()/isNotEmpty()/contains() over count() checks by @lucasmichot in https://github.com/laravel/framework/pull/60978 * [13.x] Avoid redundant Collection passes in map/filter/reject chains by @lucasmichot in https://github.com/laravel/framework/pull/60977 * [13.x] Detect circular alias references in Container by @lucasmichot in https://github.com/laravel/framework/pull/60974 * [13.x] Fix pagination edge cases by @lucasmichot in https://github.com/laravel/framework/pull/60968 * [13.x] Solve another PHP 8.5 null index deprecation by @tontonsb in https://github.com/laravel/framework/pull/60964 * [13.x] Prevent TypeError in Validator::validateDistinct() by @theHocineSaad in https://github.com/laravel/framework/pull/60961 * [13.x] Fix Actions remove `imagedestroy` from tests by @jackbayliss in https://github.com/laravel/framework/pull/60957 * [13.x] Add NumberPrompt fallback by @romain-mezghenna in https://github.com/laravel/framework/pull/60959 * [13.x] Fix PHP 8.5 null array offset deprecation in `Relation::getMorphedModel()` by @mertasan in https://github.com/laravel/framework/pull/60 _[Truncated at 4000 characters — full notes: https://github.com/laravel/framework/releases/tag/v13.24.0]_ ### v13.23.0 - Date: 2026-07-27 - Version: v13.23.0 - Original notes: https://github.com/laravel/framework/releases/tag/v13.23.0 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.23.0 - **added** — Add a monthly log driver - **added** — Add SES tenant support to the SES v2 transport - **added** — Add monthly channel to logging config - **changed** — Improve types in Image class - **changed** — Allow ImageManager fromStorage disk to accept enums - **changed** — Improve Collection::select generic types - **changed** — Allow ->using(...) in ->change() migrations for PostgreSQL compatibility - **changed** — Use a timing-safe comparison for the maintenance mode bypass secret - **fixed** — Fix null handling in Arr::last() method - **fixed** — Prevent fatal errors when logging deprecations fails - **fixed** — Fix default handling in CookieJar::queued() - **fixed** — Fix schedule:list timezone conversion for range, step, and wildcard cron expressions * Bump postcss from 8.5.15 to 8.5.23 in /src/Illuminate/Foundation/resources/exceptions/renderer by @dependabot[bot] in https://github.com/laravel/framework/pull/60884 * [13.x] Add a monthly log driver by @SjorsO in https://github.com/laravel/framework/pull/60892 * [13.x] Improve types in `Image` class by @shaedrich in https://github.com/laravel/framework/pull/60890 * Fix null handling in Arr::last() method by @AmadulHaque in https://github.com/laravel/framework/pull/60887 * [13.x] Allow ImageManager fromStorage disk to accept enums by @riesjart in https://github.com/laravel/framework/pull/60889 * [13.x] Add SES tenant support to the SES v2 transport by @atymic in https://github.com/laravel/framework/pull/60886 * Bump actions/checkout from 7.0.0 to 7.0.1 in the github-actions group by @dependabot[bot] in https://github.com/laravel/framework/pull/60900 * [13.x] Prevent fatal errors when logging deprecations fails by @GrahamCampbell in https://github.com/laravel/framework/pull/60893 * [13.x] Bump `monolog/monolog` constraint by @jackbayliss in https://github.com/laravel/framework/pull/60894 * [13.x] Add monthly channel to logging config by @yazansalhi in https://github.com/laravel/framework/pull/60895 * [13.x] Use a timing-safe comparison for the maintenance mode bypass secret by @yazansalhi in https://github.com/laravel/framework/pull/60896 * [13.x] Improve `Collection::select` generic types by @timacdonald in https://github.com/laravel/framework/pull/60898 * [13.x] Allow ->using(...) in ->change() migrations for PostgreSQL compatibility by @shemgp in https://github.com/laravel/framework/pull/60901 * Revert "[13.x] Fix that retries of `ShouldBeUniqueUntilProcessing` jobs are force-releasing locks they don't own" by @taylorotwell in https://github.com/laravel/framework/pull/60905 * [13.x] Fix default handling in `CookieJar::queued()` by @alies-dev in https://github.com/laravel/framework/pull/60904 * [13.x] Fix schedule:list timezone conversion for range, step, and wildcard cron expressions by @xiCO2k in https://github.com/laravel/framework/pull/60877 ### v13.22.0 - Date: 2026-07-24 - Version: v13.22.0 - Original notes: https://github.com/laravel/framework/releases/tag/v13.22.0 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.22.0 - **fixed** — Fix PHP extensions in sqlite workflow job - **changed** — Use new Stringable() instead of Str::of()/str() internally - **added** — Add exception to JobReleasedAfterException - **added** — Implement creationTimeOfOldestPendingJob on the QueueFake - **fixed** — Check traits in resolveClassAttribute - **changed** — Optimize Str::ucfirst and Str::lcfirst using native PHP 8.4 functions - **fixed** — Fix queue name parameter in Mailer::later() - **added** — Support stream bodies in HTTP fake responses - **added** — Allow RateLimiter to be Macroable - **added** — Add a #[BindWhen()] attribute to conditionally bind into the container - **fixed** — Restore iterable support to Arr::every() and Arr::some() - **added** — Add multi-queue support to queue:clear command - **fixed** — Fix Cache::touch() expiration handling - **changed** — Mark HTTP testing credentials as sensitive - **added** — Allow faking DNS lookups in validation rules - **fixed** — Fix iterable support in Arr::last() - **added** — Support Delay attribute when using Bus::batch & bulk * [13.x] Fix PHP extensions in sqlite workflow job by @lucasmichot in https://github.com/laravel/framework/pull/60850 * [13.x] Use new Stringable(...) instead of Str::of()/str() internally by @lucasmichot in https://github.com/laravel/framework/pull/60852 * [13.x] Extract PHP setup steps into a shared composite action by @lucasmichot in https://github.com/laravel/framework/pull/60851 * [13.x] add the exception to JobReleasedAfterException by @jackbayliss in https://github.com/laravel/framework/pull/60823 * [13.x] Implement `creationTimeOfOldestPendingJob` on the QueueFake by @jackbayliss in https://github.com/laravel/framework/pull/60730 * [13.x] Check traits in resolveClassAttribute by @jackbayliss in https://github.com/laravel/framework/pull/60566 * [13.x] Enable additional Rector rules by @lucasmichot in https://github.com/laravel/framework/pull/60854 * [13.x] Optimize Str::ucfirst and Str::lcfirst using native PHP 8.4 functions by @bunyaminbilenkaratas in https://github.com/laravel/framework/pull/60864 * [13.x] Fix queue name parameter in Mailer::later() by @Button99 in https://github.com/laravel/framework/pull/60865 * [13.x] Support stream bodies in HTTP fake responses by @drewmt in https://github.com/laravel/framework/pull/60834 * [13.x] Allow RateLimiter to be Macroable by @jackbayliss in https://github.com/laravel/framework/pull/60869 * [13.x] Add a `#[BindWhen()]` attribute to conditionally bind into the container by @ziadoz in https://github.com/laravel/framework/pull/60862 * [13.x] Add timeout minutes to workflows by @jackbayliss in https://github.com/laravel/framework/pull/60872 * [13.x] Restore iterable support to Arr::every() and Arr::some() by @Amirhf1 in https://github.com/laravel/framework/pull/60876 * [13.x] ColumnDefinition::unsigned takes a parameter, which should be documented by @afk11 in https://github.com/laravel/framework/pull/60875 * [13.x] Add multi-queue support to queue:clear command by @miladshakerdn in https://github.com/laravel/framework/pull/60873 * [13.x] Fix Cache::touch() expiration handling by @Amirhf1 in https://github.com/laravel/framework/pull/60878 * [13.x] Mark HTTP testing credentials as sensitive by @Amirhf1 in https://github.com/laravel/framework/pull/60880 * [13.x] Allow faking DNS lookups in validation rules by @SjorsO in https://github.com/laravel/framework/pull/60879 * [13.x] Fix iterable support in Arr::last() by @Amirhf1 in https://github.com/laravel/framework/pull/60881 * [13.x] Support `Delay` attribute when using `Bus::batch` & bulk by @jackbayliss in https://github.com/laravel/framework/pull/60766 ### v13.21.1 - Date: 2026-07-21 - Version: v13.21.1 - Original notes: https://github.com/laravel/framework/releases/tag/v13.21.1 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.21.1 ### v13.20.0 - Date: 2026-07-14 - Version: v13.20.0 - Original notes: https://github.com/laravel/framework/releases/tag/v13.20.0 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.20.0 - **added** — Add missing $separator parameter to Storage facade append/prepend docblocks - **added** — Add beforePushing and afterPushing methods on QueueFake class - **added** — Add memory usage to WorkerStopping - **added** — Add assertEmpty to the Storage facade - **added** — Add first-party support for image processing - **added** — Add WithoutMiddleware controller middleware attribute - **added** — Add incrementEachQuietly and decrementEachQuietly to Eloquent models - **added** — Add ability to set session prefix for Redis - **added** — Add #[SensitiveParameter] to parameters carrying secrets - **changed** — Make MailFake::assertQueuedTimes() public - **changed** — Sync more getter return types with their property generics - **changed** — Normalize HTTP client request header lookups - **changed** — Support null for shortcut field in return type array for HasParameters::getOptions - **changed** — Add capitalize parameter to Stringable::initials() - **fixed** — Fix operator precedence in SqsQueue size fallbacks - **fixed** — Fix guessResourceName() namespace collision when class name is a substring of a parent namespace segment - **fixed** — Fix Str::containsAll() returning true for an empty needles array - **fixed** — Fix stale transformations being reapplied when branching an Image after toBytes() - **fixed** — Fix Number::forHumans() and abbreviate() returning "-0" for tiny negative values - **fixed** — Fix providesTemporaryUploadUrls should return true for s3 driver * [13.x] Add missing $separator parameter to Storage facade append/prepend docblocks by @ferhatolmez in https://github.com/laravel/framework/pull/60693 * [13.x] `beforePushing` and `afterPushing` methods on `QueueFake` class by @gdebrauwer in https://github.com/laravel/framework/pull/60689 * [13.x] Add memory usage to WorkerStopping by @jackbayliss in https://github.com/laravel/framework/pull/60613 * [13.x] Add `assertEmpty` to the Storage facade by @jackbayliss in https://github.com/laravel/framework/pull/60658 * [13.x] Adds first-party support for `image` processing by @nunomaduro in https://github.com/laravel/framework/pull/59276 * [13.x] Fix operator precedence in SqsQueue size fallbacks by @daffa-aditya-p in https://github.com/laravel/framework/pull/60702 * Add separator params to Storage facade docblocks by @Muhtasim-Munif-Fahim in https://github.com/laravel/framework/pull/60703 * [13.x] Add test for the scheduler's quarterlyOn method by @dfinchenko in https://github.com/laravel/framework/pull/60712 * Make MailFake::assertQueuedTimes() public by @Tresor-Kasenda in https://github.com/laravel/framework/pull/60710 * [13.x] Sync more getter return types with their property generics by @dfinchenko in https://github.com/laravel/framework/pull/60699 * [13.x] Fix guessResourceName() namespace collision when class name is a substring of a parent namespace segment by @Rubrasum in https://github.com/laravel/framework/pull/60707 * [13.x] Add WithoutMiddleware controller middleware attribute by @JurianArie in https://github.com/laravel/framework/pull/60709 * [13.x] Add incrementEachQuietly and decrementEachQuietly to Eloquent models by @shanerbaner82 in https://github.com/laravel/framework/pull/60720 * [13.x] Normalize HTTP client request header lookups by @Button99 in https://github.com/laravel/framework/pull/60734 * [12.x] Enum as queue overlap key by @finagin in https://github.com/laravel/framework/pull/60722 * [13.x] Support null for shortcut field in return type array for HasParameters::getOptions (#60723) by @wimski in https://github.com/laravel/framework/pull/60728 * [13.x] Ability to set session prefix for Redis by @jackbayliss in https://github.com/laravel/framework/pull/60700 * [13.x] Add `#[SensitiveParameter]` to parameters carrying secrets by @axlon in https://github.com/laravel/framework/pull/60753 * [13.x] Optimize by using contains or doesntContain by @lucasmichot in https://github.com/laravel/framework/pull/60745 * [13.x] Remove redundant Mockery::close() calls by @lucasmichot in https://github.com/laravel/framework/pull/60743 * [13.x] Only register pail in DevCommands when `pcntl_fork` is available by @jackbayliss in https://github.com/laravel/framework/pull/60749 * [13.x] Use PHPUnit rector sets instead of individual rules by @lucasmichot in https://github.com/laravel/framework/pull/60744 * [13.x] Replace manual all/any foreach loops with array_all/array_any by @lucasmichot in https://github.com/laravel/framework/pull/60742 * [13.x] Add test for the Uri toStringable method by @dfinchenko in https://github.com/laravel/framework/pull/60739 * [13.x] Fix Str::containsAll() returning true for an empty needles array by @lucasmichot in https://github.com/laravel/framework/pull/60746 * [13.x] Fix stale transformations being reapplied when branching an Image after toBytes() by @lucasmichot in https://github.com/laravel/framework/pull/60748 * [13.x] Fix Number::forHumans() and abbreviate() returning "-0" for tiny negative values by @semx in https://github.com/laravel/framework/pull/60736 * [13.x] Add test for the Email rule's strict method by @dfinchenko in https://github.com/laravel/framework/pull/60740 * [13.x] fix: providesTemporaryUploadUrls should return true for s3 driver by @joostdebruijn in https://github.com/laravel/framework/pull/60755 * [12.x] Add capitalize parameter to Stringable::initials() by @irabbi360 in https://github.com/laravel/framework/pull/60741 * [13.x] Fix dynamic calls to incrementEachQuietly and d _[Truncated at 4000 characters — full notes: https://github.com/laravel/framework/releases/tag/v13.20.0]_ ### v13.19.0 - Date: 2026-07-07 - Version: v13.19.0 - Original notes: https://github.com/laravel/framework/releases/tag/v13.19.0 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.19.0 - **added** — Support inspecting reserved jobs on the queue fake - **added** — Add `reduceInto` method to collection - **added** — Add `counted` method to `Str` and `Stringable` - **added** — Add `query` and `queryJson` HTTP testing helpers - **added** — Add `Http::query()` method to the HTTP client - **changed** — Ensure `deletedAtColumn` is passed to `assertSoftDeleted` and `assertNotSoftDeleted` - **changed** — Pop managed queue jobs from the cloud-agent instead of SQS - **changed** — Terminate default style value with a semicolon in ComponentAttributeBag::merge() - **changed** — Allow mail config options without name - **changed** — Send bulk SQS jobs via SendMessageBatch - **removed** — Remove deprecated `StaticCallOnNonStaticToInstanceCallRector` fixer rule * [13.x] Support inspecting reserved jobs on the queue fake by @jackbayliss in https://github.com/laravel/framework/pull/60644 * [13.x] Add `reduceInto` method to collection by @JosephSilber in https://github.com/laravel/framework/pull/60651 * [13.x] Add `counted` method to `Str` and `Stringable` by @JosephSilber in https://github.com/laravel/framework/pull/60649 * [13.x] Ensure `deletedAtColumn` is passed to `assertSoftDeleted` & `assertNotSoftDeleted` by @jackbayliss in https://github.com/laravel/framework/pull/60657 * [13.x] Pop managed queue jobs from the cloud-agent instead of SQS by @kieranbrown in https://github.com/laravel/framework/pull/60659 * [12.x] Pop managed queue jobs from the cloud-agent instead of SQS by @kieranbrown in https://github.com/laravel/framework/pull/60660 * [12.x] Terminate default style value with a semicolon in ComponentAttributeBag::merge() by @Amirhf1 in https://github.com/laravel/framework/pull/60665 * Bump stefanzweifel/git-auto-commit-action from 7.1.0 to 7.2.0 in the github-actions group by @dependabot[bot] in https://github.com/laravel/framework/pull/60672 * [13.x] Update comment in `Cloud/Queue.php` by @jackbayliss in https://github.com/laravel/framework/pull/60673 * [13.x] Add tests for relative date where clauses by @aligulzar729 in https://github.com/laravel/framework/pull/60675 * [13.x] Add `phpdoc_trim_consecutive_blank_line_separation rule` to pint by @lucasmichot in https://github.com/laravel/framework/pull/60669 * [13.x] Remove deprecated `StaticCallOnNonStaticToInstanceCallRector` fixer rule by @lucasmichot in https://github.com/laravel/framework/pull/60670 * [13.x] Allow mail config options without name by @jackbayliss in https://github.com/laravel/framework/pull/60668 * [13.x] Adjust Queue comment after Dependabot by @jackbayliss in https://github.com/laravel/framework/pull/60679 * [13.x] Send bulk SQS jobs via SendMessageBatch by @kieranbrown in https://github.com/laravel/framework/pull/60645 * [13.x] Add `query` and `queryJson` HTTP testing helpers by @shanerbaner82 in https://github.com/laravel/framework/pull/60662 * [13.x] Add `Http::query()` method to the HTTP client by @shanerbaner82 in https://github.com/laravel/framework/pull/60663 * Merge branch '12.x' into 13.x by @crynobone in https://github.com/laravel/framework/pull/60684 * [13.x] Add tests for the date rule's past/future/nowOrPast/nowOrFuture methods by @aligulzar729 in https://github.com/laravel/framework/pull/60687 ### v13.18.1 - Date: 2026-07-02 - Version: v13.18.1 - Original notes: https://github.com/laravel/framework/releases/tag/v13.18.1 - Permalink: https://whatsnew.fyi/product/laravel/releases/v13.18.1 - **changed** — Allow assertDatabaseEmpty to handle iterable - **added** — Add input() method to console commands - **changed** — Handle api / json routes with Down (Maintenance) command - **fixed** — Respect channel name for on-demand log stacks - **added** — Support inspecting delayed jobs on the queue fake - **added** — Add Release queue middleware - **changed** — Update docblocks of Blueprint foreignUuid and foreignUlid to match foreignId - **fixed** — Respect the encoding in Str::mask() when building the end of the string - **fixed** — Support scalar Predis retry config to allow config:cache * [13.x] Allow assertDatabaseEmpty to handle iterable by @jackbayliss in https://github.com/laravel/framework/pull/60621 * [13.x] Add `input()` method to console commands by @stevebauman in https://github.com/laravel/framework/pull/60607 * [13.x] Handle api / json routes with Down (Maintenance) command by @davidrushton in https://github.com/laravel/framework/pull/60595 * [13.x] fix: respect channel name for on-demand log stacks by @maltf0 in https://github.com/laravel/framework/pull/60635 * [13.x] Support inspecting delayed jobs on the queue fake by @jackbayliss in https://github.com/laravel/framework/pull/60636 * Add `Release` queue middleware by @mgcodeur in https://github.com/laravel/framework/pull/60630 * [13.x] Update docblocks of Blueprint foreignUuid and foreignUlid to match foreignId by @LiddleDev in https://github.com/laravel/framework/pull/60643 * Respect the encoding in Str::mask() when building the end of the string by @iammcoding in https://github.com/laravel/framework/pull/60646 * [13.x] Supports scalar Predis retry config to allows `config:cache` by @crynobone in https://github.com/laravel/framework/pull/60642