# Configuration reference

> The two published schemas of the configuration and of the contract extensions, and what every key carries: type, default, version, reload.

Reference - Since version 1.7.0 - Flexway v1.7.1 - https://flexway.io/en/docs/operations-configuration-reference/

> Operations guide: configure, deploy and observe the gateway. What the feature does, product side: [product guide](https://flexway.io/en/docs/product-overview/); calling it: [developer guide](https://flexway.io/en/docs/developer-overview/).

Know, for every keyword, its syntax, options and allowed values - before writing it.

## The published schemas

The reference is the **published schema**, written from the gateway's model at every version - never
by hand, so never behind the code:

| File | What it describes | Address |
| --- | --- | --- |
| `flexway.schema.json` | All of `flexway.yaml`, and the `config` of every policy type (under `$defs`, `policy.<type>`) | `https://flexway.io/schema/v1/flexway.schema.json` |
| `architecture.schema.json` (since `1.7.0`) | The `flexway.architecture.v1` architecture model the console's Architecture screen serves: routes, stations, interchanges, refusals, what is not drawn | `https://flexway.io/schema/v1/architecture.schema.json` |
| `contract-extensions.schema.json` | Every `x-flexway-*` contract extension (OpenAPI, AsyncAPI, A2A card) and the gRPC option `flexway.v1.operation` | `https://flexway.io/schema/v1/contract-extensions.schema.json` |
| `policy-fragment.schema.json` | A policy fragment file (`kind: PolicyFragment`, [shared fragments](https://flexway.io/en/docs/operations-policy-fragments/)) - since `1.7.0` | `https://flexway.io/schema/v1/policy-fragment.schema.json` |

Each file is attached to the releases from the one that delivers it, and written by `flexway schema` from the version's image
([validate in your editor](https://flexway.io/en/docs/operations-editor-validation/)).

## What every key carries

| Schema field | Meaning |
| --- | --- |
| `type`, `enum`, `pattern`, `minimum`, `maximum` | Syntax and allowed values; a duration is written `3s`, `250ms`, `1m30s`, a size `1MiB`, `512KiB` |
| `default` | The value in force when the key is absent |
| `required` | The keys to write as soon as the block holding them is written |
| `additionalProperties: false` | Decoding is strict: an unknown key is refused |
| `description` (English), `x-flexway-description` (`fr`, `en`) | What the key does, its options, its refusals |
| `x-flexway-since` | The version that brought the key |
| `x-flexway-reloadable` | `false`: changing this key requires a restart, the reload is refused whole |
| `x-flexway-reference` | A secret: a `${VAR}` or `file:/path` reference, never the value |
| `x-flexway-places` (extensions) | Where the extension is read: `openapi.info`, `openapi.operation`, `asyncapi.operation`, `asyncapi.parameter`, `asyncapi.message`, `a2a.card`, `grpc.method` |

## Example

`flexway schema --out .` then look up a key, for instance `server.timeouts.connect`:
`type: string`, `default: "5s"`, `x-flexway-since: "0.2.0"`, `x-flexway-reloadable: true` and its
description.

> [!NOTE]
> The schema describes each key on its own; the rules that cross the configuration and the contracts
> remain those of `flexway validate`.
