> ## Documentation Index
> Fetch the complete documentation index at: https://kawax.biz/llms.txt
> Use this file to discover all available pages before exploring further.

# May 2026 Laravel updates

> The May 2026 Laravel ecosystem update. @fonts Blade directive, Interruptible jobs, subagent support, Cloud Scale-to-Zero, and more.

May 2026 delivered practical, large-scale updates including full-stack Scale-to-Zero and Managed Queues for Laravel Cloud, font optimization, and multi-agent pipelines.

Source: [Laravel May Product Updates](https://laravel.com/blog/laravel-may-product-updates)

***

## Laravel Framework

### @fonts Blade directive

The new `@fonts` directive automatically handles the `<link rel="preload">` tags, `@font-face` styles, and HTTP/2 push headers needed for loading web fonts. It reads the font manifest generated by the Vite font plugin and injects the required elements in a single step.

```blade theme={null}
{{-- Load all fonts --}}
@fonts

{{-- Only specific font families --}}
@fonts(["sans", "mono"])
```

<Tip>
  `@fonts` optimizes performance by controlling only the fonts needed per page and preventing unnecessary preloads.
</Tip>

### Interruptible Jobs (signal-aware jobs)

The new `Interruptible` interface allows jobs to react when the queue worker receives SIGTERM during a deployment. You can safely stop loops, release locks, save state, and so on before the worker shuts down.

```php theme={null}
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 default on API routes

API routes now automatically return error responses in JSON. Previously HTML was sometimes returned from API routes depending on conditions; routes defined in `api.php` are now guaranteed to return JSON responses.

### Storage cache store

A new `storage` cache store has been added. It uses the filesystem as the cache backend but leverages Laravel's storage configuration.

```php theme={null}
// config/cache.php
'stores' => [
    'storage' => [
        'driver' => 'storage',
        'disk' => 'local',
        'path' => 'framework/cache',
    ],
],
```

### Disk storage for large SQS payloads

An option has been added to store payloads on disk when they are too large for SQS (over 256KB). Useful when queueing large data.

### Scheduled command environment filter

The `schedule:list` command can now filter by environment.

```bash theme={null}
php artisan schedule:list --environment=production
```

### Worker stop-when-empty option

A `--stop-when-empty` option has been added that automatically stops the worker when the queue becomes empty. Handy for batch processing or CI environments where workers should exit when the queue drains.

```bash theme={null}
php artisan queue:work --stop-when-empty
```

### foreignUuidFor schema helper

`foreignUuidFor()` has been added as the UUID counterpart to `foreignIdFor()`.

```php theme={null}
Schema::table('posts', function (Blueprint $table) {
    $table->foreignUuidFor(User::class)->constrained();
});
```

***

## AI subagent support

Laravel AI agents can now delegate to other agents. Return any agent from the `tools()` method and the parent agent's LLM invokes it just like a regular tool. Context is isolated, so conversation history doesn't get mixed up.

```php theme={null}
class OrchestratorAgent extends Agent
{
    public function tools(): array
    {
        return [
            new AnalysisAgent(),
            new WritingAgent(),
            new SearchTool(),
        ];
    }
}
```

***

## Inertia 3.x

* **`mode` option for `router.poll`**: Configure the polling behavior mode
* **Dynamic data in `usePoll`**: Update data dynamically during polling
* **`Inertia.once`**: Support for events that fire only once
* **`rescue` slot for `<Deferred>`**: Fallback when a deferred prop fails

***

## PAO (PHP Agentic Output)

PAO is now included by default in the starter kits. The following features have also been added:

* **Rector support**: PAO now processes Rector's JSON output as well
* **PHPStan agent guidance**: Adds guidance that tells agents how to fix the reported issues
* **`PAO_FORCE` environment variable**: Forcibly enable PAO mode
* **Artisan RECTOR support**: PAO now supports Artisan commands

***

## Laravel Cloud, Laravel Forge, and Nightwatch

| Product           | Key updates                                                                                                                                                                        |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Laravel Cloud** | Full-stack Scale-to-Zero (starts in under 500ms, 20x faster), Managed Queues (auto-scaling workers, failed jobs dashboard), spending limits, plan updates (\$5/month Starter plan) |
| **Laravel Forge** | Managed MySQL 8.4 (auto backups, read replicas, alerts), PHP 8.5 as default, Horizon auto-restart on env changes                                                                   |
| **Nightwatch**    | The MCP server now exposes performance data such as route execution time, query time, and job execution metrics                                                                    |


## Related topics

- [March 2026 Laravel updates](/en/blog/changelog/202603.md)
- [April 2026 Laravel updates](/en/blog/changelog/202604.md)
- [June 2026 Laravel updates](/en/blog/changelog/202606.md)
- [Laravel Package Skeleton — the official starter template for packages](/en/blog/package-skeleton-introduction.md)
- [Laravel Chisel — a post-install script library for starter kits](/en/blog/chisel-introduction.md)
