Skip to main content
In April 2026, full-stack passwordless authentication became a first-party Laravel feature. The ecosystem also gained debounceable jobs, MCP UI apps, and several practical framework improvements. Source: Laravel April Product Updates

Laravel Framework

Debounceable queued jobs

The #[DebounceFor] attribute combines repeated dispatches during a time window and runs only the final one. It provides a clean solution for bursty workloads.
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\Attributes\DebounceFor;

#[DebounceFor(30)]
class RebuildSearchIndex implements ShouldQueue
{
    // Ten updates within 30 seconds trigger one rebuild.
}

RebuildSearchIndex::dispatch()->debounceFor(seconds: 30);
Debounced jobs dispatch a JobDebounced event, allowing you to observe skipped jobs.

JSON health route responses

The built-in /up health route now returns JSON for JSON requests, making it easier to integrate with load balancers, uptime monitors, and orchestrators.
{ "status": "Application is up" }

JsonFormatter

JsonFormatter ensures that data returned by custom exception context() methods is recorded in structured logs, including context from previous exceptions in the chain.
'formatter' => Illuminate\Log\Formatters\JsonFormatter::class,

prefersJsonResponses()

API applications can add one line to bootstrap/app.php to treat broad Accept headers as JSON and serialize authentication, validation, and exception responses appropriately.
return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(...)
    ->prefersJsonResponses()
    ->create();

Cloudflare Email Service

Cloudflare Email Service is now officially supported as a Laravel mailer.
'cloudflare' => [
    'account_id' => env('CLOUDFLARE_ACCOUNT_ID'),
    'token' => env('CLOUDFLARE_TOKEN'),
],

Full Redis Cluster support

Laravel queues and ConcurrencyLimiter now detect Redis Cluster connections and wrap queue names in hash tags, preventing CROSSSLOT errors on services such as AWS ElastiCache Serverless.
queues:{default}
queues:{default}:delayed
queues:{default}:reserved

Queue job inspection

Three methods let you inspect queued jobs without querying the database directly.
Queue::pendingJobs();
Queue::delayedJobs();
Queue::reservedJobs();

Queue::reservedJobs('high-priority')->first()->name;

Form Request strict mode

Strict mode rejects incoming fields that are not declared in a Form Request’s rules() method.
public function boot(): void
{
    FormRequest::failOnUnknownFields(! app()->isProduction());
}

Passkeys

Passwordless authentication is now available across the first-party stack:
  • laravel/passkeys: migrations, authentication and credential routes, WebAuthn actions, and events
  • @laravel/passkeys: React, Vue, and Svelte helpers for browser WebAuthn ceremonies
  • Fortify integration: enable shared endpoints and contracts with Features::passkeys()
'features' => [
    Features::passkeys(),
],

MCP UI app support

MCP tools can now render fully sandboxed HTML applications in an iframe instead of returning text only.
php artisan make:mcp-app-resource DashboardApp
class DashboardApp extends AppResource
{
    #[RendersApp]
    public function handle(Request $request): Response
    {
        return Response::view('mcp.dashboard-app', ['title' => 'Dashboard']);
    }
}

Inertia and ecosystem

  • useHttp hook: adds onHttpException and onNetworkError callbacks
  • Laravel Echo Svelte 5 adapter: provides real-time features through the useEcho rune
  • Dusk: adds clickOnceEnabled() and clickOnceVisible() to reduce flaky tests
  • Horizon: supports Redis Cluster and AWS ElastiCache Serverless
  • VS Code extension: supports completion, hover information, and navigation for Laravel 13 attributes

Laravel Cloud and Laravel Forge

ProductKey updates
Laravel CloudFully responsive mobile UI and enhanced edge-network reporting, firewall rules, and cache rules
Laravel ForgePHP 8.5, multiple SSL servers, and certificate renewal alerts
Last modified on July 13, 2026