Skip to main content
In June 2026, Laravel Cloud added Symfony application support and Forge introduced managed Valkey and object storage. The framework gained bulk job dispatch, Postgres pooler support, MCP client and server tools, and more. Source: Laravel June Product Updates

Laravel Framework

Bus::bulk() — bulk job dispatch

Bus::bulk() inserts large groups of jobs with one database INSERT per queue and connection, eliminating the overhead of inserting each job separately.
use Illuminate\Support\Facades\Bus;

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

Postgres transaction pooler support

Laravel now supports transaction-mode Postgres connection poolers such as PgBouncer, AWS RDS Proxy, and Neon at the framework level.
'pgsql' => [
    'driver' => 'pgsql',
    'pooled' => true,
    // ...
],
Append ::direct to the connection name to bypass the pooler for schema operations and DDL statements: DB::connection('pgsql::direct')->statement('CREATE INDEX ...').
Laravel automatically handles emulated prepares, Boolean binding, and other requirements of pooled connections.

MCP client and server tools

Laravel AI agents can use tools from remote MCP servers over HTTP and from local MCP server classes. Schema conversion, wrapping, and invocation are automatic.
class MyAgent extends Agent
{
    public function tools(): array
    {
        return [
            McpClient::tools('https://mcp.example.com'),
            McpServer::tools(MyMcpServer::class),
        ];
    }
}

artisan dev

The new artisan dev command runs the development server, queue worker, log tailing, and Vite together with color-coded output.
php artisan dev
use Illuminate\Foundation\Console\DevCommands;

DevCommands::artisan('reverb:start', 'reverb')->orange();
DevCommands::register('stripe listen --forward-to ' . config('app.url'))->green();
The command automatically detects npm, Yarn, pnpm, or Bun and provides an official Artisan convention to replace the traditional composer dev script.

Route metadata

Attach arbitrary metadata to routes with ->metadata(). Metadata is compatible with route caching, and group metadata is merged into child routes.
Route::metadata(['head' => ['robots' => ['noindex'], 'author' => 'Taylor']])
    ->group(function () {
        Route::get('/users', [UserController::class, 'index'])
            ->metadata(['head' => ['title' => 'Users']]);
    });

$request->route()->getMetadata('head.title');
$request->route()->getMetadata('head.author', 'Taylor');

Non-retryable exception handlers

Prevent retries for invalid input and other permanent failures either on the exception itself or in bootstrap/app.php.
class InvalidInputException extends RuntimeException
{
    public function retry(): bool
    {
        return false;
    }
}

->withExceptions(function (Exceptions $exceptions) {
    $exceptions->dontRetry(InvalidInputException::class);
})

schema:dump without migration data

Generate a structure-only dump without migration table rows:
php artisan schema:dump --without-migration-data

Timezone fix for between() and unlessBetween()

Schedules now use the correct timezone regardless of whether timezone() is called before or after between() or unlessBetween().
$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

  • Queue attributes can be defined on traits used with Bus::bulk()
  • MariaDB vector indexes are supported
  • attachFromStorage() adds notification attachments from storage
  • Cache::rememberWithState() provides stateful caching
  • The array maintenance driver isolates state during parallel tests
  • whenFilledEnum() conditionally handles enum-backed fields
  • JSON Schema validation supports anyOf

Inertia

  • Client\Request::uri(): retrieves the client request URI
  • target on links: supports values such as target="_blank"
  • Async forms: the form component supports asynchronous submission
  • Page data in titleCallback: title callbacks receive the current page

Laravel Cloud and Laravel Forge

ProductKey updates
Laravel CloudSymfony 7.4 LTS and 8.x support on PHP 8.2–8.5, Stripe Projects deployment and billing, and per-member Slack and email notifications
Laravel ForgeManaged Valkey cache, managed object storage, and redesigned notification emails
Last modified on July 13, 2026