Laravel 13.32.0 was released on September 16, 2026. The update adds a Mercure broadcast driver, cross-disk filesystem operations, and enum-aware queue controls.

filesystem.php
<?php
Storage::disk('local')->copyToDisk('backup', 'reports/report.csv');
Storage::disk('local')->moveToDisk('backup', 'reports/report.csv');
Storage::disk('local')->copyToDisk('s3', 'reports/report.csv', '2026/report.csv');

Kévin Dunglas contributed the Mercure driver. Mercure delivers real-time events through Server-Sent Events, or SSE. The driver reads MERCURE_URL, MERCURE_PUBLIC_URL, MERCURE_JWT_SECRET, and MERCURE_ENCRYPTION_KEY from the environment. The built-in hub in FrankenPHP can run without a URL or secret. Presence channels and end-to-end encrypted private-encrypted-* channels are supported. Laravel Echo client support is covered by PR #549. Framework PR #61474 adds the driver, while #61587 adds Mercure support to the broadcasting installer.

Jack Bayliss added copyToDisk() and moveToDisk() to FilesystemAdapter. The methods handle cross-disk transfers that previously required a manual read-stream and write-stream sequence. copyToDisk() keeps the source file, while moveToDisk() removes it. The methods accept a destination disk, and copyToDisk() can receive a separate destination path. PR #61519 also allows a filesystem instance in place of a disk name. The main implementation is tracked in #61511.

Queue::pause(), Queue::resume(), and Queue::pauseFor() now accept enum values. The examples use Queues::notifications and Connections::Redis, with 60 as the pause duration. This matches existing enum support for job Queue and Connection attributes and manager methods such as route() and forward(). The change is in PR #61464.

The changelog sets Cloud's default memoryExceededExitCode on 12.x in #61432. It adds return-type handling for withFreshQueryLog() in #61458 and askWithCompletion() in #61487. It enables enum arguments for queue controls in #61464, lowercases index-name comparisons in hasIndex() in #61506, and fixes containsStrict() when a closure matches null in #61507. Eloquent violation callbacks now receive the exception in #61504. Unused variables become named arguments in #61513. SupportBinaryCodecTest is updated in #61512. Factory::raw() now handles a count of zero in #61510. SessionHandlerInterface receives its missing implementation for PHP 9 in #61517.

Further entries add the filesystem methods in #61511, the Mercure driver in #61474, filesystem-instance arguments in #61519, and the Mercure installer path in #61587. They fix extra characters and validation errors from Str::password() in #61521, multibyte lowercasing in Str::camel() in #61545, and string-key failures in collapseWithKeys() in #61539. SessionGuard::userFromRecaller() no longer raises a TypeError when getAuthPassword() is null in #61532. Mocked tests use the real implementation more often in #61563. appendToPriorityList() handles a referenced middleware item at the start of the list in #61567. Mutating collection methods receive improved return types in #61571. CloudManager gains isManagedQueue in #61568. Redis tagged-cache expiration is synchronized on touch in #61574. Job payloads are decoded once in #61526. sum() gets the correct return type when its key matches a global function name in #61578. Authorizable gains UnitEnum in #61589. Readable environment files preserve unchanged values during encryption in #61503.