What's New in Laravel 13.17 | Mohamed Said       [Skip to content](#main)  [ ![](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png) Mohamed SaidLaravel Backend Engineer ](https://www.msaied.com/public) - [Home](https://www.msaied.com/public)
- [Projects](https://www.msaied.com/public/projects)
- [Articles](https://www.msaied.com/public/articles)
- [Certificates](https://www.msaied.com/public/certificates)
- [About](https://www.msaied.com/public#about)

           [  Contact](https://www.msaied.com/public#contact) Menu 

Menu
----

Close 

 - [HomeStart here](https://www.msaied.com/public)
- [ProjectsCase studies](https://www.msaied.com/public/projects)
- [ArticlesEngineering notes](https://www.msaied.com/public/articles)
- [CertificatesCredentials](https://www.msaied.com/public/certificates)
- [AboutHow I work](https://www.msaied.com/public#about)
- [ContactGet in touch](https://www.msaied.com/public#contact)

  [Start a conversation](https://www.msaied.com/public#contact) [WhatsApp](https://wa.me/201094619204) [Email](mailto:hello@msaied.com) 

 1. [Home](https://www.msaied.com/public)
2. /
3. [Articles](https://www.msaied.com/public/articles)
4. /
5. [Laravel](https://www.msaied.com/public/articles?category=laravel)
6. /
7. Route Metadata Support and More in Laravel 13.17

   [Laravel](https://www.msaied.com/public/articles?category=laravel) 

 Route Metadata Support and More in Laravel 13.17
=================================================

 Laravel 13.17 ships first-class route metadata with dot-notation access and group cascading, Postgres transaction pooler support, a new dev:list Artisan command, and a Should Not Retry exception handler for queued jobs.

 ![](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp) [Mohamed Said](https://www.msaied.com/public#person) Published 24 Jun 2026 · Updated 24 Jun 2026 · 4 min read

ShareCopy linkCopied

 ![Route Metadata Support and More in Laravel 13.17](https://cdn.msaied.com/284/9c032c28e286a5823a071bc3bdf754e3.png) 

  On this page +1. [Laravel 13.17: Route Metadata, Postgres Pooler, and More](#laravel-1317-route-metadata-postgres-pooler-and-more)
2. [First-Class Route Metadata](#first-class-route-metadata)
3. [Attaching and Reading Metadata](#attaching-and-reading-metadata)
4. [Group Cascading](#group-cascading)
5. [Postgres Transaction Pooler Support](#postgres-transaction-pooler-support)
6. [New dev:list Artisan Command](#new-codedevlistcode-artisan-command)
7. [Should Not Retry Exception Handler for Queued Jobs](#should-not-retry-exception-handler-for-queued-jobs)
8. [Other Notable Changes](#other-notable-changes)
9. [Key Takeaways](#key-takeaways)

 Laravel 13.17: Route Metadata, Postgres Pooler, and More
--------------------------------------------------------

The Laravel team released v13.17.0 on June 24, 2026, bringing several developer-quality-of-life improvements. The headline feature is first-class route metadata support, but the release also includes Postgres transaction pooler integration, a new `dev:list` Artisan command, and a cleaner way to prevent queue job retries at the exception level.

---

First-Class Route Metadata
--------------------------

Previously, attaching custom data to a route meant stuffing it into the action array with no guaranteed structure or serialization support. Laravel 13.17 promotes metadata to a proper route attribute that survives `route:cache` serialization and cascades through route groups.

### Attaching and Reading Metadata

```php
Route::get('/users', [UserController::class, 'index'])
    ->metadata(['head' => ['title' => 'Users']]);

// Read with dot notation and an optional default
$request->route()->getMetadata('head.title');           // 'Users'
$request->route()->getMetadata('head.author', 'Taylor');

```

### Group Cascading

Metadata set on a group cascades to every child route. Associative arrays merge recursively; scalar values and lists replace inherited ones.

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

// getMetadata('head') =>
// ['robots' => ['noindex'], 'author' => 'Taylor', 'title' => 'Users']

```

Resource and singleton routes are supported. Use `setMetadata()` on a route instance to replace rather than merge.

---

Postgres Transaction Pooler Support
-----------------------------------

Transaction-mode poolers like PgBouncer, AWS RDS Proxy, and Neon are incompatible with native prepared statements. Laravel now handles this automatically when you set `pooled => true` in your database config.

```php
'pgsql' => [
    'driver'  => 'pgsql',
    'pooled'  => true,
    'url'     => env('DATABASE_URL'),
    // Optional direct endpoint for migrations and DDL
    'direct'  => env('DATABASE_DIRECT_URL'),
],

```

With `pooled` enabled, the driver switches to emulated prepares. Commands that require a persistent connection—`migrate`, `schema:dump`, `db:wipe`—automatically route to the `direct` endpoint. Connections without `pooled => true` keep existing behavior, making the change fully backward compatible.

---

New `dev:list` Artisan Command
------------------------------

Building on the `artisan dev` command added in 13.16.0, `dev:list` shows every registered dev process and its source (your application or a vendor package).

```bash
php artisan dev:list
php artisan dev:list --except-vendor
php artisan dev:list --only-vendor
php artisan dev:list --filter=reverb
php artisan dev:list --json

```

---

Should Not Retry Exception Handler for Queued Jobs
--------------------------------------------------

Queued jobs can now decide at the exception level whether a failure should trigger a retry. Add a `retry()` method directly to the exception class:

```php
class PaymentGatewayException extends RuntimeException
{
    public function retry(): bool
    {
        return false;
    }
}

```

For exceptions you do not own, register the behavior in your application bootstrap:

```php
->withExceptions(function (Exceptions $exceptions) {
    $exceptions->retry(PaymentGatewayException::class, fn () => false);
})

```

When `retry()` returns `false`, the job is marked as failed immediately without consuming remaining attempts.

---

Other Notable Changes
---------------------

- **`between()`/`unlessBetween()` timezone fix** — the timezone is now evaluated when the filter runs, not when the chain is defined, so call order no longer matters.
- **`schema:dump --without-migration-data`** — omits migration table rows from the dump, useful for clean test setup.
- **Reduced cache reads** when debouncing jobs with `maxWait` (two reads per dispatch down to one).
- **Improved typehints** across `InteractsWithData`, boolean/numeric validation, and array shapes.

---

Key Takeaways
-------------

- Route metadata is now a first-class attribute with dot-notation access, group cascading, and `route:cache` support.
- Postgres transaction pooler support lands with a single `pooled => true` config flag and automatic direct-endpoint routing for DDL commands.
- The `dev:list` command makes it easy to audit all registered dev processes and their origin.
- Queue jobs can now short-circuit retries at the exception class level, reducing unnecessary attempts and queue pressure.
- The `between()`/`unlessBetween()` timezone bug is fixed; call order in the scheduler chain no longer matters.

---

*Source: [Laravel News — Route Metadata Support in Laravel 13.17](https://laravel-news.com/laravel-13-17-0)*

- [Laravel](https://www.msaied.com/public/articles?search=Laravel)
- [Laravel 13](https://www.msaied.com/public/articles?search=Laravel%2013)
- [Routing](https://www.msaied.com/public/articles?search=Routing)
- [PostgreSQL](https://www.msaied.com/public/articles?search=PostgreSQL)
- [Queues](https://www.msaied.com/public/articles?search=Queues)

 Frequently asked questions 
---------------------------

  How does route metadata cascading work in Laravel 13.17?Metadata defined on a route group cascades to every route inside it. Associative arrays are merged recursively, so child routes can add or override individual keys without losing values set by the parent group. Scalar values and lists replace inherited ones rather than merging.

   Do I need to change existing database connections to use the new Postgres pooler support?No. The change is fully backward compatible. Only connections that explicitly set `pooled =&gt; true` in their database config switch to emulated prepares. All other connections continue to use native prepared statements as before.

   What happens to remaining job attempts when a Should Not Retry exception is thrown?When the `retry()` method on an exception returns `false`, Laravel marks the job as failed immediately without consuming any remaining retry attempts. This prevents unnecessary re-queuing for errors that are known to be unrecoverable.

   ![Mohamed Said](https://cdn.msaied.com/01M22N44A70A5MC2S599JP0MPH.webp)About the author
----------------

[Mohamed Said](https://www.msaied.com/public#person)Senior Backend Engineer specializing in Laravel, scalable SaaS platforms, APIs, and cloud infrastructure. I build secure, high-performance web applications that help businesses grow.

[About](https://www.msaied.com/public#about) [GitHub ↗](https://github.com/EG-Mohamed) [LinkedIn ↗](https://www.linkedin.com/in/msaiedm/) [WhatsApp ↗](https://wa.me/201094619204) [Email Address ↗](mailto:hello@msaied.com) [My CV ↗](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)  

   [Previous articleYammi Audit Log: Track Who Really Made a Change Across Laravel Jobs and Queues](https://www.msaied.com/public/articles/yammi-audit-log-track-who-really-made-a-change-across-laravel-jobs-and-queues) [Next articleEloquent Without the Magic: Custom Relations and Query Builder Internals](https://www.msaied.com/public/articles/eloquent-without-the-magic-custom-relations-and-query-builder-internals)  

   On this page
-------------

1. [Laravel 13.17: Route Metadata, Postgres Pooler, and More](#laravel-1317-route-metadata-postgres-pooler-and-more)
2. [First-Class Route Metadata](#first-class-route-metadata)
3. [Attaching and Reading Metadata](#attaching-and-reading-metadata)
4. [Group Cascading](#group-cascading)
5. [Postgres Transaction Pooler Support](#postgres-transaction-pooler-support)
6. [New dev:list Artisan Command](#new-codedevlistcode-artisan-command)
7. [Should Not Retry Exception Handler for Queued Jobs](#should-not-retry-exception-handler-for-queued-jobs)
8. [Other Notable Changes](#other-notable-changes)
9. [Key Takeaways](#key-takeaways)

 ###  Have a technical challenge?

 Tell me what you’re building. I reply within two working days.

[Start a conversation](https://www.msaied.com/public#contact) 

   Related articles
-----------------

 [ ![](https://cdn.msaied.com/740/cce86edc21eddcbdd2f2454fadaf9c70.png)  · 3 min read### The Pipeline Pattern in Laravel: Custom Pipelines Beyond Middleware

5 Oct 2026 ](https://www.msaied.com/public/articles/the-pipeline-pattern-in-laravel-custom-pipelines-beyond-middleware-1) [ ![](https://cdn.msaied.com/739/2d6897fdcdcf090613f96f72a64b8a78.png)  · 4 min read### MySQL Full-Text Search in Laravel: Indexes, Relevance Scoring, and Boolean Mode

4 Oct 2026 ](https://www.msaied.com/public/articles/mysql-full-text-search-in-laravel-indexes-relevance-scoring-and-boolean-mode) [ ![](https://cdn.msaied.com/738/073696a3fefe18bec825beec5ac658f5.png)  · 4 min read### Laravel Queue Rate-Limited Middleware: Throttling Jobs Without Losing Work

4 Oct 2026 ](https://www.msaied.com/public/articles/laravel-queue-rate-limited-middleware-throttling-jobs-without-losing-work) 

  Have a technical challenge?
----------------------------

Tell me what you’re building. I reply within two working days.

 [Discuss your project ↗](https://www.msaied.com/public#contact) 

  © 2026 Mohamed Said · Built with Laravel, meant to last.Senior Backend Engineer specializing in Laravel, scalable SaaS platforms, APIs, and cloud infrastructure. I build secure, high-performance web applications that help businesses grow.

 - [Home](https://www.msaied.com/public)
- [Articles](https://www.msaied.com/public/articles)
- [Certificates](https://www.msaied.com/public/certificates)
- [GitHub](https://github.com/EG-Mohamed)
- [LinkedIn](https://www.linkedin.com/in/msaiedm/)
- [WhatsApp](https://wa.me/201094619204)
- [Email Address](mailto:hello@msaied.com)
- [My CV](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)
- [Sitemap](https://www.msaied.com/public/sitemap.xml)
