---
layout: commands
page_title: 'Commands: Config Write'
description: >-
  The `consul config write` command creates or updates a configuration entry and applies it to your deployment.
---

# Consul Config Write

Command: `consul config write`

Corresponding HTTP API Endpoint: [\[PUT\] /v1/config](/consul/api-docs/config#apply-configuration)

The `config write` command creates or updates a centralized config entry.
See the [configuration entries docs](/consul/docs/fundamentals/config-entry) for more
details about configuration entries.

The table below shows this command's [required ACLs](/consul/api-docs/api-structure#authentication). Configuration of
[blocking queries](/consul/api-docs/features/blocking) and [agent caching](/consul/api-docs/features/caching)
are not supported from commands, but may be from the corresponding HTTP endpoint.

| ACL Required<sup>1</sup>                                      |
| ------------------------------------------------------------- |
| `service:write`<br />`operator:write`<br />`intentions:write` |

<p>
  <sup>1</sup> The actual ACL required depends on the config entry kind being
  updated:
</p>

| Config Entry Kind   | Required ACL       |
| ------------------- | ------------------ |
| api-gateway         | `mesh:write`       |
| ingress-gateway     | `operator:write`   |
| proxy-defaults      | `operator:write`   |
| service-defaults    | `service:write`    |
| service-intentions  | `intentions:write` |
| service-resolver    | `service:write`    |
| service-router      | `service:write`    |
| service-splitter    | `service:write`    |
| terminating-gateway | `operator:write`   |

## Usage

Usage: `consul config write [options] FILE`

#### Command Options

- `-cas` - Specifies to use a Check-And-Set operation. If the index is
  0, Consul will only store the entry if it does not already exist. If the index is
  non-zero, the entry is only set if the current index matches the `ModifyIndex`
  of that entry.

#### Enterprise Options

@include 'legacy/cli-http-api-partition-options.mdx'

@include 'legacy/http_api_namespace_options.mdx'

#### API Options

@include 'legacy/http_api_options_client.mdx'

## Examples

From file:

    $ consul config write web-defaults.json

From stdin:

    $ consul config write -

### Config Entry examples

All config entries must have a `Kind` when registered. See
[Service Mesh - Config Entries](/consul/docs/fundamentals/config-entry) for the list of
supported config entries.

#### Service defaults

Service defaults control default global values for a service in the service mesh.
For example, the following configuration defines that all instances of the `web`
service use the `http` protocol.

```json
{
  "Kind": "service-defaults",
  "Name": "web",
  "Protocol": "http"
}
```

For more information, refer to the [service defaults configuration reference](/consul/docs/reference/config-entry/service-defaults).

#### Proxy defaults

Proxy defaults lets you configure global config defaults across all proxies
in the service mesh. Currently, it supports only one global entry.
For example, the following configuration overrides a default timeout for all
Envoy proxies.

```json
{
  "Kind": "proxy-defaults",
  "Name": "global",
  "Config": {
    "local_idle_timeout_ms": 20000
  }
}
```

For more information, refer to the [proxy defaults configuration reference](/consul/docs/reference/config-entry/proxy-defaults).
