Laravel Release Notes

Follow

340 release notes curated from 4 sources by the Releasebot Team. Last updated: Jul 15, 2026

Get this feed:

Laravel Products

  • Jul 14, 2026
    • Date parsed from source:
      Jul 14, 2026
    • First seen by Releasebot:
      Jul 15, 2026
    Laravel logo

    Laravel

    v13.20.0

    Laravel ships a broad set of framework improvements, adding first-party image processing, new Storage and Eloquent helpers, Redis session prefix control, and safer handling across queues, HTTP, numbers, and testing, while also tightening many edge-case fixes and optimizations.

    [13.x] Add missing $separator parameter to Storage facade append/prepend docblocks by @ferhatolmez in #60693

    [13.x] beforePushing and afterPushing methods on QueueFake class by @gdebrauwer in #60689

    [13.x] Add memory usage to WorkerStopping by @jackbayliss in #60613

    [13.x] Add assertEmpty to the Storage facade by @jackbayliss in #60658

    [13.x] Adds first-party support for image processing by @nunomaduro in #59276

    [13.x] Fix operator precedence in SqsQueue size fallbacks by @daffa-aditya-p in #60702

    Add separator params to Storage facade docblocks by @Muhtasim-Munif-Fahim in #60703

    [13.x] Add test for the scheduler's quarterlyOn method by @dfinchenko in #60712

    Make MailFake::assertQueuedTimes() public by @Tresor-Kasenda in #60710

    [13.x] Sync more getter return types with their property generics by @dfinchenko in #60699

    [13.x] Fix guessResourceName() namespace collision when class name is a substring of a parent namespace segment by @Rubrasum in #60707

    [13.x] Add WithoutMiddleware controller middleware attribute by @JurianArie in #60709

    [13.x] Add incrementEachQuietly and decrementEachQuietly to Eloquent models by @shanerbaner82 in #60720

    [13.x] Normalize HTTP client request header lookups by @Button99 in #60734

    [12.x] Enum as queue overlap key by @finagin in #60722

    [13.x] Support null for shortcut field in return type array for HasParameters::getOptions (#60723) by @wimski in #60728

    [13.x] Ability to set session prefix for Redis by @jackbayliss in #60700

    [13.x] Add #[SensitiveParameter] to parameters carrying secrets by @axlon in #60753

    [13.x] Optimize by using contains or doesntContain by @lucasmichot in #60745

    [13.x] Remove redundant Mockery::close() calls by @lucasmichot in #60743

    [13.x] Only register pail in DevCommands when pcntl_fork is available by @jackbayliss in #60749

    [13.x] Use PHPUnit rector sets instead of individual rules by @lucasmichot in #60744

    [13.x] Replace manual all/any foreach loops with array_all/array_any by @lucasmichot in #60742

    [13.x] Add test for the Uri toStringable method by @dfinchenko in #60739

    [13.x] Fix Str::containsAll() returning true for an empty needles array by @lucasmichot in #60746

    [13.x] Fix stale transformations being reapplied when branching an Image after toBytes() by @lucasmichot in #60748

    [13.x] Fix Number::forHumans() and abbreviate() returning "-0" for tiny negative values by @semx in #60736

    [13.x] Add test for the Email rule's strict method by @dfinchenko in #60740

    [13.x] fix: providesTemporaryUploadUrls should return true for s3 driver by @joostdebruijn in #60755

    [12.x] Add capitalize parameter to Stringable::initials() by @irabbi360 in #60741

    [13.x] Fix dynamic calls to incrementEachQuietly and decrementEachQuietly by @daffa-aditya-p in #60737

    Fix BelongsToMany::touch() when related key is not id by @Peeterush in #60708

    Merge branch '12.x' into 13.x by @crynobone in #60773

    [13.x] Fix Number::forHumans() and abbreviate() scaling tiny decimals by @daffa-aditya-p in #60768

    [13.x] Reset fake time globally after each test, drop redundant Carbon::setTestNow() cleanup by @lucasmichot in #60761

    [13.x] Ensure make:migration generates collision-free, ordered timestamps prefixes by @NickSdot in #60771

    [13.x] Fix JsonApiResource relationships resolved through a closure by @markwalet in #60752

    [13.x] Fix TrustProxies at:* when multiple proxies are used by @mattford in #60726

    Original source
  • Jul 14, 2026
    • Date parsed from source:
      Jul 14, 2026
    • First seen by Releasebot:
      Jul 15, 2026
    Laravel logo

    Laravel

    v12.64.0

    Laravel adds enum queue overlap keys and a capitalize parameter for Stringable::initials().

    [12.x] Enum as queue overlap key by @finagin in #60722

    [12.x] Add capitalize parameter to Stringable::initials() by @irabbi360 in #60741

    Original source
  • All of your release notes in one feed

    Join Releasebot and get updates from Laravel and hundreds of other software products.

    Create account
  • Jul 7, 2026
    • Date parsed from source:
      Jul 7, 2026
    • First seen by Releasebot:
      Jul 8, 2026
    Laravel logo

    Laravel

    v13.19.0

    Laravel adds queue and HTTP testing improvements, new collection and string helpers, plus mail config flexibility and date rule coverage. It also improves cloud-agent queue handling and bulk SQS job delivery.

    [13.x] Support inspecting reserved jobs on the queue fake by @jackbayliss in #60644

    [13.x] Add reduceInto method to collection by @JosephSilber in #60651

    [13.x] Add counted method to Str and Stringable by @JosephSilber in #60649

    [13.x] Ensure deletedAtColumn is passed to assertSoftDeleted & assertNotSoftDeleted by @jackbayliss in #60657

    [13.x] Pop managed queue jobs from the cloud-agent instead of SQS by @kieranbrown in #60659

    [12.x] Pop managed queue jobs from the cloud-agent instead of SQS by @kieranbrown in #60660

    [12.x] Terminate default style value with a semicolon in ComponentAttributeBag::merge() by @Amirhf1 in #60665

    Bump stefanzweifel/git-auto-commit-action from 7.1.0 to 7.2.0 in the github-actions group by @dependabot[bot] in #60672

    [13.x] Update comment in Cloud/Queue.php by @jackbayliss in #60673

    [13.x] Add tests for relative date where clauses by @aligulzar729 in #60675

    [13.x] Add phpdoc_trim_consecutive_blank_line_separation rule to pint by @lucasmichot in #60669

    [13.x] Remove deprecated StaticCallOnNonStaticToInstanceCallRector fixer rule by @lucasmichot in #60670

    [13.x] Allow mail config options without name by @jackbayliss in #60668

    [13.x] Adjust Queue comment after Dependabot by @jackbayliss in #60679

    [13.x] Send bulk SQS jobs via SendMessageBatch by @kieranbrown in #60645

    [13.x] Add query and queryJson HTTP testing helpers by @shanerbaner82 in #60662

    [13.x] Add Http::query() method to the HTTP client by @shanerbaner82 in #60663

    Merge branch '12.x' into 13.x by @crynobone in #60684

    [13.x] Add tests for the date rule's past/future/nowOrPast/nowOrFuture methods by @aligulzar729 in #60687

    Original source
  • Jul 7, 2026
    • Date parsed from source:
      Jul 7, 2026
    • First seen by Releasebot:
      Jul 8, 2026
    Laravel logo

    Laravel

    v12.63.0

    Laravel ships improved error handling, cache lock refreshes, security hardening, and fixes for Postgres and queue jobs.

    [12.x]

    • Add new error messages for detecting lost connections by @mfn in #60472
    • Ability to refresh cache locks by @bytestream in #58349
    • Guard JsonSchema deserializer against unbounded $ref expansion by @pushpak1300 in #60524
    • Fix Postgres whereDate/whereTime crash when column is Expression by @irabbi360 in #60540
    • Pop managed queue jobs from the cloud-agent instead of SQS by @kieranbrown in #60660
    • Terminate default style value with a semicolon in ComponentAttributeBag::merge() by @Amirhf1 in #60665
    Original source
  • Jul 2, 2026
    • Date parsed from source:
      Jul 2, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    v13.18.1

    Laravel adds a set of 13.x improvements that refine testing, console commands, maintenance mode, queues, logging, and string handling, while also updating docs and cache-friendly Redis retry config support.

    [13.x] Allow assertDatabaseEmpty to handle iterable by @jackbayliss in #60621

    [13.x] Add input() method to console commands by @stevebauman in #60607

    [13.x] Handle api / json routes with Down (Maintenance) command by @davidrushton in #60595

    [13.x] fix: respect channel name for on-demand log stacks by @maltf0 in #60635

    [13.x] Support inspecting delayed jobs on the queue fake by @jackbayliss in #60636

    Add Release queue middleware by @mgcodeur in #60630

    [13.x] Update docblocks of Blueprint foreignUuid and foreignUlid to match foreignId by @LiddleDev in #60643

    Respect the encoding in Str::mask() when building the end of the string by @iammcoding in #60646

    [13.x] Supports scalar Predis retry config to allows config:cache by @crynobone in #60642

    Original source
  • Similar to Laravel with recent updates:

  • Jun 30, 2026
    • Date parsed from source:
      Jun 30, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    Laravel Framework 13.x - Add Route Metadata Support

    Laravel adds route metadata that flows through the full routing pipeline, with recursive group merging and route cache support. The new metadata() method gives a structured way to store SEO, feature flag, or permission data and read it in controllers or middleware.

    Pull request by @benbjurstrom

    Routes can now carry arbitrary metadata through the full routing pipeline. Whether you're tagging routes for SEO, feature flags, or permissions, the new ->metadata() method gives you a dedicated, structured place to store that data - and it's fully compatible with route caching. Metadata set on a group merges recursively into child routes, so you can set defaults up top and override them where needed.

    Route::metadata(['head' => ['robots' => ['noindex'], 'author' => 'Taylor']])
    ->group(function () {
    Route::get('/users', [UserController::class, 'index'])
    ->metadata(['head' => ['title' => 'Users']]);
    });
    // Inside a controller or middleware
    $request->route()->getMetadata('head.title'); // 'Users'
    $request->route()->getMetadata('head.author', 'Taylor'); // 'Taylor'
    
    Original source
  • Jun 30, 2026
    • Date parsed from source:
      Jun 30, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    Laravel Framework 13.x - Add Postgres Transaction Pooler Support

    Laravel adds framework-level support for PostgreSQL transaction poolers like PgBouncer, with pooled connections and direct routing for schema tasks.

    Pull request by @DGarbs51

    Running Postgres behind a transaction-mode connection pooler like PgBouncer, AWS RDS Proxy, or Neon? Laravel now supports this at the framework level. Set pooled => true in your database connection config and the framework handles emulated prepares, proper boolean binding, and everything else the pooler requires. For schema and DDL operations that need a direct connection, append ::direct to the connection name and Laravel will route around the pooler automatically - no extra configuration needed.

    Original source
  • Jun 30, 2026
    • Date parsed from source:
      Jun 30, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    Laravel Framework 13.x - Should Not Retry Exception Handler

    Laravel adds non-retryable exception handling so failed jobs can skip pointless retries.

    Pull request by @alexbowers

    Some exceptions simply shouldn't trigger a retry - think invalid input, permanent external failures, or anything where retrying will just eat up your queue attempts with the same result. You can now define a retry() method directly on an exception class returning false, or configure non-retryable exceptions in bootstrap/app.php via withExceptions(). Either way, Laravel will respect the decision and move on without burning through your job's retry budget.

    Original source
  • Jun 30, 2026
    • Date parsed from source:
      Jun 30, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    Laravel Framework 13.x - Add `without-migration-data` Flag to `DumpCommand`

    Laravel adds a schema:dump --without-migration-data flag for clean structural dumps without migration history.

    Pull request by @jackbayliss

    schema:dump now accepts a --without-migration-data flag that strips migration table rows from the output, leaving you with a clean structural dump. Handy for test environments where you want to seed the schema without carrying over migration history from another environment.

    php artisan schema:dump --without-migration-data
    
    Original source
  • Jun 30, 2026
    • Date parsed from source:
      Jun 30, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    Laravel Framework 13.x - Make `between()`/`unlessBetween()` Independent of `timezone()` Call Order

    Laravel fixes a scheduling timezone bug so between and unlessBetween now work correctly regardless of chain order.

    Pull request by @ManicardiFrancesco

    Previously, calling between() or unlessBetween() before timezone() in a schedule chain would silently use UTC regardless of what timezone you specified - a subtle bug that could have scheduled tasks running at the wrong hour in production. The time-interval check is now deferred until the filter executes, so the order no longer matters.

    // Both of these now behave identically
    $schedule->command('foo')->timezone('Europe/Rome')->between('10:00', '12:00');
    $schedule->command('foo')->between('10:00', '12:00')->timezone('Europe/Rome');
    
    Original source
  • Jun 30, 2026
    • Date parsed from source:
      Jun 30, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    Laravel Framework 13.x - Add `artisan dev` Command

    Laravel adds php artisan dev, a single command for running the server, queue worker, log tailing, and Vite together with color-coded output. It replaces the composer dev script, auto-detects Node package managers, and supports extra commands from service providers.

    Pull request by @joetannenbaum

    php artisan dev brings all your development processes together in one command - server, queue worker, log tailing, and Vite running concurrently, each with its own color-coded output. It replaces the composer dev script with a proper Artisan convention and auto-detects your Node package manager (npm, yarn, pnpm, or bun).

    You can register additional commands from a service provider - useful for tools like Reverb or Stripe's CLI webhook listener:

    use Illuminate\Foundation\Console\DevCommands;
    DevCommands::artisan('reverb:start', 'reverb')->orange();
    DevCommands::register('stripe listen --forward-to ' . config('app.url'))->green();
    
    Original source
  • Jun 30, 2026
    • Date parsed from source:
      Jun 30, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    Laravel Framework 13.x - Add `array` Maintenance Mode Driver for Parallel Testing

    Laravel adds an in-memory maintenance mode driver to prevent flaky parallel test suites.

    Pull request by @ziadoz

    Parallel test suites and the file-based maintenance mode driver don't mix well - shared state on disk leads to race conditions between workers. The new in-memory array driver keeps maintenance mode isolated per process, mirroring the same pattern used by the cache and session drivers. No more flaky tests caused by leftover maintenance mode files.

    Original source
  • Jun 30, 2026
    • Date parsed from source:
      Jun 30, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    Laravel Framework 13.x - Add `whenFilledEnum` Method to `InteractsWithData`

    Laravel adds whenFilledEnum() for request data, making backed enum handling cleaner by combining presence checks and enum validation into one typed callback flow.

    Pull request by @astandkaya

    Working with backed enums in request data used to mean a whenFilled() call followed by a tryFrom() check and a null guard. whenFilledEnum() collapses all of that into a single method that only fires the callback when the key is present, the value maps to a valid enum case, and you get a typed enum instance in the closure - no manual validation needed.

    // Before
    $request->whenFilled('status', function (string $input) use ($query): void {
        $status = Status::tryFrom($input);
        if ($status === null) {
            return;
        }
        $query->where('status', $status);
    });
    // After
    $request->whenFilledEnum('status', Status::class, function (Status $status) use ($query): void {
        $query->where('status', $status);
    });
    
    Original source
  • Jun 30, 2026
    • Date parsed from source:
      Jun 30, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    Laravel Framework 13.x - Add `anyOf` Support to JSON Schema

    Laravel adds anyOf support to Illuminate\JsonSchema for more expressive AI structured output with OpenAI and Gemini.

    Pull request by @dbpolito

    Illuminate\JsonSchema now supports anyOf, which is essential for AI structured output scenarios where a field can resolve to one of several distinct shapes. Both OpenAI and Gemini support anyOf in their structured output APIs, so this unlocks more expressive schema definitions when building AI-powered features with Laravel AI.

    Original source
  • Jun 30, 2026
    • Date parsed from source:
      Jun 30, 2026
    • First seen by Releasebot:
      Jul 3, 2026
    Laravel logo

    Laravel

    Laravel Framework 13.x - Support Queue Attributes on Traits

    Laravel adds support for Queue PHP attributes on traits, letting shared queue settings like connection, queue name, and timeout be defined once and reused across jobs and events that use the trait.

    Pull request by @jackbayliss

    PHP attributes like #[Queue(...)] can now be defined on traits, and Laravel will respect them when the trait is used in a job or event class. If you have queue configuration that should be shared across multiple jobs - the same connection, queue name, or timeout - define it once in a trait instead of duplicating it across every class.

    #[Queue(connection: 'redis', queue: 'broadcasting')]
    trait BroadcastsImports
    {
    public function broadcastWhen(): bool { /* ... */ }
    }
    class ImportCreated implements ShouldBroadcast
    {
    use BroadcastsImports; // picks up the Queue attribute
    }
    
    Original source
Releasebot

Curated by the Releasebot team

Releasebot is an aggregator of official release notes from hundreds of software vendors and thousands of sources.

Our editorial process involves the manual review and audit of release notes procured with the help of automated systems.