# Rudder CLI: General Availability


> Rudder CLI 1.0.0 is generally available. An agent writes pipelines and business rules as code, you approve the change, and you apply that spec to any environment.



[Rudder CLI](https://www.rudderstack.com/docs/releases/rudder-cli/) is now **Generally Available** with the v1.0.0 release. It is agent-first: an agent writes your pipelines and business rules as versioned YAML, you approve the change, and you apply that spec to any environment.

The resources it manages — tracking plans and Data Catalog, Event Stream sources, destinations, connections, transformations and libraries, Data Graphs, and Reverse ETL sources and accounts — are covered by the stable `rudder/v1` spec format. From here on the CLI follows semantic versioning, so a spec that applies cleanly today keeps applying until a major release.

**Announcement:** Rudder CLI is **Generally Available** on all RudderStack plans. [Conditional Validation](https://www.rudderstack.com/docs/rudder-cli/data-catalog-and-tracking-plans/conditional-validation/) remains in **Private Beta**.

See the [Rudder CLI Overview](https://www.rudderstack.com/docs/releases/rudder-cli/) for the full feature set.

## Why we made this change

In Public Beta, Rudder CLI did not guarantee backward compatibility between releases. That is hard to build a deployment pipeline on: a spec that applied in one release could need edits in the next, so teams kept workspace changes manual or pinned an old binary and stopped upgrading.

GA changes the contract, not the commands. `rudder/v1` is the stable spec format, releases follow semantic versioning, and a change that forces you to edit specs, flags, or workflows lands only in a major release and is recorded in [BREAKING_CHANGES.md](https://github.com/rudderlabs/rudder-iac/blob/main/BREAKING_CHANGES.md).

## What's new

- **Agent-first infrastructure as code**: An agent writes pipelines and business rules as YAML. You review that change, then apply it to any environment.
- **A stable spec contract**: `rudder/v1` is the supported format. Upgrade a `rudder/0.1` project in place with `rudder-cli migrate --location <path>`.
- **Semantic versioning**: Patch and minor releases keep your specs working; breaking changes are reserved for a major version.
- **46 destination types**: Amplitude, Braze, Salesforce, Snowflake, BigQuery, Apache Kafka, Google Analytics 4, and more, each with a per-type config reference.
- **Typed bindings from your tracking plans**: RudderTyper v2 generates TypeScript, Kotlin, and Swift bindings from a Tracking Plan, including from local specs with `--local`.
- **Import what already exists**: Bring a whole workspace or single resources under Git control, with secrets scaffolded as variable references.
- **Validate before you apply**: Rule-based validation for v1 specs, with JSON diagnostics for CI and secrets masked in output.

## Get started

1. [Install Rudder CLI](https://www.rudderstack.com/docs/rudder-cli/installation/) with the one-line installer: `curl -fsSL https://github.com/rudderlabs/rudder-iac/releases/latest/download/install.sh | sh`
2. [Authenticate the CLI](https://www.rudderstack.com/docs/releases/rudder-cli/#authenticate-the-cli) with a workspace access token.
3. [Import your existing workspace](https://www.rudderstack.com/docs/rudder-cli/import-resources/), or set up a new [project](https://www.rudderstack.com/docs/rudder-cli/project-setup/).
4. Validate locally, then run `rudder-cli apply` to sync your workspace.

See the [Installation guide](https://www.rudderstack.com/docs/rudder-cli/installation/) for platform-specific steps.

## Resources

- [Rudder CLI Overview](https://www.rudderstack.com/docs/releases/rudder-cli/): Supported resource types and workflows
- [CLI Commands Reference](https://www.rudderstack.com/docs/rudder-cli/commands/): Every command and flag
- [Migration Guide](https://www.rudderstack.com/docs/rudder-cli/migration-guide/): Moving a project from `rudder/0.1` to `rudder/v1`
- [Validations](https://www.rudderstack.com/docs/rudder-cli/validations/): The rules applied before an apply
- [Variable Substitution](https://www.rudderstack.com/docs/rudder-cli/variable-substitution/): Keeping secrets out of Git

<!-- REVIEW(DOCS) — `sources listen` GA status is BLOCKED, left at alpha: true.

The Slack announcement listed `sources listen` as a v1.0.0 capability and the
reviewer asked for it to be marked GA. It cannot be, as of v1.0.0:

  - rudder-iac/cli/internal/config/experimental.go:32 defines
    `SourcesListen bool `mapstructure:"sourcesListen"`` — an experimental flag,
    off by default.
  - rudder-iac/cli/tests/command_sources_test.go:35 shows enabling it requires
    `rudder-cli experimental enable sourcesListen`.
  - verify-events-locally.md:18-22 states it "can change or be removed in future
    releases".

Documenting it as GA would claim general availability for a feature that ships
disabled by default, and "may be removed" contradicts the semantic-versioning
commitment now stated in installation.md.

To make it genuinely GA, rudder-iac must enable `sourcesListen` by default and
drop the experimental gate — a code change, out of scope for this docs PR.
Resolve by either (a) landing that rudder-iac change and then flipping these two
pages, or (b) keeping Alpha. Until then these pages stay alpha: true and the
release note does not mention `sources listen`.

For contrast: rETL table sources are also called "experimental" in a code
comment (rudder-iac/cli/internal/providers/retl/provider.go:87), but
`retl.WithTableSupport()` is wired unconditionally at
cli/internal/app/dependencies.go:268, so they are on by default and are
correctly marked GA here. The stale comment is a rudder-iac nit.
-->

