# Data Catalog and Tracking Plan Management using Rudder CLI


{{< announcement >}}
This feature is in **Public Beta**, where we work with early users and customers to test new features and get feedback before making them generally available.

Before you get started, note the following:

- See the [limitations](#limitations) section to learn more about current differences between the CLI and UI.
- RudderStack recommends testing this feature in a clean **Dev** workspace.
- [Contact the Product team](mailto:product@rudderstack.com) if you have any questions.
{{< /announcement >}}

RudderStack's CLI-based Tracking Plans management feature helps you manage [Tracking Plans]({{< ref "data-governance/tracking-plans/" >}}) and [Data Catalog]({{< ref "data-governance/data-catalog/" >}}) as code by leveraging the new CLI-based workflow. It helps you bring data governance into your existing development workflows through code-first management.

With this feature, you can bring the same rigor and process to your Tracking Plans that you apply to your application code, ensuring consistency and quality in your data collection strategy.

## Key features

With RudderStack's CLI-based Tracking Plan management, you get the following features:

### Declarative YAML configuration

- Define and manage events, properties, and Tracking Plans directly in your codebase using simple [YAML files]({{< ref "dev-tools/rudder-cli/yaml-data-catalog-and-tracking-plans/" >}}).
- Create reusable property definitions with [advanced validation rules]({{< ref "data-governance/data-catalog/properties.md#advanced-rules" >}}) like minimum/maximum length, patterns, enums, etc. across multiple events.
- Define dynamic validation rules using [Conditional Validation]({{< ref "dev-tools/rudder-cli/data-catalog-and-tracking-plans/conditional-validation/" >}}) that adapt based on context.
- Leverage a structured referencing system to associate events and properties to a Tracking Plan.

### Powerful Rudder CLI tool

This feature comes with a powerful [Rudder CLI]({{< ref "dev-tools/rudder-cli/" >}}) utility that lets you:

- Create, update, and delete Tracking Plan resources via command line.
- Verify your YAML configurations locally before pushing changes to production.
- Sync the local configuration files with your RudderStack workspace.

{{< success >}}
In contrast to how Infrastructure-as-Code (IaC) tools typically depend on external object storage like S3 to maintain their state, you can store the relevant state directly in RudderStack, thereby significantly reducing configuration overhead.

You only need the YAML configuration files and a [RudderStack token]({{< ref "dev-tools/rudder-cli/data-governance-walkthrough.md#prerequisites" >}}) to use Rudder CLI.
{{< /success >}}

### Git integration and CI/CD support

- Leverage [GitHub Actions]({{< ref "dev-tools/rudder-cli/github-actions/" >}}) to automatically validate and deploy Tracking Plans from your repository.
- Use the standard Git workflows to track changes, implement version control, manage branches, and make any other modifications.

## Who can use this feature?

The CLI-based Data Catalog and Tracking Plan management feature is helpful for data teams who need to:

- Manage their Tracking Plans and Data Catalog programmatically with consistent tracking standards.
- Integrate their Tracking Plan changes into their existing development workflows.
- Validate their Tracking Plan changes before deployment.

## Get started

See the following guides for detailed documentation on managing Data Catalog and Tracking Plans using Rudder CLI:

- [CLI-based Data Catalog and Tracking Plan Management]({{< ref "dev-tools/rudder-cli/data-catalog-and-tracking-plans/" >}})
- [Data Catalog and Tracking Plans YAML Reference]({{< ref "dev-tools/rudder-cli/yaml-data-catalog-and-tracking-plans/" >}})
- [Conditional Validation in CLI-based Tracking Plan Management]({{< ref "dev-tools/rudder-cli/data-catalog-and-tracking-plans/conditional-validation/" >}})
- [GitHub Actions for Data Catalog and Tracking Plans]({{< ref "dev-tools/rudder-cli/github-actions/" >}})

## Limitations

Rudder CLI only supports **pushing** updates to RudderStack, not **pulling**. This means you will need to test with a clean **Dev** workspace where the Data Catalog is empty and there are no Tracking Plans. 

[Contact the Product team](mailto:product@rudderstack.com) or your Technical Account Manager if you need a new workspace.

<br />

