# Manage Destinations using Rudder CLI


{{< announcement >}}
This feature is in **Public Beta** as part of RudderStack's Early Access Program, where we work with early users and customers to test new features and get feedback before making them generally available.

[Contact the Product team](mailto:product@rudderstack.com) if you have any questions.
{{< /announcement >}}

Rudder CLI lets you manage [destinations]({{< ref "destinations/overview.md" >}}) as code. You define each destination in YAML, validate the spec locally, and apply it to your workspace with the same Git-based workflow you use for sources and other CLI resources.

A destination spec is the endpoint a [connection]({{< ref "dev-tools/rudder-cli/connections.md" >}}) points at. You declare the destination in the same project as the source, then declare the connection that links them.

{{< warning >}}
**Destination support is experimental**.

Enable the `destinationSupport` flag in your CLI configuration (or set `RUDDERSTACK_X_DESTINATION_SUPPORT=true`) before you validate or apply destination resources. Without it, the `destination` kind is not registered and your specs fail validation.

Rudder CLI currently supports **Amazon S3** (`s3`). See [Supported destination types]({{< ref "dev-tools/rudder-cli/yaml-destinations.md#supported-destination-types" >}}).
{{< /warning >}}

## Key features

### Declarative YAML configuration

- Define destinations in YAML with a type, definition version, and per-type `config` block. See the [Destination YAML Reference]({{< ref "dev-tools/rudder-cli/yaml-destinations.md" >}}).
- Keep credentials out of Git by referencing secrets as `{{ .VAR }}` and supplying them at apply time with `--var-file`. See [How to Use Variable Substitution in Rudder CLI]({{< ref "dev-tools/rudder-cli/variable-substitution.md" >}}).
- Optionally link a [transformation]({{< ref "dev-tools/rudder-cli/manage-transformations.md" >}}) with a `#transformation:` reference. Connection mode per source type stays in the destination `config` block — not on the connection spec.

### Git integration and CI/CD support

- Import destinations that already exist in your workspace, then manage them through Git.
- Validate and apply destination specs with the same `rudder-cli validate` and `rudder-cli apply` commands you use for other resources.
- Use [GitHub Actions]({{< ref "dev-tools/rudder-cli/github-actions" >}}) to run those commands in CI.

## Who can use this feature?

CLI-based destination management is useful when you need to:

- Version destination configuration next to the sources and connections that use it.
- Review destination changes in pull requests before they reach a workspace.
- Reproduce the same destination setup across development and production workspaces.

## Supported destinations

Rudder CLI currently supports **Amazon S3** (`s3`). The dashboard catalog is larger than what you can define in CLI YAML.

{{< customreadfile "/includes/rudder-cli/unverified-destinations-later.md" >}}

See [Supported destination types]({{< ref "dev-tools/rudder-cli/yaml-destinations.md#supported-destination-types" >}}) for the `type` value you use in YAML.

## Get started

- Follow the [End-to-End Walkthrough: Destinations with Rudder CLI]({{< ref "dev-tools/rudder-cli/destinations-walkthrough.md" >}}) to define, validate, and apply a destination
- See the [Destination YAML Reference]({{< ref "dev-tools/rudder-cli/yaml-destinations.md" >}}) for field definitions, examples, and secrets
- See [How to Use Variable Substitution in Rudder CLI]({{< ref "dev-tools/rudder-cli/variable-substitution.md" >}}) to keep destination credentials out of Git
- Connect the destination to a source with [Manage Connections using Rudder CLI]({{< ref "dev-tools/rudder-cli/connections.md" >}})
- Automate with [GitHub Actions for Rudder CLI]({{< ref "dev-tools/rudder-cli/github-actions" >}})

