<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RudderStack Docs – Rudder CLI v0.1</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/</link><description>Recent content in Rudder CLI v0.1 on RudderStack Docs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/index.xml" rel="self" type="application/rss+xml"/><item><title>Archive: Install Rudder CLI</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/</guid><description>
&lt;p>&lt;a href="https://github.com/rudderlabs/rudder-iac" >Rudder CLI&lt;/a> is a command-line interface tool designed to interact with RudderStack&amp;rsquo;s services, facilitating tasks like CLI-based configuration, management, and deployment of Tracking Plans and Data Catalog. See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" >CLI-based Tracking Plan Management&lt;/a> for more information on this feature.&lt;/p>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>This tool is currently under active development and there may be frequent changes and updates to it.&lt;/p>
&lt;p>Also, backward compatibility is not guaranteed at this stage.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="install-rudder-cli" data-heading="Install Rudder CLI" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/" data-title="Install Rudder CLI" -->
&lt;h2 id="install-rudder-cli">Install Rudder CLI&lt;/h2>&lt;p>This section contains the Rudder CLI installation steps for your preferred platform.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="macos" data-heading="macOS" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/" data-title="Install Rudder CLI" -->
&lt;h3 id="macos">macOS&lt;/h3>&lt;p>You can install the Rudder CLI on macOS devices depending on your chip configuration:&lt;/p>
&lt;nav>
&lt;div class="nav nav-tabs" id="nav-tab" role="tablist">
&lt;a class="nav-item nav-link active "
id="nav-ceadbf" data-toggle="tab" href="#ceadbf"
role="tab" aria-controls="nav-home" aria-selected="true">Apple Silicon&lt;/a>
&lt;a class="nav-item nav-link "
id="nav-dfabce" data-toggle="tab" href="#dfabce"
role="tab" aria-controls="nav-home" aria-selected="true">Intel-based&lt;/a>
&lt;/div>
&lt;/nav>
&lt;div class="tab-content" id="nav-tab-content">
&lt;div class="tab-pane fade show active " id="ceadbf" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -L https://github.com/rudderlabs/rudder-iac/releases/latest/download/rudder-cli_Darwin_arm64.tar.gz &lt;span class="p">|&lt;/span> tar -xz rudder-cli
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mv rudder-cli /usr/local/bin/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade show " id="dfabce" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -L https://github.com/rudderlabs/rudder-iac/releases/latest/download/rudder-cli_Darwin_x86_64.tar.gz &lt;span class="p">|&lt;/span> tar -xz rudder-cli
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mv rudder-cli /usr/local/bin/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="linux" data-heading="Linux" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/" data-title="Install Rudder CLI" -->
&lt;h3 id="linux">Linux&lt;/h3>&lt;p>Run the following command to install Rudder CLI in your Linux machine:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">curl -L https://github.com/rudderlabs/rudder-iac/releases/latest/download/rudder-cli_Linux_x86_64.tar.gz &lt;span class="p">|&lt;/span> tar -xz rudder-cli
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mv rudder-cli /usr/local/bin/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="docker" data-heading="Docker" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/" data-title="Install Rudder CLI" -->
&lt;h3 id="docker">Docker&lt;/h3>&lt;p>You can run the Rudder CLI tool directly via Docker by running the following command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run rudderlabs/rudder-cli
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If you need to persist your configuration or provide an external configuration file, you can mount your local configuration directory into the container.&lt;/p>
&lt;p>Assuming your configuration directory is located at &lt;code>~/.rudder&lt;/code>, you can run the following command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -v ~/.rudder:/.rudder rudderlabs/rudder-cli
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>To run commands with the local data catalog files, mount the directory containing your files and use the &lt;code>-l&lt;/code> flag, as shown:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -v ~/.rudder:/.rudder -v ~/my-catalog:/catalog rudderlabs/rudder-cli apply --dry-run -l /catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above command uses the access token from your local configuration file and the Catalog files from the &lt;code>/catalog&lt;/code> directory.&lt;/p>
&lt;p>You can also use the &lt;code>RUDDERSTACK_ACCESS_TOKEN&lt;/code> environment variable to provide the access token, as shown:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">docker run -v ~/my-catalog:/catalog -e &lt;span class="nv">RUDDERSTACK_ACCESS_TOKEN&lt;/span>&lt;span class="o">=&lt;/span>your-access-token rudderlabs/rudder-cli apply --dry-run -l /catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="build-rudder-cli-from-source" data-heading="Build Rudder CLI from source" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/" data-title="Install Rudder CLI" -->
&lt;h2 id="build-rudder-cli-from-source">Build Rudder CLI from source&lt;/h2>&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">Make sure to have Go installed and set up in your environment before following the steps in this section.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>Run the following commands in order:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">git clone https://github.com/rudderlabs/rudder-iac.git
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> rudder-iac
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">make build
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo mv bin/rudder-cli /usr/local/bin/
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>make build&lt;/code> command is used to run the build process.&lt;/p>
&lt;br /></description></item><item><title>Archive: Data Catalog Project Setup</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/project-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/project-setup/</guid><description>
&lt;p>This guide shows you how to set up your project containing the definitions of your Data Catalog resources.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="overview" data-heading="Overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/project-setup/" data-title="Data Catalog Project Setup" -->
&lt;h2 id="overview">Overview&lt;/h2>&lt;p>In the context of the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/" >Rudder CLI&lt;/a> tool, a Data Catalog project typically consists of a root directory that contains all the project files. Within this root directory, each YAML file can contain definitions for resources of a particular type, for example, events, properties, custom data types, and Tracking Plans.&lt;/p>
&lt;p>The location and naming of these YAML files is flexible, as you can store the YAML files anywhere within the project&amp;rsquo;s root directory or subdirectories.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="set-up-your-project" data-heading="Set up your project" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/project-setup/" data-title="Data Catalog Project Setup" -->
&lt;h2 id="set-up-your-project">Set up your project&lt;/h2>&lt;p>The Rudder CLI tool expects the Data Catalog resources to be described in &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" >YAML files&lt;/a> present in your system.&lt;/p>
&lt;p>If you&amp;rsquo;re working with a Unix-compatible shell, run the following command to create a &lt;code>tutorial-catalog&lt;/code> folder in your home directory, which you can use to populate the Data Catalog resources as YAML files:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">mkdir ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote class="success">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/tick.svg loading="lazy" alt="success" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">
The Rudder CLI tool automatically processes all valid YAML files within the project structure to recognize the defined resources.
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="next-steps" data-heading="Next steps" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/project-setup/" data-title="Data Catalog Project Setup" -->
&lt;h2 id="next-steps">Next steps&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/data-catalog/events/" >Create events&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/data-catalog/events/#event-categories" >Create event categories&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/data-catalog/properties/" >Create properties&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/data-catalog/custom-types/" >Create custom types&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" >Data Catalog YAML Reference&lt;/a> for the detailed YAML spec containing the definitions of these Data Catalog resources.&lt;/p>
&lt;br /></description></item><item><title>Archive: Recommended Project Directory Structure</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/</guid><description>
&lt;p>This guide outlines a recommended directory structure for organizing your RudderStack Data Catalog resources and Tracking Plans as YAML files in a Git repository.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-rudder-cli-works" data-heading="How Rudder CLI works" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h2 id="how-rudder-cli-works">How Rudder CLI works&lt;/h2>&lt;p>The Rudder CLI tool (&lt;code>rudder-cli&lt;/code>) is flexible in how it processes your YAML files:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>File discovery&lt;/strong>: The CLI recursively scans the specified directory (or project root) for all &lt;code>.yaml&lt;/code> and &lt;code>.yml&lt;/code> files.&lt;/li>
&lt;li>&lt;strong>Flexible organization&lt;/strong>: You can organize files in any directory structure that makes sense for your project.&lt;/li>
&lt;li>&lt;strong>No naming requirements&lt;/strong>: File names and directory names are completely flexible—the CLI identifies resources by their &lt;code>kind&lt;/code> and content, not file location.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="important-yaml-file-requirements" data-heading="Important YAML file requirements" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h2 id="important-yaml-file-requirements">Important YAML file requirements&lt;/h2>&lt;p>Before organizing your files, understand these critical requirements:&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="single-yaml-object-per-file" data-heading="Single YAML object per file" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h3 id="single-yaml-object-per-file">Single YAML object per file&lt;/h3>&lt;p>Each YAML file must contain exactly one YAML document/object with the standard structure:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="l">events|properties|custom-types|tp]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="l">unique-name]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># Resource definitions&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="collection-capabilities-by-kind" data-heading="Collection capabilities by kind" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h3 id="collection-capabilities-by-kind">Collection capabilities by kind&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Kind&lt;/th>
&lt;th>Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>&lt;code>kind: events&lt;/code>&lt;/td>
&lt;td>Can contain multiple event definitions in the &lt;code>spec.events&lt;/code> array&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>kind: categories&lt;/code>&lt;/td>
&lt;td>Can contain multiple event category definitions in the &lt;code>spec.categories&lt;/code> array&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>kind: properties&lt;/code>&lt;/td>
&lt;td>Can contain multiple property definitions in the &lt;code>spec.properties&lt;/code> array&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>kind: custom-types&lt;/code>&lt;/td>
&lt;td>Can contain multiple custom type definitions in the &lt;code>spec.types&lt;/code> array&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;code>kind: tp&lt;/code>&lt;/td>
&lt;td>Contains &lt;strong>exactly one&lt;/strong> Tracking Plan definition&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="unique-resource-identification" data-heading="Unique resource identification" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h3 id="unique-resource-identification">Unique resource identification&lt;/h3>&lt;ul>
&lt;li>Each resource (event, property, custom type, Tracking Plan) must have a unique &lt;code>id&lt;/code> across the entire project.&lt;/li>
&lt;li>No duplicate &lt;code>id&lt;/code> values are allowed, even across different YAML files.&lt;/li>
&lt;li>Rudder CLI uses &lt;code>kind&lt;/code> + &lt;code>metadata.name&lt;/code> + resource &lt;code>id&lt;/code> to create unique references.&lt;/li>
&lt;/ul>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>Avoid resource duplication&lt;/strong>&lt;/p>
&lt;p>Do not define the same resource (event, property, or custom type) in multiple YAML files. Each resource should exist in only one file to prevent duplication and potential confusion.&lt;/p>
&lt;p>If you need to reference a resource from another file, use the &lt;code>$ref&lt;/code> syntax instead of redefining it.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="tracking-plan-limitation" data-heading="Tracking Plan limitation" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h3 id="tracking-plan-limitation">Tracking Plan limitation&lt;/h3>&lt;ul>
&lt;li>Each Tracking Plan YAML file (&lt;code>kind: tp&lt;/code>) can define only one Tracking Plan.&lt;/li>
&lt;li>If you need multiple Tracking Plans, create separate YAML files for each.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="recommended-directory-structure" data-heading="Recommended directory structure" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h2 id="recommended-directory-structure">Recommended directory structure&lt;/h2>&lt;p>The recommended directory structure offers developers a clear organizational hierarchy for configuration files while maintaining high-level alignment with the Data Governance structure in the RudderStack UI:&lt;/p>
&lt;ul>
&lt;li>The Data Catalog and Tracking Plans are managed in separate, dedicated folders&lt;/li>
&lt;li>Business logic is reflected by grouping events and properties into business-specific folders (for example, &lt;code>/product&lt;/code> and &lt;code>/marketing&lt;/code>)
&lt;ul>
&lt;li>In complex environments, you can maintain clarity by using separate files for similar assets within a business-specific folder (for example, the &lt;code>events/checkout&lt;/code> folder has separate files for &lt;code>cart-events&lt;/code> and &lt;code>purchase-events&lt;/code>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>Tracking Plans are grouped by source
&lt;ul>
&lt;li>In complex environments, you can create dedicated Tracking Plans for use cases within a source folder (for example, &lt;code>/tracking-plans/web/checkout-flow.yaml&lt;/code>)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">project-root/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── .github/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── workflows/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── tracking-plan-validate.yml # PR validation workflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── tracking-plan-sync.yml # Main branch deployment workflow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── data-catalog/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── custom-types/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── identifiers.yaml # SKU, product IDs, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── user-types.yaml # User-related custom types
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── commerce-types.yaml # E-commerce specific types
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── analytics-types.yaml # Analytics-specific types
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── properties/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── common/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├── user-properties.yaml # User ID, email, traits, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├── session-properties.yaml # Session ID, timestamp, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ └── device-properties.yaml # Device info, browser, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── product/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├── product-properties.yaml # product_id, name, price, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ └── catalog-properties.yaml # category, brand, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── checkout/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├── cart-properties.yaml # Cart-related properties
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ ├── order-properties.yaml # Order-related properties
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ │ └── payment-properties.yaml # Payment-related properties
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── marketing/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── campaign-properties.yaml # UTM parameters, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── attribution-properties.yaml # Attribution parameters
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── categories/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── user-categories.yaml # User-related categories
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── product-categories.yaml # Product-related categories
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── checkout-categories.yaml # Checkout-related categories
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── marketing-categories.yaml # Marketing-related categories
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── analytics-categories.yaml # Analytics-related categories
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── events/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── user/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── authentication-events.yaml # Signup, login, logout, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── profile-events.yaml # Profile updates, preferences
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── onboarding-events.yaml # User onboarding flow
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── product/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── catalog-events.yaml # Product viewed, searched, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── engagement-events.yaml # Product liked, shared, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── comparison-events.yaml # Product compared, listed, etc.
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── checkout/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── cart-events.yaml # Cart events
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── checkout-events.yaml # Checkout flow events
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── purchase-events.yaml # Purchase and payment events
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── engagement/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── page-events.yaml # Page views, navigation
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── interaction-events.yaml # Clicks, form submissions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── content-events.yaml # Content engagement
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── marketing/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── campaign-events.yaml # Campaign interactions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── conversion-events.yaml # Goal completions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── tracking-plans/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── web/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── main-website.yaml # Main website Tracking Plan
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── checkout-flow.yaml # Checkout-specific plan
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── marketing-pages.yaml # Landing pages, campaigns
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── mobile/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── ios-app.yaml # iOS app Tracking Plan
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── android-app.yaml # Android app Tracking Plan
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── mobile-shared.yaml # Shared mobile events
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── backend/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── api-events.yaml # Server-side events
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── system-events.yaml # System/operational events
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── integrations/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── crm-integration.yaml # CRM-specific events
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── marketing-tools.yaml # Marketing automation events
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── analytics-platforms.yaml # Analytics platform events
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="alternative-organization-approaches" data-heading="Alternative organization approaches" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h2 id="alternative-organization-approaches">Alternative organization approaches&lt;/h2>&lt;p>Since the CLI is flexible, you could also organize files differently based on your team&amp;rsquo;s preferences:&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="1-flat-structure" data-heading="1. Flat structure" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h3 id="1-flat-structure">1. Flat structure&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">tracking-plans/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── all-events.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── all-properties.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── all-custom-types.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── web-tracking-plan.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── mobile-tracking-plan.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="2-feature-based-organization" data-heading="2. Feature-based organization" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h3 id="2-feature-based-organization">2. Feature-based organization&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">tracking-plans/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── user-authentication/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── events.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── properties.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── tracking-plan.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── e-commerce/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── events.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── properties.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── custom-types.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── tracking-plan.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── analytics/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── events.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── tracking-plan.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="3-platform-first-organization" data-heading="3. Platform-first organization" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h3 id="3-platform-first-organization">3. Platform-first organization&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">tracking-plans/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── web/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── events.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── properties.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── tracking-plan.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── mobile/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── events.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── properties.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ └── tracking-plan.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">└── shared/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── common-events.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> ├── common-properties.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> └── custom-types.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="reference-system" data-heading="Reference system" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h2 id="reference-system">Reference system&lt;/h2>&lt;p>When creating Tracking Plans, you can reference resources using the following format:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Reference to an event&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/events/[metadata.name]/[event.id]&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># Reference to a property&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/[metadata.name]/[property.id]&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="c"># Reference to a custom type (in property definitions)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/custom-types/[metadata.name]/[type.id]&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="example-file-contents" data-heading="Example file contents" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h2 id="example-file-contents">Example file contents&lt;/h2>&lt;p>The following are some example file contents for the recommended directory structure:&lt;/p>
&lt;nav>
&lt;div class="nav nav-tabs" id="nav-tab" role="tablist">
&lt;a class="nav-item nav-link active "
id="nav-becadf" data-toggle="tab" href="#becadf"
role="tab" aria-controls="nav-home" aria-selected="true">Custom types file&lt;/a>
&lt;a class="nav-item nav-link "
id="nav-fbdeca" data-toggle="tab" href="#fbdeca"
role="tab" aria-controls="nav-home" aria-selected="true">Categories file&lt;/a>
&lt;a class="nav-item nav-link "
id="nav-fecdab" data-toggle="tab" href="#fecdab"
role="tab" aria-controls="nav-home" aria-selected="true">Events file&lt;/a>
&lt;a class="nav-item nav-link "
id="nav-cebadf" data-toggle="tab" href="#cebadf"
role="tab" aria-controls="nav-home" aria-selected="true">Properties file&lt;/a>
&lt;a class="nav-item nav-link "
id="nav-bfcdea" data-toggle="tab" href="#bfcdea"
role="tab" aria-controls="nav-home" aria-selected="true">Tracking Plan file&lt;/a>
&lt;/div>
&lt;/nav>
&lt;div class="tab-content" id="nav-tab-content">
&lt;div class="tab-pane fade show active " id="becadf" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">custom-types&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">identifier-types&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">types&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">sku_type&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;SKUType&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Custom type for SKU validation&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">minLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">5&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">maxLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">255&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">pattern&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;^SKU-[0-9]+$&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade show " id="fbdeca" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">categories&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product-categories&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Category for product viewing events&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_interaction_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Interaction&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Category for product interaction events&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_purchase_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Purchase&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Category for product purchase events&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade show " id="fecdab" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">events&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product-events&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">events&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">track&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;User viewed a product&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">category&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/categories/product-categories/product_viewed_category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_added_to_cart&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Added to Cart&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">track&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;User added product to cart&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">category&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/categories/product-categories/product_interaction_category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_purchased&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Purchased&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">track&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;User completed a product purchase&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">category&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/categories/product-categories/product_purchase_category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade show " id="cebadf" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">properties&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product-properties&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_sku&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product_sku&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/custom-types/identifier-types/sku_type&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product SKU&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_name&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product_name&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product name&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_price&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product_price&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">number&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product price&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_quantity&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product_quantity&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">integer&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product quantity&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade show " id="bfcdea" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">tp&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">web-ecommerce-plan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">web_ecommerce_tracking_plan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Web E-commerce Tracking Plan&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Tracking Plan for web e-commerce events&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">rules&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/events/product-events/product_viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">allow_unplanned&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/product-properties/product_sku&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/product-properties/product_name&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/product-properties/product_price&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="benefits-of-the-recommended-structure" data-heading="Benefits of the recommended structure" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h2 id="benefits-of-the-recommended-structure">Benefits of the recommended structure&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Scalability&lt;/strong>: It is easy to add new domains, platforms, or resource types.&lt;/li>
&lt;li>&lt;strong>Maintainability&lt;/strong>: Clear organization makes finding and updating resources simple.&lt;/li>
&lt;li>&lt;strong>Reusability&lt;/strong>: Common properties and custom types can be easily referenced across different Tracking Plans.&lt;/li>
&lt;li>&lt;strong>Collaboration&lt;/strong>: Team members can work on different domains without merge conflicts.&lt;/li>
&lt;li>&lt;strong>Flexibility&lt;/strong>: While providing structure, allows teams to adapt the organization to their specific needs.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="get-started" data-heading="Get started" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/directory-structure/" data-title="Recommended Project Directory Structure" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;ol>
&lt;li>Choose an organizational approach that fits your team&amp;rsquo;s workflow.&lt;/li>
&lt;li>Ensure all resource &lt;code>id&lt;/code> values are unique across your entire project.&lt;/li>
&lt;li>Set up &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions workflows&lt;/a> for validation and deployment.&lt;/li>
&lt;li>Start with a simple structure and evolve as your needs grow.&lt;/li>
&lt;/ol>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">The most important aspect is consistency within your chosen approach, not following any specific directory structure.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html></description></item><item><title>Archive: How to Import Workspace Resources into Your Rudder CLI Project</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/</guid><description>
&lt;p>This guide walks you through importing workspace resources into a Rudder CLI project and running &lt;code>apply&lt;/code> so the CLI manages them.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="overview" data-heading="Overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h2 id="overview">Overview&lt;/h2>&lt;p>Rudder CLI manages Data Catalog, Tracking Plans, SQL Models, and Event Stream Sources as YAML.&lt;/p>
&lt;p>If those resources already exist in your workspace, you can use the &lt;code>import workspace&lt;/code> command to generate files under &lt;code>imported/&lt;/code>, adjust them if needed, then run &lt;code>apply&lt;/code> to attach them to your CLI project — you do not need to recreate everything manually.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="required-permissions" data-heading="Required permissions" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h3 id="required-permissions">Required permissions&lt;/h3>&lt;p>Generate a &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/#workspace-sat" >workspace-level Service Access Token&lt;/a> with the &lt;a href="https://www.rudderstack.com/docs/access-management/policies-overview/#resource-permissions" >permissions&lt;/a> required for each resource type you want to import and manage:&lt;/p>
&lt;!DOCTYPE html>
&lt;html lang="en">
&lt;blockquote class="tip">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/tip.svg loading="lazy" alt="tip" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;strong>Tip:&lt;/strong>
Include permissions only for the resource types you use. The same scope applies for &lt;code>apply&lt;/code> locally or in CI/CD. See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/manage-workspaces/" >Manage Workspaces&lt;/a> for a deployment-oriented workflow.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Resource type&lt;/th>
&lt;th style="text-align:left">Resource&lt;/th>
&lt;th style="text-align:left">Permissions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Data Catalog and Tracking Plans&lt;/td>
&lt;td style="text-align:left">Data Catalog&lt;/td>
&lt;td style="text-align:left">&lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;/td>
&lt;td style="text-align:left">Tracking Plans&lt;/td>
&lt;td style="text-align:left">&lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">SQL Models&lt;/td>
&lt;td style="text-align:left">SQL Models&lt;/td>
&lt;td style="text-align:left">&lt;strong>Create &amp;amp; Delete&lt;/strong>, &lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Event Stream Sources&lt;/td>
&lt;td style="text-align:left">Event Stream Sources&lt;/td>
&lt;td style="text-align:left">&lt;strong>Create &amp;amp; Delete&lt;/strong>, &lt;strong>Edit&lt;/strong>, &lt;strong>Connect&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;/td>
&lt;td style="text-align:left">Tracking Plans&lt;/td>
&lt;td style="text-align:left">&lt;strong>Edit&lt;/strong>, &lt;strong>Connect&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>&lt;strong>For testing or development only&lt;/strong>: Use a &lt;a href="https://www.rudderstack.com/docs/access-management/personal-access-tokens/" >Personal Access Token&lt;/a> with the &lt;strong>Read-Write&lt;/strong> role.&lt;/li>
&lt;/ul>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>RudderStack recommends using a workspace-level Service Access Token for authentication.&lt;/strong>&lt;/p>
&lt;p>Any action authenticated by a Personal Access Token will break if the user is removed from the organization or a breaking change is made to their permissions.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="token-permissions-for-legacy-rbac-system" data-heading="Token permissions for legacy RBAC system" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h4 id="token-permissions-for-legacy-rbac-system">Token permissions for legacy RBAC system&lt;/h4>&lt;p>If you are on the &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/user-management/" >legacy Permissions Management (RBAC) system&lt;/a>, your workspace-level Service Access Token should have minimum &lt;strong>Admin&lt;/strong> permissions.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/service-access-tokens/#generate-service-access-token" >Generate a workspace-level Service Access Token&lt;/a> for steps to create the token.&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/access-management/permissions/legacy/admin.webp" href="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
alt="workspace-level Service Access Token with Admin permission"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="import-workspace-resources" data-heading="Import workspace resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h2 id="import-workspace-resources">Import workspace resources&lt;/h2>&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>Before you import workspace resources&lt;/strong>&lt;/p>
&lt;p>Before starting the import process, make sure:&lt;/p>
&lt;ul>
&lt;li>You have a Rudder CLI project directory (can be empty)&lt;/li>
&lt;li>You have no unsynced changes in your project — apply any existing changes first by running the &lt;code>apply&lt;/code> command.&lt;/li>
&lt;li>You don&amp;rsquo;t have an existing directory named &lt;code>imported&lt;/code> in your CLI project.&lt;/li>
&lt;/ul>
&lt;p>Otherwise, the import process will fail.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>To import all resources from your current workspace into a CLI project, run the &lt;code>import workspace&lt;/code> command — replace &lt;code>&amp;lt;project-directory&amp;gt;&lt;/code> with the path to your CLI project directory.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli import workspace -l &amp;lt;project-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The command scans your workspace for resources not yet managed by Rudder CLI, writes YAML under &lt;code>imported/&lt;/code>, and adds import metadata that maps local IDs to workspace IDs.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="what-gets-imported-and-where" data-heading="What gets imported and where" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h3 id="what-gets-imported-and-where">What gets imported and where&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">project/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">├── imported/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── data-catalog/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── events/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── properties/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── categories/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── trackingplans/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── custom-types/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── retl-sources/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ ├── &amp;lt;model-name&amp;gt;.yaml
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── sql/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── &amp;lt;model-name&amp;gt;.sql
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ ├── sources/
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">│ │ └── &amp;lt;source-name&amp;gt;.yaml
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">If a resource type has no instances, its folder is empty or omitted.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Resource&lt;/th>
&lt;th style="text-align:left">Path (under &lt;code>imported/&lt;/code>)&lt;/th>
&lt;th style="text-align:left">&lt;div style="width:300px">Notes&lt;/div>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Events&lt;/td>
&lt;td style="text-align:left">&lt;code>data-catalog/events/&lt;/code>&lt;/td>
&lt;td style="text-align:left">One YAML file per event definition&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Properties&lt;/td>
&lt;td style="text-align:left">&lt;code>data-catalog/properties/&lt;/code>&lt;/td>
&lt;td style="text-align:left">One YAML file per property definition&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Event Categories&lt;/td>
&lt;td style="text-align:left">&lt;code>data-catalog/categories/&lt;/code>&lt;/td>
&lt;td style="text-align:left">One YAML file per category&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Custom Types&lt;/td>
&lt;td style="text-align:left">&lt;code>data-catalog/custom-types/&lt;/code>&lt;/td>
&lt;td style="text-align:left">One YAML file per custom type&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Tracking Plans&lt;/td>
&lt;td style="text-align:left">&lt;code>data-catalog/trackingplans/&lt;/code>&lt;/td>
&lt;td style="text-align:left">One YAML per plan &lt;br />&lt;br />&lt;ul>&lt;li>Supports plans from the &lt;a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/create-tracking-plans/" >RudderStack Dashboard&lt;/a> and &lt;a href="https://www.rudderstack.com/docs/api/data-catalog-api/" >Data Catalog API&lt;/a>&lt;/li>&lt;li>Does not support &lt;a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/migration-guide/" >non-migrated&lt;/a> legacy plans from Google Sheets or the deprecated &lt;a href="https://www.rudderstack.com/docs/api/tracking-plan-api/" >Tracking Plan API&lt;/a>&lt;/li>&lt;/ul>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Event Stream Sources&lt;/td>
&lt;td style="text-align:left">&lt;code>sources/&lt;/code>&lt;/td>
&lt;td style="text-align:left">One YAML per source &lt;br />&lt;br />&lt;ul>&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/" >SDK Sources&lt;/a> only (client or server)&lt;/li>&lt;li>Cloud and webhook sources are not supported&lt;/li>&lt;/ul>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">SQL Models&lt;/td>
&lt;td style="text-align:left">&lt;code>retl-sources/&lt;/code>&lt;/td>
&lt;td style="text-align:left">One YAML per model — SQL inline by default, or under &lt;code>sql/&lt;/code> when using external files&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">Folder names under &lt;code>imported/&lt;/code> follow the layout your Rudder CLI version generates. If you upgrade the CLI and the structure changes, compare the new output with this table and move files as needed before you run &lt;code>apply&lt;/code>.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- FLAG: Engineering review needed — confirm exact directory names and file layout for SQL Models
(`retl-sources/`) and Event Stream Sources (`sources/`) when imported via `import workspace`. Update this section and the directory tree above once confirmed. -->
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="import-metadata" data-heading="Import metadata" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h2 id="import-metadata">Import metadata&lt;/h2>&lt;p>YAML from an import includes &lt;code>metadata.import&lt;/code> so Rudder CLI can match local definitions to workspace resources.&lt;/p>
&lt;p>For how &lt;code>workspace_id&lt;/code> behaves when you target another workspace, see &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/manage-workspaces/" >Manage Workspaces&lt;/a>.&lt;/p>
&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;rudder/v0.1&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;categories&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">import&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">workspaces&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">workspace_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;3NrueK2Hu7ooXVQqQJhKqKlnofE&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">resources&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">local_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;abc&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">remote_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;cat_343HNkcWRt8YXHphthHwa8QEdXE&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">local_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;webapp&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">remote_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;cat_2ohsVV9iKuw7GfLFITwsVLn6Nhy&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;categories&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;abc&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;ABC&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;webapp&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Webapp&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">&lt;div style="width:350px">Description&lt;/div>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>workspace_id&lt;/code>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Workspace the resources were imported from.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>resources&lt;/code>&lt;/td>
&lt;td style="text-align:left">Array&lt;/td>
&lt;td style="text-align:left">Maps each &lt;code>local_id&lt;/code> to a workspace &lt;code>remote_id&lt;/code>. Do not change &lt;code>remote_id&lt;/code> after import; see &lt;a href="#key-considerations" >Key considerations&lt;/a>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>For the full metadata schema, see the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" >CLI Project Resources YAML Reference&lt;/a>.&lt;/p>
&lt;!-- FLAG: Engineering review needed — confirm whether additional import metadata fields or YAML examples are required for SQL Models and Event Stream Sources. Update YAML Reference pages accordingly. -->
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="review-and-organize-imported-resources" data-heading="Complete the import" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h2 id="review-and-organize-imported-resources">Complete the import&lt;/h2>&lt;p>The &lt;code>import workspace&lt;/code> command only writes files; it does not register them with your CLI project.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="review-and-adjust-files" data-heading="Review and adjust files" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h3 id="review-and-adjust-files">Review and adjust files&lt;/h3>&lt;p>Confirm the generated YAML matches what you expect. You may move files out of &lt;code>imported/&lt;/code> to match your layout and edit fields such as names or descriptions. Before you run &lt;code>apply&lt;/code>, read &lt;a href="#key-considerations" >Key considerations&lt;/a> for rules on &lt;code>local_id&lt;/code>, &lt;code>remote_id&lt;/code>, import metadata, and dashboard changes.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="apply-imported-resources" data-heading="Apply imported resources" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h3 id="apply-imported-resources">Apply imported resources&lt;/h3>&lt;p>Run:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l &amp;lt;project-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>apply&lt;/code> finds resources marked for import, links them to the CLI project, prints a summary, and asks you to confirm.&lt;/p>
&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">$ rudder-cli apply -l ./my-rudder-project
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Importable resources:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - category:abc
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - category:webapp
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">? Do you want to apply these changes? &lt;span class="o">(&lt;/span>y/N&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After you confirm, you manage those resources through Rudder CLI.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-considerations" data-heading="Important considerations" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h2 id="key-considerations">Important considerations&lt;/h2>&lt;p>This section covers important considerations when importing workspace resources and applying them to your CLI project.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="use-rudder-cli-as-the-source-of-truth" data-heading="Use Rudder CLI as the source of truth" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h4 id="use-rudder-cli-as-the-source-of-truth">Use Rudder CLI as the source of truth&lt;/h4>&lt;p>For CLI-managed resources, use only Rudder CLI (not the dashboard or APIs) unless you intend to reconcile outside changes. After a successful &lt;code>apply&lt;/code>, Rudder CLI is the source of truth for those resources.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="ids-metadata-and-the-dashboard" data-heading="IDs, metadata, and the dashboard" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h4 id="ids-metadata-and-the-dashboard">IDs, metadata, and the dashboard&lt;/h4>&lt;ul>
&lt;li>Do not change &lt;code>remote_id&lt;/code> values in imported YAML — updates will fail.&lt;/li>
&lt;li>You may change &lt;code>local_id&lt;/code> only &lt;strong>before&lt;/strong> &lt;code>apply&lt;/code>. Keep the import metadata mapping in sync with any &lt;code>local_id&lt;/code> you change.&lt;/li>
&lt;li>After &lt;code>apply&lt;/code>, do not change &lt;code>local_id&lt;/code>.&lt;/li>
&lt;li>Do not delete a resource in the dashboard after import but before &lt;code>apply&lt;/code> — otherwise &lt;code>apply&lt;/code> will fail with &lt;code>Resource with ID not found&lt;/code>. See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/troubleshooting/#resource-deleted-from-dashboard-before-apply" >Resource Deleted from Dashboard Before Apply&lt;/a>.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="workflow-tips" data-heading="Workflow tips" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h4 id="workflow-tips">Workflow tips&lt;/h4>&lt;ul>
&lt;li>Try the flow in a development workspace before production.&lt;/li>
&lt;li>Commit imported YAML to version control so changes stay reviewable and reversible.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="next-steps" data-heading="Next steps" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" data-title="How to Import Workspace Resources into Your Rudder CLI Project" -->
&lt;h2 id="next-steps">Next steps&lt;/h2>&lt;ul>
&lt;li>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/manage-workspaces/" >Manage Workspaces&lt;/a> for workspace promotion and CI/CD&lt;/li>
&lt;li>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/troubleshooting/" >Troubleshooting&lt;/a> for common import and &lt;code>apply&lt;/code> errors&lt;/li>
&lt;/ul></description></item><item><title>Archive: Core Rudder CLI Commands Reference</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/</guid><description>
&lt;p>This guide covers the &lt;strong>core workflow commands&lt;/strong> available in the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/" >Rudder CLI tool&lt;/a> for managing resources like Tracking Plans, Data Catalog, SQL Models, and Event Stream sources.&lt;/p>
&lt;p>For resource-specific commands (for example SQL model preview), see the sections below and the linked how-to guides.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="authentication" data-heading="Authentication" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/" data-title="Core Rudder CLI Commands Reference" -->
&lt;h2 id="authentication">Authentication&lt;/h2>&lt;p>Before running any commands, you must authenticate the CLI tool with your RudderStack workspace.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli auth login
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You will be prompted to enter your &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/" >Service Access Token&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="commands" data-heading="Commands" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/" data-title="Core Rudder CLI Commands Reference" -->
&lt;h2 id="commands">Commands&lt;/h2>&lt;p>Use the following commands to manage various RudderStack resources.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="import-workspace" data-heading="&lt;code>import workspace&lt;/code>" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/" data-title="Core Rudder CLI Commands Reference" -->
&lt;h3 id="import-workspace">&lt;code>import workspace&lt;/code>&lt;/h3>&lt;p>Import existing resources from your RudderStack workspace into your local project directory. This is useful when you want to start managing existing dashboard configurations as code.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli import workspace -l &amp;lt;project-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Supported resources for import&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Data Catalog (Events, Properties, Categories, Custom Types)&lt;/li>
&lt;li>Tracking Plans&lt;/li>
&lt;li>Event Stream sources (SDK-based)&lt;/li>
&lt;li>SQL Models&lt;/li>
&lt;/ul>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" >Import Workspace Resources&lt;/a> for prerequisites, metadata, and troubleshooting.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="validate" data-heading="&lt;code>validate&lt;/code>" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/" data-title="Core Rudder CLI Commands Reference" -->
&lt;h3 id="validate">&lt;code>validate&lt;/code>&lt;/h3>&lt;p>Validate your local YAML configurations for syntax errors, structural integrity, and resource-specific constraints.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l &amp;lt;project-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>What it checks&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>YAML syntax and schema compliance&lt;/li>
&lt;li>Resource referencing (for example, ensuring an event references a valid property)&lt;/li>
&lt;li>SQL syntax and warehouse connectivity&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="apply" data-heading="&lt;code>apply&lt;/code>" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/" data-title="Core Rudder CLI Commands Reference" -->
&lt;h3 id="apply">&lt;code>apply&lt;/code>&lt;/h3>&lt;p>Sync your local configurations to your RudderStack workspace.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l &amp;lt;project-directory&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="dry-run" data-heading="Dry run" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/" data-title="Core Rudder CLI Commands Reference" -->
&lt;h4 id="dry-run">Dry run&lt;/h4>&lt;p>RudderStack recommends running the &lt;code>apply&lt;/code> command with the &lt;code>--dry-run&lt;/code> flag first to preview the changes that will be made to your workspace.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l &amp;lt;project-directory&amp;gt; --dry-run
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="destroy" data-heading="&lt;code>destroy&lt;/code>" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/" data-title="Core Rudder CLI Commands Reference" -->
&lt;h3 id="destroy">&lt;code>destroy&lt;/code>&lt;/h3>&lt;p>Use this command to &lt;strong>permanently remove&lt;/strong> resources that Rudder CLI manages from your workspace, based on your local project state.&lt;/p>
&lt;blockquote class="danger">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/danger.svg loading="lazy" alt="danger" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">This is a destructive operation.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli destroy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Rudder CLI lists what it plans to remove and asks you to confirm before anything is deleted.&lt;/p>
&lt;!DOCTYPE html>
&lt;html lang="en">
&lt;blockquote class="tip">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/tip.svg loading="lazy" alt="tip" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;strong>Tip:&lt;/strong>
Flags and behavior can change between CLI releases — run &lt;code>rudder-cli destroy --help&lt;/code> for the options your build supports, and prefer dry runs (&lt;code>validate&lt;/code>, &lt;code>apply --dry-run&lt;/code>) in CI before you use destroy in production.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="additional-command-groups" data-heading="Additional command groups" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/" data-title="Core Rudder CLI Commands Reference" -->
&lt;h2 id="additional-command-groups">Additional command groups&lt;/h2>&lt;p>The CLI also exposes subcommands for specific workflows. See the linked docs for syntax, flags, and examples:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Resource&lt;/th>
&lt;th>Example commands&lt;/th>
&lt;th>Documentation&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>SQL Models (Reverse ETL)&lt;/td>
&lt;td>&lt;ul>&lt;li>&lt;code>rudder-cli workspace accounts list&lt;/code>&lt;/li>&lt;li>&lt;code>rudder-cli workspace retl-sources list&lt;/code>&lt;/li>&lt;li>&lt;code>rudder-cli import retl-sources ...&lt;/code>&lt;/li>&lt;li>&lt;code>rudder-cli retl-sources preview ...&lt;/code>&lt;/li>&lt;li>&lt;code>rudder-cli retl-sources validate ...&lt;/code>&lt;/li>&lt;/ul>&lt;/td>
&lt;td>&lt;ul>&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/create/" >Create SQL Models&lt;/a>&lt;/li>&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/import/" >Import SQL Models&lt;/a>&lt;/li>&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/validate/" >Validate and Preview SQL Models&lt;/a>&lt;/li>&lt;/ul>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Run &lt;code>rudder-cli --help&lt;/code> and &lt;code>rudder-cli &amp;lt;command&amp;gt; --help&lt;/code> locally for the full list of subcommands and flags for your CLI version.&lt;/p></description></item><item><title>Archive: Validate Rudder CLI Projects</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/validations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/validations/</guid><description>
&lt;!-- FLAG: No existing content to repurpose for this page. Content needs to be authored. --></description></item><item><title>Archive: CLI-based Data Catalog and Tracking Plan Management</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/</guid><description>
&lt;blockquote class="announcement">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/announcement.svg loading="lazy" alt="announcement" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>This feature is in &lt;strong>Alpha&lt;/strong> as part of RudderStack&amp;rsquo;s &lt;a href="https://www.rudderstack.com/docs/get-started/alpha-and-beta-features/alpha-features/" >Early Access Program&lt;/a>, where we work with early users and customers to test new features and get feedback before making them generally available. Note that these features are functional but can change as we improve them.&lt;/p>
&lt;p>Before you get started, note the following:&lt;/p>
&lt;ul>
&lt;li>See the &lt;a href="#limitations" >limitations&lt;/a> section to learn more about current differences between the CLI and UI.&lt;/li>
&lt;li>RudderStack recommends testing this feature in a clean &lt;strong>Dev&lt;/strong> workspace.&lt;/li>
&lt;li>&lt;a href="mailto:product@rudderstack.com" >Contact the Product team&lt;/a> if you have any questions.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>RudderStack&amp;rsquo;s CLI-based Tracking Plans management feature helps you manage &lt;a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/" >Tracking Plans&lt;/a> and &lt;a href="https://www.rudderstack.com/docs/data-governance/data-catalog/" >Data Catalog&lt;/a> as code by leveraging the new CLI-based workflow. It helps you bring data governance into your existing development workflows through code-first management.&lt;/p>
&lt;p>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.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-features" data-heading="Key features" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" data-title="CLI-based Data Catalog and Tracking Plan Management" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;p>With RudderStack&amp;rsquo;s CLI-based Tracking Plan management, you get the following features:&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="declarative-yaml-configuration" data-heading="Declarative YAML configuration" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" data-title="CLI-based Data Catalog and Tracking Plan Management" -->
&lt;h3 id="declarative-yaml-configuration">Declarative YAML configuration&lt;/h3>&lt;ul>
&lt;li>Define and manage events, properties, and Tracking Plans directly in your codebase using simple &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" >YAML files&lt;/a>.&lt;/li>
&lt;li>Create reusable property definitions with &lt;a href="https://www.rudderstack.com/docs/data-governance/data-catalog/properties/#advanced-rules" >advanced validation rules&lt;/a> like minimum/maximum length, patterns, enums, etc. across multiple events.&lt;/li>
&lt;li>Define dynamic validation rules using &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/conditional-validation/" >Conditional Validation&lt;/a> that adapt based on context.&lt;/li>
&lt;li>Leverage a structured referencing system to associate events and properties to a Tracking Plan.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="powerful-rudder-cli-tool" data-heading="Powerful Rudder CLI tool" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" data-title="CLI-based Data Catalog and Tracking Plan Management" -->
&lt;h3 id="powerful-rudder-cli-tool">Powerful Rudder CLI tool&lt;/h3>&lt;p>This feature comes with a powerful &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/" >Rudder CLI&lt;/a> utility that lets you:&lt;/p>
&lt;ul>
&lt;li>Create, update, and delete Tracking Plan resources via command line.&lt;/li>
&lt;li>Verify your YAML configurations locally before pushing changes to production.&lt;/li>
&lt;li>Sync the local configuration files with your RudderStack workspace.&lt;/li>
&lt;/ul>
&lt;blockquote class="success">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/tick.svg loading="lazy" alt="success" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">
&lt;p>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.&lt;/p>
&lt;p>You only need the YAML configuration files and a &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/#prerequisites" >RudderStack token&lt;/a> to use Rudder CLI.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="git-integration-and-cicd-support" data-heading="Git integration and CI/CD support" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" data-title="CLI-based Data Catalog and Tracking Plan Management" -->
&lt;h3 id="git-integration-and-cicd-support">Git integration and CI/CD support&lt;/h3>&lt;ul>
&lt;li>Leverage &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions&lt;/a> to automatically validate and deploy Tracking Plans from your repository.&lt;/li>
&lt;li>Use the standard Git workflows to track changes, implement version control, manage branches, and make any other modifications.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="who-can-use-this-feature" data-heading="Who can use this feature?" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" data-title="CLI-based Data Catalog and Tracking Plan Management" -->
&lt;h2 id="who-can-use-this-feature">Who can use this feature?&lt;/h2>&lt;p>The CLI-based Data Catalog and Tracking Plan management feature is helpful for data teams who need to:&lt;/p>
&lt;ul>
&lt;li>Manage their Tracking Plans and Data Catalog programmatically with consistent tracking standards.&lt;/li>
&lt;li>Integrate their Tracking Plan changes into their existing development workflows.&lt;/li>
&lt;li>Validate their Tracking Plan changes before deployment.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="get-started" data-heading="Get started" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" data-title="CLI-based Data Catalog and Tracking Plan Management" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;ol>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/" >Install the Rudder CLI tool&lt;/a> in your preferred environment.&lt;/li>
&lt;li>Generate a &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/#workspace-sat" >workspace-level Service Access Token&lt;/a> in the RudderStack dashboard with the following &lt;a href="https://www.rudderstack.com/docs/access-management/policies-overview/#resource-permissions" >permissions&lt;/a> to manage Data Catalog and Tracking Plans:&lt;/li>
&lt;/ol>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Resource&lt;/th>
&lt;th style="text-align:left">Permissions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Tracking Plans&lt;/td>
&lt;td style="text-align:left">&lt;strong>Create &amp;amp; Delete&lt;/strong>, &lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Data Catalog&lt;/td>
&lt;td style="text-align:left">&lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>Token permissions for legacy RBAC system&lt;/strong>&lt;/p>
&lt;p>If you are on the &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/user-management/" >legacy Permissions Management (RBAC) system&lt;/a>, your workspace-level Service Access Token should have &lt;strong>Admin&lt;/strong> permissions.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/service-access-tokens/#generate-service-access-token" >this documentation&lt;/a> for more information on generating the token.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;ul>
&lt;li>&lt;strong>For testing or development purposes only&lt;/strong>: Generate a &lt;a href="https://www.rudderstack.com/docs/access-management/personal-access-tokens/" >Personal Access Token&lt;/a> with &lt;strong>Read-Write&lt;/strong> role&lt;/li>
&lt;/ul>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>RudderStack recommends using a workspace-level Service Access Token for authentication.&lt;/strong>&lt;/p>
&lt;p>Any action authenticated by a Personal Access Token will break if the user is removed from the organization or a breaking change is made to their permissions.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;ol start="3">
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/tracking-plans/" >Initialize a new Tracking Plan project&lt;/a> with &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" >YAML definitions&lt;/a>. Then, sync the changes to your workspace.&lt;/li>
&lt;li>Automate Tracking Plan management using &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions&lt;/a>.&lt;/li>
&lt;/ol>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="limitations" data-heading="Limitations" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" data-title="CLI-based Data Catalog and Tracking Plan Management" -->
&lt;h2 id="limitations">Limitations&lt;/h2>&lt;p>Rudder CLI only supports &lt;strong>pushing&lt;/strong> updates to RudderStack, not &lt;strong>pulling&lt;/strong>. This means you will need to test with a clean &lt;strong>Dev&lt;/strong> workspace where the Data Catalog is empty and there are no Tracking Plans.&lt;/p>
&lt;p>&lt;a href="mailto:product@rudderstack.com" >Contact the Product team&lt;/a> or your Technical Account Manager if you need a new workspace.&lt;/p>
&lt;br /></description></item><item><title>Archive: Manage SQL Models using Rudder CLI</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/</guid><description>
&lt;blockquote class="announcement">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/announcement.svg loading="lazy" alt="announcement" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>This feature is in &lt;strong>Alpha&lt;/strong> as part of RudderStack&amp;rsquo;s &lt;a href="https://www.rudderstack.com/docs/get-started/alpha-and-beta-features/alpha-features/" >Early Access Program&lt;/a>, where we work with early users and customers to test new features and get feedback before making them generally available.&lt;/p>
&lt;p>Note that these features are functional but can change as we improve them. Make sure to &lt;a href="mailto:support@rudderstack.com" >contact&lt;/a> the RudderStack team before using them in production.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>The &lt;strong>SQL Models&lt;/strong> feature in Rudder CLI lets you manage your &lt;a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/features/models/" >Reverse ETL SQL model sources&lt;/a> through a Git-based workflow. It lets you store your SQL model configurations as YAML files in Git repositories, and use standard Git workflows to collaborate on any changes.&lt;/p>
&lt;p>This approach brings version control, collaboration, and review processes to your SQL model configurations, addressing key limitations of managing these resources solely through the UI.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-features" data-heading="Key features" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/" data-title="Manage SQL Models using Rudder CLI" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;p>&lt;strong>Bi-directional management&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Create new SQL model resources directly from CLI&lt;/li>
&lt;li>Import existing SQL model sources from your workspace into Git&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Validation and preview&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Validate SQL syntax and connectivity before deployment&lt;/li>
&lt;li>Preview query results to ensure correctness&lt;/li>
&lt;li>Check primary key constraints and column mappings&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Flexible configuration&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Define SQL queries inline in YAML files or reference external &lt;code>.sql&lt;/code> files&lt;/li>
&lt;li>Support for multiple warehouse types (listed below)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Automation ready&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>GitHub Actions integration for CI/CD workflows&lt;/li>
&lt;li>Dry-run capabilities to preview changes before applying them&lt;/li>
&lt;li>Cross-domain resource management alongside &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" >Data Catalog and Tracking Plan resources&lt;/a>&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="supported-warehouses" data-heading="Supported warehouses" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/" data-title="Manage SQL Models using Rudder CLI" -->
&lt;h2 id="supported-warehouses">Supported warehouses&lt;/h2>&lt;p>The SQL Models feature supports the following data warehouses:&lt;/p>
&lt;ul>
&lt;li>PostgreSQL&lt;/li>
&lt;li>MySQL&lt;/li>
&lt;li>Snowflake&lt;/li>
&lt;li>Amazon Redshift&lt;/li>
&lt;li>Google BigQuery&lt;/li>
&lt;li>Databricks&lt;/li>
&lt;li>Trino&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="workflow-overview" data-heading="Workflow overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/" data-title="Manage SQL Models using Rudder CLI" -->
&lt;h2 id="workflow-overview">Workflow overview&lt;/h2>&lt;ol>
&lt;li>Configure your Git repository and Rudder CLI project.&lt;/li>
&lt;li>Create new SQL models or import existing ones from your workspace.&lt;/li>
&lt;li>Make changes to your SQL models using your preferred editor.&lt;/li>
&lt;li>Validate your changes using the &lt;code>validate&lt;/code> command and &lt;code>apply&lt;/code> command in dry-run mode (via the &lt;code>--dry-run&lt;/code> flag).&lt;/li>
&lt;li>Use the &lt;code>preview&lt;/code> command for SQL validation and connection validation.&lt;/li>
&lt;li>Apply your changes using the &lt;code>apply&lt;/code> command.&lt;/li>
&lt;li>Create pull requests for team review and approval.&lt;/li>
&lt;li>Automatically sync approved changes to your workspace via GitHub Actions.&lt;/li>
&lt;/ol>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="before-you-begin" data-heading="Before you begin" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/" data-title="Manage SQL Models using Rudder CLI" -->
&lt;h2 id="before-you-begin">Before you begin&lt;/h2>&lt;p>Before you begin, make sure you have:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/" >Rudder CLI&lt;/a> installed and configured locally&lt;/li>
&lt;li>A Rudder CLI project directory for storing the SQL model YAML resources&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions&lt;/a> configured if you want automated syncing in CI/CD&lt;/li>
&lt;li>A &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/#workspace-sat" >workspace-level Service Access Token&lt;/a> in the RudderStack dashboard with the following &lt;a href="https://www.rudderstack.com/docs/access-management/policies-overview/#resource-permissions" >permissions&lt;/a> to manage SQL models:&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Resource&lt;/th>
&lt;th style="text-align:left">Permissions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">SQL Models&lt;/td>
&lt;td style="text-align:left">&lt;strong>Create &amp;amp; Delete&lt;/strong>, &lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>&lt;strong>For testing or development purposes only&lt;/strong>: Generate a &lt;a href="https://www.rudderstack.com/docs/access-management/personal-access-tokens/" >Personal Access Token&lt;/a> with &lt;strong>Read-Write&lt;/strong> role&lt;/li>
&lt;/ul>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>RudderStack recommends using a workspace-level Service Access Token for authentication.&lt;/strong>&lt;/p>
&lt;p>Any action authenticated by a Personal Access Token will break if the user is removed from the organization or a breaking change is made to their permissions.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="token-permissions-for-legacy-rbac-system" data-heading="Token permissions for legacy RBAC system" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/" data-title="Manage SQL Models using Rudder CLI" -->
&lt;h4 id="token-permissions-for-legacy-rbac-system">Token permissions for legacy RBAC system&lt;/h4>&lt;p>If you are on the &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/user-management/" >legacy Permissions Management (RBAC) system&lt;/a>, your workspace-level Service Access Token should have minimum &lt;strong>Admin&lt;/strong> permissions.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/service-access-tokens/#generate-service-access-token" >this documentation&lt;/a> for more information on generating the token.&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/access-management/permissions/legacy/admin.webp" href="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
alt="workspace-level Service Access Token with Admin permission"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="recommended-project-structure" data-heading="Recommended project structure" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/" data-title="Manage SQL Models using Rudder CLI" -->
&lt;h2 id="recommended-project-structure">Recommended project structure&lt;/h2>&lt;p>The SQL model resources need to be in the location you pass to the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/create/#apply-the-sql-model" >&lt;code>apply&lt;/code> command&lt;/a>. If you don&amp;rsquo;t specify a location, the current directory is used as the project location.&lt;/p>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">The &lt;code>apply&lt;/code> command syncs all Rudder CLI resources it finds under that path (SQL models, Data Catalog, and so on).&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;p>A recommended directory structure for your CLI project is shown:&lt;/p>
&lt;pre tabindex="0">&lt;code>my-rudder-project/
├── sql-models/
│ ├── user-analytics.yaml
│ ├── product-models.yaml
│ └── sql/
│ ├── user-analytics.sql
│ └── product-views.sql
├── data-catalog/
│ ├── events/
│ │ └── product-events.yaml
│ └── properties/
│ └── user-properties.yaml
└── README.md
&lt;/code>&lt;/pre>&lt;p>&lt;strong>Key considerations&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>File discovery&lt;/strong>: The CLI recursively scans the specified directory for all &lt;code>.yaml&lt;/code> and &lt;code>.yml&lt;/code> files.&lt;/li>
&lt;li>&lt;strong>Flexible organization&lt;/strong>: You can organize files in any directory structure that makes sense for your project.&lt;/li>
&lt;li>&lt;strong>External SQL files&lt;/strong>: When using the &lt;code>file&lt;/code> option in your YAML configurations, ensure the SQL files are accessible relative to the YAML file location.&lt;/li>
&lt;li>&lt;strong>Mixed resources&lt;/strong>: The CLI can manage SQL models alongside Data Catalog resources (events, properties, custom types, Tracking Plans) from the same project directory.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="get-started" data-heading="Get started" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/" data-title="Manage SQL Models using Rudder CLI" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;ul>
&lt;li>Follow the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" >End-to-End Walkthrough: SQL Models with Rudder CLI&lt;/a> for a single guided path through &lt;strong>create&lt;/strong>, &lt;strong>import&lt;/strong>, &lt;strong>validate&lt;/strong>, &lt;strong>preview&lt;/strong>, and &lt;strong>apply&lt;/strong>&lt;/li>
&lt;li>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/create/" >Create New SQL Model Resources&lt;/a>, &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/import/" >Import Existing SQL Model Resources&lt;/a>, and &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/validate/" >Validate and Preview Your Models&lt;/a> for focused how-tos&lt;/li>
&lt;li>See the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" >SQL Model Resources YAML Reference&lt;/a> for field-level specs&lt;/li>
&lt;li>Automate with &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions for Rudder CLI&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Archive: Manage Event Stream Sources using Rudder CLI</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/</guid><description>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>This feature is in &lt;strong>Alpha&lt;/strong> as part of RudderStack&amp;rsquo;s &lt;a href="https://www.rudderstack.com/docs/get-started/alpha-and-beta-features/alpha-features/" >Early Access Program&lt;/a>, where we work with early users and customers to test new features and get feedback before making them generally available. Note that these features are functional but can change as we improve them.&lt;/p>
&lt;p>&lt;a href="mailto:product@rudderstack.com" >Contact the Product team&lt;/a> if you have any questions.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;p>RudderStack&amp;rsquo;s CLI-based Event Stream source management feature helps you manage &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/" >Event Stream sources&lt;/a> as code by leveraging the new CLI-based workflow. It helps you bring source configuration into your existing development workflows through code-first management.&lt;/p>
&lt;p>With this feature, you can apply the same rigor and process to your source configuration that you apply to your application code, ensuring consistency and quality in your event collection strategy.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-features" data-heading="Key features" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/" data-title="Manage Event Stream Sources using Rudder CLI" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;p>With RudderStack&amp;rsquo;s CLI-based Event Stream source management, you get the following features:&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="declarative-yaml-configuration" data-heading="Declarative YAML configuration" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/" data-title="Manage Event Stream Sources using Rudder CLI" -->
&lt;h3 id="declarative-yaml-configuration">Declarative YAML configuration&lt;/h3>&lt;ul>
&lt;li>Define and manage Event Stream sources directly in your codebase using simple &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" >YAML files&lt;/a>.&lt;/li>
&lt;li>Configure source-level data governance settings by associating &lt;a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/" >Tracking Plans&lt;/a> with sources.&lt;/li>
&lt;li>Control violation handling behavior for different event types (&lt;code>track&lt;/code>, &lt;code>identify&lt;/code>, &lt;code>group&lt;/code>, &lt;code>page&lt;/code>, &lt;code>screen&lt;/code>) through granular configuration options.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="git-integration-and-cicd-support" data-heading="Git integration and CI/CD support" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/" data-title="Manage Event Stream Sources using Rudder CLI" -->
&lt;h3 id="git-integration-and-cicd-support">Git integration and CI/CD support&lt;/h3>&lt;ul>
&lt;li>Leverage &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions&lt;/a> to automatically validate and deploy source configurations from your repository.&lt;/li>
&lt;li>Use the standard Git workflows to track changes, implement version control, manage branches, and make any other modifications.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="who-can-use-this-feature" data-heading="Who can use this feature?" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/" data-title="Manage Event Stream Sources using Rudder CLI" -->
&lt;h2 id="who-can-use-this-feature">Who can use this feature?&lt;/h2>&lt;p>The CLI-based Event Stream source management feature is helpful for data teams who need to:&lt;/p>
&lt;ul>
&lt;li>Manage their Event Stream sources programmatically with consistent configuration standards.&lt;/li>
&lt;li>Integrate their source configuration changes into their existing development workflows.&lt;/li>
&lt;li>Validate their source configuration changes before deployment.&lt;/li>
&lt;li>Apply data governance policies consistently across multiple sources.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="supported-sources" data-heading="Supported sources" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/" data-title="Manage Event Stream Sources using Rudder CLI" -->
&lt;h2 id="supported-sources">Supported sources&lt;/h2>&lt;p>You can define Event Stream source YAMLs only for client-side and server-side SDK sources.&lt;/p>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">Rudder CLI does not support cloud apps and webhook sources currently.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;details>
&lt;summary>&lt;strong>Click here to view the full list of sources&lt;/strong>.&lt;/summary>
&lt;br />
&lt;p>&lt;strong>Web&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>JavaScript&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Mobile&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Android&lt;/li>
&lt;li>iOS&lt;/li>
&lt;li>React Native&lt;/li>
&lt;li>Flutter&lt;/li>
&lt;li>Cordova&lt;/li>
&lt;li>Unity&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Server&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Java&lt;/li>
&lt;li>.NET&lt;/li>
&lt;li>PHP&lt;/li>
&lt;li>Rust&lt;/li>
&lt;li>Python&lt;/li>
&lt;li>Go&lt;/li>
&lt;li>Node&lt;/li>
&lt;li>Ruby&lt;/li>
&lt;li>Unity&lt;/li>
&lt;/ul>
&lt;/details>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="get-started" data-heading="Get started" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/" data-title="Manage Event Stream Sources using Rudder CLI" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;ul>
&lt;li>Follow the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" >End-to-End Walkthrough: Event Stream Sources with Rudder CLI&lt;/a> for a guided path from authentication through validate and deploy&lt;/li>
&lt;li>See the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" >Event Stream Sources YAML Reference&lt;/a> for complete YAML schemas and field definitions&lt;/li>
&lt;li>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" >CLI-based Tracking Plan Management&lt;/a> to create Tracking Plans you reference in source governance settings&lt;/li>
&lt;li>Automate with &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions for Rudder CLI&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Archive: End-to-End Walkthrough: Data Governance with Rudder CLI</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/</guid><description>
&lt;p>This tutorial shows you how to use the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/" >Rudder CLI tool&lt;/a> to:&lt;/p>
&lt;ul>
&lt;li>Create new events, properties, and custom data types in your Data Catalog&lt;/li>
&lt;li>Create a Tracking Plan from scratch using the events and properties&lt;/li>
&lt;li>Deploy the Tracking Plan to your RudderStack workspace&lt;/li>
&lt;li>Update your Tracking Plan&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="prerequisites" data-heading="Prerequisites" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>&lt;ul>
&lt;li>Rudder CLI tool (&lt;code>rudder-cli&lt;/code>) &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/" >installed locally&lt;/a> and available in your path&lt;/li>
&lt;/ul>
&lt;ul>
&lt;li>Generate a &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/#workspace-sat" >workspace-level Service Access Token&lt;/a> in the RudderStack dashboard with the following &lt;a href="https://www.rudderstack.com/docs/access-management/policies-overview/#resource-permissions" >permissions&lt;/a> to manage Data Catalog and Tracking Plans:&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Resource&lt;/th>
&lt;th style="text-align:left">Permissions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Tracking Plans&lt;/td>
&lt;td style="text-align:left">&lt;strong>Create &amp;amp; Delete&lt;/strong>, &lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Data Catalog&lt;/td>
&lt;td style="text-align:left">&lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>&lt;strong>For testing or development purposes only&lt;/strong>: Generate a &lt;a href="https://www.rudderstack.com/docs/access-management/personal-access-tokens/" >Personal Access Token&lt;/a> with &lt;strong>Read-Write&lt;/strong> role&lt;/li>
&lt;/ul>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>RudderStack recommends using a workspace-level Service Access Token for authentication.&lt;/strong>&lt;/p>
&lt;p>Any action authenticated by a Personal Access Token will break if the user is removed from the organization or a breaking change is made to their permissions.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="token-permissions-for-legacy-rbac-system" data-heading="Token permissions for legacy RBAC system" data-level="4" data-permalink="https://www.rudderstack.com/docs/" data-title="RudderStack Documentation" -->
&lt;h4 id="token-permissions-for-legacy-rbac-system">Token permissions for legacy RBAC system&lt;/h4>&lt;p>If you are on the &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/user-management/" >legacy Permissions Management (RBAC) system&lt;/a>, your workspace-level Service Access Token should have &lt;strong>Admin&lt;/strong> permissions.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/service-access-tokens/#generate-service-access-token" >this documentation&lt;/a> for more information on generating the token.&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/access-management/permissions/legacy/admin.webp" href="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
alt="workspace-level Service Access Token with Admin permission"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="1-authenticate-the-cli-tool" data-heading="1. Authenticate the CLI tool" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h2 id="1-authenticate-the-cli-tool">1. Authenticate the CLI tool&lt;/h2>&lt;p>You need to first authenticate the Rudder CLI tool (&lt;code>rudder-cli&lt;/code>) with the &lt;a href="#prerequisites" >Service Access Token&lt;/a> - this is required to perform operations on the target RudderStack workspace. Run the below command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli auth login
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You will then see a prompt to enter your Service Access Token. Specify the token and press &lt;strong>Enter&lt;/strong> to continue—this stores the token locally and makes it available for all the future &lt;code>rudder-cli&lt;/code> commands that need access to RudderStack.&lt;/p>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">The CLI maintains a local configuration file in your home directory (&lt;code>~/.rudder/config.json&lt;/code>). After authentication, the configuration file will contain the unencrypted Service Access Token.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="2-prepare-your-data-catalog-project" data-heading="2. Prepare your Data Catalog project" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h2 id="2-prepare-your-data-catalog-project">2. Prepare your Data Catalog project&lt;/h2>&lt;p>The &lt;code>rudder-cli&lt;/code> tool expects the Data Catalog resources to be described in &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" >YAML files&lt;/a> present in your system. If you&amp;rsquo;re working with a Unix-compatible shell, run the following command to create a directory to contain these YAML files:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">mkdir ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above command creates a &lt;code>tutorial-catalog&lt;/code> folder in your home directory, which you will use in this walkthrough to start populating the Data Catalog files.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" >Data Catalog YAML Reference&lt;/a> for more information on the YAML files containing the definitions of your Data Catalog resources.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="3-create-events" data-heading="3. Create events" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h2 id="3-create-events">3. Create events&lt;/h2>&lt;p>Before defining your Tracking Plan, you need to define the events you want to track. Using your preferred text editor, create a file &lt;code>~/tutorial-catalog/my-events.yaml&lt;/code> and add the following lines:&lt;/p>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;code>rudder-cli&lt;/code> does not have any requirements for the file names or their location in the project directory, other than them having the &lt;code>yaml&lt;/code> or &lt;code>.yml &lt;/code> suffix. You can use any names or structure that makes sense for your project.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">events&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myeventgroup&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">events&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">track&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;This event is triggered every time the user views a product.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above file defines an event you want to track in your application (&lt;code>Product Viewed&lt;/code>). Before continuing, run the below command that validates the contents of the above file to make sure there are no issues:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that:&lt;/p>
&lt;ul>
&lt;li>If the file has no errors, the command returns &lt;strong>no output&lt;/strong>.&lt;/li>
&lt;li>If there is any problem with the contents of the file, it outputs an error in the console.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="4-create-event-categories" data-heading="4. Create event categories" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h2 id="4-create-event-categories">4. Create event categories&lt;/h2>&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>Referencing categories in events is optional — you can skip this step if you don&amp;rsquo;t want to specify categories for your events.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/data-catalog/events/" >Manage Event Categories using Rudder CLI&lt;/a> for more information.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;p>You can also define &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/data-catalog/events/" >event categories&lt;/a> in YAML files with the required validation rules and reference them in your event definitions.&lt;/p>
&lt;p>Using your preferred text editor, create a file &lt;code>~/tutorial-catalog/my-event-categories.yaml&lt;/code> that defines the event categories, as shown:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">categories&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event-categories&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">signup_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Signup&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">login_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Login&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">browsing_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Browsing&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">miscellaneous_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Miscellaneous&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You can later reference these categories in your event definitions, as shown:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">events&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myevents&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">events&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">track&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Triggered when a user views a product&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">category&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/categories/event-categories/browsing_category&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># Reference to the Browsing category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">signup_completed&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">track&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Signup Completed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">category&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/categories/event-categories/signup_category&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># Reference to the Signup category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Before continuing, run the below command that validates the contents of the above file to make sure there are no issues:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that:&lt;/p>
&lt;ul>
&lt;li>If the file has no errors, the command returns &lt;strong>no output&lt;/strong>.&lt;/li>
&lt;li>If there is any problem with the contents of the file, it outputs an error in the console.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="5-create-properties" data-heading="5. Create properties" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h2 id="5-create-properties">5. Create properties&lt;/h2>&lt;p>Each event in the Tracking Plan can be associated with various properties. Also, some properties might be shared across events. Create a file &lt;code>~/tutorial-catalog/my-properties.yaml&lt;/code> that defines the properties to track, as shown:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">properties&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mypropertygroup&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_sku&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;SKU&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product SKU&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product&amp;#39;s category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This file defines two string properties that you can later associate with our Events, &lt;code>SKU&lt;/code> and &lt;code>Category&lt;/code>. Validate the project again using the same command (mentioned in &lt;a href="#3-create-events" >Step 3&lt;/a>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Again, the command gives no output if there are no issues with the file&amp;rsquo;s content.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="6-create-custom-types" data-heading="6. Create custom types" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h2 id="6-create-custom-types">6. Create custom types&lt;/h2>&lt;p>You can define &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/data-catalog/custom-types/" >custom data types&lt;/a> in YAML files with the required validation rules and reference them in your property definitions.&lt;/p>
&lt;p>Create a file &lt;code>~/tutorial-catalog/my-custom-types.yaml&lt;/code> that defines the custom data types, as shown:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">custom-types&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">identifier-types&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">types&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">sku_type&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;SKUType&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Custom type for SKU validation&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">minLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">5&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">maxLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">255&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">pattern&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;^SKU-[0-9]+$&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">category_type&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;CategoryType&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Custom type for product identifiers&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">minLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">10&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">maxLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">20&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">pattern&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;^PROD-[0-9]+$&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This file defines two custom types (&lt;code>SKU Type&lt;/code> and &lt;code>Category Type&lt;/code>) that you can later reference in your properties, as shown:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">properties&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mypropertygroup&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_sku&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;SKU&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/custom-types/identifier-types/sku_type&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># Reference to custom type&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product SKU&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/custom-types/identifier-types/category_type&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># Reference to custom type&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product&amp;#39;s category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Validate the project again using the same command (mentioned in &lt;a href="#3-create-events" >Step 3&lt;/a>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/data-catalog/custom-types/" >Custom Data Types&lt;/a> guide for more information.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="61-define-custom-type-variants" data-heading="6.1 Define custom type variants" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h3 id="61-define-custom-type-variants">6.1 Define custom type variants&lt;/h3>&lt;p>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/conditional-validation/custom-type-rules/" >Custom Type Variants&lt;/a> let you define different property requirements for reusable object types based on a discriminating property value. This is particularly useful when an object needs different validation rules depending on the context in which it is used.&lt;/p>
&lt;p>For example, you can create an address type with variants based on the country:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">custom-types&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">address_types&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">types&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">address_object&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;AddressObject&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">object&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Address with region-specific requirements&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/address_props/country&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/address_props/street_address&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/address_props/city&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/address_props/postal_code&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/address_props/state_province&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">variants&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">discriminator&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">discriminator&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/address_props/country&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">cases&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;US Address&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">match&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;US&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;USA&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;United States&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;US address format with state and ZIP&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/address_props/state_province&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/address_props/postal_code&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;UK Address&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">match&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;UK&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;GB&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;United Kingdom&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;UK address format with postcode&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/address_props/postal_code&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">default&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/address_props/postal_code&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Validate the project again using the same command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/conditional-validation/custom-type-rules/" >Custom Type Variants&lt;/a> for more examples and detailed information.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="7-create-tracking-plan" data-heading="7. Create Tracking Plan" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h2 id="7-create-tracking-plan">7. Create Tracking Plan&lt;/h2>&lt;p>With both events and properties defined, you can now create a Tracking Plan that references them. Create a file &lt;code>~/tutorial-catalog/my-tracking-plan.yaml&lt;/code> and add the following:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">tp&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mytrackingplan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mytrackingplan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Tracking Plan&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Contains all the events and properties for the Product Tracking Plan.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">rules&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/events/myeventgroup/product_viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">allow_unplanned&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_sku&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_details&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># Object property&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># Nested properties&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_name&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_price&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above file defines a Tracking Plan that contains the event (&lt;code>Product Viewed&lt;/code>) that you defined previously along with the properties &lt;code>SKU&lt;/code>, &lt;code>Category&lt;/code>, and &lt;code>Product Details&lt;/code> containing two &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/tracking-plans/create/" >nested properties&lt;/a> &lt;code>Product Name&lt;/code> and &lt;code>Product Price&lt;/code>.&lt;/p>
&lt;p>Note that you can associate the events and properties with the Tracking Plan by providing a reference to them using &lt;code>$ref&lt;/code>. The references point to specific entities defined in the project without strictly depending on the files they were defined in. Instead, they rely on the on the &lt;code>kind&lt;/code> (&lt;a href="#3-create-events" >&lt;code>events&lt;/code>&lt;/a> / &lt;a href="#5-create-properties" >&lt;code>properties&lt;/code>&lt;/a>), &lt;code>metadata.name&lt;/code>, and the entity&amp;rsquo;s &lt;code>id&lt;/code> fields to uniquely refer to them.&lt;/p>
&lt;p>For example, the &lt;code>Product Viewed&lt;/code> event is defined with:&lt;/p>
&lt;ul>
&lt;li>&lt;code>kind&lt;/code>: &lt;code>events&lt;/code>&lt;/li>
&lt;li>&lt;code>metadata.name&lt;/code>: &lt;code>myeventgroup&lt;/code>&lt;/li>
&lt;li>&lt;code>id&lt;/code>: &lt;code>product_viewed&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>Therefore, you can refer to it using the &lt;code>#/events/myeventgroup/product_viewed&lt;/code> reference.&lt;/p>
&lt;p>Validate the Tracking Plan again before proceeding to the next step:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="71-define-event-rule-variants" data-heading="7.1 Define event rule variants" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h3 id="71-define-event-rule-variants">7.1 Define event rule variants&lt;/h3>&lt;p>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/conditional-validation/event-rules/" >Event Rule Variants&lt;/a> let you define different property requirements for the same event based on a discriminating property value. This is useful when an event needs different validation rules depending on the context in which it occurs.&lt;/p>
&lt;p>For example, you can extend the &lt;code>product_viewed&lt;/code> event to have different requirements based on the page type.&lt;/p>
&lt;ol>
&lt;li>Add the required properties:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">properties&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mypropertygroup&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">page_type&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;page_type&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Type of page being viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">page_url&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;page_url&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;URL of the page&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">search_term&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;search_term&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Search query entered by user&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_sku&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;SKU&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product SKU&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product&amp;#39;s category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>Update the Tracking Plan to use variants:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">tp&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mytrackingplan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mytrackingplan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Tracking Plan&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Contains all the events and properties for the Product Tracking Plan.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">rules&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/events/myeventgroup/product_viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">allow_unplanned&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/page_type&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_sku&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/search_term&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">variants&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">discriminator&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">discriminator&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/page_type&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">cases&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Search Results Page&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">match&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;search&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;search_results&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;category_search&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;When user is on search or category pages&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/search_term&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Detail Page&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">match&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;product&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;product_detail&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;When user is viewing a specific product&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_sku&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">default&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/page_url&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>Make sure to:&lt;/p>
&lt;ul>
&lt;li>Define all properties used in variants in the common properties section&lt;/li>
&lt;li>Mark the discriminator property (&lt;code>page_type&lt;/code>) as required&lt;/li>
&lt;li>Set &lt;code>allow_unplanned: false&lt;/code> in the event definition&lt;/li>
&lt;/ul>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>Validate the project again using the same command:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/conditional-validation/event-rules/" >Event Rule Variants&lt;/a> for more examples and detailed information.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="8-deploy-data-catalog-resources" data-heading="8. Deploy Data Catalog resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h2 id="8-deploy-data-catalog-resources">8. Deploy Data Catalog resources&lt;/h2>&lt;p>With your events, properties, and Tracking Plan defined, deploy them to your RudderStack workspace.&lt;/p>
&lt;ol>
&lt;li>Review the changes to ensure there are no mistakes by running the following command:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-catalog --dry-run
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The &lt;code>--dry-run&lt;/code> option simulates the application of changes without making actual updates to your workspace. Instead, the &lt;code>rudder-cli&lt;/code> tool reports all the resources as &lt;code>New resources&lt;/code>, as seen in the below output:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">New resources:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - event:product_viewed
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - property:category
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - property:product_sku
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - tracking_plan:mytrackingplan
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>If the list matches your expectations, run the following command to apply the changes to your workspace:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The output will be similar, but with an additional confirmation prompt:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">New resources:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - event:product_viewed
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - property:category
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - property:product_sku
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - tracking_plan:mytrackingplan
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">? Do you want to apply these changes? &lt;span class="o">(&lt;/span>y/N&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Continue by typing &lt;code>y&lt;/code> and pressing the Enter key. &lt;code>rudder-cli&lt;/code> then starts creating the new resources one by one in your Data Catalog and reports if the process was successful, as shown:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">✔ Create event:product_viewed
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✔ Create property:category
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✔ Create property:product_sku
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✔ Create tracking_plan:mytrackingplan
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="9-update-tracking-plan" data-heading="9. Update Tracking Plan" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-governance-walkthrough/" data-title="End-to-End Walkthrough: Data Governance with Rudder CLI" -->
&lt;h2 id="9-update-tracking-plan">9. Update Tracking Plan&lt;/h2>&lt;p>In the above steps, you created and deployed a Tracking Plan containing rules for the &lt;code>Product Viewed&lt;/code> event. You can use the &lt;code>rudder-cli&lt;/code> tool to update the Tracking Plan by adding another event (&lt;code>Added to Cart&lt;/code>) and property (&lt;code>price&lt;/code>), and deploy the changes to your workspace.&lt;/p>
&lt;ol>
&lt;li>Define a new event &lt;code>Added to Cart&lt;/code> by opening the &lt;code>~/tutorial-catalog/my-events.yaml&lt;/code> file and adding the following content under &lt;code>spec.events&lt;/code>:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">events&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myeventgroup&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">events&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">track&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;This event is triggered every time a user views a product.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">added_to_cart&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Added To Cart&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">track&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;This event is triggered everytime the user adds a product to their cart.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note that you can also define the new event in a different file. In this case, you can add it in the existing file to group together events that are used in the same context.&lt;/p>
&lt;ol start="2">
&lt;li>Define a new property &lt;code>price&lt;/code> by opening the &lt;code>~/tutorial-catalog/my-properties.yaml&lt;/code> file and adding the following details under &lt;code>spec.properties&lt;/code>:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">properties&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mypropertygroup&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_sku&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;SKU&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product SKU&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product&amp;#39;s category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">price&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Price&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">integer&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product&amp;#39;s price&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>Add the newly-defined event and property in the Tracking Plan by updating the &lt;code>~/tutorial-catalog/my-tracking-plan.yaml&lt;/code> file by adding the new event rule and property under &lt;code>spec.rules&lt;/code>, as shown:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">tp&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mytrackingplan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">mytrackingplan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Tracking Plan&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Contains all the events and properties for the Product Tracking Plan.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">rules&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/events/myeventgroup/product_viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">allow_unplanned&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_sku&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_details&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># Object property&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># Nested properties&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_name&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_price&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event_rule&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># New event rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">added_to_cart_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/events/myeventgroup/added_to_cart&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/product_sku&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/mypropertygroup/price&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># New property&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>As described in &lt;a href="#8-deploy-data-catalog-resources" >Step 8: Deploy Data Catalog resources&lt;/a>, review the changes and apply them to your workspace by running the below commands:&lt;/p>
&lt;nav>
&lt;div class="nav nav-tabs" id="nav-tab" role="tablist">
&lt;a class="nav-item nav-link active "
id="nav-eacbdf" data-toggle="tab" href="#eacbdf"
role="tab" aria-controls="nav-home" aria-selected="true">Dry run&lt;/a>
&lt;a class="nav-item nav-link "
id="nav-dbafce" data-toggle="tab" href="#dbafce"
role="tab" aria-controls="nav-home" aria-selected="true">Apply changes to workspace&lt;/a>
&lt;/div>
&lt;/nav>
&lt;div class="tab-content" id="nav-tab-content">
&lt;div class="tab-pane fade show active " id="eacbdf" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-catalog --dry-run
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade show " id="dbafce" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-catalog
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;p>You can also run the below command to deploy the Tracking Plan changes to your workspace directly and skip any confirmation:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-catalog --confirm&lt;span class="o">=&lt;/span>&lt;span class="nb">false&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The output of this command should look like:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">New resources:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - event:added_to_cart
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - property:price
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Updated resources:
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> - tracking_plan:mytrackingplan
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✔ Create event:added_to_cart
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✔ Create property:price
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">✔ Update tracking_plan:mytrackingplan
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The above output informs that a new event and property along with a change in the Tracking Plan is detected. It also informs that the new resources are created and the update operation is completed successfully.&lt;/p></description></item><item><title>Archive: End-to-End Walkthrough: SQL Models with Rudder CLI</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/</guid><description>
&lt;p>This tutorial shows you how to use &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/" >Rudder CLI&lt;/a> to:&lt;/p>
&lt;ul>
&lt;li>Authenticate and prepare a project directory for SQL model YAML&lt;/li>
&lt;li>Resolve the warehouse &lt;strong>account ID&lt;/strong> your models use&lt;/li>
&lt;li>&lt;strong>Create&lt;/strong> a new SQL model from YAML and sync it to your workspace&lt;/li>
&lt;li>&lt;strong>Import&lt;/strong> an existing workspace SQL model into Git (inline SQL or external &lt;code>.sql&lt;/code> file)&lt;/li>
&lt;li>&lt;strong>Validate&lt;/strong> configuration and &lt;strong>preview&lt;/strong> query results before you &lt;strong>apply&lt;/strong> changes&lt;/li>
&lt;/ul>
&lt;p>For feature overview, supported warehouses, and recommended repository layout, see &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/" >Manage SQL Models using Rudder CLI&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="prerequisites" data-heading="Prerequisites" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/" >Rudder CLI&lt;/a> installed locally&lt;/li>
&lt;li>A directory you will use as the CLI project root (this tutorial uses &lt;code>~/tutorial-sql-models&lt;/code>; replace it with your path)&lt;/li>
&lt;li>At least one &lt;a href="https://www.rudderstack.com/docs/sources/reverse-etl/" >Reverse ETL source&lt;/a> in the RudderStack dashboard for the warehouse you query — RudderStack uses that connection to resolve &lt;strong>account IDs&lt;/strong> (see &lt;a href="#3-list-warehouse-accounts" >List warehouse accounts&lt;/a>)&lt;/li>
&lt;li>A &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/#workspace-sat" >workspace-level Service Access Token&lt;/a> with the following &lt;a href="https://www.rudderstack.com/docs/access-management/policies-overview/#resource-permissions" >permissions&lt;/a>:&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Resource&lt;/th>
&lt;th style="text-align:left">Permissions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">SQL Models&lt;/td>
&lt;td style="text-align:left">&lt;strong>Create &amp;amp; Delete&lt;/strong>, &lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>&lt;strong>For testing or development only&lt;/strong>: A &lt;a href="https://www.rudderstack.com/docs/access-management/personal-access-tokens/" >Personal Access Token&lt;/a> with the &lt;strong>Read-Write&lt;/strong> role&lt;/li>
&lt;/ul>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>RudderStack recommends using a workspace-level Service Access Token for authentication.&lt;/strong>&lt;/p>
&lt;p>Any action authenticated by a Personal Access Token will break if you&amp;rsquo;re removed from the organization or RudderStack makes a breaking change to your permissions.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="token-permissions-for-legacy-rbac-system" data-heading="Token permissions for legacy RBAC system" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h4 id="token-permissions-for-legacy-rbac-system">Token permissions for legacy RBAC system&lt;/h4>&lt;p>If you are on the &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/user-management/" >legacy Permissions Management (RBAC) system&lt;/a>, your workspace-level Service Access Token should have minimum &lt;strong>Admin&lt;/strong> permissions.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/service-access-tokens/#generate-service-access-token" >Generate a workspace-level Service Access Token&lt;/a> for steps to create the token.&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/access-management/permissions/legacy/admin.webp" href="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
alt="Workspace-level Service Access Token with Admin permission"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="1-authenticate-the-cli-tool" data-heading="1. Authenticate the CLI tool" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h2 id="1-authenticate-the-cli-tool">1. Authenticate the CLI tool&lt;/h2>&lt;p>Run the following command and enter your &lt;a href="#prerequisites" >workspace-level Service Access Token&lt;/a> when prompted:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli auth login
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="2-create-a-project-directory" data-heading="2. Create a project directory" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h2 id="2-create-a-project-directory">2. Create a project directory&lt;/h2>&lt;p>Create a folder for YAML and optional SQL files:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir -p ~/tutorial-sql-models/sql-models/sql
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">If you already manage Data Catalog or Tracking Plan YAML in another folder, you can add SQL model files there instead — Rudder CLI discovers &lt;code>.yaml&lt;/code> / &lt;code>.yml&lt;/code> files recursively under the path you pass to &lt;code>-l&lt;/code> / &lt;code>--location&lt;/code>.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="3-list-warehouse-accounts" data-heading="3. List warehouse accounts" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h2 id="3-list-warehouse-accounts">3. List warehouse accounts&lt;/h2>&lt;p>Each SQL model references an &lt;code>account_id&lt;/code> for the warehouse connection. List accounts linked to your workspace:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli workspace accounts list
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Pick the &lt;strong>account ID&lt;/strong> that matches your Reverse ETL warehouse setup. You will use it in the YAML &lt;code>spec&lt;/code> in the next sections.&lt;/p>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">You need a configured &lt;a href="https://www.rudderstack.com/docs/sources/reverse-etl/" >Reverse ETL source&lt;/a> in the dashboard so warehouse credentials exist for that account.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="4-create-a-new-sql-model" data-heading="4. Create a new SQL model" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h2 id="4-create-a-new-sql-model">4. Create a new SQL model&lt;/h2>&lt;p>Add a YAML file (for example &lt;code>~/tutorial-sql-models/sql-models/product-purchases.yaml&lt;/code>) with a &lt;code>retl-source-sql-model&lt;/code> resource. Replace &lt;code>account_id&lt;/code> with the value from &lt;a href="#3-list-warehouse-accounts" >List warehouse accounts&lt;/a>.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;rudder/v0.1&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;retl-source-sql-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product-purchases-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product-purchases-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Purchases SQL Model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">primary_key&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;user_id&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;SQL model for product purchases&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">source_definition&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;postgres&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">account_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;YOUR_ACCOUNT_ID&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">sql&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">|&lt;/span>&lt;span class="sd">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> SELECT
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> user_id,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> event_name,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> event_type,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> timestamp,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> properties
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> FROM
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> user_events
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> WHERE
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> timestamp &amp;gt;= CURRENT_DATE - INTERVAL &amp;#39;180 days&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> ORDER BY
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> timestamp DESC&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>Query shape&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Inline SQL&lt;/strong>: use &lt;code>sql: |&lt;/code> as above.&lt;/li>
&lt;li>&lt;strong>External file&lt;/strong>: use &lt;code>file: &amp;quot;./sql/my-query.sql&amp;quot;&lt;/code> instead of &lt;code>sql&lt;/code> — use &lt;strong>one&lt;/strong> of &lt;code>sql&lt;/code> or &lt;code>file&lt;/code>, not both.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>&lt;code>source_definition&lt;/code> values&lt;/strong> (examples): &lt;code>postgres&lt;/code>, &lt;code>mysql&lt;/code>, &lt;code>snowflake&lt;/code>, &lt;code>redshift&lt;/code>, &lt;code>bigquery&lt;/code>, &lt;code>databricks&lt;/code>, &lt;code>trino&lt;/code>. See the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" >SQL Model YAML reference&lt;/a> for the full &lt;code>spec&lt;/code>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="validate-and-apply-create-path" data-heading="Validate and apply (create path)" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h3 id="validate-and-apply-create-path">Validate and apply (create path)&lt;/h3>&lt;p>From your machine (adjust the path):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-sql-models
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-sql-models --dry-run
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-sql-models
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>After a successful &lt;code>apply&lt;/code>, the model exists in the workspace and you can keep editing YAML and re-running validate / apply.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="5-import-an-existing-sql-model" data-heading="5. Import an existing SQL model" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h2 id="5-import-an-existing-sql-model">5. Import an existing SQL model&lt;/h2>&lt;p>Use this path when the model already exists in the workspace and you want it under Git.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="list-models-in-the-workspace" data-heading="List models in the workspace" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h3 id="list-models-in-the-workspace">List models in the workspace&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli workspace retl-sources list
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Note the &lt;strong>&lt;code>source_id&lt;/code>&lt;/strong> (remote ID) for the model you want.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="run-import" data-heading="Run import" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h3 id="run-import">Run import&lt;/h3>&lt;p>Pick a &lt;strong>&lt;code>local_id&lt;/code>&lt;/strong> (name for the resource in your project). Replace placeholders with your IDs and paths:&lt;/p>
&lt;p>&lt;strong>Inline SQL in YAML (default)&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli import retl-sources --local-id my-imported-model --remote-id YOUR_SOURCE_ID -l ~/tutorial-sql-models
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>SQL in an external file&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli import retl-sources --local-id my-imported-model --remote-id YOUR_SOURCE_ID -l ~/tutorial-sql-models --sql-location ~/tutorial-sql-models/sql-models/sql/my-imported-model.sql
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Rudder CLI writes YAML under your project (and a &lt;code>.sql&lt;/code> file when you use &lt;code>--sql-location&lt;/code>). The &lt;code>metadata.import&lt;/code> section maps your &lt;code>local_id&lt;/code> to the workspace &lt;code>remote_id&lt;/code> so later &lt;code>apply&lt;/code> calls stay aligned.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="finish-linking-the-import" data-heading="Finish linking the import" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h3 id="finish-linking-the-import">Finish linking the import&lt;/h3>&lt;p>Validate and apply so the CLI project owns the resource:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-sql-models
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-sql-models --dry-run
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-sql-models
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">If you use &lt;code>--sql-location&lt;/code>, keep the YAML and the &lt;code>.sql&lt;/code> file together in Git; both must be present for validate / apply.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>For parameter details and troubleshooting, see &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/import/" >Import existing SQL model resources&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="6-validate-and-preview" data-heading="6. Validate and preview" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h2 id="6-validate-and-preview">6. Validate and preview&lt;/h2>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="project-wide-validation" data-heading="Project-wide validation" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h3 id="project-wide-validation">Project-wide validation&lt;/h3>&lt;p>Checks YAML structure, references, and related rules for everything under the project path:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-sql-models
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="validate-a-single-sql-model" data-heading="Validate a single SQL model" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h3 id="validate-a-single-sql-model">Validate a single SQL model&lt;/h3>&lt;p>Targets one model by the &lt;code>spec.id&lt;/code> in your YAML:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli retl-sources validate YOUR_MODEL_ID -l ~/tutorial-sql-models
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This checks SQL syntax for the warehouse, connectivity to the account, required fields, and that the query can run (limited execution), as described in &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/validate/" >Validate SQL model resources&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="preview-query-results" data-heading="Preview query results" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h3 id="preview-query-results">Preview query results&lt;/h3>&lt;p>Runs the query and prints sample rows (use your model’s &lt;code>spec.id&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli retl-sources preview YOUR_MODEL_ID -l ~/tutorial-sql-models --limit &lt;span class="m">10&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Useful flags: &lt;code>-l&lt;/code> / &lt;code>--location&lt;/code> for the project root, &lt;code>--limit&lt;/code> for row cap (default 100), &lt;code>-j&lt;/code> for JSON output, &lt;code>--interactive=false&lt;/code> for scripts. See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/validate/" >Validate and preview your models&lt;/a> for examples and troubleshooting.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="deploy-changes" data-heading="Deploy changes" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h3 id="deploy-changes">Deploy changes&lt;/h3>&lt;p>After you are satisfied:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-sql-models --dry-run
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-sql-models
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>apply&lt;/code> syncs SQL models together with any other Rudder CLI resources in the same project directory.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="see-more" data-heading="See more" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" data-title="End-to-End Walkthrough: SQL Models with Rudder CLI" -->
&lt;h2 id="see-more">See more&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/" >Manage SQL Models using Rudder CLI&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/create/" >Create New SQL Model Resources&lt;/a> — deeper how-to for new resources&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/import/" >Import Existing SQL Model Resources&lt;/a> — import parameters and edge cases&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/validate/" >Validate and Preview Your Models&lt;/a> — preview parameters, CI/CD notes, error tables&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" >SQL Model Resources YAML Reference&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions for Rudder CLI&lt;/a> for automating validate / apply&lt;/li>
&lt;/ul></description></item><item><title>Archive: End-to-End Walkthrough: Event Stream Sources with Rudder CLI</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/</guid><description>
&lt;p>This tutorial shows you how to use &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/" >Rudder CLI&lt;/a> to:&lt;/p>
&lt;ul>
&lt;li>Authenticate against your RudderStack workspace&lt;/li>
&lt;li>Create a project directory and define an Event Stream source in YAML&lt;/li>
&lt;li>Optionally attach a Tracking Plan for data governance&lt;/li>
&lt;li>Validate and deploy the source to your workspace&lt;/li>
&lt;/ul>
&lt;p>For feature overview and supported source types, see &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/" >Manage Event Stream Sources using Rudder CLI&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="prerequisites" data-heading="Prerequisites" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" data-title="End-to-End Walkthrough: Event Stream Sources with Rudder CLI" -->
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>&lt;ul>
&lt;li>Rudder CLI tool (&lt;code>rudder-cli&lt;/code>) &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/" >installed locally&lt;/a>&lt;/li>
&lt;li>An existing &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/tracking-plans/" >Tracking Plan&lt;/a> defined in your CLI project (optional, but &lt;strong>recommended&lt;/strong> for &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/" >Data Governance&lt;/a>)&lt;/li>
&lt;li>In your RudderStack workspace, create a &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/#workspace-sat" >workspace-level Service Access Token&lt;/a> with the following &lt;a href="https://www.rudderstack.com/docs/access-management/policies-overview/#resource-permissions" >permissions&lt;/a> to manage Event Stream sources:&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Resource&lt;/th>
&lt;th style="text-align:left">Permissions&lt;/th>
&lt;th style="text-align:left">&lt;div style="width:350px">Description&lt;/div>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Event Stream Sources&lt;/td>
&lt;td style="text-align:left">&lt;strong>Create &amp;amp; Delete&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Create or delete Event Stream sources in the workspace&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Event Stream Sources&lt;/td>
&lt;td style="text-align:left">&lt;strong>Edit&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Make changes to the configuration of Event Stream sources&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Event Stream Sources&lt;/td>
&lt;td style="text-align:left">&lt;strong>Connect&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Connect an Event Stream source to a Tracking Plan&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Tracking Plans&lt;/td>
&lt;td style="text-align:left">&lt;strong>Edit&lt;/strong>, &lt;strong>Connect&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Connect a Tracking Plan to an Event Stream source&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>&lt;details>
&lt;summary>&lt;strong>Click here to see how these permissions appear in the workspace policy&lt;/strong>.&lt;/summary>
&lt;br />
&lt;figure>&lt;img src="https://www.rudderstack.com/docs/docs/images/access-management/rudder-cli-event-stream.webp"
alt="Permissions to manage Event Stream sources in RudderStack dashboard"/>
&lt;/figure>
&lt;/details>
&lt;br />&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="token-permissions-for-legacy-rbac-system" data-heading="Token permissions for legacy RBAC system" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" data-title="End-to-End Walkthrough: Event Stream Sources with Rudder CLI" -->
&lt;h4 id="token-permissions-for-legacy-rbac-system">Token permissions for legacy RBAC system&lt;/h4>&lt;p>If you are on the &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/user-management/" >legacy Permissions Management (RBAC) system&lt;/a>, your workspace-level Service Access Token should have minimum &lt;strong>Admin&lt;/strong> permissions.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/service-access-tokens/#generate-service-access-token" >Generate a workspace-level Service Access Token&lt;/a> for steps to create the token.&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/access-management/permissions/legacy/admin.webp" href="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
alt="Workspace-level Service Access Token with Admin permission"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="1-authenticate-the-cli-tool" data-heading="1. Authenticate the CLI tool" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" data-title="End-to-End Walkthrough: Event Stream Sources with Rudder CLI" -->
&lt;h2 id="1-authenticate-the-cli-tool">1. Authenticate the CLI tool&lt;/h2>&lt;p>Run the following command and enter your &lt;a href="#prerequisites" >access token&lt;/a> when prompted:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli auth login
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="2-create-a-project-directory" data-heading="2. Create a project directory" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" data-title="End-to-End Walkthrough: Event Stream Sources with Rudder CLI" -->
&lt;h2 id="2-create-a-project-directory">2. Create a project directory&lt;/h2>&lt;p>Create a project directory to store your source YAML files:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">mkdir ~/tutorial-sources
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">If you are already managing Tracking Plans or Data Catalog resources via CLI, you can add source definitions to the same project directory. The CLI processes all YAML files in the directory recursively.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="3-review-the-yaml-reference" data-heading="3. Review the YAML reference" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" data-title="End-to-End Walkthrough: Event Stream Sources with Rudder CLI" -->
&lt;h2 id="3-review-the-yaml-reference">3. Review the YAML reference&lt;/h2>&lt;p>Before defining your Event Stream source, review the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" >Source YAML Reference&lt;/a> to understand:&lt;/p>
&lt;ul>
&lt;li>The complete YAML structure for Event Stream sources&lt;/li>
&lt;li>Required and optional fields for source configuration&lt;/li>
&lt;li>Governance validation settings and violation rules&lt;/li>
&lt;li>Reference syntax for linking sources to Tracking Plans&lt;/li>
&lt;/ul>
&lt;blockquote class="success">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/tick.svg loading="lazy" alt="success" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">
Understanding the YAML reference will help you create properly structured files and avoid common validation errors when defining your sources.
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="4-define-an-event-stream-source" data-heading="4. Define an Event Stream source" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" data-title="End-to-End Walkthrough: Event Stream Sources with Rudder CLI" -->
&lt;h2 id="4-define-an-event-stream-source">4. Define an Event Stream source&lt;/h2>&lt;p>Create a YAML file for your Event Stream source (&lt;code>~/tutorial-sources/ios-source.yaml&lt;/code>):&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event-stream-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ios-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;my-ios-source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;ios&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;iOS Source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This example creates a basic iOS source without governance configuration. The source accepts events and is enabled by default.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="5-optional-add-governance-configuration" data-heading="5. Optional: Add governance configuration" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" data-title="End-to-End Walkthrough: Event Stream Sources with Rudder CLI" -->
&lt;h2 id="5-optional-add-governance-configuration">5. Optional: Add governance configuration&lt;/h2>&lt;p>If you want to associate a Tracking Plan with your source for data governance, update the YAML file to include governance settings:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event-stream-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ios-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;my-ios-source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;ios&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;iOS Source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">governance&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">validations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">tracking_plan&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/tp/my-tracking-plan/my-tracking-plan&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">track&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propagate_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_events&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_other_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">identify&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propagate_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_other_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In this example:&lt;/p>
&lt;ul>
&lt;li>The source is linked to a Tracking Plan referenced as &lt;code>#/tp/my-tracking-plan/my-tracking-plan&lt;/code>.&lt;/li>
&lt;li>For &lt;code>track&lt;/code> events, violations are propagated, unplanned events are dropped, unplanned properties are dropped, and other violations are dropped.&lt;/li>
&lt;li>For &lt;code>identify&lt;/code> events, violations are propagated, unplanned properties are dropped, and other violations are dropped.&lt;/li>
&lt;/ul>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>The Tracking Plan reference follows the format &lt;code>#/tp/[metadata.name]/[tracking-plan.id]&lt;/code>, where &lt;code>metadata.name&lt;/code> is the &lt;code>metadata.name&lt;/code> value in your Tracking Plan YAML file and &lt;code>tracking-plan.id&lt;/code> is the &lt;code>spec.id&lt;/code> value of the Tracking Plan.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" >Source YAML Reference&lt;/a> for detailed information about these configuration options.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="6-validate-and-deploy" data-heading="6. Validate and deploy" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" data-title="End-to-End Walkthrough: Event Stream Sources with Rudder CLI" -->
&lt;h2 id="6-validate-and-deploy">6. Validate and deploy&lt;/h2>&lt;ol>
&lt;li>Validate your files:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli validate -l ~/tutorial-sources
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="2">
&lt;li>&lt;strong>Optional&lt;/strong>: Review changes before deploying:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-sources --dry-run
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>Deploy changes to your workspace:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-shell" data-lang="shell">&lt;span class="line">&lt;span class="cl">rudder-cli apply -l ~/tutorial-sources
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="see-more" data-heading="See more" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" data-title="End-to-End Walkthrough: Event Stream Sources with Rudder CLI" -->
&lt;h2 id="see-more">See more&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/" >Manage Event Stream Sources using Rudder CLI&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" >Event Stream Sources YAML Reference&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions for Rudder CLI&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Archive: Data Catalog and Tracking Plans YAML Reference</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/</guid><description>
&lt;p>This guide serves as a detailed reference for the CLI project YAML files that contain definitions of your Data Catalog and Tracking Plan resources.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="overview" data-heading="Overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h2 id="overview">Overview&lt;/h2>&lt;p>In the context of the Rudder CLI (&lt;code>rudder-cli&lt;/code>) tool, a project typically consists of a root directory that contains all the project files. Within this root directory, each YAML file can contain definitions for resources of a particular type, for example, events, properties, custom data types, and Tracking Plans.&lt;/p>
&lt;p>The location and naming of these YAML files is flexible, as you can store the YAML files anywhere within the project&amp;rsquo;s root directory or subdirectories.&lt;/p>
&lt;p>You can also group some resources of the same type in the same file, allowing structures that can best serve your project&amp;rsquo;s requirements. For example, you could have:&lt;/p>
&lt;ul>
&lt;li>A &lt;code>events.yaml&lt;/code> file in the project&amp;rsquo;s root directory that defines multiple events&lt;/li>
&lt;li>Another file &lt;code>subdirectory/user-events.yaml&lt;/code> that defines additional events&lt;/li>
&lt;/ul>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">The Rudder CLI tool processes all valid YAML files within the project structure to recognize the defined resources.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;p>The following sections detail the specific YAML formats and parameter definitions for each resource type.&lt;/p>
&lt;p>For discriminator-based validation in Tracking Plan event rules and custom types, see the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/yaml-conditional-validation/" >Conditional Validation YAML Reference&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="events" data-heading="Events" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h2 id="events">Events&lt;/h2>&lt;p>You can define one or more events in the YAML file by setting &lt;code>kind&lt;/code> to &lt;code>events&lt;/code>.&lt;/p>
&lt;p>The &lt;code>spec&lt;/code> parameter of the YAML file has the following structure:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>events&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Array of &lt;a href="#event-definition" >event definitions&lt;/a>&lt;/td>
&lt;td style="text-align:left">An array of event definitions grouped together in the same file.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="event-definition" data-heading="Event definition" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="event-definition">Event definition&lt;/h3>&lt;p>The event definitions have a structure that depends on the event type. All definitions share some common properties, as listed in the below table:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>id &lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Unique identifier for the event within the project. This parameter must be unique across all events.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>event_type&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Event type. Acceptable values are &lt;code>track&lt;/code>, &lt;code>identify&lt;/code>, &lt;code>page&lt;/code>, &lt;code>screen&lt;/code>, and &lt;code>group&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>description&lt;/code>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Event description.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>category&lt;/code>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Reference to an existing &lt;a href="#event-categories" >event category&lt;/a>. &lt;br />&lt;br />See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/data-catalog/events/#event-categories" >Manage Event Categories using Rudder CLI&lt;/a> for more information.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Additionally, &lt;code>track&lt;/code> events (&lt;code>event_type: track&lt;/code>) also support the following property:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>name&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">The &lt;code>track&lt;/code> event name. In other words, this parameter corresponds to the &lt;code>event&lt;/code> property of the corresponding RudderStack &lt;code>track&lt;/code> event.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="event-example" data-heading="Example" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="event-example">Example&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">events&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">myeventgroup&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">events&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">track&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;This event is triggered every time a user views a product.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">category&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/categories/event-categories/browsing_category&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c"># Reference to the Browsing category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">added_to_cart&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Added To Cart&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">track&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;This event is triggered every time the user adds a product to their cart.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">identify&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">identify&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;An event that identifies the user.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">page&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event_type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">page&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="event-categories" data-heading="Event categories" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h2 id="event-categories">Event categories&lt;/h2>&lt;p>You can define event categories in the YAML file by setting &lt;code>kind&lt;/code> to &lt;code>categories&lt;/code>.&lt;/p>
&lt;p>The &lt;code>spec&lt;/code> parameter of the YAML file has the following structure:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>categories&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Array of &lt;a href="#category-definition" >category definitions&lt;/a>&lt;/td>
&lt;td style="text-align:left">An array of category definitions grouped together in the same file.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="category-definition" data-heading="Category definition" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="category-definition">Category definition&lt;/h3>&lt;p>All category definitions share the following properties:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Unique identifier for the category within the project. This parameter must be unique across all categories in all the YAML files within the project.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>name&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Display name of the category.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="category-example" data-heading="Example" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="category-example">Example&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">categories&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event-categories&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">signup_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Signup&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">login_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Login&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">browsing_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Browsing&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">miscellaneous_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Miscellaneous&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="properties" data-heading="Properties" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h2 id="properties">Properties&lt;/h2>&lt;p>You can define one or more properties in the YAML file by setting &lt;code>kind&lt;/code> to &lt;code>properties&lt;/code>.&lt;/p>
&lt;p>The &lt;code>spec&lt;/code> parameter of the YAML file has the following structure:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>properties&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Array of &lt;a href="#property-definition" >property definitions&lt;/a>&lt;/td>
&lt;td style="text-align:left">An array of property definitions grouped together in the same file.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="property-definition" data-heading="Property definition" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="property-definition">Property definition&lt;/h3>&lt;p>A property definition has the following structure:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Unique identifier for the property within the project. This parameter must be unique across all properties in all the YAML files within the project.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>name&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">This parameter corresponds to the field inside an event&amp;rsquo;s &lt;code>properties&lt;/code> or &lt;code>traits&lt;/code> JSON.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>type&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Property type. &lt;br />&lt;br /> Acceptable values are: &lt;code>string&lt;/code>, &lt;code>integer&lt;/code>, &lt;code>number&lt;/code>, &lt;code>object&lt;/code>, &lt;code>array&lt;/code>, &lt;code>boolean&lt;/code>, and &lt;code>null&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>description&lt;/code>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Property description.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>propConfig&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#property-config" >&lt;code>propConfig&lt;/code>&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Additional validation rules for the property&amp;rsquo;s values.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="property-config" data-heading="Property config" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h4 id="property-config">Property config&lt;/h4>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>minLength&lt;/code>&lt;/td>
&lt;td style="text-align:left">Integer&lt;/td>
&lt;td style="text-align:left">Minimum length of the property&amp;rsquo;s string value.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>maxLength&lt;/code>&lt;/td>
&lt;td style="text-align:left">Integer&lt;/td>
&lt;td style="text-align:left">Maximum length of the property&amp;rsquo;s string value.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>pattern&lt;/code>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Regular expression that the property&amp;rsquo;s string values need to match with.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>enum&lt;/code>&lt;/td>
&lt;td style="text-align:left">Array of strings&lt;/td>
&lt;td style="text-align:left">List of all valid values for the property.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="property-example" data-heading="Example" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="property-example">Example&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">properties&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ecommerce_properties&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_id&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product_id&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Unique identifier for the product.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propConfig&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">minLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">3&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">maxLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">64&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_name&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product_name&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Name of the product.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propConfig&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">minLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">2&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">maxLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">255&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_price&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product_price&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">number&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Price of the product in the store&amp;#39;s currency.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_category&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product_category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Category the product belongs to.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propConfig&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enum&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;clothing&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;electronics&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;home_goods&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;beauty&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="s2">&amp;#34;accessories&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">maxLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">60&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">cart_items&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;cart_items&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Items present in the cart.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">array&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propConfig&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">minItems&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">uniqueItems&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="custom-data-types" data-heading="Custom data types" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h2 id="custom-data-types">Custom data types&lt;/h2>&lt;p>You can define custom data types in the YAML file by setting &lt;code>kind&lt;/code> to &lt;code>custom-types&lt;/code>.&lt;/p>
&lt;p>The &lt;code>spec&lt;/code> parameter of the YAML file has the following structure:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>types&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Array of &lt;a href="#custom-type-definition" >custom type definitions&lt;/a>&lt;/td>
&lt;td style="text-align:left">An array of custom type objects grouped together in the same file.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="custom-type-definition" data-heading="Custom type definition" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="custom-type-definition">Custom type definition&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Unique identifier for the custom type within the project. This parameter must be unique across all custom types in all the YAML files within the project.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>name&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Display name of the custom type.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>type&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Base data type for the custom type. &lt;br />&lt;br /> Acceptable values are: &lt;code>string&lt;/code>, &lt;code>integer&lt;/code>, &lt;code>number&lt;/code>, &lt;code>object&lt;/code>, &lt;code>array&lt;/code>, &lt;code>boolean&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>config&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#config-options" >&lt;code>config&lt;/code>&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Validation rules for the custom type. The configuration options vary depending on the &lt;code>type&lt;/code> parameter.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>description&lt;/code>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Description of the custom type.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="config-options" data-heading="&lt;code>config&lt;/code> options" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h4 id="config-options">&lt;code>config&lt;/code> options&lt;/h4>&lt;p>The &lt;code>config&lt;/code> object&amp;rsquo;s configuration varies depending on the &lt;code>type&lt;/code> parameter.&lt;/p>
&lt;nav>
&lt;div class="nav nav-tabs" id="nav-tab" role="tablist">
&lt;a class="nav-item nav-link active "
id="nav-efadcb" data-toggle="tab" href="#efadcb"
role="tab" aria-controls="nav-home" aria-selected="true">String&lt;/a>
&lt;a class="nav-item nav-link "
id="nav-bacdef" data-toggle="tab" href="#bacdef"
role="tab" aria-controls="nav-home" aria-selected="true">Number/Integer&lt;/a>
&lt;a class="nav-item nav-link "
id="nav-dfabce" data-toggle="tab" href="#dfabce"
role="tab" aria-controls="nav-home" aria-selected="true">Array&lt;/a>
&lt;/div>
&lt;/nav>
&lt;div class="tab-content" id="nav-tab-content">
&lt;div class="tab-pane fade show active " id="efadcb" role="tabpanel" aria-labelledby="nav-1">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Parameter&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>minLength&lt;/code>&lt;/td>
&lt;td style="text-align:left">Minimum string length&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>maxLength&lt;/code>&lt;/td>
&lt;td style="text-align:left">Maximum string length&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>pattern&lt;/code>&lt;/td>
&lt;td style="text-align:left">Regular expression pattern&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>format&lt;/code>&lt;/td>
&lt;td style="text-align:left">Predefined format like email, date, etc.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>enum&lt;/code>&lt;/td>
&lt;td style="text-align:left">Array of allowed values&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;div class="tab-pane fade show " id="bacdef" role="tabpanel" aria-labelledby="nav-1">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Parameter&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>minimum&lt;/code>&lt;/td>
&lt;td style="text-align:left">Minimum value&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>maximum&lt;/code>&lt;/td>
&lt;td style="text-align:left">Maximum value&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>exclusiveMinimum&lt;/code>&lt;/td>
&lt;td style="text-align:left">Exclusive minimum value&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>exclusiveMaximum&lt;/code>&lt;/td>
&lt;td style="text-align:left">Exclusive maximum value&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>multipleOf&lt;/code>&lt;/td>
&lt;td style="text-align:left">Multiple of value&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;div class="tab-pane fade show " id="dfabce" role="tabpanel" aria-labelledby="nav-1">
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Parameter&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>itemTypes&lt;/code>&lt;/td>
&lt;td style="text-align:left">List of acceptable types for array items&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>minItems&lt;/code>&lt;/td>
&lt;td style="text-align:left">Minimum number of items&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>maxItems&lt;/code>&lt;/td>
&lt;td style="text-align:left">Maximum number of items&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>uniqueItems&lt;/code>&lt;/td>
&lt;td style="text-align:left">Boolean requiring uniqueness of items&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;/div>
&lt;/div>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="custom-type-example" data-heading="Example" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="custom-type-example">Example&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">custom-types&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">email-types&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">types&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">emailtype&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;EmailType&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Custom type for email validation&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">format&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;email&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">minLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">5&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">maxLength&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="m">255&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">pattern&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">addresstype&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;AddressType&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Physical address information&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">object&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">street&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">city&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">country&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">string&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="tracking-plans" data-heading="Tracking Plans" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h2 id="tracking-plans">Tracking Plans&lt;/h2>&lt;p>You can define a Tracking Plan in the YAML file by setting &lt;code>kind&lt;/code> to &lt;code>tp&lt;/code>.&lt;/p>
&lt;p>The &lt;code>spec&lt;/code> parameter of the YAML file has the following structure:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Unique identifier for the Tracking Plan within the project. This parameter must be unique across all the Tracking Plans in the project.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>display_name&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">A readable short name for the Tracking Plan.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>description&lt;/code>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Tracking plan description.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>rules&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Array of &lt;a href="#rule-definition" >rules definitions&lt;/a>&lt;/td>
&lt;td style="text-align:left">Contains the list of events in the Tracking Plan along with the rules for their expected properties.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="rules-definition" data-heading="Rules definition" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="rules-definition">Rules definition&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>type&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">The rule type. The only acceptable value currently is &lt;code>event_rule&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Rule ID.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>event&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#rule-event-definition" >Rule event definition&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Event definition associated with the rule along with the validation rules for the Tracking Plan.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>properties&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Array of &lt;a href="#rule-property-definition" >rule property definitions&lt;/a>&lt;/td>
&lt;td style="text-align:left">List of properties associated with the rule&amp;rsquo;s event along with the validation rules for the Tracking Plan.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="rule-event-definition" data-heading="Rule event definition" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h4 id="rule-event-definition">Rule event definition&lt;/h4>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>$ref&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Reference to an existing event definition. See &lt;a href="#reference-catalog-resources" >Reference catalog resources&lt;/a> for more information on how to work with references.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>allow_unplanned&lt;/code>&lt;/td>
&lt;td style="text-align:left">Boolean&lt;/td>
&lt;td style="text-align:left">Validation rule that checks if the event can have properties other than those defined in the rule&amp;rsquo;s &lt;code>properties&lt;/code> section. &lt;br />&lt;br />&lt;strong>Default value&lt;/strong>: &lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>identity_section&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required, for non-track events&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Defines in which field of the corresponding RudderStack event payload the rule&amp;rsquo;s properties should be included. &lt;br />&lt;br />Acceptable values are: &lt;code>properties&lt;/code>, &lt;code>traits&lt;/code>, and &lt;code>context.traits&lt;/code>.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="rule-property-definition" data-heading="Rule property definition" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h4 id="rule-property-definition">Rule property definition&lt;/h4>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>$ref&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Reference to an existing property definition. &lt;br />&lt;br />See &lt;a href="#reference-catalog-resources" >Reference catalog resources&lt;/a> for more information on how to work with references.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>required&lt;/code>&lt;/td>
&lt;td style="text-align:left">Boolean&lt;/td>
&lt;td style="text-align:left">Validation rule that determines whether the property should always be present in the RudderStack event. &lt;br />&lt;br />&lt;strong>Default value&lt;/strong>: &lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>properties&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Applicable only for properties of &lt;code>object&lt;/code> type&lt;/span>&lt;/td>
&lt;td style="text-align:left">Array of &lt;a href="#rule-property-definition" >rule property definitions&lt;/a>&lt;/td>
&lt;td style="text-align:left">Defines which &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/tracking-plans/create/#nested-properties" >nested properties&lt;/a> should be included when this property is used in the Tracking Plan.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="tracking-plan-example" data-heading="Example" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="tracking-plan-example">Example&lt;/h3>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">tp&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ecommerce_tracking_plan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ecommerce_tracking_plan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;E-commerce Tracking Plan&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Tracking plan for an e-commerce application.&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">rules&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product_viewed_rule&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">event&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/events/myeventgroup/product_viewed&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">allow_unplanned&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/ecommerce_properties/product_id&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/ecommerce_properties/product_name&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/ecommerce_properties/product_price&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/properties/ecommerce_properties/product_category&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">required&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="reference-catalog-resources" data-heading="Reference Catalog resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h2 id="reference-catalog-resources">Reference Catalog resources&lt;/h2>&lt;p>Definitions in a YAML file can refer to definitions in other files by using the resource reference (&lt;code>$ref&lt;/code>) strings — this is useful while defining resources like Tracking Plans which need to be associated with events and properties defined in other files.&lt;/p>
&lt;p>Note that references must always start with a &lt;code>#&lt;/code> character followed by the path using the &lt;code>/&lt;/code> delimiter. The path can point to a unique resource within a project&amp;rsquo;s file and is expected to have the following components in order:&lt;/p>
&lt;ul>
&lt;li>&lt;code>kind&lt;/code> value of the target resource&amp;rsquo;s file, that is, &lt;code>events&lt;/code>, &lt;code>properties&lt;/code>, or &lt;code>tp&lt;/code>.&lt;/li>
&lt;li>&lt;code>metadata.name&lt;/code> value of the target resource&amp;rsquo;s file.&lt;/li>
&lt;li>&lt;code>id&lt;/code> value of the target resource.&lt;/li>
&lt;/ul>
&lt;p>For example, you can refer an event inside a file with &lt;code>metadata.name&lt;/code> set to &lt;code>examples&lt;/code> and having &lt;code>id&lt;/code> as &lt;code>example_id&lt;/code> as follows:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">- &lt;span class="nt">$ref&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/events/examples/example_id&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="import-metadata" data-heading="Import metadata" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h2 id="import-metadata">Import metadata&lt;/h2>&lt;p>When you import resources from a workspace using the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" >&lt;code>import workspace&lt;/code>&lt;/a> command, the generated YAML files contain special import metadata that tells Rudder CLI how to link local resources to workspace resources.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="structure" data-heading="Structure" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="structure">Structure&lt;/h3>&lt;p>The import metadata is located in the &lt;code>metadata.import&lt;/code> section of the YAML file:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;rudder/v0.1&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;categories&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">import&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">workspaces&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">workspace_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;3NrueK2Hu7ooXVQqQJhKqKlnofE&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">resources&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">local_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;abc&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">remote_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;cat_343HNkcWRt8YXHphthHwa8QEdXE&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">local_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;webapp&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">remote_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;cat_2ohsVV9iKuw7GfLFITwsVLn6Nhy&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;categories&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">categories&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;abc&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;ABC&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;webapp&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Webapp&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="properties-1" data-heading="Properties" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h3 id="properties-1">Properties&lt;/h3>&lt;p>The &lt;code>metadata.import&lt;/code> section contains the following properties:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>workspaces&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Array&lt;/td>
&lt;td style="text-align:left">Array of workspace import configurations. Each workspace configuration contains the workspace ID and resource mappings.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="workspace-configuration" data-heading="Workspace configuration" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h4 id="workspace-configuration">Workspace configuration&lt;/h4>&lt;p>Each workspace configuration in the &lt;code>workspaces&lt;/code> array has the following structure:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>workspace_id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">The ID of the workspace where resources were imported from.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>resources&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Array&lt;/td>
&lt;td style="text-align:left">Array of mappings between local resource IDs and their corresponding workspace IDs.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="resource-mapping" data-heading="Resource mapping" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" data-title="Data Catalog and Tracking Plans YAML Reference" -->
&lt;h4 id="resource-mapping">Resource mapping&lt;/h4>&lt;p>Each resource mapping in the &lt;code>resources&lt;/code> array has the following structure:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>local_id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">The local resource ID used within your CLI project. This corresponds to the &lt;code>id&lt;/code> field in the resource definition.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>remote_id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">The remote resource ID from the workspace where the resource was imported from.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>The import metadata serves two key purposes:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Resource linking&lt;/strong>: Enables Rudder CLI to link local resource definitions to existing workspace resources when you run the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/#apply-imported-resources" >&lt;code>apply&lt;/code>&lt;/a> command.&lt;/li>
&lt;li>&lt;strong>Workspace-aware operations&lt;/strong>: Tracks which workspace resources were imported from, allowing you to apply the same project to different workspaces. When you apply a project to a workspace different from the one specified in &lt;code>workspace_id&lt;/code>, resources are treated as new resources to be created rather than imported.&lt;/li>
&lt;/ul>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/manage-workspaces/" >Manage Workspaces&lt;/a> for more information about how to use import metadata in workspace management workflows.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html></description></item><item><title>Archive: SQL Model Resources YAML Reference</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/</guid><description>
&lt;p>This guide serves as a detailed reference for the CLI project YAML files that contain definitions of your Reverse ETL SQL model resources.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="overview" data-heading="Overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" data-title="SQL Model Resources YAML Reference" -->
&lt;h2 id="overview">Overview&lt;/h2>&lt;p>In the context of the Rudder CLI (&lt;code>rudder-cli&lt;/code>) tool, SQL model resources are defined using YAML files that specify the configuration for your &lt;a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/features/models/" >Reverse ETL SQL model sources&lt;/a>. These YAML files enable you to manage your SQL models through a Git-based workflow with version control and collaboration features.&lt;/p>
&lt;p>The location and naming of these YAML files is flexible, as you can store the YAML files anywhere within the project&amp;rsquo;s root directory or subdirectories.&lt;/p>
&lt;blockquote class="success">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/tick.svg loading="lazy" alt="success" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">
&lt;p>You can also group multiple SQL model resources in the same file, allowing structures that can best serve your project&amp;rsquo;s requirements.&lt;/p>
&lt;p>The Rudder CLI tool processes all valid YAML files within the project structure to recognize the defined resources.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>The following sections detail the specific YAML formats and parameter definitions for SQL model resources.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="sql-model-resources" data-heading="SQL model resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" data-title="SQL Model Resources YAML Reference" -->
&lt;h2 id="sql-model-resources">SQL model resources&lt;/h2>&lt;p>You can define one or more SQL model resources in the YAML file by setting &lt;code>kind&lt;/code> to &lt;code>retl-source-sql-model&lt;/code>.&lt;/p>
&lt;p>The &lt;code>spec&lt;/code> parameter of the YAML file has the following structure:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Unique identifier for the SQL model resource within the project. This parameter must be unique across all SQL model resources.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>display_name&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Display name for the SQL model resource as shown in the RudderStack dashboard.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>primary_key&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Column name to use as the primary key for the model. This column must exist in your SQL query results.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>source_definition&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Warehouse type identifier. &lt;br />&lt;br />See &lt;a href="#supported-warehouse-types" >Supported warehouse types&lt;/a> for values that you can use.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>enabled&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Boolean&lt;/td>
&lt;td style="text-align:left">Whether the SQL model resource is active. Set to &lt;code>true&lt;/code> to enable the resource.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>account_id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">The account ID for the data warehouse connection. You can obtain this using &lt;code>./rudder-cli workspace accounts list&lt;/code>.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>description&lt;/code>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Optional description for the SQL model resource.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>sql&lt;/code>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Inline SQL query definition. &lt;br />&lt;br />Use the YAML literal block scalar `&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>file&lt;/code>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Path to an external SQL file containing the query. Path is relative to the YAML file location.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">You must use exactly one of &lt;code>sql&lt;/code> or &lt;code>file&lt;/code> — they are mutually exclusive. Use &lt;code>sql&lt;/code> for inline queries or &lt;code>file&lt;/code> to reference external SQL files.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="supported-warehouse-types" data-heading="Supported warehouse types" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" data-title="SQL Model Resources YAML Reference" -->
&lt;h3 id="supported-warehouse-types">Supported warehouse types&lt;/h3>&lt;p>The &lt;code>source_definition&lt;/code> field supports the following data warehouse types:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Warehouse&lt;/th>
&lt;th style="text-align:left">&lt;code>source_definition&lt;/code> value&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">PostgreSQL&lt;/td>
&lt;td style="text-align:left">&lt;code>postgres&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">MySQL&lt;/td>
&lt;td style="text-align:left">&lt;code>mysql&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Snowflake&lt;/td>
&lt;td style="text-align:left">&lt;code>snowflake&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Amazon Redshift&lt;/td>
&lt;td style="text-align:left">&lt;code>redshift&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Google BigQuery&lt;/td>
&lt;td style="text-align:left">&lt;code>bigquery&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Databricks&lt;/td>
&lt;td style="text-align:left">&lt;code>databricks&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Trino&lt;/td>
&lt;td style="text-align:left">&lt;code>trino&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="example-definitions" data-heading="Example definitions" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" data-title="SQL Model Resources YAML Reference" -->
&lt;h3 id="example-definitions">Example definitions&lt;/h3>&lt;p>The following examples highlight the YAML configurations for SQL model resources defined using inline SQL and external SQL files. You can group multiple resources in the same YAML file to manage them together.&lt;/p>
&lt;nav>
&lt;div class="nav nav-tabs" id="nav-tab" role="tablist">
&lt;a class="nav-item nav-link active "
id="nav-bfacde" data-toggle="tab" href="#bfacde"
role="tab" aria-controls="nav-home" aria-selected="true">Inline SQL&lt;/a>
&lt;a class="nav-item nav-link "
id="nav-abfcde" data-toggle="tab" href="#abfcde"
role="tab" aria-controls="nav-home" aria-selected="true">External SQL file&lt;/a>
&lt;a class="nav-item nav-link "
id="nav-bacfed" data-toggle="tab" href="#bacfed"
role="tab" aria-controls="nav-home" aria-selected="true">With multiple resources&lt;/a>
&lt;/div>
&lt;/nav>
&lt;div class="tab-content" id="nav-tab-content">
&lt;div class="tab-pane fade show active " id="bfacde" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;rudder/v0.1&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;retl-source-sql-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product-purchases-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product-purchases-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Purchases SQL Model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">primary_key&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;user_id&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;SQL model for tracking product purchases over the last 180 days&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">source_definition&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;postgres&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">account_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;2rzPI1ARibivIvNH5DSpAKGTATy&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">sql&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">|&lt;/span>&lt;span class="sd">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> SELECT
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> user_id,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> event_name,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> event_type,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> timestamp,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> properties,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> product_id
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> FROM
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> user_events
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> WHERE
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> timestamp &amp;gt;= CURRENT_DATE() - INTERVAL 180 DAY
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> AND event_name = &amp;#39;Product Purchased&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> ORDER BY
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> timestamp DESC&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;div class="tab-pane fade show " id="abfcde" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;rudder/v0.1&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;retl-source-sql-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;user-analytics-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;user-analytics-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;User Analytics Model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">primary_key&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;user_id&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Comprehensive user analytics model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">source_definition&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;snowflake&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">account_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;2rzPI1ARibivIvNH5DSpAKGTATy&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">file&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;./queries/user-analytics.sql&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>In this example, the SQL query would be stored in a separate file at &lt;code>./queries/user-analytics.sql&lt;/code> relative to the YAML file location.&lt;/p>
&lt;/div>
&lt;div class="tab-pane fade show " id="bacfed" role="tabpanel" aria-labelledby="nav-1">
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;rudder/v0.1&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;retl-source-sql-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;ecommerce-models&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;product-views-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Views Model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">primary_key&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;user_id&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Model for tracking product page views&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">source_definition&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;bigquery&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">account_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;2rzPI1ARibivIvNH5DSpAKGTATy&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">sql&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">|&lt;/span>&lt;span class="sd">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> SELECT
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> user_id,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> product_id,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> view_timestamp,
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> session_id
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> FROM
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> product_views
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> WHERE
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="sd"> view_timestamp &amp;gt;= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;cart-abandonment-model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Cart Abandonment Model&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">primary_key&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;session_id&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Model for identifying cart abandonment events&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">source_definition&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;bigquery&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">account_id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;2rzPI1ARibivIvNH5DSpAKGTATy&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">file&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;./queries/cart-abandonment.sql&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
&lt;/div>
&lt;/div>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="best-practices" data-heading="Best practices" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" data-title="SQL Model Resources YAML Reference" -->
&lt;h2 id="best-practices">Best practices&lt;/h2>&lt;p>When defining SQL model resources in YAML files, follow these best practices:&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="file-organization" data-heading="File organization" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" data-title="SQL Model Resources YAML Reference" -->
&lt;h3 id="file-organization">File organization&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Logical grouping&lt;/strong>: Group related SQL models in the same YAML file when they share similar purposes or data sources.&lt;/li>
&lt;li>&lt;strong>Clear naming&lt;/strong>: Use descriptive file names that reflect the models&amp;rsquo; purpose, such as &lt;code>user-analytics-models.yaml&lt;/code> or &lt;code>ecommerce-models.yaml&lt;/code>.&lt;/li>
&lt;li>&lt;strong>Directory structure&lt;/strong>: Organize SQL files in subdirectories (like &lt;code>./queries/&lt;/code> or &lt;code>./sql/&lt;/code>) to keep your project structure clean.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="resource-configuration" data-heading="Resource configuration" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" data-title="SQL Model Resources YAML Reference" -->
&lt;h3 id="resource-configuration">Resource configuration&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Unique IDs&lt;/strong>: Choose clear, descriptive IDs that reflect the model&amp;rsquo;s purpose and avoid conflicts.&lt;/li>
&lt;li>&lt;strong>Meaningful names&lt;/strong>: Use display names that clearly describe what the model does for dashboard users.&lt;/li>
&lt;li>&lt;strong>Documentation&lt;/strong>: Always include descriptions to help team members understand the model&amp;rsquo;s purpose.&lt;/li>
&lt;li>&lt;strong>External files&lt;/strong>: For complex queries, use the &lt;code>file&lt;/code> option to keep SQL in separate files for better syntax highlighting and version control. When importing resources, use the &lt;code>--sql-location&lt;/code> parameter if you prefer external SQL files.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="environment-management" data-heading="Environment management" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" data-title="SQL Model Resources YAML Reference" -->
&lt;h3 id="environment-management">Environment management&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Variable substitution&lt;/strong>: Consider using variable substitutions for &lt;code>account_id&lt;/code> values when working across multiple environments (development, staging, or production).&lt;/li>
&lt;li>&lt;strong>Environment-specific configurations&lt;/strong>: Maintain separate configuration files or use templating for environment-specific settings.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="query-optimization" data-heading="Query optimization" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" data-title="SQL Model Resources YAML Reference" -->
&lt;h3 id="query-optimization">Query optimization&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Primary key selection&lt;/strong>: Choose primary keys that are unique, stable, and efficiently indexed in your warehouse.&lt;/li>
&lt;li>&lt;strong>Performance considerations&lt;/strong>: Write efficient queries that minimize warehouse compute costs and execution time.&lt;/li>
&lt;li>&lt;strong>Data freshness&lt;/strong>: Include appropriate date filters to control data volume and ensure relevance.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="see-also" data-heading="See also" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-sql-models/" data-title="SQL Model Resources YAML Reference" -->
&lt;h2 id="see-also">See also&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/create/" >Create New SQL Model Resources&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/import/" >Import Existing SQL Model Resources&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/validate/" >Validate and Preview Your Models&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models/" >Manage SQL Models using Rudder CLI&lt;/a> for feature overview&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/sql-models-walkthrough/" >End-to-End Walkthrough: SQL Models with Rudder CLI&lt;/a> for an end-to-end tutorial&lt;/li>
&lt;/ul></description></item><item><title>Archive: Event Stream Source YAML Reference</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/</guid><description>
&lt;p>This guide serves as a detailed reference for the CLI project YAML files that contain definitions of your Event Stream source resources.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="overview" data-heading="Overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h2 id="overview">Overview&lt;/h2>&lt;p>In the context of the Rudder CLI (&lt;code>rudder-cli&lt;/code>) tool, you can define Event Stream sources as YAML files within your project directory. The location and naming of these YAML files is flexible, as you can store the YAML files anywhere within the project&amp;rsquo;s root directory or subdirectories.&lt;/p>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">The Rudder CLI tool processes all valid YAML files within the project structure to recognize the defined resources.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="event-stream-sources" data-heading="Event Stream Sources" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h2 id="event-stream-sources">Event Stream Sources&lt;/h2>&lt;p>You can define an Event Stream source in the YAML file by setting &lt;code>kind&lt;/code> to &lt;code>event-stream-source&lt;/code>.&lt;/p>
&lt;p>The &lt;code>spec&lt;/code> parameter of the YAML file has the following structure:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">&lt;div style="width:300px">Description&lt;/div>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>id&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Unique identifier for the source within the project. This parameter must be unique across all sources in the project.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>type&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Source type identifier. See &lt;a href="#supported-source-types" >Supported source types&lt;/a> for the list of acceptable values.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>name&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Name for the source. It must be non-empty.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>enabled&lt;/code>&lt;/td>
&lt;td style="text-align:left">Boolean&lt;/td>
&lt;td style="text-align:left">Determines whether this source is accepting events. &lt;br />&lt;br />&lt;strong>Default value&lt;/strong>: &lt;code>true&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>governance&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#data-governance-configuration" >Data governance configuration&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Contains data governance-related settings for the source.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="data-governance-configuration" data-heading="Data governance configuration" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h3 id="data-governance-configuration">Data governance configuration&lt;/h3>&lt;p>The &lt;code>governance&lt;/code> object contains validation settings that control how the source handles any Tracking Plan violations:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">&lt;div style="width:300px">Description&lt;/div>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>validations&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#validation-properties" >Validation properties&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Contains validation configuration including Tracking Plan reference and violation rules.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="validation-properties" data-heading="Validation properties" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h3 id="validation-properties">Validation properties&lt;/h3>&lt;p>The &lt;code>validations&lt;/code> object contains the Tracking Plan reference and violation handling rules:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">&lt;div style="width:300px">Description&lt;/div>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>tracking_plan&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">String&lt;/td>
&lt;td style="text-align:left">Reference to a Tracking Plan resource — the format is &lt;code>#/tp/[metadata.name]/[tracking-plan.id]&lt;/code>, where &lt;code>metadata.name&lt;/code> is the &lt;code>metadata.name&lt;/code> value in your Tracking Plan YAML file and &lt;code>tracking-plan.id&lt;/code> is the &lt;code>spec.id&lt;/code> value of the Tracking Plan resource.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>config&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#violation-rules-configuration" >Violation rules configuration&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Contains violation rules for all event types. If not specified, default violation rules apply to all event types.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>You must have a &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/tracking-plans/" >Tracking Plan defined in your CLI project&lt;/a> before you can reference it in a source configuration.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/tracking-plans/create/" >CLI-based Tracking Plan Management&lt;/a> for more information on creating Tracking Plans.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="violation-rules-configuration" data-heading="Violation rules configuration" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h3 id="violation-rules-configuration">Violation rules configuration&lt;/h3>&lt;p>The &lt;code>config&lt;/code> object contains violation handling rules for different event types. Each event type configuration is optional; if not specified, default violation rules apply:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">&lt;div style="width:300px">Description&lt;/div>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>track&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#violation-rules-properties" >Violation rules&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Violation rules for &lt;code>track&lt;/code> events.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>identify&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#violation-rules-properties" >Violation rules&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Violation rules for &lt;code>identify&lt;/code> events.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>group&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#violation-rules-properties" >Violation rules&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Violation rules for &lt;code>group&lt;/code> events.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>page&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#violation-rules-properties" >Violation rules&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Violation rules for &lt;code>page&lt;/code> events.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>screen&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;a href="#violation-rules-properties" >Violation rules&lt;/a> object&lt;/td>
&lt;td style="text-align:left">Violation rules for &lt;code>screen&lt;/code> events.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="violation-rules-properties" data-heading="Violation rules properties" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h3 id="violation-rules-properties">Violation rules properties&lt;/h3>&lt;p>Each violation rules object contains the following properties:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Property&lt;/th>
&lt;th style="text-align:left">Type&lt;/th>
&lt;th style="text-align:left">&lt;div style="width:300px">Description&lt;/div>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>propagate_violations&lt;/code>&lt;/td>
&lt;td style="text-align:left">Boolean&lt;/td>
&lt;td style="text-align:left">Determines whether to add violations in event context. When enabled, violation information is included in the event payload&amp;rsquo;s context for downstream processing. &lt;br />&lt;br />&lt;strong>Default value&lt;/strong>: &lt;code>true&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>drop_unplanned_events&lt;/code>&lt;/td>
&lt;td style="text-align:left">Boolean&lt;/td>
&lt;td style="text-align:left">&lt;strong>Only applies to &lt;code>track&lt;/code> configuration.&lt;/strong> Determines whether to drop events without a corresponding rule in the associated Tracking Plan. &lt;br />&lt;br />&lt;strong>Default value&lt;/strong>: &lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>drop_unplanned_properties&lt;/code>&lt;/td>
&lt;td style="text-align:left">Boolean&lt;/td>
&lt;td style="text-align:left">Determines whether to drop properties that are not defined in the Tracking Plan for the event. &lt;br />&lt;br />&lt;strong>Default value&lt;/strong>: &lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>drop_other_violations&lt;/code>&lt;/td>
&lt;td style="text-align:left">Boolean&lt;/td>
&lt;td style="text-align:left">Determines whether to drop events with any other validation violations. &lt;br />&lt;br />&lt;strong>Default value&lt;/strong>: &lt;code>false&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>If you set &lt;code>drop_unplanned_events&lt;/code>, &lt;code>drop_unplanned_properties&lt;/code>, or &lt;code>drop_other_violations&lt;/code> to &lt;code>true&lt;/code>, events that violate these rules are dropped and not forwarded to destinations.&lt;/p>
&lt;p>Make sure you understand the impact of these settings before deploying your source configuration.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="supported-source-types" data-heading="Supported source types" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h2 id="supported-source-types">Supported source types&lt;/h2>&lt;p>The following table lists all supported source types and their corresponding &lt;code>type&lt;/code> values:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Source&lt;/th>
&lt;th>&lt;code>type&lt;/code> value&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Java&lt;/td>
&lt;td>&lt;code>java&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>.NET&lt;/td>
&lt;td>&lt;code>dotnet&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>PHP&lt;/td>
&lt;td>&lt;code>php&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Flutter&lt;/td>
&lt;td>&lt;code>flutter&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Cordova&lt;/td>
&lt;td>&lt;code>cordova&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Rust&lt;/td>
&lt;td>&lt;code>rust&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>React Native&lt;/td>
&lt;td>&lt;code>react_native&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Python&lt;/td>
&lt;td>&lt;code>python&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>iOS&lt;/td>
&lt;td>&lt;code>ios&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Android&lt;/td>
&lt;td>&lt;code>android&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>JavaScript&lt;/td>
&lt;td>&lt;code>javascript&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Go&lt;/td>
&lt;td>&lt;code>go&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Node&lt;/td>
&lt;td>&lt;code>node&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Ruby&lt;/td>
&lt;td>&lt;code>ruby&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Unity&lt;/td>
&lt;td>&lt;code>unity&lt;/code>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="examples" data-heading="Examples" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h2 id="examples">Examples&lt;/h2>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="basic-source-configuration" data-heading="Basic source configuration" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h4 id="basic-source-configuration">Basic source configuration&lt;/h4>&lt;p>This example shows a minimal source configuration without governance settings:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event-stream-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ios-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;my-ios-source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;ios&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;iOS Source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="source-with-governance-configuration" data-heading="Source with governance configuration" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h4 id="source-with-governance-configuration">Source with governance configuration&lt;/h4>&lt;p>This example shows a source with governance configuration that links to a Tracking Plan and defines violation rules for different event types:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event-stream-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ios-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;my-ios-source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;ios&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;iOS Source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">governance&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">validations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">tracking_plan&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/tp/my-tracking-plan/ecommerce-tracking-plan&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">track&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propagate_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_events&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_other_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">identify&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propagate_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_other_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">group&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propagate_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_other_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">page&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propagate_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_other_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">screen&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propagate_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_other_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="source-with-partial-governance-configuration" data-heading="Source with partial governance configuration" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h4 id="source-with-partial-governance-configuration">Source with partial governance configuration&lt;/h4>&lt;p>This example shows a source that only defines violation rules for &lt;code>track&lt;/code> events, letting other event types use default rules:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event-stream-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">web-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;my-web-source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;javascript&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Web Source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">true&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">governance&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">validations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">tracking_plan&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/tp/web-tracking-plan/web-tracking-plan&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">config&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">track&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">propagate_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_events&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_unplanned_properties&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">drop_other_violations&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="disabled-source" data-heading="Disabled source" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h4 id="disabled-source">Disabled source&lt;/h4>&lt;p>This example shows a source that is disabled and does not accept events:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">event-stream-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">test-source&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;test-source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;python&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Test Source&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">enabled&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="kc">false&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="reference-tracking-plans" data-heading="Reference Tracking Plans" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h2 id="reference-tracking-plans">Reference Tracking Plans&lt;/h2>&lt;p>When configuring data governance validation, you can reference &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/tracking-plans/" >Tracking Plans&lt;/a> using the following format:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">tracking_plan&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/tp/[metadata.name]/[tracking-plan.id]&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Where:&lt;/p>
&lt;ul>
&lt;li>&lt;code>metadata.name&lt;/code> is the &lt;code>metadata.name&lt;/code> value in your Tracking Plan YAML file&lt;/li>
&lt;li>&lt;code>tracking-plan.id&lt;/code> is the &lt;code>spec.id&lt;/code> value of the Tracking Plan&lt;/li>
&lt;/ul>
&lt;p>For example, if your Tracking Plan YAML file looks like this:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">version&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudder/v0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">kind&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">tp&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">metadata&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ecommerce-tracking-plan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">spec&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">product-tracking-plan&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Product Tracking Plan&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="c"># ... rest of the configuration&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>You would reference it in your source configuration as:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">tracking_plan&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/tp/ecommerce-tracking-plan/product-tracking-plan&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">References must always start with a &lt;code>#&lt;/code> character followed by the path using the &lt;code>/&lt;/code> delimiter. The path points to a unique Tracking Plan resource within a project&amp;rsquo;s file and uses the &lt;code>kind&lt;/code> value (&lt;code>tp&lt;/code>), &lt;code>metadata.name&lt;/code> value, and &lt;code>spec.id&lt;/code> value to create the reference.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="see-more" data-heading="See more" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-event-stream-sources/" data-title="Event Stream Source YAML Reference" -->
&lt;h2 id="see-more">See more&lt;/h2>&lt;ul>
&lt;li>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources/" >Manage Event Stream Sources using Rudder CLI&lt;/a> for feature overview, and the &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/event-stream-sources-walkthrough/" >Event Stream Sources walkthrough&lt;/a> for step-by-step setup&lt;/li>
&lt;li>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/data-catalog-and-tracking-plans/tracking-plans/" >CLI-based Tracking Plan Management&lt;/a> to create the Tracking Plans that you can reference in your Event Stream source configurations&lt;/li>
&lt;li>See &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/yaml-data-catalog-and-tracking-plans/" >Data Catalog and Tracking Plans YAML Reference&lt;/a> for information about Tracking Plan YAML structure&lt;/li>
&lt;/ul>
&lt;br /></description></item><item><title>Archive: Automate Project Management with Rudder CLI and GitHub Actions</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/</guid><description>
&lt;p>This guide explains how to validate and manage your Rudder CLI projects directly via GitHub workflows.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-features" data-heading="Key features" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" data-title="Automate Project Management with Rudder CLI and GitHub Actions" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;p>By leveraging the &lt;a href="https://github.com/rudderlabs/rudder-cli-action" >Rudder CLI Project Manager Action&lt;/a>, you can:&lt;/p>
&lt;ul>
&lt;li>Validate your Rudder CLI project files&lt;/li>
&lt;li>Perform a dry run of any changes to your project files&lt;/li>
&lt;li>Apply the changes to your RudderStack workspace&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="prerequisites" data-heading="Prerequisites" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" data-title="Automate Project Management with Rudder CLI and GitHub Actions" -->
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>&lt;ul>
&lt;li>A GitHub repository containing your Tracking Plan YAML files&lt;/li>
&lt;/ul>
&lt;ul>
&lt;li>Generate a &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/#workspace-sat" >workspace-level Service Access Token&lt;/a> in the RudderStack dashboard with the following &lt;a href="https://www.rudderstack.com/docs/access-management/policies-overview/#resource-permissions" >permissions&lt;/a> to manage Data Catalog and Tracking Plans:&lt;/li>
&lt;/ul>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Resource&lt;/th>
&lt;th style="text-align:left">Permissions&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">Tracking Plans&lt;/td>
&lt;td style="text-align:left">&lt;strong>Create &amp;amp; Delete&lt;/strong>, &lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">Data Catalog&lt;/td>
&lt;td style="text-align:left">&lt;strong>Edit&lt;/strong>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>&lt;strong>For testing or development purposes only&lt;/strong>: Generate a &lt;a href="https://www.rudderstack.com/docs/access-management/personal-access-tokens/" >Personal Access Token&lt;/a> with &lt;strong>Read-Write&lt;/strong> role&lt;/li>
&lt;/ul>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>&lt;strong>RudderStack recommends using a workspace-level Service Access Token for authentication.&lt;/strong>&lt;/p>
&lt;p>Any action authenticated by a Personal Access Token will break if the user is removed from the organization or a breaking change is made to their permissions.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="token-permissions-for-legacy-rbac-system" data-heading="Token permissions for legacy RBAC system" data-level="4" data-permalink="https://www.rudderstack.com/docs/" data-title="RudderStack Documentation" -->
&lt;h4 id="token-permissions-for-legacy-rbac-system">Token permissions for legacy RBAC system&lt;/h4>&lt;p>If you are on the &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/user-management/" >legacy Permissions Management (RBAC) system&lt;/a>, your workspace-level Service Access Token should have &lt;strong>Admin&lt;/strong> permissions.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/archive/dashboard-guides/service-access-tokens/#generate-service-access-token" >this documentation&lt;/a> for more information on generating the token.&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/access-management/permissions/legacy/admin.webp" href="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/access-management/permissions/legacy/admin.webp"
alt="workspace-level Service Access Token with Admin permission"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="setup" data-heading="Setup" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" data-title="Automate Project Management with Rudder CLI and GitHub Actions" -->
&lt;h2 id="setup">Setup&lt;/h2>&lt;p>Follow the steps in the below sections in the exact order to set up the GitHub Actions workflow.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="step-1-configure-repository-secrets" data-heading="Step 1: Configure repository secrets" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" data-title="Automate Project Management with Rudder CLI and GitHub Actions" -->
&lt;h3 id="step-1-configure-repository-secrets">Step 1: Configure repository secrets&lt;/h3>&lt;ol>
&lt;li>In your GitHub repository, go to &lt;strong>Settings&lt;/strong> &amp;gt; &lt;strong>Secrets and variables&lt;/strong> &amp;gt; &lt;strong>Actions&lt;/strong>.&lt;/li>
&lt;li>Add a new repository secret as follows:&lt;/li>
&lt;/ol>
&lt;ul>
&lt;li>&lt;strong>Name&lt;/strong>: &lt;code>RUDDERSTACK_ACCESS_TOKEN&lt;/code> (use this exact name so it matches the workflow below)&lt;/li>
&lt;li>&lt;strong>Value&lt;/strong>: The Service Access Token generated in the &lt;a href="#prerequisites" >Prerequisites&lt;/a> section&lt;/li>
&lt;/ul>
&lt;blockquote class="warning">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/warning.svg alt="warning" loading="lazy" decoding="async" class="img__small" style="
margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>RudderStack recommends storing this token in GitHub Secrets and referencing it in your workflow using &lt;code>${{ secrets.RUDDERSTACK_ACCESS_TOKEN }}&lt;/code>.&lt;/p>
&lt;p>&lt;strong>Do not expose the token directly in your workflow files&lt;/strong>.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="step-2-create-actions-workflow" data-heading="Step 2: Create Actions workflow" data-level="3" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" data-title="Automate Project Management with Rudder CLI and GitHub Actions" -->
&lt;h3 id="step-2-create-actions-workflow">Step 2: Create Actions workflow&lt;/h3>&lt;p>Create the following workflow in your &lt;code>.github/workflows/&lt;/code> directory:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Manage Rudder CLI projects&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">push&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">branches&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="l">main]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">pull_request&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">branches&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="l">main]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">jobs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">validate&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">runs-on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ubuntu-latest&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">steps&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">actions/checkout@v4&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Validate Project Files&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudderlabs/rudder-cli-action@v1.0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">RUDDERSTACK_ACCESS_TOKEN&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">${{ secrets.RUDDERSTACK_ACCESS_TOKEN }}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">with&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">location&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;&amp;lt;path_to_root_project_folder&amp;gt;/&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">mode&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;validate&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">apply&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">runs-on&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">ubuntu-latest&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">needs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">validate&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">if&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">github.ref == &amp;#39;refs/heads/main&amp;#39;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">steps&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">actions/checkout@v4&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Apply Project Files&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">uses&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudderlabs/rudder-cli-action@v1.0.1&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">env&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">RUDDERSTACK_ACCESS_TOKEN&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">${{ secrets.RUDDERSTACK_ACCESS_TOKEN }}&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">with&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">location&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;&amp;lt;path_to_root_project_folder&amp;gt;/&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c">#Required&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">mode&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;apply&amp;#34;&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="c">#Required&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">&lt;p>Note that:&lt;/p>
&lt;ul>
&lt;li>The previous Action &lt;code>rudderlabs/rudder-tracking-plan-action@v1.0.0&lt;/code> is now deprecated.&lt;/li>
&lt;li>You can update the CLI action version by modifying the &lt;code>uses&lt;/code> parameter in the workflow file — see the &lt;a href="https://github.com/rudderlabs/rudder-cli-action/releases" >Rudder CLI Project Manager Action releases&lt;/a> for the latest version.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;p>Some of the key inputs are described below:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Input&lt;/th>
&lt;th style="text-align:left">Description&lt;/th>
&lt;th style="text-align:left">Default value&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>location&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Path to the folder containing the Rudder CLI project files.&lt;/td>
&lt;td style="text-align:left">-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>mode&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">Operation mode — acceptable values are &lt;code>validate&lt;/code>, &lt;code>dry-run&lt;/code>, and &lt;code>apply&lt;/code>. &lt;br />&lt;br />See &lt;a href="#modes" >Modes&lt;/a> for more information.&lt;/td>
&lt;td style="text-align:left">-&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>cli_version&lt;/code>&lt;/td>
&lt;td style="text-align:left">Version of the Rudder CLI tool to use.&lt;/td>
&lt;td style="text-align:left">&lt;code>v0.10.0&lt;/code>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>RUDDERSTACK_ACCESS_TOKEN&lt;/code> &lt;br/> &lt;span style="color: #4D4DFF;font-size:12px;">Required&lt;/span>&lt;/td>
&lt;td style="text-align:left">The &lt;a href="#prerequisites" >access token&lt;/a> for the RudderStack workspace.&lt;/td>
&lt;td style="text-align:left">-&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="modes" data-heading="Modes" data-level="4" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" data-title="Automate Project Management with Rudder CLI and GitHub Actions" -->
&lt;h4 id="modes">Modes&lt;/h4>&lt;p>The &lt;code>mode&lt;/code> parameter defines the operation mode of the GitHub Action. You can specify either of the following values:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Value&lt;/th>
&lt;th style="text-align:left">Notes&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;code>validate&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;ul>&lt;li>Validates Tracking Plan syntax and structure.&lt;/li>&lt;li>No changes are applied to your configuration.&lt;/li>&lt;/ul>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>dry-run&lt;/code>&lt;/td>
&lt;td style="text-align:left">&lt;ul>&lt;li>Simulates the application of changes.&lt;/li>&lt;li>Shows what would be modified without actually making the changes.&lt;/li>&lt;/ul>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;code>apply&lt;/code>&lt;/td>
&lt;td style="text-align:left">Applies the relevant changes to your RudderStack workspace.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-it-works" data-heading="How it works" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" data-title="Automate Project Management with Rudder CLI and GitHub Actions" -->
&lt;h2 id="how-it-works">How it works&lt;/h2>&lt;p>This section explains the GitHub Actions workflow:&lt;/p>
&lt;ul>
&lt;li>The action only triggers when files in your root project directory are modified.&lt;/li>
&lt;li>The action automatically syncs the changes with RudderStack when you merge them with the &lt;code>main&lt;/code> branch. It uses the &lt;code>apply&lt;/code> mode (&lt;code>mode: apply&lt;/code>) to push the relevant changes.&lt;/li>
&lt;/ul>
&lt;br /></description></item><item><title>Archive: Automate Project Management with Rudder CLI and GitLab CI/CD</title><link>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/gitlab-ci/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/gitlab-ci/</guid><description>
&lt;p>This guide shows how to run the same &lt;strong>validate&lt;/strong> and &lt;strong>apply&lt;/strong> workflow you use locally inside a GitLab pipeline. The pattern mirrors &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions for Rudder CLI&lt;/a>: check out your repository, install or invoke Rudder CLI, pass a workspace token, then run &lt;code>rudder-cli validate&lt;/code> and &lt;code>rudder-cli apply&lt;/code> (often with &lt;code>--dry-run&lt;/code> on merge requests).&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="prerequisites" data-heading="Prerequisites" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/gitlab-ci/" data-title="Automate Project Management with Rudder CLI and GitLab CI/CD" -->
&lt;h2 id="prerequisites">Prerequisites&lt;/h2>&lt;ul>
&lt;li>A GitLab project with your Rudder CLI YAML project checked in&lt;/li>
&lt;li>A &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/#workspace-sat" >workspace-level Service Access Token&lt;/a> with permissions for the resources you manage (see &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/import-resources/" >Import Workspace Resources&lt;/a> for a full permission matrix)&lt;/li>
&lt;li>Store the token as a masked &lt;a href="https://docs.gitlab.com/ee/ci/variables/" >CI/CD variable&lt;/a> (for example &lt;code>RUDDERSTACK_ACCESS_TOKEN&lt;/code>)&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="example-pipeline" data-heading="Example pipeline" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/gitlab-ci/" data-title="Automate Project Management with Rudder CLI and GitLab CI/CD" -->
&lt;h2 id="example-pipeline">Example pipeline&lt;/h2>&lt;p>The following &lt;code>.gitlab-ci.yml&lt;/code> sketches a two-stage flow: validate on every branch, apply only on the default branch after validation succeeds. Adjust image, paths, and branch rules to match your environment.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-yaml" data-lang="yaml">&lt;span class="line">&lt;span class="cl">&lt;span class="nt">stages&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">validate&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">apply&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">variables&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">RUDDER_PROJECT_PATH&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;$CI_PROJECT_DIR/my-rudder-project&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">validate&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">stage&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">validate&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudderlabs/rudder-cli&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">rudder-cli validate -l &amp;#34;$RUDDER_PROJECT_PATH&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">rules&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">if&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">$CI_PIPELINE_SOURCE == &amp;#34;merge_request_event&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">if&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">$CI_COMMIT_BRANCH&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w">&lt;/span>&lt;span class="nt">apply&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">stage&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">apply&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">image&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">rudderlabs/rudder-cli&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">script&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">rudder-cli apply -l &amp;#34;$RUDDER_PROJECT_PATH&amp;#34; --dry-run&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="l">rudder-cli apply -l &amp;#34;$RUDDER_PROJECT_PATH&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">rules&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>- &lt;span class="nt">if&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="w"> &lt;/span>&lt;span class="nt">needs&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s2">&amp;#34;validate&amp;#34;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;html lang="en">
&lt;blockquote class="info">
&lt;div class="tip-quote">
&lt;img src=https://www.rudderstack.com/docs/docs/images/info.svg loading="lazy" alt="info" decoding="async" class="img__small" style="margin-top: 3px; width: 20px;height: 16px;" />
&lt;div class="tip-text">Use the official CLI image only if it matches the version you run locally. Alternatively install the binary in the job (for example from GitHub releases) so versions stay aligned with &lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/installation/" >Install Rudder CLI&lt;/a>.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="see-more" data-heading="See more" data-level="2" data-permalink="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/gitlab-ci/" data-title="Automate Project Management with Rudder CLI and GitLab CI/CD" -->
&lt;h2 id="see-more">See more&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/github-actions/" >GitHub Actions for Rudder CLI&lt;/a> for the maintained GitHub Action and workflow patterns&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/archive/rudder-cli/v0.1/commands/" >Commands&lt;/a> for core &lt;code>rudder-cli&lt;/code> subcommands&lt;/li>
&lt;/ul></description></item></channel></rss>