What's New in Laravel 13.17 | Mohamed Said        [  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MH.png)   Mohamed Said Laravel Backend Engineer  ](https://msaied.com) [ Home ](https://msaied.com) [ Projects ](https://msaied.com/projects) [ Articles  ](https://msaied.com/articles) [ Certificates ](https://msaied.com/certificates) [ Contact ](https://msaied.com#contact-section) 

       [  ](https://github.com/EG-Mohamed)       

 [ Home ](https://msaied.com) [ Projects ](https://msaied.com/projects) [ Articles ](https://msaied.com/articles) [ Certificates ](https://msaied.com/certificates) [ Contact ](https://msaied.com#contact-section) 

  [ home ](https://msaied.com)    [ articles ](https://msaied.com/articles)    Route Metadata Support and More in Laravel 13.17        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)

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

 [  Laravel ](https://msaied.com/articles?category=laravel)  #Laravel   #Laravel 13   #Routing   #PostgreSQL   #Queues  

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

     24 Jun 2026      4 min read    ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said  

       Table of contents

  9 sections  

1. [  01   Laravel 13.17: Route Metadata, Postgres Pooler, and More  ](#laravel-1317-route-metadata-postgres-pooler-and-more)
2. [  02   First-Class Route Metadata  ](#first-class-route-metadata)
3. [  03   Attaching and Reading Metadata  ](#attaching-and-reading-metadata)
4. [  04   Group Cascading  ](#group-cascading)
5. [  05   Postgres Transaction Pooler Support  ](#postgres-transaction-pooler-support)
6. [  06   New dev:list Artisan Command  ](#new-codedevlistcode-artisan-command)
7. [  07   Should Not Retry Exception Handler for Queued Jobs  ](#should-not-retry-exception-handler-for-queued-jobs)
8. [  08   Other Notable Changes  ](#other-notable-changes)
9. [  09   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)*

 Found this useful?

          [  ](https://twitter.com/intent/tweet?url=https%3A%2F%2Fmsaied.com%2Farticles%2Froute-metadata-support-and-more-in-laravel-1317&text=Route+Metadata+Support+and+More+in+Laravel+13.17) [  ](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fmsaied.com%2Farticles%2Froute-metadata-support-and-more-in-laravel-1317) 

 Frequently Asked Questions 
----------------------------

  3 questions  

     Q01  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. 

      Q02  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. 

      Q03  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. 

  Continue reading

 More Articles 
---------------

 [ View all    ](https://msaied.com/articles) 

 [ ![Typed Enums as First-Class Domain Citizens in Laravel with PHP 8.3](https://cdn.msaied.com/282/71a8fc3e4cf4239b1bf6d38d57e0b985.png) laravel php8.3 enums 

### Typed Enums as First-Class Domain Citizens in Laravel with PHP 8.3

Go beyond simple enum labels. Learn how to attach behaviour, implement interfaces, and use backed enums as Elo...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 24 Jun 2026     3 min read  

  Read    

 ](https://msaied.com/articles/typed-enums-as-first-class-domain-citizens-in-laravel-with-php-83) [ ![RAG in Laravel: pgvector, Embeddings, and Retrieval-Augmented Generation in Practice](https://cdn.msaied.com/281/8d2ac57c0e69d3ff9f1e68faf0e4d10c.png) laravel ai pgvector 

### RAG in Laravel: pgvector, Embeddings, and Retrieval-Augmented Generation in Practice

Build a production-ready RAG pipeline in Laravel using pgvector, OpenAI embeddings, and a clean retrieval laye...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 24 Jun 2026     4 min read  

  Read    

 ](https://msaied.com/articles/rag-in-laravel-pgvector-embeddings-and-retrieval-augmented-generation-in-practice) [ ![Ship AI with Laravel: Failover, Queues, and Middleware for AI Agents](https://cdn.msaied.com/283/f0a6d6a6f22d9131bacb96bae1bfc10b.png) Laravel AI Agents Queues 

### Ship AI with Laravel: Failover, Queues, and Middleware for AI Agents

Learn how to make Laravel AI agents production-ready with automatic provider failover, background queue proces...

  ![Mohamed Said](https://cdn.msaied.com/01KT78WE565VEMM3PSNQAAB0MJ.jpg)  Mohamed Said 

 24 Jun 2026     3 min read  

  Read    

 ](https://msaied.com/articles/ship-ai-with-laravel-failover-queues-and-middleware-for-ai-agents) 

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

Explore

- [Home](https://msaied.com)
- [Projects](https://msaied.com/projects)
- [Articles](https://msaied.com/articles)
- [Certificates](https://msaied.com/certificates)
- [Contact](https://msaied.com#contact-section)

Connect

- [   hello@msaied.com ](mailto:hello@msaied.com)
- [   +20 109 461 9204 ](tel:+201094619204)

© 2026 Mohamed Said. All rights reserved.

 [  ](https://github.com/EG-Mohamed) [  ](https://www.linkedin.com/in/msaiedm/) [  ](https://wa.me/201094619204) [  ](mailto:hello@msaied.com) [  ](https://drive.google.com/file/u/0/d/1MF20IPRJyzfy32mhEutjL5EpSls0w2Q8/view)
