# LwrConfigRouteDefinition

:::important
To configure a router module with the [Router Module Provider](https://developer.salesforce.com/docs/platform/lwr/guide/lwr-create-router.html#router-module-provider), you have to set up both [`LwrRouterConfig`](/docs/platform/lwr/references/csr-reference/lwrrouterconfig.md) and `LwrConfigRouteDefinition`.
:::

## Syntax

```sfdocs-code {"lang":"json", "title": "", "src": "" }
interface LwrConfigRouteDefinition<TMetadata = Record<string, any>> {
    id: string;
    uri: string;
    page: Partial<PageReference>
    patterns?: { [paramName: string]: string };
    exact?: boolean;
    metadata?: TMetadata;
    // LwrConfigRouteDefinition must have ONE of the following, not both
    handler?: string; // a STRING reference to the handler class
    component?: string; // a STRING reference to a page component
}
```

## Properties

`LwrConfigRouteDefinition` object contains similar properties as the [`RouteDefinition`](/docs/platform/lwr/references/csr-reference/routedefinition.md) object. `handler` and `component` are string references, as LwrConfigRouteDefinition is pure JSON and can't contain any functions. Only define either the `handler` or `component` property, **not both**.

| Property    | Type    | Required/Optional | Description                                                                                                                                                                                                                                                                                                                                                                                                      |
| ----------- | ------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`        | String  | Optional          | Each `LwrConfigRouteDefinition` must have a unique `id` identifier.                                                                                                                                                                                                                                                                                                                                              |
| `uri`       | String  | Optional          | A pattern for URI locations that match the `LwrConfigRouteDefinition`. You can't use the `#` and `*` characters.                                                                                                                                                                                                                                                                                                 |
| `page`      |         | Required          | The form of page references that match the `LwrConfigRouteDefinition`. `page` values can be `:parameter` bindings, which map a path or query parameter from the URI to an `attributes` or `state` property, or literal bindings, which hard code a `type`, `attribute`, or `state` property to a literal value. Literal bindings can't contain the following characters: `?`, `*`, `#`, `&`, `+`, `;`, `(`, `)`. |
| `patterns`  |         | Optional          | A regular expression that a parameter has to match to be valid. To prevent unexpected values in the expression pattern, explicitly wrap the expression in the start-of-line character (`^`) and end-of-line character (`$`). For example: `{"patterns": {"parameter": "^id[0-9a-zA-Z]{5}$"}}`.                                                                                                                   |
| `exact`     | Boolean | Optional          | If there's a nested router, this value must be `false`. The default value is `true`.                                                                                                                                                                                                                                                                                                                             |
| `metadata`  |         | Optional          | Developer-defined metadata in the form of key (string) and value (any type) pairs. You can use the `metadata` property to attach additional information to an `LwrConfigRouteDefinition`. Extend `LwrConfigRouteDefinition` for required or more strongly typed metadata.                                                                                                                                        |
| `handler`   | String  | See description   | An `LwrConfigRouteDefinition` must contain a handler or a component, but not both. `handler` is a string reference to the `RouteHandler` class specifier.                                                                                                                                                                                                                                                        |
| `component` | String  | See description   | An `LwrConfigRouteDefinition` must contain a handler or a component, but not both. `component` is a string reference to the view component specifier. Use this property to directly specify the view component without authoring a route handler.                                                                                                                                                                |

## Example

```sfdocs-code {"lang":"json", "title": "Two LwrConfigRouteDefinition objects", "src": "" }
{
    "id": "home",
    "uri": "/",
    "component": "examples/home",
    "page": {
        "type": "home"
    },
    "metadata": {
        "title": "Home"
    }
},
{
    "id": "namedPage",
    "uri": "/:pageName",
    "handler": "examples/namedPageHandler",
    "page": {
        "type": "namedPage",
        "attributes": {
            "pageName": ":pageName"
        }
    }
}
```

**See Also**

- [Routers and Route Matching: Route Definitions](/docs/platform/lwr/guide/lwr-routers-route-matching.html#route-definitions)
- [Create a Router: Configure the Router JSON](/docs/platform/lwr/guide/lwr-create-router.html#4-configure-the-router-json)
