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

# June 2026 Laravel updates

> The June 2026 Laravel ecosystem update. Bus::bulk(), Postgres transaction pooler support, MCP client/server, the artisan dev command, route metadata, and more.

In June 2026, Laravel Cloud added support for Symfony apps and Forge gained managed Valkey caches and object storage. The framework received substantial updates including bulk job dispatch, Postgres pooler support, and MCP client/server.

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

***

## Laravel Framework

### Bus::bulk() — bulk job dispatch

You can now register large numbers of jobs with a single database INSERT. Bulk INSERTs are performed per queue and connection, eliminating the cost of inserting one at a time.

```php theme={null}
use Illuminate\Support\Facades\Bus;

Bus::bulk([
    new ProcessOrder($order1),
    new ProcessOrder($order2),
    new ProcessOrder($order3),
    // Efficient even for thousands of jobs
]);
```

### Postgres transaction pooler support

Framework-level support for transaction-mode Postgres connection poolers such as PgBouncer, AWS RDS Proxy, and Neon has been added.

```php theme={null}
// config/database.php
'pgsql' => [
    'driver' => 'pgsql',
    'pooled' => true,  // Declare a pooled connection
    // ...
],
```

<Info>
  If you need a direct connection for schema operations or DDL statements, append `::direct` to the connection name to bypass the pooler.
  `DB::connection('pgsql::direct')->statement('CREATE INDEX ...')`
</Info>

The framework automatically handles emulated prepares, boolean binding, and everything else required by poolers.

### MCP client and server tool support

Laravel AI agents can now use tools from remote MCP servers (over HTTP) and from local MCP server classes. Schema translation, wrapping, and invocation are all handled automatically.

```php theme={null}
class MyAgent extends Agent
{
    public function tools(): array
    {
        return [
            // Use tools from a remote MCP server
            McpClient::tools('https://mcp.example.com'),
            // Use tools from a local MCP server
            McpServer::tools(MyMcpServer::class),
        ];
    }
}
```

### artisan dev command

`artisan dev` has been added, letting you launch every development process with a single command. The server, queue worker, log tail, and Vite all run concurrently with color-coded output.

```bash theme={null}
php artisan dev
```

```php theme={null}
// Register additional commands in a service provider
use Illuminate\Foundation\Console\DevCommands;

DevCommands::artisan('reverb:start', 'reverb')->orange();
DevCommands::register('stripe listen --forward-to ' . config('app.url'))->green();
```

<Tip>
  It auto-detects your Node.js package manager (npm, yarn, pnpm, bun). It's Artisan's official convention that replaces the traditional `composer dev` script.
</Tip>

### Route metadata support

A `->metadata()` method has been added that lets you attach arbitrary metadata to routes. It's fully compatible with route caching, and metadata set on a group is merged into child routes.

```php theme={null}
Route::metadata(['head' => ['robots' => ['noindex'], 'author' => 'Taylor']])
    ->group(function () {
        Route::get('/users', [UserController::class, 'index'])
            ->metadata(['head' => ['title' => 'Users']]);
    });

// Access it from controllers or middleware
$request->route()->getMetadata('head.title');          // 'Users'
$request->route()->getMetadata('head.author', 'Taylor'); // 'Taylor'
```

### Non-retrying exception handler

You can now suppress retries for exceptions that don't benefit from retrying (invalid input, permanent external failures, etc.).

```php theme={null}
// Defined directly on the exception class
class InvalidInputException extends RuntimeException
{
    public function retry(): bool
    {
        return false;
    }
}

// Can also be configured in bootstrap/app.php
->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontRetry(InvalidInputException::class);
})
```

### --without-migration-data flag for schema:dump

`schema:dump` can now generate a pure structural dump that omits rows from the migrations table.

```bash theme={null}
php artisan schema:dump --without-migration-data
```

### Timezone fix for between()/unlessBetween()

Regardless of whether `timezone()` is called before or after `between()` or `unlessBetween()`, the schedule now runs in the correct timezone.

```php theme={null}
// Both behave the same (previously, if between came first, UTC was used)
$schedule->command('foo')->timezone('Europe/Rome')->between('10:00', '12:00');
$schedule->command('foo')->between('10:00', '12:00')->timezone('Europe/Rome');
```

### Other framework changes

* **Trait support in `Bus::bulk()`**: Queue attributes can be defined on traits
* **MariaDB vector indexes**: Vector index support on MariaDB
* **`attachFromStorage()` helper**: Attach files from storage to notification `MailMessage`s
* **`Cache::rememberWithState()`**: Stateful cache support
* **Parallel-test maintenance mode driver**: With the `array` driver, each process has its own independent maintenance state
* **`whenFilledEnum()`**: Conditional processing of Enum-backed fields
* **JSON Schema `anyOf` support**: JSON Schema's `anyOf` can now be used in validation

***

## Inertia

* **`Client\Request::uri()`**: Retrieve the URI of a client request
* **Anchor `target` attribute support**: Use `target="_blank"` and similar on the `<Link>` component
* **Form `async` option**: Form components now support asynchronous submission
* **Page info in `titleCallback`**: Page data is passed to the title callback

***

## Laravel Cloud and Laravel Forge

| Product           | Key updates                                                                                                                                                  |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Laravel Cloud** | Full support for Symfony apps (Symfony 7.4 LTS and 8.x, PHP 8.2–8.5), deploy and pay from Stripe Projects, per-team-member Slack/email notification settings |
| **Laravel Forge** | Managed Valkey caches (create and manage from the dashboard), managed object storage, redesigned notification emails                                         |


## Related topics

- [March 2026 Laravel updates](/en/blog/changelog/202603.md)
- [April 2026 Laravel updates](/en/blog/changelog/202604.md)
- [May 2026 Laravel updates](/en/blog/changelog/202605.md)
- [laravel/symfony-on-cloud — run Symfony apps on Laravel Cloud](/en/blog/symfony-on-cloud-introduction.md)
- [Laravel 13 new features overview](/en/blog/laravel-13-new-features.md)
