Laravel 13.25.0 released August 11, 2026, delivering three major feature areas plus numerous fixes.
Queue Management: The framework previously required pausing individual queues by name—a cumbersome process during deployments with multiple workers across named queues. Version 13.25 adds queue:pause --all and queue:resume --all commands, plus corresponding Queue::pauseAll() and Queue::resumeAll() facade methods. These implement a single global cache key that workers check alongside per-queue flags. Both independent pause levels coexist: resumeAll() clears only the global flag, leaving individually paused queues undisturbed. Two new events, QueuesPaused and QueuesResumed, fire alongside existing per-queue equivalents.
Terminal UI: The artisan dev command previously used concurrently, interleaving all process output into one scrolling feed, making it difficult to locate relevant logs. It now runs through @laravel/multiplex, offering three modes: tabs (default, one process per tab with search and per-process restart), stream (interleaved but scrollable and searchable), and inline (plain output for non-TTY environments). Modes are selectable per run (php artisan dev --stream) or set project-wide via DevCommands in a service provider. Windows falls back to concurrently; multiplex requires macOS or Linux with Node v22.13+. Buffered logs print to the main terminal on exit, preventing data loss.
Image API: The Image class now implements Responsable, allowing routes to return Image instances directly. The framework automatically handles toResponse(), returning a 200 with processed bytes and a Content-Type matching the output format. Two additions accompany this: Image::fromStream() reads image data lazily from a stream resource (e.g., S3), and toFormat() is now public, accepting a user-supplied format string and throwing ImageException on unsupported formats.
Queue Observability: The new UniqueJobSkipped event fires when a job with a ShouldBeUnique lock cannot be acquired, replacing the previous silent behavior. JobTimedOut now includes a $timeout property holding the seconds exceeded, distinguishing job-level timeouts from worker timeouts. Notifications honor fail-on-timeout via a $failOnTimeout property or #[FailOnTimeout] attribute, clarifying whether a timeout prevented third-party delivery. QueueFake now assigns UUIDs to faked jobs, matching real driver behavior.
Other Improvements: withoutCookies() method accepts an array of cookie names or instances to expire multiple cookies at once. foreignUlidFor() schema helper explicitly creates ULID foreign key columns. Request::all() now prefers input over files when both share a name, reversing the previous array_replace_recursive() order. Numerous fixes address Http client global configuration isolation, queued broadcast event model deletion, Gate::forUser() denial responses, string replacement edge cases, mail queue enum handling, maintenance mode cache race conditions, container build stack leaks, cache type errors, HEIC dimension reporting, LazyCollection flipping, async HTTP retry callbacks, schedule list timezone conversion, and type annotations across multiple methods.
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.