May 2026 brought full-stack scale-to-zero and managed queues to Laravel Cloud, along with font optimization, multi-agent pipelines, and several practical framework features.
Source: Laravel May Product Updates
Laravel Framework
@fonts Blade directive
The @fonts directive automatically handles the preload links, @font-face styles, and HTTP/2 push headers required for web fonts. It reads the manifest generated by the Vite font plugin and injects the necessary elements.
{{-- Load every font --}}
@fonts
{{-- Load selected font families --}}
@fonts(["sans", "mono"])
Limit fonts per page to prevent unnecessary preloads and improve performance.
Interruptible jobs
The new Interruptible interface lets a job respond when its queue worker receives SIGTERM during deployment. A job can stop loops, release locks, and save state before the worker shuts down.
use Illuminate\Contracts\Queue\Interruptible;
use Illuminate\Contracts\Queue\ShouldQueue;
class ProcessLargeReport implements ShouldQueue, Interruptible
{
public function handle(): void
{
foreach ($this->getChunks() as $chunk) {
if ($this->shouldInterrupt()) {
$this->saveProgress();
return;
}
$this->processChunk($chunk);
}
}
}
JSON exceptions for API routes
Routes defined in api.php now always return JSON error responses, avoiding cases where an API route previously returned HTML.
Storage cache store
The new storage cache store uses the filesystem as its backend while integrating with Laravel’s storage configuration.
'stores' => [
'storage' => [
'driver' => 'storage',
'disk' => 'local',
'path' => 'framework/cache',
],
],
Storing large SQS payloads on disk
Laravel can store SQS payloads larger than 256 KB on disk, making queues easier to use with large data sets.
Environment filtering for scheduled commands
Filter schedule:list output by environment:
php artisan schedule:list --environment=production
Stop workers when the queue is empty
The --stop-when-empty option automatically stops a queue worker after all jobs have been processed, which is useful for batch and CI workloads.
php artisan queue:work --stop-when-empty
foreignUuidFor schema helper
foreignUuidFor() is the UUID equivalent of foreignIdFor().
Schema::table('posts', function (Blueprint $table) {
$table->foreignUuidFor(User::class)->constrained();
});
AI subagent support
Laravel AI agents can delegate work to other agents. Return an agent from tools() and the parent’s language model can call it like any other tool. Each subagent receives isolated context, so conversation histories do not become mixed.
class OrchestratorAgent extends Agent
{
public function tools(): array
{
return [
new AnalysisAgent(),
new WritingAgent(),
new SearchTool(),
];
}
}
Inertia 3.x
mode for router.poll: controls polling behavior
- Dynamic
usePoll data: updates data while polling
Inertia.once: supports one-time events
rescue slot for <Deferred>: provides a fallback when a deferred prop fails
PAO
PHP Agentic Output is now included in starter kits by default. It also adds Rector JSON support, agent guidance for PHPStan errors, the PAO_FORCE environment variable, and support for Artisan commands.
Laravel Cloud, Laravel Forge, and Nightwatch
| Product | Key updates |
|---|
| Laravel Cloud | Full-stack scale-to-zero with sub-500 ms startup, managed queues, spending limits, and a $5 Starter plan |
| Laravel Forge | Managed MySQL 8.4, PHP 8.5 by default, and automatic Horizon restarts after environment changes |
| Nightwatch | MCP server access to route, query, and job performance metrics |