---
title: "Router"
url: "/reference/filters/http/router/"
kind: "reference"
summary: "The mandatory terminal HTTP filter that executes the routing decision and sends the request upstream."
---

> Arion site index: [/llms.txt](/llms.txt)

# Router

The mandatory terminal HTTP filter that executes the routing decision and sends the request upstream.

| Attachment | Type URL (`@type`) | Per-route override | Build feature |
|---|---|---|---|
| HTTP filter chain (`http_filters`, terminal) | `type.googleapis.com/envoy.extensions.filters.http.router.v3.Router` | Not applicable | None |

## What it does

The router ends every HTTP filter chain: it executes the route selected by the [route configuration](@/reference/resources/routes.md) — forwarding to a cluster, serving a direct response, or issuing a redirect — and applies the route's retries, timeouts and header mutations. It is not optional. The last entry in `http_filters` must be a router, a router anywhere else in the chain is rejected, and it cannot be disabled.

## Minimal configuration

The fragment is the last entry of `http_filters` inside the HTTP connection manager:

```yaml,arion=fragment
- name: envoy.filters.http.router
  typed_config:
    "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
    start_child_span: false
```

## Fields

The router takes no configuration in Arion. The YAML parser needs at least one field in the message, so write one field at its default value — the sample configs use `start_child_span: false`.

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `start_child_span` | bool | No | `false` | Accepted only at its default. Setting it to `true`, or setting any other Envoy router field (`dynamic_stats`, `upstream_log`, `suppress_envoy_headers`, …), is rejected at startup. |

## Ordering and interactions

Everything before the router can still short-circuit the request — a rate limit 429, an RBAC 403, a CORS preflight response — in which case the router never runs. Once the request reaches the router, upstream selection, load balancing and retry behavior come from the matched route and its cluster, not from filter configuration; see [routing](@/docs/traffic/routing.md) and [upstreams and load balancing](@/docs/traffic/upstreams-and-load-balancing.md).
