<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RudderStack Docs – Release Notes</title><link>https://www.rudderstack.com/docs/releases/</link><description>Recent content in Release Notes on RudderStack Docs</description><generator>Hugo -- gohugo.io</generator><language>en</language><atom:link href="https://www.rudderstack.com/docs/releases/index.xml" rel="self" type="application/rss+xml"/><item><title>Releases: Singular API v2 and SDID Support</title><link>https://www.rudderstack.com/docs/releases/singular-v2-api-sdid-support/</link><pubDate>Tue, 31 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/singular-v2-api-sdid-support/</guid><description>
&lt;p>RudderStack&amp;rsquo;s &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/singular/cloud-mode/" >Singular cloud mode integration&lt;/a> now supports Singular&amp;rsquo;s API v2 and &lt;a href="https://support.singular.net/hc/en-us/articles/4411780525979-Types-of-Device-IDs" >SDID (Singular Device ID)&lt;/a>. When SDID is present in your event payloads, RudderStack automatically routes events to Singular&amp;rsquo;s v2 endpoints. Otherwise, events continue flowing to API v1 as before by leveraging platform-specific identifiers — &lt;strong>without requiring any configuration changes&lt;/strong>.&lt;/p>
&lt;p>This makes RudderStack the first platform to support Singular v2/SDID, enabling you to run an independent hybrid setup (Singular SDK for attribution + RudderStack SDK for data collection and routing) to keep events flowing when Singular enables SDID on their account.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="why-we-introduced-sdid-support" data-heading="Why we introduced SDID support" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/singular-v2-api-sdid-support/" data-title="Singular API v2 and SDID Support" -->
&lt;h2 id="why-we-introduced-sdid-support">Why we introduced SDID support&lt;/h2>&lt;p>Singular is rolling out &lt;a href="https://support.singular.net/hc/en-us/articles/4411780525979-Types-of-Device-IDs" >SDID (Singular Device ID)&lt;/a> as a universal device identifier across customer accounts. When Singular enables SDID on an account, events sent via the v1 API continue to flow using legacy device IDs (IDFA, IDFV), but those identifiers only cover roughly 25% of iOS users post-ATT — leading to significant attribution accuracy degradation over time.&lt;/p>
&lt;p>For teams running the recommended independent hybrid setup — where the Singular SDK handles attribution (installs, deep linking, SKAdNetwork, fraud detection) and RudderStack handles data collection and routing — this update ensures full attribution coverage. RudderStack now detects SDID automatically and routes to the correct API version, so your events are attributed accurately without any manual intervention.&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/releases/singular-v2-api-sdid-support/" data-title="Singular API v2 and SDID Support" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Automatic SDID detection and API v2 routing&lt;/strong>: When &lt;code>integrations.Singular.singularDeviceId&lt;/code> is present in an event payload, RudderStack routes the event to Singular&amp;rsquo;s v2 endpoints. Otherwise, API v1 is used — fully backward compatible.&lt;/li>
&lt;li>&lt;strong>Zero configuration changes&lt;/strong>: No new dashboard settings or connection updates are needed — detection and routing happen automatically.&lt;/li>
&lt;li>&lt;strong>LDS (Limit Data Sharing) privacy flag support&lt;/strong>: You can pass the &lt;code>limitDataSharing: true&lt;/code> flag via integration options to honor GDPR/CCPA requirements in Singular.&lt;/li>
&lt;li>&lt;strong>Partner attribution&lt;/strong>: Events sent through RudderStack are tagged with &lt;code>partner=rudderstack&lt;/code> for clear visibility in the Singular dashboard.&lt;/li>
&lt;li>&lt;strong>LAUNCH endpoint skip in hybrid mode&lt;/strong>: Prevents duplicate session creation when the Singular SDK already handles session tracking.&lt;/li>
&lt;li>&lt;strong>Platform ID handling&lt;/strong>: Automatically drops IDFA/AIFA device identifiers when SDID is present, aligning with Singular&amp;rsquo;s v2 requirements.&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/releases/singular-v2-api-sdid-support/" data-title="Singular API v2 and SDID Support" -->
&lt;h2 id="get-started">Get started&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>The steps below are for the &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/singular/setup-options/#1-singular-sdk-with-rudderstack-cloud-mode" >Singular SDK + RudderStack cloud mode hybrid setup&lt;/a>, where the Singular SDK generates the SDID.&lt;/p>
&lt;p>If you use RudderStack cloud mode without the Singular SDK, you must generate and maintain the SDID yourself. See &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/singular/setup-options/" >Singular Integration Setup Approaches&lt;/a> to choose the right approach.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;ol>
&lt;li>&lt;strong>Ensure your Singular SDK is instrumented&lt;/strong> alongside the RudderStack SDK in your app. The Singular SDK must expose the SDID value.&lt;/li>
&lt;li>&lt;strong>Implement SDID bridge code&lt;/strong> from the Singular SDK to capture the &lt;code>singularDeviceId&lt;/code> value in your app.&lt;/li>
&lt;li>&lt;strong>Pass the SDID&lt;/strong> in the &lt;code>integrations&lt;/code> object of your RudderStack events:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">rudderanalytics&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">track&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;Purchase Completed&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">revenue&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mf">99.99&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">currency&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;USD&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">user_actual_id&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="mi">12345&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">},&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">integrations&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">Singular&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">singularDeviceId&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="s2">&amp;#34;&amp;lt;SINGULAR_DEVICE_ID&amp;gt;&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">limitDataSharing&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="kc">true&lt;/span> &lt;span class="c1">// Honors GDPR/CCPA
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="4">
&lt;li>&lt;strong>Verify events in the Singular dashboard&lt;/strong> — look for events tagged with &lt;code>partner=rudderstack&lt;/code> to confirm delivery via API v2.&lt;/li>
&lt;/ol>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/singular/cloud-mode/#pass-singular-device-id" >Pass the Singular Device ID and Data Sharing Options&lt;/a> for detailed instructions.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="resources" data-heading="Resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/singular-v2-api-sdid-support/" data-title="Singular API v2 and SDID Support" -->
&lt;h2 id="resources">Resources&lt;/h2>&lt;p>See the following guides for more information on this feature:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/singular/setup-options/" >Singular Integration Setup Approaches&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/singular/cloud-mode/" >Singular Cloud Mode Integration&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/singular/setup-guide/" >Singular Destination Setup Guide&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Releases: Stream Events to Snowflake Iceberg Tables</title><link>https://www.rudderstack.com/docs/releases/stream-events-to-snowflake-iceberg-tables/</link><pubDate>Tue, 17 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/stream-events-to-snowflake-iceberg-tables/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/yhcNAI6kufk" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>RudderStack&amp;rsquo;s Snowflake Streaming destination now supports &lt;strong>Snowflake-managed Apache Iceberg tables&lt;/strong>. When enabled, your event data streams in real-time into your own cloud storage — S3, GCS, or Azure — in the Iceberg table format.&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">
Snowflake manages the Iceberg metadata catalog and you get the speed of Snowpipe Streaming with the openness and portability of the lakehouse.
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/iceberg-tables/" >Snowflake Streaming to Iceberg Tables&lt;/a> documentation for full details.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="why-iceberg-tables" data-heading="Why Iceberg tables?" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/stream-events-to-snowflake-iceberg-tables/" data-title="Stream Events to Snowflake Iceberg Tables" -->
&lt;h2 id="why-iceberg-tables">Why Iceberg tables?&lt;/h2>&lt;p>Organizations adopting lakehouse architecture want the best of both worlds: the performance and governance of Snowflake with the openness and flexibility of storing data in their own cloud storage. Until now, Snowpipe Streaming wrote exclusively to standard Snowflake tables locked in proprietary storage — forcing a choice between real-time delivery and data portability.&lt;/p>
&lt;p>That trade-off disappears with Iceberg table support. Your event data lands in open Parquet format on storage you control, accessible by any engine that reads Iceberg — Spark, Trino, Databricks, Athena — while Snowflake continues to serve as the primary query engine and catalog. You reduce vendor lock-in, gain multi-engine access, and maintain full storage lifecycle control, all without sacrificing delivery speed.&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/releases/stream-events-to-snowflake-iceberg-tables/" data-title="Stream Events to Snowflake Iceberg Tables" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Near real-time streaming to Iceberg&lt;/strong>: Events are delivered via Snowpipe Streaming with ~30 second latency directly into Snowflake-managed Iceberg tables — the same low-latency pipeline, now writing to open storage.&lt;/li>
&lt;li>&lt;strong>Open Parquet storage on your cloud&lt;/strong>: Data is stored as Parquet files in your external volume (S3, GCS, or Azure). Query it from Snowflake, Spark, Trino, Databricks, Athena, or any Iceberg-compatible engine.&lt;/li>
&lt;li>&lt;strong>Automatic table creation&lt;/strong>: RudderStack automatically creates Iceberg tables with the correct catalog, external volume, and base location configuration. No manual DDL required.&lt;/li>
&lt;li>&lt;strong>Automatic schema evolution&lt;/strong>: New event properties are detected and columns are added automatically — your Iceberg tables stay in sync with your event schemas as they evolve.&lt;/li>
&lt;li>&lt;strong>Automatic compaction&lt;/strong>: Snowflake handles compaction of the underlying Parquet files, keeping query performance optimized without manual maintenance.&lt;/li>
&lt;li>&lt;strong>All standard event types supported&lt;/strong>: Track, identify, page, screen, group, and alias events all stream to Iceberg tables.&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/releases/stream-events-to-snowflake-iceberg-tables/" data-title="Stream Events to Snowflake Iceberg Tables" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;ol>
&lt;li>&lt;strong>Ensure prerequisites are in place&lt;/strong>: You need a Snowflake account with Iceberg table support and an external volume configured in Snowflake pointing to your cloud storage (S3, GCS, or Azure).&lt;/li>
&lt;li>&lt;strong>Set up RSA key-pair authentication&lt;/strong>: Iceberg table support requires key-pair authentication. Password authentication is not supported for this feature.&lt;/li>
&lt;li>&lt;strong>Enable Iceberg in your Snowflake Streaming destination&lt;/strong>: Toggle on the &lt;strong>Create Iceberg Tables&lt;/strong> setting in your Snowflake destination configuration.&lt;/li>
&lt;li>&lt;strong>Specify the external volume name&lt;/strong>: Specify the name of the external volume you created by following the steps &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/iceberg-tables/configuration/#1-create-an-external-volume-for-iceberg-data" >here&lt;/a>&lt;/li>
&lt;li>&lt;strong>Start sending events&lt;/strong>: RudderStack handles Iceberg table creation, schema evolution, and compaction automatically.&lt;/li>
&lt;/ol>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/iceberg-tables/configuration/" >How to Configure Snowflake Streaming to Iceberg Tables&lt;/a> guide for detailed setup instructions.&lt;/p>
&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/releases/stream-events-to-snowflake-iceberg-tables/" data-title="Stream Events to Snowflake Iceberg Tables" -->
&lt;h2 id="how-it-works">How it works&lt;/h2>&lt;p>When you enable Iceberg in your Snowflake Streaming destination, RudderStack:&lt;/p>
&lt;ul>
&lt;li>Sends events to Snowflake via the &lt;strong>Snowpipe Streaming API&lt;/strong>&lt;/li>
&lt;li>Lets Snowflake handle buffering and flushing rows to Parquet files&lt;/li>
&lt;li>Relies on Snowflake to manage the Iceberg metadata and catalog&lt;/li>
&lt;/ul>
&lt;p>The following diagram illustrates the high-level data flow:&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/warehouse-destinations/streaming-iceberg-workflow.webp" href="https://www.rudderstack.com/docs/docs/images/warehouse-destinations/streaming-iceberg-workflow.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/warehouse-destinations/streaming-iceberg-workflow.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="known-limitations" data-heading="Known limitations" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/stream-events-to-snowflake-iceberg-tables/" data-title="Stream Events to Snowflake Iceberg Tables" -->
&lt;h2 id="known-limitations">Known limitations&lt;/h2>&lt;ul>
&lt;li>&lt;strong>JSON fields stored as VARCHAR&lt;/strong>: Snowflake does not yet support the &lt;code>VARIANT&lt;/code> data type for Iceberg tables. JSON data is stored as &lt;code>VARCHAR&lt;/code> until Snowflake V3 adds &lt;code>VARIANT&lt;/code> support.&lt;/li>
&lt;li>&lt;strong>No USERS table&lt;/strong>: Streaming mode is append-only and does not support &lt;code>MERGE&lt;/code> operations, so the consolidated &lt;code>USERS&lt;/code> table is not available.&lt;/li>
&lt;li>&lt;strong>~30 second minimum latency&lt;/strong>: This is a Snowflake-imposed constraint for Iceberg table writes.&lt;/li>
&lt;li>&lt;strong>TIMESTAMP_NTZ(6) instead of TIMESTAMP_TZ&lt;/strong>: Timestamps do not include timezone information in Iceberg mode.&lt;/li>
&lt;li>&lt;strong>Immutable Iceberg settings&lt;/strong>: External volume and Iceberg configuration cannot be changed after table creation.&lt;/li>
&lt;li>&lt;strong>Key-pair authentication required&lt;/strong>: Password-based authentication is not supported.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="resources" data-heading="Resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/stream-events-to-snowflake-iceberg-tables/" data-title="Stream Events to Snowflake Iceberg Tables" -->
&lt;h2 id="resources">Resources&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/" >Snowflake Streaming destination documentation&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/iceberg-tables/configuration/" >How to Configure Snowflake Streaming to Iceberg Tables&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/iceberg-tables/migration-from-standard-streaming/" >How to Migrate from Standard Snowflake Streaming to Iceberg&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/iceberg-tables/reference/" >Snowflake Streaming to Iceberg Tables Reference&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/iceberg-tables/faq/" >Snowflake Streaming to Iceberg Tables FAQ&lt;/a>&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/stream-events-to-snowflake-iceberg-tables/" data-title="Stream Events to Snowflake Iceberg Tables" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/snowflake-streaming/iceberg-setting.webp" href="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming/iceberg-setting.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming/iceberg-setting.webp"
alt="Toggle on Create Iceberg Tables in the RudderStack dashboard"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Custom Web Device Mode Integration</title><link>https://www.rudderstack.com/docs/releases/custom-device-mode-integration/</link><pubDate>Mon, 16 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/custom-device-mode-integration/</guid><description>
&lt;p>RudderStack now supports &lt;a href="https://www.rudderstack.com/docs/destinations/custom-web-device-mode-integrations/" >Custom Web Device Mode Integration&lt;/a>, a new destination type that lets you write your own JavaScript code to connect the &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/" >RudderStack JavaScript SDK&lt;/a> to any browser-based tool.&lt;/p>
&lt;p>If an integration for the tool you need isn&amp;rsquo;t already available in RudderStack&amp;rsquo;s integration catalog, you can build the connection yourself without waiting for RudderStack to add it. You handle the &amp;ldquo;last mile&amp;rdquo; delivery code (loading the third-party SDK and mapping events), while RudderStack continues to manage event collection, consent enforcement, event filtering, device mode transformations, and error isolation automatically.&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">
Custom Web Device Mode Integration is included in every RudderStack plan — Free, Starter, Growth, and Enterprise — with &lt;strong>no limits&lt;/strong> on the number of custom destinations you can create.
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/custom-web-device-mode-integrations/" >Custom Web Device Mode Integration documentation&lt;/a> for full details.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="why-custom-web-device-mode-integration" data-heading="Why Custom Web Device Mode Integration?" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/custom-device-mode-integration/" data-title="Custom Web Device Mode Integration" -->
&lt;h2 id="why-custom-web-device-mode-integration">Why Custom Web Device Mode Integration?&lt;/h2>&lt;p>If you work with niche analytics tools, newly-launched marketing platforms, or proprietary in-house systems that run in the browser, you&amp;rsquo;ve likely hit a wall: RudderStack doesn&amp;rsquo;t have a pre-built integration for every tool. Until now, your options were to wait for RudderStack to build it, cobble together a workaround outside the platform, or look at other vendors entirely. None of those options are great when you&amp;rsquo;re trying to move fast.&lt;/p>
&lt;p>&lt;strong>Custom Web Device Mode Integration&lt;/strong> removes that bottleneck. With basic JavaScript knowledge, your frontend developers or data engineers can build a working client-side integration in hours, not weeks. The integration plugs directly into RudderStack&amp;rsquo;s event pipeline, so you keep all the platform features you already rely on (consent management, event filtering, transformations) without giving up control over which tools you connect to.&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/releases/custom-device-mode-integration/" data-title="Custom Web Device Mode Integration" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Simple JavaScript interface&lt;/strong>: Register your integration with a single API call (&lt;code>addCustomIntegration&lt;/code>) and implement familiar methods — &lt;code>init&lt;/code>, &lt;code>track&lt;/code>, &lt;code>page&lt;/code>, &lt;code>identify&lt;/code>, &lt;code>group&lt;/code>, and &lt;code>alias&lt;/code> — to map RudderStack events to any destination&amp;rsquo;s API.&lt;/li>
&lt;li>&lt;strong>Full platform features preserved&lt;/strong>: Consent management (OneTrust, Ketch, iubenda, custom), client-side event filtering (allowlist/denylist), and &lt;a href="https://www.rudderstack.com/docs/transformations/usage/#device-mode" >device mode transformations&lt;/a> all work automatically with your custom integration — no extra configuration required.&lt;/li>
&lt;li>&lt;strong>Error isolation and timeout enforcement&lt;/strong>: RudderStack sandboxes your custom code so that errors in your integration never affect other destinations or the SDK itself. A built-in readiness check polls every 100ms with a 30-second timeout to prevent stalled integrations from blocking event delivery.&lt;/li>
&lt;li>&lt;strong>Dashboard visibility and control&lt;/strong>: Set up and manage your custom destination directly in the RudderStack dashboard, just like any pre-built integration. Connect it to a JavaScript source, configure consent and filtering rules, and monitor it alongside your other destinations.&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/releases/custom-device-mode-integration/" data-title="Custom Web Device Mode Integration" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;p>Follow these steps to set up and use a custom web device mode integration:&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="step-1-add-the-destination" data-heading="Step 1: Add the destination" data-level="4" data-permalink="https://www.rudderstack.com/docs/releases/custom-device-mode-integration/" data-title="Custom Web Device Mode Integration" -->
&lt;h4 id="step-1-add-the-destination">Step 1: Add the destination&lt;/h4>&lt;p>In the RudderStack dashboard, add a new &lt;strong>Custom Device Mode&lt;/strong> destination and connect it to your JavaScript (web) source. Optionally configure consent management and event filtering. Finally, copy the &lt;strong>Destination ID&lt;/strong> — it is required for registering your integration (see Step 4).&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="optional-step-2-write-and-connect-a-transformation" data-heading="(Optional) Step 2: Write and connect a transformation" data-level="4" data-permalink="https://www.rudderstack.com/docs/releases/custom-device-mode-integration/" data-title="Custom Web Device Mode Integration" -->
&lt;h4 id="optional-step-2-write-and-connect-a-transformation">(Optional) Step 2: Write and connect a transformation&lt;/h4>&lt;p>If you need to transform events before they reach your custom integration, connect a &lt;a href="https://www.rudderstack.com/docs/transformations/usage/#device-mode" >transformation&lt;/a> to the &lt;strong>Custom Device Mode&lt;/strong> destination in the RudderStack dashboard. Then, enable the &lt;strong>Device Mode&lt;/strong> toggle and configure the &lt;strong>Propagate errors&lt;/strong> setting based on your requirements.&lt;/p>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/transformations/usage/#device-mode" >Use Transformations in Device Mode&lt;/a> for detailed instructions.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="step-3-write-your-integration-code" data-heading="Step 3: Write your integration code" data-level="4" data-permalink="https://www.rudderstack.com/docs/releases/custom-device-mode-integration/" data-title="Custom Web Device Mode Integration" -->
&lt;h4 id="step-3-write-your-integration-code">Step 3: Write your integration code&lt;/h4>&lt;p>Implement your JavaScript integration object with the methods your use case requires. Your integration will receive the transformed events.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="step-4-register-and-load" data-heading="Step 4: Register and load" data-level="4" data-permalink="https://www.rudderstack.com/docs/releases/custom-device-mode-integration/" data-title="Custom Web Device Mode Integration" -->
&lt;h4 id="step-4-register-and-load">Step 4: Register and load&lt;/h4>&lt;p>Call &lt;code>rudderanalytics.addCustomIntegration(destinationId, integration)&lt;/code> &lt;strong>before&lt;/strong> &lt;code>rudderanalytics.load()&lt;/code>.&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">If you&amp;rsquo;ve connected a device mode transformation to the destination in Step 2 and are explicitly specifying the SDK plugins, make sure to include the &lt;code>DeviceModeTransformation&lt;/code> plugin in your plugins list.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/custom-web-device-mode-integrations/" >Custom Web Device Mode Integration documentation&lt;/a> for detailed setup instructions and code examples.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="resources" data-heading="Resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/custom-device-mode-integration/" data-title="Custom Web Device Mode Integration" -->
&lt;h2 id="resources">Resources&lt;/h2>&lt;p>See the following guides for detailed instructions on using this feature:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/custom-web-device-mode-integrations/" >Custom Web Device Mode Integration Overview&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/custom-web-device-mode-integrations/setup/" >How to Create Custom Web Device Mode Integrations&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/event-filtering/" >Client-Side Event Filtering&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/data-governance/consent-management/" >Consent Management&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/transformations/usage/#device-mode" >Use Transformations in Device Mode&lt;/a>&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/custom-device-mode-integration/" data-title="Custom Web Device Mode Integration" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>&lt;p>&lt;strong>Custom Device Mode destination setup in the RudderStack dashboard&lt;/strong>&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/event-stream-destinations/add-new-destination.webp" href="https://www.rudderstack.com/docs/docs/images/event-stream-destinations/add-new-destination.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/event-stream-destinations/add-new-destination.webp"
alt="Add new destination in RudderStack dashboard"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;p>&lt;strong>Destination ID shown in destination settings&lt;/strong>&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/event-stream-destinations/custom-integrations/destination-id.webp" href="https://www.rudderstack.com/docs/docs/images/event-stream-destinations/custom-integrations/destination-id.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/event-stream-destinations/custom-integrations/destination-id.webp"
alt="Destination ID for Custom Device Mode destination"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Android (Kotlin) SDK: Modern Analytics for Android</title><link>https://www.rudderstack.com/docs/releases/kotlin-sdk/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/kotlin-sdk/</guid><description>
&lt;p>We&amp;rsquo;re pleased to announce the new &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/" >Android (Kotlin) SDK&lt;/a> for faster and efficient event tracking on your Android apps. It delivers up to 4x faster event processing with a modern, extensible architecture. Built with Kotlin coroutines and a plugin-based design, it provides type safety and cleaner payloads.&lt;/p>
&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">RudderStack recommends using the Android (Kotlin) SDK for all new Android implementations. The legacy &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-android-sdk/" >Android (Java) SDK&lt;/a> will continue to receive maintenance updates but no new features.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="why-we-built-this" data-heading="Why we built this" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h2 id="why-we-built-this">Why we built this&lt;/h2>&lt;p>The legacy Android SDK served customers well, but modern Android development has evolved significantly. Developers now expect coroutine-based async handling, type-safe APIs, and modular architectures that integrate cleanly with Jetpack libraries.&lt;/p>
&lt;p>The legacy SDK&amp;rsquo;s architecture made it difficult to add new capabilities without increasing complexity. Customers who wanted to customize event payloads or add custom processing logic had to wait for SDK team updates, thereby creating bottlenecks and slowing their implementation timelines.&lt;/p>
&lt;p>The Android (Kotlin) SDK addresses these limitations with a ground-up redesign that embraces modern Android practices and gives you the extensibility to customize your implementation without waiting for SDK changes.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-benefits" data-heading="Key benefits" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h2 id="key-benefits">Key benefits&lt;/h2>&lt;p>This section lists some key benefits of using the Android (Kotlin) SDK.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="performance" data-heading="Performance" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h3 id="performance">Performance&lt;/h3>&lt;ul>
&lt;li>&lt;strong>4x faster event processing&lt;/strong>: Optimized batching and burst handling dramatically improve event delivery speed to the data plane server&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="developer-experience" data-heading="Developer experience" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h3 id="developer-experience">Developer experience&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Coroutine-based async&lt;/strong>: Structured concurrency with proper lifecycle management replaces manual thread handling&lt;/li>
&lt;li>&lt;strong>Type safety&lt;/strong>: Compile-time safety with Kotlin&amp;rsquo;s type system catches errors before runtime&lt;/li>
&lt;li>&lt;strong>&lt;code>NavController&lt;/code> integration&lt;/strong>: Automatic screen tracking with Android Navigation Component, including Compose support&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="extensibility" data-heading="Extensibility" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h3 id="extensibility">Extensibility&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Plugin architecture&lt;/strong>: Modular design lets you add custom plugins to modify, enrich, or process events without waiting for SDK updates&lt;/li>
&lt;li>&lt;strong>Multi-instance support&lt;/strong>: Run multiple SDK instances with different write keys in the same application&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="maintainability" data-heading="Maintainability" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h3 id="maintainability">Maintainability&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Cleaner payloads&lt;/strong>: Reduced redundancy by removing duplicate fields like &lt;code>context.traits.anonymousId&lt;/code>, resulting in smaller and more consistent event data&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-to-use-the-sdk" data-heading="How to use the SDK" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h2 id="how-to-use-the-sdk">How to use the SDK&lt;/h2>&lt;p>For installation, initialization, and API usage, see the &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/quickstart/" >Android (Kotlin) SDK Quickstart&lt;/a>. For configuration options, see &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/configuration-options/" >SDK Configuration Options&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="new-and-improved-features" data-heading="New and improved features" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h2 id="new-and-improved-features">New and improved features&lt;/h2>&lt;p>&lt;strong>New features&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/client-side-features/plugin-architecture/" >Plugin architecture&lt;/a>: Add, remove, and customize plugins at runtime&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/client-side-features/automatic-screen-tracking/#navigation-destination-tracking" >Automatic screen tracking with &lt;code>NavController&lt;/code>&lt;/a>: Track navigation destinations automatically with Fragment-based and Compose navigation&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/client-side-features/multiple-instance-support/" >Multiple instances&lt;/a>: Run separate SDK instances for different data sources&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/mobile-sdk-apis/shutdown/" >Shutdown API&lt;/a>: Clean up SDK resources during runtime with &lt;code>analytics.shutdown()&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/new-features/" >New Features in Android (Kotlin) SDK&lt;/a> guide for more information.&lt;/p>
&lt;p>&lt;strong>Improvements over legacy SDK&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Configuration&lt;/strong>: Replace RudderConfig.Builder() chains with a direct &lt;code>Configuration(...)&lt;/code> constructor&lt;/li>
&lt;li>&lt;strong>Properties&lt;/strong>: Use &lt;code>buildJsonObject { }&lt;/code> for compile-time type safety instead of &lt;code>RudderProperty().putValue()&lt;/code> with runtime checks&lt;/li>
&lt;li>&lt;strong>Async handling&lt;/strong>: Native coroutine integration replaces manual thread management&lt;/li>
&lt;li>&lt;strong>Plugin management&lt;/strong>: Add and remove plugins dynamically at runtime with &lt;code>add()&lt;/code> / &lt;code>remove()&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>A sample SDK configuration is shown below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-kotlin" data-lang="kotlin">&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Kotlin SDK - cleaner, no builder pattern
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="k">val&lt;/span> &lt;span class="py">config&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">Configuration&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">writeKey&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;WRITE_KEY&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">application&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">application&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">dataPlaneUrl&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s2">&amp;#34;DATA_PLANE_URL&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">logLevel&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="nc">LogLevel&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="n">DEBUG&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>An example of type-safe properties is shown below:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-kotlin" data-lang="kotlin">&lt;span class="line">&lt;span class="cl">&lt;span class="k">val&lt;/span> &lt;span class="py">properties&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="n">buildJsonObject&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">put&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;product_id&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;12345&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">put&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;price&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="m">99.99&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>See the following guides for more information:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/new-features/improved-features/" >Improved Features in Android (Kotlin) SDK&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/breaking-changes/" >Breaking Changes in Android (Kotlin) SDK&lt;/a>&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="migrate-from-legacy-android-sdk" data-heading="Migrate from legacy Android SDK" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h2 id="migrate-from-legacy-android-sdk">Migrate from legacy Android SDK&lt;/h2>&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 legacy Android (Java) SDK continues to work and receive maintenance updates, so you can migrate at your own pace.
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>The Android (Kotlin) SDK introduces API and payload changes from the legacy Android (Java) SDK. Event payloads remove redundant fields (for example, &lt;code>context.traits.anonymousId&lt;/code>, &lt;code>context.traits.userId&lt;/code>, &lt;code>context.userAgent&lt;/code>) and the library identifier in payloads changes to &lt;code>com.rudderstack.sdk.kotlin.android&lt;/code>.&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">If your downstream systems rely on these removed fields, make sure to update your transformations before migrating.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>See the following guides for detailed API differences and migration process:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/breaking-changes/" >Breaking Changes in Android (Kotlin) SDK&lt;/a>: For differences in SDK initialization, event API, and configuration mapping&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/migration-guide/" >Migration Guide&lt;/a>: Migrate persisted SDK data (&lt;code>anonymousId&lt;/code>, &lt;code>userId&lt;/code>, traits, etc.)&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="sdk-versions" data-heading="SDK versions" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h2 id="sdk-versions">SDK versions&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>SDK&lt;/th>
&lt;th>Latest version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Android (Kotlin) SDK&lt;/td>
&lt;td>1.2.0&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="platform-requirements" data-heading="Platform requirements" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h2 id="platform-requirements">Platform requirements&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Platform&lt;/th>
&lt;th>Minimum version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Android API&lt;/td>
&lt;td>21+ (Lollipop)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Kotlin&lt;/td>
&lt;td>1.7.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Java&lt;/td>
&lt;td>8+&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="resources" data-heading="Resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/kotlin-sdk/" data-title="Android (Kotlin) SDK: Modern Analytics for Android" -->
&lt;h2 id="resources">Resources&lt;/h2>&lt;p>See the following resources for learning more about the Android (Kotlin) SDK:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/" >Android (Kotlin) SDK Overview&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/new-features/" >New Features in Android (Kotlin) SDK&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/client-side-features/plugin-architecture/" >Plugin Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/new-features/improved-features/" >Improved Features&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/breaking-changes/" >Breaking Changes&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>The following guides will help you get started with the Android (Kotlin) SDK:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/quickstart/" >Quickstart Guide&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/configuration-options/" >SDK Configuration Options&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/kotlin-sdk/migration-guide/" >Migration Guide&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Releases: iOS (Swift) SDK: Modern Analytics for Apple Platforms</title><link>https://www.rudderstack.com/docs/releases/swift-sdk/</link><pubDate>Thu, 12 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/swift-sdk/</guid><description>
&lt;p>The new &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/" >iOS (Swift) SDK&lt;/a> replaces the legacy &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-ios-sdk/" >iOS (Obj-C) SDK&lt;/a> with a modern architecture designed for today&amp;rsquo;s Apple development practices. Built with async-await, it introduces a runtime-flexible plugin system, multi-instance support, and expands platform coverage to include macOS alongside iOS, tvOS, and watchOS.&lt;/p>
&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">RudderStack recommends using the iOS (Swift) SDK for all new Apple platform implementations. The legacy iOS (Obj-C) SDK continues to receive maintenance updates but no new features.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="why-we-built-this" data-heading="Why we built this" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h2 id="why-we-built-this">Why we built this&lt;/h2>&lt;p>The legacy iOS SDK was built in Objective-C when it was the dominant language for Apple development. As Swift has matured and become the standard, developers expect type-safe APIs, structured concurrency, and modern language features that Objective-C cannot provide.&lt;/p>
&lt;p>The legacy iOS (Obj-C) SDK locked integrations at configuration time, making runtime modifications impossible. Customers who needed custom event processing or filtering had to request SDK changes, creating bottlenecks and slowing their implementation timelines.&lt;/p>
&lt;p>The iOS (Swift) SDK addresses these limitations with native Swift concurrency, a dynamic plugin system for runtime customization, and expanded platform support including macOS. It lets you use a single SDK across Apple platforms.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-benefits" data-heading="Key benefits" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h2 id="key-benefits">Key benefits&lt;/h2>&lt;p>This section lists some key benefits of using the iOS (Swift) SDK.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="developer-experience" data-heading="Developer experience" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h3 id="developer-experience">Developer experience&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Modern Swift concurrency&lt;/strong>: Built with async-await and structured concurrency for non-blocking operations and better app responsiveness&lt;/li>
&lt;li>&lt;strong>Enhanced identity access&lt;/strong>: Type-safe direct property access to &lt;code>anonymousId&lt;/code>, &lt;code>userId&lt;/code>, &lt;code>traits&lt;/code>, and &lt;code>sessionId&lt;/code>&lt;/li>
&lt;li>&lt;strong>macOS support&lt;/strong>: Native support for macOS 12.0+ alongside iOS 15.0+, tvOS 15.0+, and watchOS 8.0+&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="extensibility" data-heading="Extensibility" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h3 id="extensibility">Extensibility&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Plugin architecture&lt;/strong>: Dynamic plugin management lets you add, remove, and modify event processing without waiting for SDK updates&lt;/li>
&lt;li>&lt;strong>Multi-instance support&lt;/strong>: Create multiple isolated analytics instances with independent state, storage, and configuration&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="stability" data-heading="Stability" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h3 id="stability">Stability&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Shutdown API&lt;/strong>: Explicitly shut down and clean up SDK resources with event persistence across restarts&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="maintainability" data-heading="Maintainability" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h3 id="maintainability">Maintainability&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Cleaner payloads&lt;/strong>: Removed redundant identity fields from &lt;code>context.traits&lt;/code> for smaller, consistent event data&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-to-use-the-sdk" data-heading="How to use the SDK" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h2 id="how-to-use-the-sdk">How to use the SDK&lt;/h2>&lt;p>For installation, initialization, and API usage, see the &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/quickstart/" >iOS (Swift) SDK Quickstart&lt;/a>. For configuration options, see &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/configuration-options/" >SDK Configuration Options&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="new-and-improved-features" data-heading="New and improved features" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h2 id="new-and-improved-features">New and improved features&lt;/h2>&lt;p>&lt;strong>New features&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/client-side-features/plugin-architecture/" >Plugin architecture&lt;/a>: Add, remove, and customize plugins at runtime&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/client-side-features/multiple-instance-support/" >Multiple instances&lt;/a>: Run separate SDK instances for different data sources&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/mobile-sdk-apis/shutdown/" >Shutdown API&lt;/a>: Clean up SDK resources during runtime with &lt;code>analytics.shutdown()&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/new-features/" >New Features in iOS (Swift) SDK&lt;/a> for more information.&lt;/p>
&lt;p>&lt;strong>Improved features&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Flexible reset API&lt;/strong>: Reset specific identity values (&lt;code>anonymousId&lt;/code>, &lt;code>userId&lt;/code>, &lt;code>traits&lt;/code>, &lt;code>session&lt;/code>) individually instead of all-or-nothing&lt;/li>
&lt;li>&lt;strong>Enhanced custom context&lt;/strong>: Pass any JSON value type (strings, arrays, nested objects, booleans) to &lt;code>customContext&lt;/code>, not just dictionaries&lt;/li>
&lt;li>&lt;strong>Flexible integration options&lt;/strong>: Pass configuration objects to integrations instead of just boolean toggles&lt;/li>
&lt;li>&lt;strong>ExternalId on all event types&lt;/strong>: Set &lt;code>externalId&lt;/code> on track, screen, and group events—not just identify&lt;/li>
&lt;li>&lt;strong>Direct destination instance access&lt;/strong>: Access destination plugin instances anytime with &lt;code>getDestinationInstance()&lt;/code> instead of waiting for callbacks&lt;/li>
&lt;li>&lt;strong>Custom logger&lt;/strong>: Configure centralized logging with pluggable implementations via &lt;code>LoggerAnalytics.setLogger()&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/new-features/improved-features/" >Improved Features in iOS (Swift) SDK&lt;/a> guide for more information.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="migrate-from-legacy-ios-obj-c-sdk" data-heading="Migrate from legacy iOS (Obj-C) SDK" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h2 id="migrate-from-legacy-ios-obj-c-sdk">Migrate from legacy iOS (Obj-C) SDK&lt;/h2>&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 legacy iOS (Obj-C) SDK continues to work and receive maintenance updates, so you can migrate at your own pace.
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>The iOS (Swift) SDK introduces API and payload changes from the legacy iOS (Obj-C) SDK. For example, event payloads remove redundant identity fields such as &lt;code>context.traits.anonymousId&lt;/code>, &lt;code>context.traits.userId&lt;/code>, and &lt;code>context.traits.id&lt;/code>.&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">If your downstream systems rely on these removed fields, update your transformations before migrating.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>See the following guides for detailed API differences and migration steps:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/breaking-changes/" >Breaking Changes in iOS (Swift) SDK&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/migration-guide/" >Migration Guide&lt;/a>: Migrate persisted user data (&lt;code>anonymousId&lt;/code>, &lt;code>userId&lt;/code>, traits, and so on)&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="platform-requirements" data-heading="Platform requirements" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h2 id="platform-requirements">Platform requirements&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Platform&lt;/th>
&lt;th>Minimum version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>iOS&lt;/td>
&lt;td>15.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>macOS&lt;/td>
&lt;td>12.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>tvOS&lt;/td>
&lt;td>15.0+&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>watchOS&lt;/td>
&lt;td>8.0+&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="resources" data-heading="Resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/swift-sdk/" data-title="iOS (Swift) SDK: Modern Analytics for Apple Platforms" -->
&lt;h2 id="resources">Resources&lt;/h2>&lt;p>See the following resources for learning more about the iOS (Swift) SDK:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/" >iOS (Swift) SDK Overview&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/new-features/" >New Features in iOS (Swift) SDK&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/client-side-features/plugin-architecture/" >Plugin Architecture&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/new-features/improved-features/" >Improved Features&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/breaking-changes/" >Breaking Changes in iOS (Swift) SDK&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>The following guides will help you get started with the iOS (Swift) SDK:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/quickstart/" >Quickstart Guide&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/configuration-options/" >SDK Configuration Options&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/swift-sdk/migration-guide/" >Migration Guide&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Releases: Braze Multi-App Key Support</title><link>https://www.rudderstack.com/docs/releases/braze-multi-app-key-support/</link><pubDate>Fri, 06 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/braze-multi-app-key-support/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/kEUOFw8DjhI" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>You can now configure platform-specific App Identifier Keys for iOS, Android, and Web within a single Braze destination. The RudderStack SDK automatically selects the appropriate key based on the device/platform type at runtime, falling back to the Default App Key if a platform-specific key is not provided.&lt;/p>
&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 currently in &lt;strong>Beta&lt;/strong> and behind a feature flag. It is expected to be generally available by March 31, 2026.&lt;/p>
&lt;p>Contact &lt;a href="mailto:support@rudderstack.com" >RudderStack Support&lt;/a> to enable this feature for your account.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>For setup instructions, see the &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/braze/setup-guide/" >Braze destination documentation&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="why-we-built-this" data-heading="Why we built this" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/braze-multi-app-key-support/" data-title="Braze Multi-App Key Support" -->
&lt;h2 id="why-we-built-this">Why we built this&lt;/h2>&lt;p>Braze recommends using separate &lt;strong>App Identifier Keys&lt;/strong> for each platform to ensure proper data attribution and analytics segmentation. Previously, RudderStack only supported one &lt;strong>App Key&lt;/strong> per Braze destination, which meant customers with multi-platform apps (iOS and Android) needed to create separate Braze destinations for each platform.&lt;/p>
&lt;p>This was especially problematic for teams using cross-platform frameworks like React Native or Flutter, where RudderStack treats these as single sources but Braze requires separate app keys for each underlying platform.&lt;/p>
&lt;p>With Multi-App Key Support, you can consolidate your setup into a single Braze destination while still following Braze&amp;rsquo;s recommended configuration.&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/releases/braze-multi-app-key-support/" data-title="Braze Multi-App Key Support" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Platform-specific keys&lt;/strong>: Configure separate App Identifier Keys for Android, iOS, and Web within one destination&lt;/li>
&lt;li>&lt;strong>Automatic routing&lt;/strong>: The RudderStack SDK detects the platform at runtime and routes events to the correct Braze app&lt;/li>
&lt;li>&lt;strong>Cross-platform support&lt;/strong>: Works seamlessly with React Native and Flutter sources&lt;/li>
&lt;li>&lt;strong>Backward compatible&lt;/strong>: Existing configurations with only the Default App Key continue to work without changes&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-to-use-it" data-heading="How to use it" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/braze-multi-app-key-support/" data-title="Braze Multi-App Key Support" -->
&lt;h2 id="how-to-use-it">How to use it&lt;/h2>&lt;ol>
&lt;li>Navigate to your Braze destination settings in the RudderStack dashboard&lt;/li>
&lt;li>Enable the &lt;strong>Enable Platform-Specific App Identifier Keys&lt;/strong> toggle&lt;/li>
&lt;li>Enter the App Identifier Keys from your Braze dashboard for each platform (Android, iOS, Web)&lt;/li>
&lt;li>The &lt;strong>Default App Identifier Key&lt;/strong> serves as a fallback for any platform without a specific key configured&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">This feature applies only to device mode connections. Cloud mode connections do not use App Identifier Keys.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="sdk-upgrade-required" data-heading="SDK upgrade required" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/braze-multi-app-key-support/" data-title="Braze Multi-App Key Support" -->
&lt;h2 id="sdk-upgrade-required">SDK upgrade required&lt;/h2>&lt;p>To use platform-specific keys, upgrade your device mode SDK to the minimum supported versions:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>SDK&lt;/th>
&lt;th>Minimum Version&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Android (Kotlin)&lt;/td>
&lt;td>1.2.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>iOS (Swift)&lt;/td>
&lt;td>1.0.1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>React Native&lt;/td>
&lt;td>2.1.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Flutter&lt;/td>
&lt;td>2.5.0&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Android (Java) — Legacy&lt;/td>
&lt;td>2.1.1&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>iOS (Obj-C) — Legacy&lt;/td>
&lt;td>4.2.1&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&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">
If you keep the Default App Identifier Key configured, older SDK versions will continue to work using the default key.
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="resources" data-heading="Resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/braze-multi-app-key-support/" data-title="Braze Multi-App Key Support" -->
&lt;h2 id="resources">Resources&lt;/h2>&lt;p>See the following guides for detailed instructions on using this feature:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/braze/setup-guide/#connection-settings" >Braze Destination Setup Guide&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/braze/device-mode/#use-platform-specific-braze-app-identifier-keys" >Use platform-specific Braze App Identifier keys&lt;/a>
&lt;br />&lt;/li>
&lt;/ul></description></item><item><title>Releases: P95 Latency Alerts for Event Stream Destinations: General Availability</title><link>https://www.rudderstack.com/docs/releases/p95-latency/</link><pubDate>Fri, 27 Feb 2026 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/p95-latency/</guid><description>
&lt;p>&lt;a href="https://www.rudderstack.com/docs/data-governance/alerts/#p95-latency-alerts" >P95 latency alerts&lt;/a> for Event Stream cloud destinations are now &lt;strong>Generally Available&lt;/strong> for all &lt;a href="https://www.rudderstack.com/enterprise-quote/" >Enterprise&lt;/a> customers.&lt;/p>
&lt;p>You can now configure P95 latency thresholds for your Event Stream cloud destinations and receive alerts whenever event delivery slows beyond acceptable limits. For example, if you set a P95 latency threshold of 15 minutes and 95% of events aren&amp;rsquo;t delivered within that window, RudderStack triggers an alert on your configured &lt;a href="https://www.rudderstack.com/docs/data-governance/alerts/#set-up-alert-delivery-channels" >delivery channels&lt;/a> — Slack, email, Microsoft Teams, or a custom webhook.&lt;/p>
&lt;p>This helps you catch delivery delays early, troubleshoot proactively, and keep stakeholders informed before issues escalate.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="whats-new" data-heading="What&amp;rsquo;s new" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/p95-latency/" data-title="P95 Latency Alerts for Event Stream Destinations: General Availability" -->
&lt;h2 id="whats-new">What&amp;rsquo;s new&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Generally available&lt;/strong>: P95 latency alerts are no longer in beta. They are fully supported and available for all &lt;a href="https://www.rudderstack.com/enterprise-quote/" >Enterprise&lt;/a> customers.&lt;/li>
&lt;li>&lt;strong>Expanded access&lt;/strong>: Previously, only &lt;a href="https://www.rudderstack.com/docs/access-management/member-management/#member-roles" >Admins&lt;/a> could view the &lt;a href="https://www.rudderstack.com/docs/dashboard-guides/event-metrics/#p95-latency" >P95 latency metric&lt;/a>. Now, any user subscribed to P95 latency alerts for a destination can also view its latency metrics directly in the &lt;strong>Events&lt;/strong> tab.&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>P95 latency alerts apply only to &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/" >Event Stream destinations&lt;/a> connected to sources in &lt;a href="https://www.rudderstack.com/docs/destinations/rudderstack-connection-modes/#cloud-mode" >cloud mode&lt;/a>.&lt;/p>
&lt;p>They do not apply to &lt;a href="https://www.rudderstack.com/docs/sources/reverse-etl/" >Reverse ETL connections&lt;/a>, &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/" >warehouse destinations&lt;/a>, and device mode connections.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;p>See the following guides for more details:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/data-governance/alerts/#p95-latency-alerts" >Set up P95 latency alerts&lt;/a>: Configure alert thresholds for your destinations&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/dashboard-guides/event-metrics/#p95-latency" >View the P95 latency event metric&lt;/a>: View and interpret the P95 latency metric for your destination&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/p95-latency/" data-title="P95 Latency Alerts for Event Stream Destinations: General Availability" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>&lt;ul>
&lt;li>Configure P95 latency alerts in the RudderStack dashboard:&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/data-governance/configurable-alerts/alerts-tab.webp" href="https://www.rudderstack.com/docs/docs/images/data-governance/configurable-alerts/alerts-tab.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/data-governance/configurable-alerts/alerts-tab.webp"
alt="Alerts option in RudderStack dashboard"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>View the P95 latency metric for a destination:&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/data-governance/configurable-alerts/p95-latency-events.webp" href="https://www.rudderstack.com/docs/docs/images/data-governance/configurable-alerts/p95-latency-events.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/data-governance/configurable-alerts/p95-latency-events.webp"
alt="P95 latency for destination"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>View the P95 latency for events coming from a particular source:&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/data-governance/configurable-alerts/filter-source-latency.webp" href="https://www.rudderstack.com/docs/docs/images/data-governance/configurable-alerts/filter-source-latency.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/data-governance/configurable-alerts/filter-source-latency.webp"
alt="View source-specific P95 latency"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Bot Management</title><link>https://www.rudderstack.com/docs/releases/bot-management/</link><pubDate>Mon, 23 Feb 2026 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/bot-management/</guid><description>
&lt;p>We are excited to announce &lt;a href="https://www.rudderstack.com/docs/data-governance/bot-management/" >Bot Management&lt;/a>, a data governance feature that detects, flags, and drops bot traffic on web sources before it enters your data pipelines. By identifying and managing bot events early in your data flow, you can significantly improve data quality and reduce unnecessary costs.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="why-bot-management" data-heading="Why Bot Management?" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/bot-management/" data-title="Bot Management" -->
&lt;h2 id="why-bot-management">Why Bot Management?&lt;/h2>&lt;p>Managing bot traffic has traditionally required implementing custom detection logic in downstream systems, leading to inconsistent bot detection across your analytics stack and inflated costs from processing non-human events. Bot Management eliminates these challenges by providing a centralized, reliable filtering layer that standardizes bot detection across your web sources.&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/releases/bot-management/" data-title="Bot Management" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;ul>
&lt;li>&lt;strong>User agent-based detection&lt;/strong>: Automatically identifies bot events using predefined bot patterns to detect common bots, crawlers, and automated traffic.&lt;/li>
&lt;li>&lt;strong>Flexible event management&lt;/strong>: Choose to flag bot events for downstream analysis or drop them entirely at the gateway to prevent unnecessary processing costs.&lt;/li>
&lt;li>&lt;strong>Workspace and source-level configuration&lt;/strong>: Set global bot management settings for all web sources or apply custom configurations for individual sources based on your specific requirements.&lt;/li>
&lt;li>&lt;strong>Real-time bot metrics&lt;/strong>: Monitor bot event volume patterns at the source level through the source Events view. For more details, see &lt;a href="https://www.rudderstack.com/docs/data-governance/bot-management/#view-bot-event-metrics" >View Bot Event Metrics&lt;/a>.&lt;/li>
&lt;li>&lt;strong>Cost optimization&lt;/strong>: Drop bot events at the gateway to reduce billable event volume and prevent unnecessary costs across pipelines, data stores, and analytics tools.&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/releases/bot-management/" data-title="Bot Management" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;p>Bot Management is available in all RudderStack &lt;a href="https://www.rudderstack.com/pricing/" >paid plans&lt;/a>. You can get started with just a couple of clicks — navigate to &lt;strong>Govern&lt;/strong> &amp;gt; &lt;strong>Bot Management&lt;/strong> in your RudderStack dashboard and enable bot detection for your workspace.&lt;/p>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/data-governance/bot-management/" >Bot Management documentation&lt;/a> for detailed instructions.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="resources" data-heading="Resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/bot-management/" data-title="Bot Management" -->
&lt;h2 id="resources">Resources&lt;/h2>&lt;p>See the following guides for detailed instructions on using this feature:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/data-governance/bot-management/" >Bot Management Overview&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/data-governance/bot-management/#how-bot-management-works" >How Bot Management Works&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/data-governance/bot-management/#configure-bot-management-settings" >Configure Bot Management Settings&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/data-governance/bot-management/#view-bot-event-metrics" >View Bot Event Metrics&lt;/a>&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/bot-management/" data-title="Bot Management" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>&lt;p>&lt;strong>Bot management view in the RudderStack dashboard&lt;/strong>&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/data-governance/bot-management/bot-management-view.webp" href="https://www.rudderstack.com/docs/docs/images/data-governance/bot-management/bot-management-view.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/data-governance/bot-management/bot-management-view.webp"
alt="Bot management setting in RudderStack dashboard"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;p>&lt;strong>Bot management global setting&lt;/strong>&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/data-governance/bot-management/workspace-settings.webp" href="https://www.rudderstack.com/docs/docs/images/data-governance/bot-management/workspace-settings.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/data-governance/bot-management/workspace-settings.webp"
alt="Bot management global setting in RudderStack dashboard"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;p>&lt;strong>Source-level bot event management&lt;/strong>&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/data-governance/bot-management/source-level-settings.webp" href="https://www.rudderstack.com/docs/docs/images/data-governance/bot-management/source-level-settings.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/data-governance/bot-management/source-level-settings.webp"
alt="Bot management source level settings in RudderStack dashboard"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;p>&lt;strong>Bot event metrics in the source page&lt;/strong>&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/data-governance/bot-management/bot-events-metrics-new.webp" href="https://www.rudderstack.com/docs/docs/images/data-governance/bot-management/bot-events-metrics-new.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/data-governance/bot-management/bot-events-metrics-new.webp"
alt="Bot event metrics in source page"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: RudderStack Tracking Assistant Browser Extension</title><link>https://www.rudderstack.com/docs/releases/rudderstack-tracking-assistant/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/rudderstack-tracking-assistant/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/RFzxiEtnSO8" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br/>&lt;/p>
&lt;p>We are excited to announce the &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/events-tracking-assistant/" >Events Tracking Assistant&lt;/a>, a browser extension for Chrome and Firefox that transforms how you debug and validate your JavaScript SDK implementation. It provides instant visibility into your RudderStack setup directly in your browser.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="why-events-tracking-assistant" data-heading="Why Events Tracking Assistant?" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/rudderstack-tracking-assistant/" data-title="RudderStack Tracking Assistant Browser Extension" -->
&lt;h2 id="why-events-tracking-assistant">Why Events Tracking Assistant?&lt;/h2>&lt;p>Debugging SDK implementations has traditionally required waiting 1-5 minutes for events to appear in the dashboard, piecing together information from browser&amp;rsquo;s developer tools, or filing support tickets for complex issues. The Events Tracking Assistant eliminates these friction points by providing real-time feedback in under one second.&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/releases/rudderstack-tracking-assistant/" data-title="RudderStack Tracking Assistant Browser Extension" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Real-time event monitoring&lt;/strong>: See events the moment they fire with full payload inspection, filtering by event type, and visual status indicators.&lt;/li>
&lt;li>&lt;strong>SDK health dashboard&lt;/strong>: Instantly view SDK version, write key, data plane URL, installation type (CDN vs NPM), and CSP compatibility.&lt;/li>
&lt;li>&lt;strong>Destination and plugin visibility&lt;/strong>: Monitor device-mode destination status and debug configuration issues without leaving your browser.&lt;/li>
&lt;li>&lt;strong>SDK injection&lt;/strong>: Test RudderStack on any website without code changes — ideal for evaluation, prototyping, and demos.&lt;/li>
&lt;li>&lt;strong>One-click debug export&lt;/strong>: Export comprehensive debug data including SDK state, events, and logs to streamline support communication.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="installation" data-heading="Installation" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/rudderstack-tracking-assistant/" data-title="RudderStack Tracking Assistant Browser Extension" -->
&lt;h2 id="installation">Installation&lt;/h2>&lt;ul>
&lt;li>&lt;a href="https://chromewebstore.google.com/detail/rudderstack-assistant/mldkpbdooncodocccgjjkjojkneohnif?pli=1" >Chrome Web Store&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://addons.mozilla.org/en-GB/firefox/addon/rudderstack-assistant/" >Firefox Add-ons&lt;/a>&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">All data processing occurs locally in your browser. The extension does not transmit captured events or SDK information to external servers.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="get-started" data-heading="Get started" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/rudderstack-tracking-assistant/" data-title="RudderStack Tracking Assistant Browser Extension" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;ol>
&lt;li>Install the extension from the &lt;a href="https://chromewebstore.google.com/detail/rudderstack-assistant/mldkpbdooncodocccgjjkjojkneohnif?pli=1" >Chrome Web Store&lt;/a> or &lt;a href="https://addons.mozilla.org/en-GB/firefox/addon/rudderstack-assistant/" >Firefox Add-ons&lt;/a>.&lt;/li>
&lt;li>Navigate to any website with the RudderStack JavaScript SDK installed.&lt;/li>
&lt;li>Open the extension to instantly view your SDK configuration, health status, and real-time events.&lt;/li>
&lt;li>Use the &lt;strong>Events&lt;/strong> tab to monitor event payloads as they fire, or the &lt;strong>Overview&lt;/strong> tab to inspect destinations and plugins.&lt;/li>
&lt;li>Export debug data with one click to share with your team or RudderStack support.&lt;/li>
&lt;/ol>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="resources" data-heading="Resources" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/rudderstack-tracking-assistant/" data-title="RudderStack Tracking Assistant Browser Extension" -->
&lt;h2 id="resources">Resources&lt;/h2>&lt;p>See the following guides for detailed instructions on using the extension:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/events-tracking-assistant/" >Events Tracking Assistant Overview&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/events-tracking-assistant/quickstart/" >Quickstart Guide&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/events-tracking-assistant/interface-reference/" >Interface Reference&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/events-tracking-assistant/troubleshooting/" >Troubleshooting Guide&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Releases: Snowflake Streaming Destination: General Availability</title><link>https://www.rudderstack.com/docs/releases/snowflake-streaming-ga/</link><pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/snowflake-streaming-ga/</guid><description>
&lt;p>The &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/" >Snowflake Streaming destination&lt;/a> is now &lt;strong>Generally Available&lt;/strong>. This integration delivers event data to Snowflake in seconds via continuous micro-batches using Snowflake&amp;rsquo;s Snowpipe Streaming API, enabling real-time analytics, alerting, A/B testing, and fresher data for personalization and AI/ML use cases.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-benefits" data-heading="Key benefits" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/snowflake-streaming-ga/" data-title="Snowflake Streaming Destination: General Availability" -->
&lt;h2 id="key-benefits">Key benefits&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Real-time data availability&lt;/strong>: Events appear in Snowflake within seconds, not hours, enabling immediate insights and activation&lt;/li>
&lt;li>&lt;strong>Cost-efficient streaming&lt;/strong>: Uses Snowpipe Streaming API instead of warehouse compute, maintaining the same or lower cost compared to batch integration while dramatically reducing latency&lt;/li>
&lt;li>&lt;strong>Full platform integration&lt;/strong>: Leverage all of RudderStack&amp;rsquo;s native capabilities including &lt;a href="https://www.rudderstack.com/docs/transformations/overview/" >Transformations&lt;/a>, &lt;a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/" >Tracking Plans&lt;/a>, and other &lt;a href="https://www.rudderstack.com/docs/data-governance/" >Data Governance&lt;/a> capabilities&lt;/li>
&lt;li>&lt;strong>Enterprise-grade reliability&lt;/strong>: Built on RudderStack&amp;rsquo;s proven event streaming infrastructure with monitoring and alerting&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="seamless-migration" data-heading="Seamless migration" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/snowflake-streaming-ga/" data-title="Snowflake Streaming Destination: General Availability" -->
&lt;h2 id="seamless-migration">Seamless migration&lt;/h2>&lt;p>Existing Snowflake batch destination users can migrate seamlessly using the &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/migration-guide/#assisted-migration" >Assisted Migration&lt;/a> feature. This guided workflow wizard creates and configures your new Snowflake Streaming destination, manages the pipeline transition, and minimizes duplicate records during migration.&lt;/p>
&lt;p>To start the migration, go to your existing Snowflake batch destination in the RudderStack dashboard and look for the &lt;strong>Migrate to Snowflake Streaming&lt;/strong> banner.&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/snowflake-streaming-migration/migration-banner.webp" href="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming-migration/migration-banner.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming-migration/migration-banner.webp"
alt="Proceed button in migration banner"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/migration-guide/" >Snowflake Streaming Migration Guide&lt;/a> for more information.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="pricing-and-packaging" data-heading="Pricing and packaging" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/snowflake-streaming-ga/" data-title="Snowflake Streaming Destination: General Availability" -->
&lt;h2 id="pricing-and-packaging">Pricing and packaging&lt;/h2>&lt;p>Snowflake Streaming is an Enterprise feature, but we’re offering a free trial to all paying RudderStack customers through June 8, 2026. After the trial period, Snowflake Streaming will be available as an add-on for non-Enterprise customers.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="get-started" data-heading="Get started" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/snowflake-streaming-ga/" data-title="Snowflake Streaming Destination: General Availability" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;p>To set up the Snowflake Streaming destination:&lt;/p>
&lt;ol>
&lt;li>Add a source in your &lt;a href="https://app.rudderstack.com/" >RudderStack dashboard&lt;/a>.&lt;/li>
&lt;li>Select &lt;strong>Snowflake Streaming&lt;/strong> from the list of destinations.&lt;/li>
&lt;li>Configure your connection settings and credentials.&lt;/li>
&lt;li>Connect your sources and start streaming.&lt;/li>
&lt;/ol>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/" >Snowflake Streaming documentation&lt;/a> for detailed setup instructions and configuration options.&lt;/p>
&lt;br /></description></item><item><title>Releases: Cloud Extract End of Support Announcement</title><link>https://www.rudderstack.com/docs/releases/etl-sunset/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/etl-sunset/</guid><description>
&lt;p>After careful consideration and a strategic evaluation of our product portfolio, RudderStack is ending support for Cloud Extract (our ETL offering).&lt;/p>
&lt;p>Here&amp;rsquo;s what you need to know:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>End-of-support date&lt;/strong>: December 1, 2025. Starting from this date, RudderStack will no longer provide support or respond to support tickets for ETL pipelines.&lt;/li>
&lt;li>&lt;strong>Pipeline shutdown date&lt;/strong>: January 10, 2026. All ETL pipelines will be turned off on this date. Users will no longer be able to activate or toggle on their pipelines.&lt;/li>
&lt;li>&lt;strong>Access until shutdown&lt;/strong>: Current RudderStack &lt;strong>Growth&lt;/strong> and &lt;strong>Enterprise&lt;/strong> customers will retain access to Cloud Extract pipelines until January 10, 2026.&lt;/li>
&lt;/ul>
&lt;p>For account-specific details or assistance with transition planning, contact &lt;a href="mailto:support@rudderstack.com" >RudderStack Support&lt;/a> for the specifics.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="why-rudderstack-is-sunsetting-cloud-extract" data-heading="Why RudderStack is sunsetting Cloud Extract" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/etl-sunset/" data-title="Cloud Extract End of Support Announcement" -->
&lt;h2 id="why-rudderstack-is-sunsetting-cloud-extract">Why RudderStack is sunsetting Cloud Extract&lt;/h2>&lt;p>RudderStack’s core competencies include &lt;strong>event collection&lt;/strong> (Event Stream), &lt;strong>governance&lt;/strong> (Data Quality and Data Compliance Toolkits), &lt;strong>unification&lt;/strong> (Profiles), and &lt;strong>activation&lt;/strong> (Reverse ETL &amp;amp; Real-time integration).&lt;/p>
&lt;p>By focusing on these areas, we are better positioned to continue to innovate and provide the best possible solutions for your data needs.&lt;/p>
&lt;p>&lt;a href="mailto:support@rudderstack.com" >Reach out to us&lt;/a> for any queries.&lt;/p>
&lt;br /></description></item><item><title>Releases: Snowflake Streaming Assisted Migration Feature</title><link>https://www.rudderstack.com/docs/releases/snowflake-streaming-assisted-migration/</link><pubDate>Tue, 28 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/snowflake-streaming-assisted-migration/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/TV3pVpjDogE" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br/>&lt;/p>
&lt;p>Migrating from RudderStack&amp;rsquo;s traditional &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake/" >Snowflake batch destination&lt;/a> to the new &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/" >Snowflake Streaming destination&lt;/a> unlocks real-time data ingestion using Snowflake&amp;rsquo;s Snowpipe Streaming API. However, manually managing this migration — including creating new destinations, reconnecting sources, and coordinating the cutover — can be complex and risky.&lt;/p>
&lt;p>With the assisted migration feature, you can now migrate your existing Snowflake pipelines with a guided workflow that handles all the heavy lifting for you. This feature automatically creates and configures your new Snowflake Streaming destination, manages the transition between pipelines, and minimizes duplicate records during the migration process.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-capabilities" data-heading="Key capabilities" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/snowflake-streaming-assisted-migration/" data-title="Snowflake Streaming Assisted Migration Feature" -->
&lt;h2 id="key-capabilities">Key capabilities&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Automated destination setup&lt;/strong>: RudderStack creates a new Snowflake Streaming destination using your existing batch destination credentials and configuration, preserving your schema and table mappings.&lt;/li>
&lt;li>&lt;strong>Guided verification&lt;/strong>: A step-by-step workflow prompts you to verify that events flow correctly through the new Snowflake Streaming pipeline before completing the migration.&lt;/li>
&lt;li>&lt;strong>Automatic pipeline coordination&lt;/strong>: The Snowflake batch destination is automatically paused during migration to minimize duplicate records while both pipelines are active.&lt;/li>
&lt;li>&lt;strong>Final sync trigger&lt;/strong>: You can trigger a final sync from the batch destination to ensure any events collected during the pause are loaded to your warehouse.&lt;/li>
&lt;li>&lt;strong>Rollback capability&lt;/strong>: If any errors occur during setup, you can roll back to your previous state &lt;strong>without any data loss&lt;/strong>.&lt;/li>
&lt;li>&lt;strong>Deduplication guidance&lt;/strong>: Receive migration timestamps and documentation to help you deduplicate any records that may have been ingested during the transition.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="why-migrate-to-snowflake-streaming" data-heading="Why migrate to Snowflake Streaming?" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/snowflake-streaming-assisted-migration/" data-title="Snowflake Streaming Assisted Migration Feature" -->
&lt;h3 id="why-migrate-to-snowflake-streaming">Why migrate to Snowflake Streaming?&lt;/h3>&lt;p>The Snowflake Streaming destination delivers event data to Snowflake in seconds via continuous micro-batches, enabling real-time analytics, alerting, A/B testing, and fresher data for personalization and AI/ML use cases. Because it uses the Snowpipe Streaming API instead of warehouse compute, it maintains the same or lower cost compared to the batch integration while dramatically reducing latency.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="get-started" data-heading="Get started" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/snowflake-streaming-assisted-migration/" data-title="Snowflake Streaming Assisted Migration Feature" -->
&lt;h3 id="get-started">Get started&lt;/h3>&lt;ol>
&lt;li>Go to your existing Snowflake batch destination in the RudderStack dashboard.&lt;/li>
&lt;li>Look for the &lt;strong>Migrate to Snowflake Streaming&lt;/strong> banner.&lt;/li>
&lt;li>Click &lt;strong>Proceed&lt;/strong> to initiate the assisted migration process.&lt;/li>
&lt;/ol>
&lt;p>Follow the guided steps to verify your new Snowflake Streaming destination and complete the migration. If needed, reference the provided timestamps to deduplicate records in your target tables.&lt;/p>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/migration-guide/" >Snowflake Streaming Migration Guide&lt;/a> for more information on manual migration options and deduplication queries.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/snowflake-streaming-assisted-migration/" data-title="Snowflake Streaming Assisted Migration Feature" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/snowflake-streaming-migration/migration-banner.webp" href="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming-migration/migration-banner.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming-migration/migration-banner.webp"
alt="Proceed button in migration banner"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Conditional Validation Support in Rudder CLI</title><link>https://www.rudderstack.com/docs/releases/condtional-validation/</link><pubDate>Wed, 01 Oct 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/condtional-validation/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/bwxpUz9Q4r8" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br/>&lt;/p>
&lt;p>RudderStack&amp;rsquo;s &lt;a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/" >Tracking Plans&lt;/a> enable data teams to apply type-safe governance to event schemas. While our governance features ensure consistency and predictability, real-world applications often require schemas to adapt based on business context.&lt;/p>
&lt;p>With the release of &lt;a href="https://www.rudderstack.com/docs/data-governance/cli-based-tracking-plan-management/conditional-validation/" >Conditional Validation&lt;/a>, you can now define validation rules that dynamically adjust based on discriminator properties. This powerful capability addresses a common challenge — maintaining strict data quality standards while accommodating legitimate variations in your event data structure.&lt;/p>
&lt;p>With conditional validation, you can:&lt;/p>
&lt;ul>
&lt;li>Define context-aware validation rules that adapt based on specific property values&lt;/li>
&lt;li>Prevent event proliferation by consolidating similar events with varied requirements&lt;/li>
&lt;li>Enforce granular validation on custom types that need to behave differently in different scenarios&lt;/li>
&lt;li>Maintain data quality without sacrificing flexibility for legitimate business variations&lt;/li>
&lt;/ul>
&lt;p>You can leverage conditional validation both on the event schema level and within custom types, and manage everything via &lt;a href="https://www.rudderstack.com/docs/data-governance/cli-based-tracking-plan-management/" >workspace configuration files&lt;/a> using &lt;a href="https://www.rudderstack.com/docs/dev-tools/rudder-cli/" >Rudder CLI&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="use-cases" data-heading="Use cases" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/condtional-validation/" data-title="Conditional Validation Support in Rudder CLI" -->
&lt;h2 id="use-cases">Use cases&lt;/h2>&lt;p>This section provides some examples of using the conditional validation feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="event-level-conditional-validation" data-heading="Event-level conditional validation" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/condtional-validation/" data-title="Conditional Validation Support in Rudder CLI" -->
&lt;h3 id="event-level-conditional-validation">Event-level conditional validation&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Adaptive page tracking&lt;/strong>: Single &lt;code>Page Viewed&lt;/code> event with different required properties based on page type — for example, search term for search pages, product details for product pages, checkout step for checkout pages&lt;/li>
&lt;li>&lt;strong>Context-aware form submissions&lt;/strong>: Different required fields based on form type or user journey stage&lt;/li>
&lt;li>&lt;strong>Dynamic feature usage tracking&lt;/strong>: Varying property requirements based on feature context or user role&lt;/li>
&lt;/ul>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/data-governance/cli-based-tracking-plan-management/conditional-validation/event-rule/" >Event Rule Variants&lt;/a> for more details on creating and managing event rule variants in your Tracking Plans using Rudder CLI.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="custom-type-conditional-validation" data-heading="Custom type conditional validation" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/condtional-validation/" data-title="Conditional Validation Support in Rudder CLI" -->
&lt;h3 id="custom-type-conditional-validation">Custom type conditional validation&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Regional address formats&lt;/strong>: Different required fields for US addresses (state + ZIP) vs. UK addresses (postcode) vs. Japanese addresses (prefecture + district)&lt;/li>
&lt;li>&lt;strong>Manufacturer vs. marketplace products&lt;/strong>: Require MSRP and Manufacturer ID for direct products, and require Seller ID for marketplace items&lt;/li>
&lt;li>&lt;strong>Account tier-specific profiles&lt;/strong>: Different required profile fields for individual vs. business vs. enterprise accounts&lt;/li>
&lt;/ul>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/data-governance/cli-based-tracking-plan-management/conditional-validation/custom-types/" >Custom Type Variants&lt;/a> for more details on creating and managing custom type variants using Rudder CLI.&lt;/p>
&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/releases/condtional-validation/" data-title="Conditional Validation Support in Rudder CLI" -->
&lt;h2 id="how-it-works">How it works&lt;/h2>&lt;p>Conditional validation uses discriminator properties to determine which validation rules apply. A discriminator is a required property whose value triggers specific validation cases.&lt;/p>
&lt;p>For example, in an ecommerce tracking scenario:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Discriminator property&lt;/strong>: &lt;code>page_type&lt;/code> (enumerated list defined in Data Catalog)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Variant cases&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>When &lt;code>page_type&lt;/code> = &lt;code>search_page&lt;/code>: Require the &lt;code>search_term&lt;/code> property&lt;/li>
&lt;li>When &lt;code>page_type&lt;/code> = &lt;code>product&lt;/code>: Require the &lt;code>product&lt;/code> object property&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Result&lt;/strong>: Same event handles both scenarios with appropriate validation.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="implementation" data-heading="Implementation" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/condtional-validation/" data-title="Conditional Validation Support in Rudder CLI" -->
&lt;h2 id="implementation">Implementation&lt;/h2>&lt;p>Conditional validation works at two levels:&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="event-rule-variants" data-heading="Event rule variants" data-level="4" data-permalink="https://www.rudderstack.com/docs/releases/condtional-validation/" data-title="Conditional Validation Support in Rudder CLI" -->
&lt;h4 id="event-rule-variants">Event rule variants&lt;/h4>&lt;p>Define variants within your &lt;code>tracking-plans.yaml&lt;/code> to create context-aware event validation:&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;tp&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_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">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;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">display_name&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Ecommerce Store - 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;Comprehensive tracking plan for the casual apparel e-commerce demo site built with React TypeScript. Captures user behavior across product discovery, cart interactions, and purchase completion for analytics and optimization.&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="s2">&amp;#34;event_rule&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;page_viewed_rule&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&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/ecommerce_events/page_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="c"># Base properties required for all page views&lt;/span>&lt;span class="w">
&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/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/ecommerce_properties/page_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">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/ecommerce_properties/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">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="c"># Conditional Validation Variants&lt;/span>&lt;span class="w">
&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/ecommerce_properties/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;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="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 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">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&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;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="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/ecommerce_properties/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="c"># Default case for home and other pages (only page_url 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">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/ecommerce_properties/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="l">%&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-type-variants" data-heading="Custom type variants" data-level="4" data-permalink="https://www.rudderstack.com/docs/releases/condtional-validation/" data-title="Conditional Validation Support in Rudder CLI" -->
&lt;h4 id="custom-type-variants">Custom type variants&lt;/h4>&lt;p>Define variants within your &lt;code>custom-types.yaml&lt;/code> to create reusable, context-aware object 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="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;custom-types&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_types&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">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="c"># Product Type - Consolidates all product-related properties with conditional MSRP validation&lt;/span>&lt;span class="w">
&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_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;Product_Object&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 information with conditional manufacturer pricing 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="s2">&amp;#34;object&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/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_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/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_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 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/manufacturer_pricing&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="c"># Conditional Validation Variants for Product 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">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/ecommerce_properties/manufacturer_pricing&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;Product with Manufacturer Pricing&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="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">description&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;Products that have manufacturer suggested retail price (MSRP)&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/ecommerce_properties/product_msrp&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;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="deploy-the-changes-to-your-workspace" data-heading="Deploy the changes to your workspace" data-level="4" data-permalink="https://www.rudderstack.com/docs/releases/condtional-validation/" data-title="Conditional Validation Support in Rudder CLI" -->
&lt;h4 id="deploy-the-changes-to-your-workspace">Deploy the changes to your workspace&lt;/h4>&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 ~/path_to_tracking_plan_dir
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/data-governance/cli-based-tracking-plan-management/conditional-validation/" >Conditional Validation&lt;/a> documentation for more details.&lt;/p>
&lt;br /></description></item><item><title>Releases: Custom Types Support in Rudder CLI</title><link>https://www.rudderstack.com/docs/releases/custom-types-in-rudder-cli/</link><pubDate>Thu, 17 Jul 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/custom-types-in-rudder-cli/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/zrSLXb7r7-I" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>Building on our recent &lt;a href="https://www.rudderstack.com/docs/releases/custom-types/" >Custom Types&lt;/a> release, you can now define Custom Types directly in your workspace configuration files and deploy them using &lt;a href="https://www.rudderstack.com/docs/dev-tools/rudder-cli/" >Rudder CLI&lt;/a>. This enhancement brings Custom Types into your existing infrastructure-as-code workflows, enabling you to version control and programmatically manage complex data validation rules.&lt;/p>
&lt;p>With workspace config and CLI support, you can now:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Define Custom Types as code&lt;/strong>: Create a &lt;code>custom-types.yaml&lt;/code> file alongside your existing Tracking Plan configurations, enabling version control and collaborative development of data governance rules.&lt;/li>
&lt;li>&lt;strong>Reference Custom Types in properties&lt;/strong>: Use Custom Types as property types in your &lt;code>properties.yaml&lt;/code> files, eliminating the need to redefine complex validation logic across multiple properties.&lt;/li>
&lt;li>&lt;strong>Deploy via CLI&lt;/strong>: Use the &lt;code>rudderstack tp apply&lt;/code> command to push Custom Types and their associated properties to your workspace, integrating seamlessly with your existing deployment workflows.&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">
This release complements the existing &lt;a href="https://www.rudderstack.com/docs/api/data-catalog-api/" >Data Catalog API&lt;/a> and &lt;a href="https://www.rudderstack.com/docs/data-governance/cli-based-tracking-plan-management/" >Git-Based Data Catalog and Tracking Plan Management&lt;/a>, giving development teams full flexibility in how they manage data governance across their organization.
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="get-started" data-heading="Get started" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/custom-types-in-rudder-cli/" data-title="Custom Types Support in Rudder CLI" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;ol>
&lt;li>&lt;strong>Create a workspace config file&lt;/strong>: Add &lt;code>custom-types.yaml&lt;/code> to your Tracking Plan directory alongside your existing configuration files.&lt;/li>
&lt;li>&lt;strong>Define your Custom Types&lt;/strong>: Define your custom type rules.&lt;/li>
&lt;li>&lt;strong>Reference your Custom Types&lt;/strong>: In your &lt;code>properties.yaml&lt;/code> file, you can define a property that references your previously defined custom types.&lt;/li>
&lt;li>&lt;strong>Validate and Deploy with CLI&lt;/strong>: Use the &lt;a href="https://www.rudderstack.com/docs/dev-tools/rudder-cli/" >Rudder CLI&lt;/a> tool to validate the YAML configurations and apply changes to your workspace.&lt;/li>
&lt;/ol>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/data-governance/cli-based-tracking-plan-management/data-catalog/custom-types/" >Use Custom Data Types in Rudder CLI&lt;/a> guide for more details on creating and managing custom types using Rudder CLI.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="sample-snippets" data-heading="Sample snippets" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/custom-types-in-rudder-cli/" data-title="Custom Types Support in Rudder CLI" -->
&lt;h2 id="sample-snippets">Sample snippets&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Defining custom types in workspace configuration files&lt;/strong>&lt;/li>
&lt;/ul>
&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;custom-types&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_types&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">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="c"># Product Type - Consolidates all product-related 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">id&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="l">Product_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;Product_Object&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 information including ID, SKU, name, category, pricing&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;object&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/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_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/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_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 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_msrp&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;ul>
&lt;li>&lt;strong>Reference custom types within a property configuration&lt;/strong>&lt;/li>
&lt;/ul>
&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;properties&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_properties&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">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="c"># Product Custom Type 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">id&lt;/span>&lt;span class="p">:&lt;/span>&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="nt">name&lt;/span>&lt;span class="p">:&lt;/span>&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="nt">type&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="w"> &lt;/span>&lt;span class="s2">&amp;#34;#/custom-types/ecommerce_types/Product_Object&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 information object containing all product details&amp;#34;&lt;/span>&lt;span class="w">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>&lt;strong>Deploy the changes to your workspace&lt;/strong>&lt;/li>
&lt;/ul>
&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
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>Releases: Snowflake Streaming Destination</title><link>https://www.rudderstack.com/docs/releases/snowflake-streaming/</link><pubDate>Wed, 18 Jun 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/snowflake-streaming/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/XO5mS_TApzk" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>We are excited to announce our new &lt;strong>Snowflake Streaming&lt;/strong> destination. This integration enables real-time data streaming into Snowflake using the Snowpipe Streaming API.&lt;/p>
&lt;p>Integration highlights:&lt;/p>
&lt;ul>
&lt;li>Snowflake Streaming is &lt;strong>ideal for continuous data streaming&lt;/strong> like clickstream data or event logs, supporting use cases like real-time dashboards, streaming analytics, and real-time A/B testing analysis.&lt;/li>
&lt;li>Loading data through Snowflake Streaming &lt;strong>reduces compute time&lt;/strong>, optimizing warehouse costs while ensuring faster insights&lt;/li>
&lt;li>For main use cases, Snowflake Streaming empowers businesses to act on customer data quickly, driving competitive advantages through timely, data-driven decisions&lt;/li>
&lt;/ul>
&lt;p>See our docs for more information on &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/#when-to-use-snowflake-streaming" >when to use Snowflake Streaming&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="setup-guide" data-heading="Setup guide" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/snowflake-streaming/" data-title="Snowflake Streaming Destination" -->
&lt;h2 id="setup-guide">Setup guide&lt;/h2>&lt;p>To set up the &lt;strong>Snowflake Streaming&lt;/strong> destination, follow these steps:&lt;/p>
&lt;ol>
&lt;li>In the RudderStack &lt;strong>Connections&lt;/strong> page, click &lt;strong>Add Destination&lt;/strong>&lt;/li>
&lt;li>Search for &lt;strong>Snowflake Streaming&lt;/strong> and select it.&lt;/li>
&lt;li>Name the new destination and select your sources.&lt;/li>
&lt;li>Input the destination configurations and credentials.&lt;/li>
&lt;li>Click &lt;strong>Continue&lt;/strong> to finalize the destination.&lt;/li>
&lt;/ol>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/snowflake-streaming/" >Snowflake Streaming Destination docs&lt;/a> for more information on setting up and using this integration.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/snowflake-streaming/" data-title="Snowflake Streaming Destination" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Add Snowflake Streaming destination&lt;/strong>&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/snowflake-streaming/snowflake-streaming-setup-1.webp" href="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming/snowflake-streaming-setup-1.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming/snowflake-streaming-setup-1.webp"
alt="Add Snowflake Streaming Destination"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>&lt;strong>Input destination configurations and credentials&lt;/strong>&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/snowflake-streaming/snowflake-streaming-setup-2.webp" href="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming/snowflake-streaming-setup-2.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming/snowflake-streaming-setup-2.webp"
alt="Input Destination Configurations and Credentials"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>&lt;strong>Configure advanced settings for the destination&lt;/strong>&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/snowflake-streaming/snowflake-streaming-setup-3.webp" href="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming/snowflake-streaming-setup-3.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/snowflake-streaming/snowflake-streaming-setup-3.webp"
alt="Configure advanced settings for the destination"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Cursor Column Support for Reverse ETL Syncs</title><link>https://www.rudderstack.com/docs/releases/cursor-column-support/</link><pubDate>Thu, 15 May 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/cursor-column-support/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/ioSNY5QhLqo" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>Previously, RudderStack’s Reverse ETL &lt;a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-modes/#upsert-mode" >Upsert mode&lt;/a> was diff-based, meaning it compared every column and row to detect changes from your source table in order to determine what records needed to synced. This led to longer sync times and higher warehouse costs, particularly for large tables.&lt;/p>
&lt;p>With &lt;strong>Cursor Column support&lt;/strong>, you can leverage a timestamp value checkpoint for the diff. This optimizes Reverse ETL syncs by allowing you to specify a comparable timestamp column (for example, &lt;code>updated_at&lt;/code>) to track incremental changes in Upsert mode. RudderStack will then query only records with a cursor value greater than the last checkpoint, avoiding resource-intensive, full-table comparisons.&lt;/p>
&lt;p>By reducing the computational load of warehouse queries, this feature lowers operational costs and speeds up syncs, especially for large datasets.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="setup-guide" data-heading="Setup guide" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/cursor-column-support/" data-title="Cursor Column Support for Reverse ETL Syncs" -->
&lt;h2 id="setup-guide">Setup guide&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">RudderStack does not support migrating existing Reverse ETL connections from upsert mode to cursor mode. You must create a new Reverse ETL connection to use the cursor column feature.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;ol>
&lt;li>Create a new destination connected to a warehouse table or SQL model as a source.&lt;/li>
&lt;li>After adding the destination credentials and mappings, choose Upsert as your sync mode.&lt;/li>
&lt;li>Turn on the &lt;strong>Cursor Column&lt;/strong> toggle.&lt;/li>
&lt;li>Choose the timestamp column you want to use as the cursor column.&lt;/li>
&lt;li>Initiate your first sync.&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">&lt;p>RudderStack will perform a &lt;strong>full sync on the first run&lt;/strong>.&lt;/p>
&lt;p>After the first run, RudderStack will use the cursor column to identify any new or updated records that arrive in the source table and sync those records on any subsequent sync jobs.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/cursor-column-support/" >Cursor Column Support docs&lt;/a> for more information on this feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/cursor-column-support/" data-title="Cursor Column Support for Reverse ETL Syncs" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/cursor-col-images/upsert-and-enable-cursor-8.png" href="https://www.rudderstack.com/docs/docs/images/releases/cursor-col-images/upsert-and-enable-cursor-8.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/cursor-col-images/upsert-and-enable-cursor-8.png"
alt="Enable the Cursor Column"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/cursor-col-images/choose-cursor-column-9.png" href="https://www.rudderstack.com/docs/docs/images/releases/cursor-col-images/choose-cursor-column-9.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/cursor-col-images/choose-cursor-column-9.png"
alt="Input Destination Configurations and Mappings"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Full Sync Mode Support</title><link>https://www.rudderstack.com/docs/releases/full-sync-mode/</link><pubDate>Wed, 14 May 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/full-sync-mode/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/1goYcKo0TrY" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>We’re excited to announce &lt;strong>Full Sync mode&lt;/strong>—a new Reverse ETL sync mode that gives you more control over how data flows from your warehouse to various business tools.&lt;/p>
&lt;p>Similar to &lt;a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-modes/#upsert-mode" >Upsert&lt;/a> and &lt;a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-modes/#mirror-mode" >Mirror&lt;/a> modes, &lt;a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-modes/#full-sync-mode" >Full Sync mode&lt;/a> is configured at the connection level. It ensures that &lt;strong>the entire dataset is sent on every sync&lt;/strong>—this is ideal for teams that already handle change detection or diffs inside the warehouse.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-details" data-heading="Key details" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/full-sync-mode/" data-title="Full Sync Mode Support" -->
&lt;h2 id="key-details">Key details&lt;/h2>&lt;ul>
&lt;li>Full Sync mode is configured when creating a Reverse ETL connection.&lt;/li>
&lt;li>RudderStack will send the full model result set on each sync, overwriting or resending all records based on the destination’s behavior.&lt;/li>
&lt;/ul>
&lt;p>This mode offers maximum flexibility for advanced teams that prefer to own the sync logic in their warehouse, while still benefiting from RudderStack’s destination coverage and scheduling infrastructure.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="when-to-use-full-sync-mode" data-heading="When to use Full Sync mode" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/full-sync-mode/" data-title="Full Sync Mode Support" -->
&lt;h2 id="when-to-use-full-sync-mode">When to use Full Sync mode&lt;/h2>&lt;ul>
&lt;li>&lt;strong>Warehouse-managed diffs&lt;/strong>: If you&amp;rsquo;re using tools like &lt;strong>dbt&lt;/strong> or scheduled jobs to determine which records to send, &lt;strong>Full Sync mode&lt;/strong> lets you send that curated dataset downstream, exactly as it appears in your warehouse.&lt;/li>
&lt;li>&lt;strong>Destinations with limited support for updates&lt;/strong>: Some tools or custom endpoints do not handle upserts or partial updates well. Full Sync mode guarantees that the complete table is refreshed every time, reducing downstream inconsistencies.&lt;/li>
&lt;/ul>
&lt;p>Learn more about the Full Sync mode in our &lt;a href="https://www.rudderstack.com/docs/data-pipelines/reverse-etl/developer-guides/sync-modes/#full-sync-mode" >docs&lt;/a>&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/full-sync-mode/" data-title="Full Sync Mode Support" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/full-sync-mode-release/full-sync-mode-dropdown.png" href="https://www.rudderstack.com/docs/docs/images/releases/full-sync-mode-release/full-sync-mode-dropdown.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/full-sync-mode-release/full-sync-mode-dropdown.png"
alt="Full Sync Mode option"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Tracking Plan Code Generation</title><link>https://www.rudderstack.com/docs/releases/tracking-plan-codegen/</link><pubDate>Tue, 06 May 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/tracking-plan-codegen/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/znWUpVa5ab8" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>Event data quality has never been more important, but even for teams that run tight processes, details can get lost in translation. Between the creation of an event schema definition and the instrumentation of the API call to fire the event from the codebase of the website or app, simple mistakes can create big problems downstream.&lt;/p>
&lt;p>RudderStack&amp;rsquo;s new &lt;strong>Code Generation (Codegen)&lt;/strong> feature automatically creates clear code snippets that software engineers can use in their instrumentation. The code snippets ensure property and trait keys are accurate, provide samples for selected data types, and clearly denote whether the key is optional.&lt;/p>
&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>The Codegen feature is in &lt;strong>Public Beta&lt;/strong> as part of RudderStack&amp;rsquo;s &lt;a href="https://www.rudderstack.com/docs/get-started/alpha-and-beta-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>&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;p>As part of this release, we&amp;rsquo;ve made significant updates to the UI for our schema view and have completely overhauled the schema editing experience, which significantly simplifies schema buildout and updates.&lt;/p>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/codegen/" >Tracking Plan Codegen docs&lt;/a> for more information.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/tracking-plan-codegen/" data-title="Tracking Plan Code Generation" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/tracking-plans-codegen/codegen-ui.png" href="https://www.rudderstack.com/docs/docs/images/releases/tracking-plans-codegen/codegen-ui.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/tracking-plans-codegen/codegen-ui.png"
alt="Tracking Plans Codegen"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/tracking-plans-codegen/schema-edit-ui.png" href="https://www.rudderstack.com/docs/docs/images/releases/tracking-plans-codegen/schema-edit-ui.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/tracking-plans-codegen/schema-edit-ui.png"
alt="Tracking Plan schema editing"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/tracking-plans-codegen/schema-edit-ui-select.png" href="https://www.rudderstack.com/docs/docs/images/releases/tracking-plans-codegen/schema-edit-ui-select.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/tracking-plans-codegen/schema-edit-ui-select.png"
alt="Tracking Plan schema editing property selection"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/tracking-plans-codegen/schema-ui-search.png" href="https://www.rudderstack.com/docs/docs/images/releases/tracking-plans-codegen/schema-ui-search.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/tracking-plans-codegen/schema-ui-search.png"
alt="Tracking Plan schema editing property search"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Loops Destination</title><link>https://www.rudderstack.com/docs/releases/loops/</link><pubDate>Fri, 25 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/loops/</guid><description>
&lt;p>Today, we launched &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/loops/" >Loops&lt;/a> as a cloud mode destination. Now you can seamlessly send your events from RudderStack to Loops for effective email marketing.&lt;/p>
&lt;p>&lt;a href="https://loops.so" >Loops&lt;/a> is a popular email platform for SaaS companies for sending marketing and transactional emails from the same platform.&lt;/p>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/loops/" >Loops&lt;/a> destination documentation for more information on setting up and using this integration.&lt;/p></description></item><item><title>Releases: Userpilot Destination</title><link>https://www.rudderstack.com/docs/releases/userpilot/</link><pubDate>Wed, 23 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/userpilot/</guid><description>
&lt;p>Today, we launched &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/userpilot/" >Userpilot&lt;/a> as a destination. Now you can seamlessly send your events from RudderStack to Userpilot for effective user onboarding and engagement.&lt;/p>
&lt;p>&lt;a href="https://userpilot.com/" >Userpilot&lt;/a> is a no-code product experience platform that helps you enhance the user onboarding experience. It allows you to drive user activation, boost feature adoption, and improve user retention through personalized in-app experiences.&lt;/p>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/userpilot/" >Userpilot&lt;/a> destination documentation for more information on setting up and using this integration.&lt;/p></description></item><item><title>Releases: Enhanced Shopify Source Solution</title><link>https://www.rudderstack.com/docs/releases/shopify-source/</link><pubDate>Tue, 08 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/shopify-source/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/wAHu5tjCHrs" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>Every Shopify store is different, and we are excited to deliver a solution that reflects that. RudderStack&amp;rsquo;s new &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/" >Shopify Source Solution&lt;/a> offers two powerful tools:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>RudderStack Shopify Pixel App&lt;/strong>: Downloadable from the Shopify Marketplace and offers fast, automatic tracking.&lt;/li>
&lt;li>&lt;strong>RudderStack Custom Pixel&lt;/strong>: A code option hosted on our GitHub that allows the RudderStack JavaScript SDK to be loaded onto your store. It also supports customizations to the event tracking for precision control.&lt;/li>
&lt;/ol>
&lt;p>Together, these tools provide three tracking methods:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>App Pixel&lt;/strong> for browser-based ease&lt;/li>
&lt;li>&lt;strong>Webhooks&lt;/strong> for reliable server-side data&lt;/li>
&lt;li>&lt;strong>Custom Pixel&lt;/strong> for tailored flexibility&lt;/li>
&lt;/ul>
&lt;p>Whether your store is fully Shopify-hosted or a hybrid with a self-hosted pre-checkout, you can mix and match these approaches to fit your needs. Ultimately, the Shopify Source Solution empowers you to harness your customer data with ease, delivering it to RudderStack instantly for analytics, marketing, or beyond - freeing you up to focus on growth with confidence.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-this-new-shopify-source-compares-with-other-tools-in-the-industry" data-heading="How this new Shopify source compares with other tools in the industry" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/shopify-source/" data-title="Enhanced Shopify Source Solution" -->
&lt;h3 id="how-this-new-shopify-source-compares-with-other-tools-in-the-industry">How this new Shopify source compares with other tools in the industry&lt;/h3>&lt;p>Shopify event tracking is often a one-size-fits-all struggle as it lacks best practice Shopify event tracking and misses the adaptability modern stores need.&lt;/p>
&lt;p>RudderStack’s comprehensive Shopify Source Solution is designed to support five different Shopify &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/scenarios/" >store setup scenarios&lt;/a> and consists of the &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/products/" >two powerful tools&lt;/a> and &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/event-tracking/" >three different event tracking methods&lt;/a> as mentioned above.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-it-works" data-heading="How it works" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/shopify-source/" data-title="Enhanced Shopify Source Solution" -->
&lt;h3 id="how-it-works">How it works&lt;/h3>&lt;p>Install the App Pixel, insert the code into a Custom Pixel, or do both. Your data will begin to flow instantly - enriched and ready for action.&lt;/p>
&lt;p>Here’s how to set up the Shopify Source Solution in a few simple steps:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Choose your tool&lt;/strong>: Install the RudderStack Shopify Pixel App directly from the Shopify Marketplace for quick setup, or grab the RudderStack Custom Pixel code from our GitHub to add into Shopify’s Customer Events settings.&lt;/li>
&lt;li>&lt;strong>Pick your tracking method&lt;/strong>: With the App Pixel, enable Shopify’s automatic browser tracking, Webhooks for server-side reliability, or both. For the custom pixel, paste the code into the custom pixel and make any adjustments as needed.&lt;/li>
&lt;li>&lt;strong>Connect to RudderStack&lt;/strong>: Ensure that you configured the data plane URL and the Shopify source write key correctly so that it points to the RudderStack Shopify source.&lt;/li>
&lt;li>&lt;strong>Test and activate&lt;/strong>: Preview your tracking in RudderStack’s &lt;a href="https://www.rudderstack.com/docs/dashboard-guides/live-events/" >Live Events&lt;/a>, tweak as needed, and go live to start routing data to 200+ destinations.&lt;/li>
&lt;/ol>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/shopify/shopify-source-solution/" >Shopify Source Solution&lt;/a> documentation for the detailed implementation steps.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/shopify-source/" data-title="Enhanced Shopify Source Solution" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>&lt;p>&lt;strong>Shopify source setup in RudderStack dashboard&lt;/strong>&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/shopify-solution/webapp-setup-shopify-sources.webp" href="https://www.rudderstack.com/docs/docs/images/releases/shopify-solution/webapp-setup-shopify-sources.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/shopify-solution/webapp-setup-shopify-sources.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;p>&lt;strong>RudderStack App Pixel setup in Shopify&lt;/strong>&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/shopify-solution/rudderstack-pixel-app-settings.webp" href="https://www.rudderstack.com/docs/docs/images/releases/shopify-solution/rudderstack-pixel-app-settings.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/shopify-solution/rudderstack-pixel-app-settings.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;p>&lt;strong>RudderStack Custom Pixel setup in Shopify&lt;/strong>&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/shopify-solution/rudderstack-custom-pixel-setup.webp" href="https://www.rudderstack.com/docs/docs/images/releases/shopify-solution/rudderstack-custom-pixel-setup.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/shopify-solution/rudderstack-custom-pixel-setup.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Capture Incoming Request Details in Webhook Source Events</title><link>https://www.rudderstack.com/docs/releases/webhook-source-request-details/</link><pubDate>Mon, 07 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/webhook-source-request-details/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/y8kn_tWqyYw" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>We have released an enhancement to our &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/webhook-source/" >Webhook source&lt;/a> that introduces a new dashboard setting - &lt;strong>Send Source Request Details in Events Context&lt;/strong>.&lt;/p>
&lt;p>When you enable this toggle, RudderStack automatically captures and includes details of the incoming HTTP request like headers, query parameters, request method, etc., in the &lt;code>context&lt;/code> object of each event.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="feature-overview" data-heading="Feature overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/webhook-source-request-details/" data-title="Capture Incoming Request Details in Webhook Source Events" -->
&lt;h2 id="feature-overview">Feature overview&lt;/h2>&lt;ul>
&lt;li>
&lt;p>Toggle on the &lt;strong>Send Source Request Details in Events Context&lt;/strong> setting for your Webhook source:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>For new sources&lt;/strong>: Turn on the setting while setting up your source in the RudderStack dashboard.&lt;/li>
&lt;li>&lt;strong>For existing sources&lt;/strong>: Navigate to your webhook source and go to the &lt;strong>Configuration&lt;/strong> tab. Then, turn on the toggle.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>All incoming requests will now automatically populate the &lt;code>context&lt;/code> object with fields that include &lt;code>headers&lt;/code>, &lt;code>query_parameters&lt;/code>, &lt;code>method&lt;/code>, etc. in every event.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>You can then write a &lt;a href="https://www.rudderstack.com/docs/transformations/" >transformation&lt;/a> to use these values as per your requirement before converting the event into a destination-specific format.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>For more information on how to use this feature, see our &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/webhook-source/" >Webhook source documentation&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/webhook-source-request-details/" data-title="Capture Incoming Request Details in Webhook Source Events" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/webhook-source-request-details/configuration.webp" href="https://www.rudderstack.com/docs/docs/images/releases/webhook-source-request-details/configuration.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/webhook-source-request-details/configuration.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/webhook-source-request-details/payload-sample.webp" href="https://www.rudderstack.com/docs/docs/images/releases/webhook-source-request-details/payload-sample.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/webhook-source-request-details/payload-sample.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: CLI-based Data Governance</title><link>https://www.rudderstack.com/docs/releases/git-based-data-governance/</link><pubDate>Wed, 02 Apr 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/git-based-data-governance/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/k1Un9Uy8FLU" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>We are excited to announce CLI-based data governance workflows in RudderStack. Our new CLI utility and other features make it easy to manage your &lt;a href="https://www.rudderstack.com/docs/data-governance/data-catalog/" >data catalog&lt;/a> and &lt;a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/" >tracking plans&lt;/a> as code.&lt;/p>
&lt;p>With CLI-based data governance, you can bring the same rigor and process to your data governance workflows that you apply to other development workflows, giving you more control, increased visibility, and ultimately better data quality.&lt;/p>
&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. &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;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="key-features" data-heading="Key features" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/git-based-data-governance/" data-title="CLI-based Data Governance" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;p>Some key features of CLI-based tracking plans management include:&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/releases/git-based-data-governance/" data-title="CLI-based Data Governance" -->
&lt;h3 id="declarative-yaml-configuration">Declarative YAML configuration&lt;/h3>&lt;ul>
&lt;li>Define your events, including their names and descriptions, in YAML format.&lt;/li>
&lt;li>Create reusable properties with advanced validation rules like min/max length, patterns (through regular expressions), and enums.&lt;/li>
&lt;li>Define tracking plan rules by associating events with required properties using a structured reference system.&lt;/li>
&lt;li>Reuse property definitions across multiple events with a standardized path reference system.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="powerful-cli-tool" data-heading="Powerful CLI tool" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/git-based-data-governance/" data-title="CLI-based Data Governance" -->
&lt;h3 id="powerful-cli-tool">Powerful CLI tool&lt;/h3>&lt;p>The new workflow comes with a powerful &lt;a href="https://www.rudderstack.com/docs/dev-tools/rudder-cli/" >Rudder CLI tool&lt;/a> that lets you:&lt;/p>
&lt;ul>
&lt;li>Create, update, and delete data catalog and tracking plan resources via command line.&lt;/li>
&lt;li>Verify your YAML configurations before pushing changes.&lt;/li>
&lt;li>Sync changes in your local files or GitHub repo to RudderStack.&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 CLI utility currently only supports &lt;em>pushing&lt;/em> to RudderStack, so we recommend starting with a clean workspace (pulling existing assets from the UI is in the works!). Reach out to our team if you would like us to create a dedicated workspace for testing. &lt;a href="https://www.rudderstack.com/docs/data-governance/cli-based-tracking-plan-management/#limitations" >See our list of limitations&lt;/a> to learn more about current differences between the CLI and UI.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="git-integration--cicd-support" data-heading="Git Integration &amp;amp; CI/CD support" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/git-based-data-governance/" data-title="CLI-based Data Governance" -->
&lt;h3 id="git-integration--cicd-support">Git Integration &amp;amp; CI/CD support&lt;/h3>&lt;ul>
&lt;li>Leverage GitHub Actions to automatically validate and deploy tracking plans from your repository.&lt;/li>
&lt;li>Implement version control by tracking changes, managing branches, and reviewing modifications through standard Git workflows.&lt;/li>
&lt;li>Review any tracking plan changes before they reach production.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="use-cases" data-heading="Use Cases" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/git-based-data-governance/" data-title="CLI-based Data Governance" -->
&lt;h2 id="use-cases">Use Cases&lt;/h2>&lt;p>This feature is particularly valuable for teams who:&lt;/p>
&lt;ul>
&lt;li>Manage large tracking plans with hundreds of events and properties.&lt;/li>
&lt;li>Need better integration with existing development workflows.&lt;/li>
&lt;li>Want to maintain consistent tracking standards across multiple applications.&lt;/li>
&lt;li>Require version control and review processes for data governance.&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/releases/git-based-data-governance/" data-title="CLI-based Data Governance" -->
&lt;h2 id="get-started">Get started&lt;/h2>
&lt;ol>
&lt;li>&lt;a href="https://www.rudderstack.com/docs/dev-tools/rudder-cli/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/data-governance/cli-based-tracking-plan-management/tracking-plans/" >Initialize a new Tracking Plan project&lt;/a> with &lt;a href="https://www.rudderstack.com/docs/data-governance/cli-based-tracking-plan-management/project-yaml-reference/" >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/data-governance/cli-based-tracking-plan-management/github-actions/" >GitHub Actions&lt;/a>.&lt;/li>
&lt;/ol>
&lt;br /></description></item><item><title>Releases: Event Stream Destination Latency Metrics</title><link>https://www.rudderstack.com/docs/releases/event-stream-destination-latency/</link><pubDate>Thu, 27 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/event-stream-destination-latency/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/k3D4qiRFKWg" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>For data teams, managing stakeholder expectations is critical - they want to see the right data arrive on time.&lt;/p>
&lt;p>For data engineers running RudderStack, a variety of factors can impact how quickly data is delivered to destinations. Some variables, like complexity of &lt;a href="https://www.rudderstack.com/docs/transformations/" >Transformations&lt;/a> attached to a destination, are within your control. In many cases, though, latency can increase due to external factors like sudden traffic spikes or degraded performance of a destination API.&lt;/p>
&lt;p>Previously, it was difficult for data engineers to troubleshoot data delays for specific destinations.&lt;/p>
&lt;p>Now, RudderStack &lt;a href="https://www.rudderstack.com/docs/dashboard-guides/user-management/#organization-roles" >Org Admins&lt;/a> can see granular latency metrics for every cloud destination, giving them visibility into delivery latency and equipping them to better manage stakeholder expectations.&lt;/p>
&lt;p>These metrics include:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>P95 latency for the selected time window&lt;/strong>: 95% of data is delivered within or faster than this time. For example, if P95 latency for the last two hours is 9 seconds, that means that 95% of events delivered over the last two hours were delivered within 9 seconds or less.&lt;/li>
&lt;li>&lt;strong>Latency trend&lt;/strong>: The latency trend shows P95 latency at intervals over the selected time window. This view is helpful for isolating the timing and impact of increased or decreased latency.&lt;/li>
&lt;/ul>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/dashboard-guides/event-metrics/#p95-latency" >P95 Latency Event Metrics&lt;/a> documentation for more information on this feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/event-stream-destination-latency/" data-title="Event Stream Destination Latency Metrics" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/p95-event-stream-latency.png" href="https://www.rudderstack.com/docs/docs/images/releases/p95-event-stream-latency.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/p95-event-stream-latency.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Warehouse Sync Metrics</title><link>https://www.rudderstack.com/docs/releases/warehouse-sync-latency/</link><pubDate>Wed, 26 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/warehouse-sync-latency/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/GaN7TkaAVdA" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>Loading event data into a data warehouse is one of the most common use cases for data teams running RudderStack. A majority of the time sync jobs run without issues, but factors like significant spikes in volume, corrupted data, and other issues out of the data team&amp;rsquo;s control can make sync jobs run longer than normal. This latency can impact scheduled jobs, reporting, and other use cases for consumers of the data.&lt;/p>
&lt;p>Previously, troubleshooting potential latency problems required manually scrolling through a list of sync jobs. Not only was that time consuming, but there was no way to see trends over time.&lt;/p>
&lt;p>With warehouse sync metrics, you can see max sync duration over multiple time windows (2 hours, 1 day, 7 days, and 30 days), and see the duration of each individual sync job within the selected window.&lt;/p>
&lt;p>With these observability tools, you can more quickly isolate potential problems with data delivery and understand how changes in your data might impact load performance over time.&lt;/p>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/dashboard-guides/event-metrics/#sync-duration" >Event Metrics&lt;/a> documentation for more information on this feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/warehouse-sync-latency/" data-title="Warehouse Sync Metrics" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/warehouse-sync-metrics.png" href="https://www.rudderstack.com/docs/docs/images/releases/warehouse-sync-metrics.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/warehouse-sync-metrics.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: HTTP Webhook Destination</title><link>https://www.rudderstack.com/docs/releases/http-webhook-destination/</link><pubDate>Thu, 13 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/http-webhook-destination/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/iqViKYdUFIY" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>Many teams need to send events to destinations that require a custom integration - whether it’s an internal endpoint, a third-party service RudderStack doesn’t yet support, or a specialized API.&lt;/p>
&lt;p>Earlier, setting up a webhook destination required writing a custom &lt;a href="https://www.rudderstack.com/docs/transformations/overview/" >user transformation&lt;/a>, making it difficult for non-technical users to configure.&lt;/p>
&lt;p>With our new &lt;a href="https://www.rudderstack.com/docs/destinations/http-webhook/" >HTTP Webhook destination&lt;/a>, you can now quickly and easily configure custom destinations without writing a single line of code.&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/releases/http-webhook-destination/" data-title="HTTP Webhook Destination" -->
&lt;h2 id="key-features">Key Features&lt;/h2>&lt;ul>
&lt;li>
&lt;p>&lt;strong>Total control over event payloads&lt;/strong>: Define the format and structure of the request.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Flexible authentication options&lt;/strong>: Choose from various authentication mechanisms.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Batching support&lt;/strong>: Send multiple events in a single request.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Dynamic configurations&lt;/strong>: You can use JSON paths to customize:&lt;/p>
&lt;ul>
&lt;li>Request payload fields by mapping values from incoming RudderStack events&lt;/li>
&lt;li>Dynamic or static URL paths and query parameters&lt;/li>
&lt;li>Dynamic or static custom headers&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>See &lt;a href="#whats-next" >below&lt;/a> for more exciting new features coming soon.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-this-integration-compares-to-the-existing-webhook-destination" data-heading="How this integration compares to the existing webhook destination" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/http-webhook-destination/" data-title="HTTP Webhook Destination" -->
&lt;h2 id="how-this-integration-compares-to-the-existing-webhook-destination">How this integration compares to the existing webhook destination&lt;/h2>&lt;p>RudderStack’s &lt;a href="https://www.rudderstack.com/docs/destinations/webhooks/" >existing webhook destination&lt;/a> provides flexibility but comes with several limitations:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Requires coding&lt;/strong>: You must write a JavaScript or Python &lt;a href="https://www.rudderstack.com/docs/transformations/overview/" >transformation&lt;/a> to structure the request.&lt;/li>
&lt;li>&lt;strong>No built-in dynamic fields&lt;/strong>: Dynamic URLs, headers, and query parameters all require coding.&lt;/li>
&lt;li>&lt;strong>Limited payload formats&lt;/strong>: This integration only supports JSON as the request format.&lt;/li>
&lt;li>&lt;strong>No native batching&lt;/strong>: You must send event to the endpoint individually.&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">
The new &lt;a href="https://www.rudderstack.com/docs/destinations/http-webhook/" >HTTP Webhook destination&lt;/a> removes these barriers, making it much easier for users to send events without much developer involvement.
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="whats-next" data-heading="What’s next?" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/http-webhook-destination/" data-title="HTTP Webhook Destination" -->
&lt;h2 id="whats-next">What’s next?&lt;/h2>&lt;p>This &lt;strong>Beta release&lt;/strong> is just the beginning! We are already working on several enhancements to make the HTTP Webhook destination even more powerful.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="upcoming-features-" data-heading="Upcoming features 🚀" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/http-webhook-destination/" data-title="HTTP Webhook Destination" -->
&lt;h3 id="upcoming-features-">Upcoming features 🚀&lt;/h3>&lt;ul>
&lt;li>&lt;strong>Event previewer&lt;/strong>: See how your events look in real time as you configure the destination.&lt;/li>
&lt;li>&lt;strong>Conditional routing&lt;/strong>: Customize request types, payload formats, and endpoints based on event type (for example, different endpoints for &lt;code>identify&lt;/code> vs. &lt;code>track&lt;/code> events).&lt;/li>
&lt;li>&lt;strong>Custom code support&lt;/strong>: Optionally add JavaScript for more granular control over payload formatting.&lt;/li>
&lt;li>&lt;strong>Enhanced batching&lt;/strong>: Greater flexibility for APIs with strict batching requirements.&lt;/li>
&lt;li>&lt;strong>OAuth Authentication&lt;/strong>: Expanding authentication options beyond the basic headers.&lt;/li>
&lt;li>&lt;strong>Failure Handling&lt;/strong>: Define retry logic and error-handling based on the response status codes.&lt;/li>
&lt;/ul>
&lt;p>We’re excited to continue evolving this product and look forward to your feedback!&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="get-started" data-heading="Get started" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/http-webhook-destination/" data-title="HTTP Webhook Destination" -->
&lt;h2 id="get-started">Get started&lt;/h2>&lt;p>You can set up your first HTTP Webhook destination with just a few simple steps:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Create a new destination&lt;/strong> in RudderStack and select &lt;strong>HTTP Webhook&lt;/strong>.&lt;/li>
&lt;li>&lt;strong>Enter the base destination URL&lt;/strong> where you want to send events (for example, your API endpoint).&lt;/li>
&lt;li>&lt;strong>Choose your request format&lt;/strong> (JSON, XML, or Form) and define how your event payload should be structured.&lt;/li>
&lt;li>&lt;strong>Set authentication&lt;/strong> if required - RudderStack supports various authentication mechanisms like Bearer Tokens, API keys, Basic Auth, etc.&lt;/li>
&lt;li>&lt;strong>Map event fields dynamically&lt;/strong> using JSON paths to configure query parameters, headers, and the request body.&lt;/li>
&lt;li>&lt;strong>Send a test event&lt;/strong> to validate your setup and ensure your events are formatted correctly.&lt;/li>
&lt;/ol>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/destinations/http-webhook/" >HTTP Webhook destination documentation&lt;/a> for detailed steps on setting up and using this integration. You can also watch our demo video &lt;a href="https://www.youtube.com/watch?v=iqViKYdUFIY" >here&lt;/a> for a step-by-step walkthrough and see how easy it is to configure a custom destination in minutes.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/http-webhook-destination/" data-title="HTTP Webhook Destination" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/http-webhook-beta/settings.png" href="https://www.rudderstack.com/docs/docs/images/releases/http-webhook-beta/settings.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/http-webhook-beta/settings.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/http-webhook-beta/request-url.png" href="https://www.rudderstack.com/docs/docs/images/releases/http-webhook-beta/request-url.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/http-webhook-beta/request-url.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/http-webhook-beta/request-body.png" href="https://www.rudderstack.com/docs/docs/images/releases/http-webhook-beta/request-body.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/http-webhook-beta/request-body.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Facebook Lead Ads Source</title><link>https://www.rudderstack.com/docs/releases/facebook-lead-ads-source/</link><pubDate>Wed, 12 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/facebook-lead-ads-source/</guid><description>
&lt;p>Today, we released &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/facebook-lead-ads/" >Facebook Lead Ads&lt;/a> as an Event Stream source. Now your can send all your leads data from Facebook to your entire customer data stack via RudderStack.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-does-this-integration-work" data-heading="How does this integration work?" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/facebook-lead-ads-source/" data-title="Facebook Lead Ads Source" -->
&lt;h3 id="how-does-this-integration-work">How does this integration work?&lt;/h3>&lt;p>Once you &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/facebook-lead-ads/#setup" >set up the Facebook Lead Ads source in RudderStack&lt;/a>, copy the webhook URL. Then, follow the steps in the &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/facebook-lead-ads/#configure-webhook" >Configure webhook&lt;/a> section to set up the integration.&lt;/p>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/cloud-apps/facebook-lead-ads/" >Facebook Lead Ads&lt;/a> documentation for detailed information on setting up and using this source.&lt;/p>
&lt;br /></description></item><item><title>Releases: Destination Event Details</title><link>https://www.rudderstack.com/docs/releases/destination-events-detail/</link><pubDate>Mon, 10 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/destination-events-detail/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/yhuAb8dx7K8" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>Data engineers running RudderStack often get questions from their stakeholders about potential problems with event delivery to a specific destination.&lt;/p>
&lt;p>Previously, the events view on destinations was limited, showing only a basic chart and failure responses by top-level event type.&lt;/p>
&lt;p>Now, you can see a full list of events that RudderStack has attempted to deliver to each destination, including diagnostic data for:&lt;/p>
&lt;ul>
&lt;li>Successful deliveries&lt;/li>
&lt;li>Time of last successful delivery&lt;/li>
&lt;li>Failures&lt;/li>
&lt;li>Time of last failure&lt;/li>
&lt;/ul>
&lt;p>You can also drill into individual events to see granular failure information, including sample payloads.&lt;/p>
&lt;p>Note that table shows post-transformation event names, which ensures you are seeing the exact events that RudderStack is delivering to your destination, even if you have modified the event name or have generated new events in a &lt;a href="https://www.rudderstack.com/docs/transformations/" >user transformation&lt;/a>.&lt;/p>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/dashboard-guides/event-metrics/#event-details-1" >Event Metrics&lt;/a> documentation for more information on this feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/destination-events-detail/" data-title="Destination Event Details" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/destination-event-detail/destination-events-detail.png" href="https://www.rudderstack.com/docs/docs/images/releases/destination-event-detail/destination-events-detail.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/destination-event-detail/destination-events-detail.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Transformation Failure Alerts</title><link>https://www.rudderstack.com/docs/releases/transformations-failure-alerts/</link><pubDate>Fri, 07 Mar 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/transformations-failure-alerts/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/4JtV2YRqAZo" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>You can now configure dedicated alerts for &lt;a href="https://www.rudderstack.com/docs/data-governance/alerts/#transformation-alerts" >Transformation failures&lt;/a>, giving you the ability to take immediate action when problems arise.&lt;/p>
&lt;p>Transformation failures can happen for multiple reasons:&lt;/p>
&lt;ul>
&lt;li>Unexpected data causing errors&lt;/li>
&lt;li>Testing not covering all use cases across production data, or&lt;/li>
&lt;li>A source with new data is connected to the destination.&lt;/li>
&lt;/ul>
&lt;p>Previously, these failures would materialize as cloud destination failure alerts, making it difficult to trace problems. With dedicated transformation failure alerting, you&amp;rsquo;ll be notified if there is an unexpected problem and can take action immediately.&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">
With this feature, you can configure a global failure rate threshold (applicable for all transformations) and specific thresholds for individual transformations.
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;p>See &lt;a href="https://www.rudderstack.com/docs/data-governance/alerts/#transformation-alerts" >Transformation failure alerts&lt;/a> for more information on this feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/transformations-failure-alerts/" data-title="Transformation Failure Alerts" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/transformation-failure-alerts/transformation-failure-alerts.png" href="https://www.rudderstack.com/docs/docs/images/releases/transformation-failure-alerts/transformation-failure-alerts.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/transformation-failure-alerts/transformation-failure-alerts.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/transformation-failure-alerts/transformation-failure-alerts-overrides.png" href="https://www.rudderstack.com/docs/docs/images/releases/transformation-failure-alerts/transformation-failure-alerts-overrides.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/transformation-failure-alerts/transformation-failure-alerts-overrides.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Events Tab 2-hour Time Window</title><link>https://www.rudderstack.com/docs/releases/events-tab-2-hour-time-window/</link><pubDate>Fri, 14 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/events-tab-2-hour-time-window/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/NNNw26VCKZQ" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>Previously, the &lt;strong>Events&lt;/strong> tab view in the Sources, Transformations, and Destinations configured in RudderStack defaulted to a 1-day time window.&lt;/p>
&lt;p>Now, the &lt;strong>Events&lt;/strong> tab defaults to a 2-hour time window, giving you much more granular visibility into data flow over the last few hours.&lt;/p>
&lt;p>In the 2-hour view, data flow is shown in 5-minute increments, helping you:&lt;/p>
&lt;ul>
&lt;li>Review recent spikes or drops in traffic and events with higher precision.&lt;/li>
&lt;li>Troubleshoot potential issues as soon as they arise.&lt;/li>
&lt;li>Quickly validate if the fixes are having the desired effect.&lt;/li>
&lt;/ul>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/dashboard-guides/event-metrics/" >Event Metrics documentation&lt;/a> for more information on this feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/events-tab-2-hour-time-window/" data-title="Events Tab 2-hour Time Window" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/events-tab-2-hour-time-window-screenshot.png" href="https://www.rudderstack.com/docs/docs/images/releases/events-tab-2-hour-time-window-screenshot.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/events-tab-2-hour-time-window-screenshot.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Customer.io Audience Destination</title><link>https://www.rudderstack.com/docs/releases/customerio-audience/</link><pubDate>Wed, 05 Feb 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/customerio-audience/</guid><description>
&lt;p>Today, we launched &lt;a href="https://www.rudderstack.com/docs/destinations/reverse-etl-destinations/customerio-audience/" >Customer.io Audience&lt;/a> as a Reverse ETL-compatible destination.&lt;/p>
&lt;p>You can now use this integration to sync data from your &lt;a href="https://www.rudderstack.com/docs/sources/reverse-etl/" >Reverse ETL sources&lt;/a> to Customer.io for creating and updating &lt;a href="https://docs.customer.io/journeys/segments/#what-are-segments" >user segments&lt;/a>.&lt;/p>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/destinations/reverse-etl-destinations/customerio-audience/" >Customer.io Audience documentation&lt;/a> to get started.&lt;/p></description></item><item><title>Releases: Custom Types for Data Catalog Properties</title><link>https://www.rudderstack.com/docs/releases/custom-types/</link><pubDate>Tue, 28 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/custom-types/</guid><description>
&lt;p>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/WEY5q5KaPXo" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />&lt;/p>
&lt;p>RudderStack&amp;rsquo;s &lt;a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/" >Tracking Plans&lt;/a> feature makes it easy for data teams to apply type-safe governance to event schemas flowing through RudderStack. &lt;a href="https://www.rudderstack.com/docs/data-governance/data-catalog/properties/#advanced-rules" >Advanced rules&lt;/a> enable you to create types and rules on individual properties, but for teams managing hundreds of properties, individual rules can be limiting.&lt;/p>
&lt;p>With the release of &lt;a href="https://www.rudderstack.com/docs/data-governance/data-catalog/properties/#custom-data-types" >Custom Types&lt;/a>, you can now build and manage a separate, centralized library of rules, and apply them to multiple properties across your Data Catalog. Custom Types give you the ability to:&lt;/p>
&lt;ul>
&lt;li>More easily manage and apply the same rule across multiple properties.&lt;/li>
&lt;li>Implement more complex rules for properties.&lt;/li>
&lt;/ul>
&lt;p>You can also create and manage Custom Types via the &lt;a href="https://www.rudderstack.com/docs/api/data-catalog-api/#custom-types" >Data Catalog API&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="example-use-cases" data-heading="Example use cases" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/custom-types/" data-title="Custom Types for Data Catalog Properties" -->
&lt;h2 id="example-use-cases">Example use cases&lt;/h2>&lt;ul>
&lt;li>
&lt;p>&lt;strong>Array of enums&lt;/strong>: With Custom Types, you can combine rules and types for complex use cases. For example, you could define enum values as a Custom Type, then use that Custom Type in a property defined as an array, enabling you to govern an array of enums.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Sub-property bundles&lt;/strong>: If you need to add sub-properties to multiple properties, you can create an Object Custom Type, add the list of specific sub-properties, and apply them to properties in your Data Catalog.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Custom date formats&lt;/strong>: If you need to enforce a specific date format across multiple different date properties, you can create a Custom Type with your specific logic, then use that type for those properties.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Custom address formats&lt;/strong>: If you need to enforce formats for different types of addresses (residential and commercial, for example), you can create Custom Types for each and apply them to different properties.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/custom-types/" data-title="Custom Types for Data Catalog Properties" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/custom-types-release/custom-types-library.png" href="https://www.rudderstack.com/docs/docs/images/releases/custom-types-release/custom-types-library.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/custom-types-release/custom-types-library.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/custom-types-release/custom-types-property.png" href="https://www.rudderstack.com/docs/docs/images/releases/custom-types-release/custom-types-property.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/custom-types-release/custom-types-property.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Support for Azure DevOps Git URLs Starting with ssh while Importing Profiles Project</title><link>https://www.rudderstack.com/docs/releases/azure-git-urls/</link><pubDate>Tue, 21 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/azure-git-urls/</guid><description>
&lt;p>RudderStack now supports Azure Git URLs starting with &lt;code>ssh&lt;/code> while importing your Profiles project from a Git repository.&lt;/p>
&lt;p>With this enhancement, you can now use Azure DevOps as a Git provider for your Profiles project in addition to the previously supported ones, that is, Google cloud sources, AWS CodeCommit, GitHub, GitLab, and Bitbucket.&lt;/p>
&lt;p>Read more about this feature in the &lt;a href="https://www.rudderstack.com/docs/profiles/management/import-from-git/" >Import Profiles Project from Git&lt;/a> guide.&lt;/p></description></item><item><title>Releases: Iterable Observability Enhancements</title><link>https://www.rudderstack.com/docs/releases/iterable-observability/</link><pubDate>Wed, 08 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/iterable-observability/</guid><description>
&lt;p>Today, we released some important observability and error reporting enhancements for the &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/iterable/" >Iterable destination&lt;/a>, applicable to both Event Stream (cloud mode) and Reverse ETL connections.&lt;/p>
&lt;p>With these changes, faulty events previously misclassified with an HTTP 200 status code but failed to deliver to Iterable are now correctly marked with the relevant error codes and Iterable API responses.&lt;/p>
&lt;p>You will see improved error reporting in the RudderStack dashboard for:&lt;/p>
&lt;ul>
&lt;li>Events sent to Iterable with non-existent user IDs.&lt;/li>
&lt;li>Validation errors due to data type mismatch for the fields passed in the events.&lt;/li>
&lt;li>Disallowed event names.&lt;/li>
&lt;/ul>
&lt;p>As a result of these changes, you may observe an increase in reported errors (based on traffic, event volume, and issues with sent events), giving you improved visibility and enabling faster resolution.&lt;/p>
&lt;p>&lt;a href="mailto:support@rudderstack" >Contact the RudderStack team&lt;/a> for more information on this enhancement.&lt;/p></description></item><item><title>Releases: RudderStack Dagster Integration</title><link>https://www.rudderstack.com/docs/releases/dagster/</link><pubDate>Tue, 07 Jan 2025 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/dagster/</guid><description>
&lt;p>Today, we are excited to announce the launch of the &lt;a href="https://github.com/rudderlabs/dagster-rudderstack" >&lt;code>dagster-rudderstack&lt;/code>&lt;/a> Python library, which integrates RudderStack with Dagster. This integration allows teams to seamlessly orchestrate RudderStack Profiles and Reverse ETL jobs within their existing Dagster workflows. You can also define cross-system dependencies, ensuring your warehouse operations are synchronized and optimized beyond the boundaries of RudderStack.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="overview" data-heading="Overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/dagster/" data-title="RudderStack Dagster Integration" -->
&lt;h2 id="overview">Overview&lt;/h2>&lt;p>As organizations integrate more data sources into their workflows, the processes of cleaning, transforming, and activating data become increasingly complex.&lt;/p>
&lt;p>Orchestration tools like &lt;a href="https://dagster.io/" >Dagster&lt;/a> simplify these processes by enabling teams to schedule jobs, define dependencies, and maintain reliable, maintainable, and observable data pipelines. Its modular design and support for modern data practices empower teams to streamline workflows, reduce errors, and focus on delivering actionable insights.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="feature-walkthrough" data-heading="Feature walkthrough" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/dagster/" data-title="RudderStack Dagster Integration" -->
&lt;h2 id="feature-walkthrough">Feature walkthrough&lt;/h2>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/q1jpqoiUaFg" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="workflow" data-heading="Workflow" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/dagster/" data-title="RudderStack Dagster Integration" -->
&lt;h2 id="workflow">Workflow&lt;/h2>&lt;ol>
&lt;li>Install the &lt;a href="https://github.com/rudderlabs/dagster-rudderstack" >&lt;code>dagster-rudderstack&lt;/code>&lt;/a> Python package.&lt;/li>
&lt;li>Use the RudderStack-specific operations to define Profiles runs and Reverse ETL syncs within jobs.&lt;/li>
&lt;li>Define RudderStack-specific resources like connection details (access tokens, connection IDs, etc.)&lt;/li>
&lt;li>Define a schedule.&lt;/li>
&lt;/ol>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/data-pipelines/orchestration/dagster/" >RudderStack Dagster integration docs&lt;/a> for more information on using this tool.&lt;/p></description></item><item><title>Releases: Topsort Cloud Mode Integration</title><link>https://www.rudderstack.com/docs/releases/topsort/</link><pubDate>Tue, 24 Dec 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/topsort/</guid><description>
&lt;p>Today, we launched &lt;a href="https://www.topsort.com/" >Topsort&lt;/a> as a cloud mode destination in RudderStack. Now you can send events across your cloud mode sources from RudderStack to Topsort seamlessly.&lt;/p>
&lt;p>Topsort is a popular advertising and marketing automation platform. It powers retailers and marketplaces to launch optimized ad businesses at scale.&lt;/p>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/topsort/" >Topsort&lt;/a> destination documentation for more information on setting up and using this integration.&lt;/p></description></item><item><title>Releases: Profiles IDE</title><link>https://www.rudderstack.com/docs/releases/profiles-ide/</link><pubDate>Wed, 18 Dec 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/profiles-ide/</guid><description>
&lt;p>The &lt;a href="https://www.rudderstack.com/docs/profiles/ide/" >Profiles IDE&lt;/a> provides a seamless, production-ready environment for developing and deploying your Profiles projects directly within the &lt;a href="https://app.rudderstack.com/" >RudderStack dashboard&lt;/a>. It supports in-platform project management and integration with external version control systems like GitHub and GitLab.&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/releases/profiles-ide/" data-title="Profiles IDE" -->
&lt;h2 id="key-features">Key features&lt;/h2>&lt;ul>
&lt;li>Integrated editor for building and modifying YAML-based Profiles configuration files.&lt;/li>
&lt;li>Safe validation of workflows through separate development schemas.&lt;/li>
&lt;li>Easy rollbacks of uncommitted changes with a button click.&lt;/li>
&lt;li>Automated notifications when multiple users are editing a project simultaneously.&lt;/li>
&lt;/ul>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="workflow" data-heading="Workflow" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/profiles-ide/" data-title="Profiles IDE" -->
&lt;h2 id="workflow">Workflow&lt;/h2>&lt;p>You can use the Profiles IDE to modify inputs, build features, and safely validate the changes in a controlled session, before committing them to the production project.&lt;/p>
&lt;p>Here&amp;rsquo;s how to use the feature:&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="new-profiles-project" data-heading="New Profiles project" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/profiles-ide/" data-title="Profiles IDE" -->
&lt;h3 id="new-profiles-project">New Profiles project&lt;/h3>&lt;ol>
&lt;li>Select the &lt;strong>Web-based editor (IDE)&lt;/strong> option while creating a new Profiles project.&lt;/li>
&lt;li>Provide the project name, warehouse credentials, and output schema for storing the results.&lt;/li>
&lt;li>Click &lt;strong>Open in editor mode&lt;/strong>.&lt;/li>
&lt;/ol>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="existing-profiles-projects" data-heading="Existing Profiles projects" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/profiles-ide/" data-title="Profiles IDE" -->
&lt;h3 id="existing-profiles-projects">Existing Profiles projects&lt;/h3>&lt;ol>
&lt;li>Go to the &lt;strong>Settings&lt;/strong> tab of the Profiles project.&lt;/li>
&lt;li>Click &lt;strong>Editor mode&lt;/strong>.&lt;/li>
&lt;/ol>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/profiles/ide/" >Profiles IDE&lt;/a> documentation for more details on using this feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/profiles-ide/" data-title="Profiles IDE" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>&lt;ul>
&lt;li>Editor mode option after creating a new Profiles project.&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/profiles/profiles-editor-mode-option.webp" href="https://www.rudderstack.com/docs/docs/images/profiles/profiles-editor-mode-option.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/profiles/profiles-editor-mode-option.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>Editor mode option in an existing Profiles project.&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/profiles/profiles-editor-mode-existing-project.webp" href="https://www.rudderstack.com/docs/docs/images/profiles/profiles-editor-mode-existing-project.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/profiles/profiles-editor-mode-existing-project.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>Specify development/validation schema for testing the changes.&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/profiles/profiles-editor-mode-specify-schema.webp" href="https://www.rudderstack.com/docs/docs/images/profiles/profiles-editor-mode-specify-schema.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/profiles/profiles-editor-mode-specify-schema.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>Modify configuration, view the changes, and commit to the production schema.&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/profiles/profiles-editor-mode-make-changes.webp" href="https://www.rudderstack.com/docs/docs/images/profiles/profiles-editor-mode-make-changes.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/profiles/profiles-editor-mode-make-changes.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: LinkedIn Audience Destination</title><link>https://www.rudderstack.com/docs/releases/linkedin-audience/</link><pubDate>Fri, 22 Nov 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/linkedin-audience/</guid><description>
&lt;p>We are pleased to announce &lt;a href="https://www.rudderstack.com/docs/destinations/reverse-etl-destinations/linkedin-audience/" >LinkedIn Audience&lt;/a> as a Reverse ETL-compatible destination. Now you can send data from your warehouse to LinkedIn via RudderStack for efficient targeting and segmentation.&lt;/p>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/destinations/reverse-etl-destinations/linkedin-audience/" >LinkedIn Audience documentation&lt;/a> to get started.&lt;/p></description></item><item><title>Releases: SSO Support for Other Providers</title><link>https://www.rudderstack.com/docs/releases/generic-sso-setup/</link><pubDate>Wed, 20 Nov 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/generic-sso-setup/</guid><description>
&lt;p>RudderStack now supports setting up and enabling SSO for your organization for various SSO providers in addition to the existing SSO providers like &lt;a href="https://www.rudderstack.com/docs/user-guides/sso-setup/okta/" >Okta&lt;/a>, &lt;a href="https://www.rudderstack.com/docs/user-guides/sso-setup/onelogin/" >OneLogin&lt;/a>, and &lt;a href="https://www.rudderstack.com/docs/user-guides/sso-setup/azure/" >Azure Entra ID&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="workflow" data-heading="Workflow" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/generic-sso-setup/" data-title="SSO Support for Other Providers" -->
&lt;h2 id="workflow">Workflow&lt;/h2>&lt;p>You can integrate RudderStack SSO with your own SSO provider by following these three simple steps:&lt;/p>
&lt;ol>
&lt;li>Specify the &lt;a href="https://www.rudderstack.com/docs/user-guides/sso-setup/other-providers/#configuration-settings" >configuration settings&lt;/a> in your SSO provider&amp;rsquo;s admin dashboard.&lt;/li>
&lt;li>Configure the &lt;a href="https://www.rudderstack.com/docs/user-guides/sso-setup/other-providers/#configure-saml-20-custom-attributes" >SAML 2.0 custom attributes&lt;/a>.&lt;/li>
&lt;li>Contact the &lt;a href="mailto:support@rudderstack.com" >RudderStack team&lt;/a> to enable SSO for your organization.&lt;/li>
&lt;/ol>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/user-guides/sso-setup/other-providers/" >Generic SSO Setup Guide&lt;/a> for more details.&lt;/p></description></item><item><title>Releases: Warehouse Observability Enhancements</title><link>https://www.rudderstack.com/docs/releases/warehouse-discards/</link><pubDate>Wed, 20 Nov 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/warehouse-discards/</guid><description>
&lt;p>RudderStack&amp;rsquo;s latest warehouse observability enhancements give you detailed insights into why the data going to a &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/" >warehouse destination&lt;/a> was discarded, especially in cases where there is a data type mismatch and the event data does not conform to the &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/warehouse-schema/" >Warehouse Schema&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-the-feature-works" data-heading="How the feature works" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/warehouse-discards/" data-title="Warehouse Observability Enhancements" -->
&lt;h2 id="how-the-feature-works">How the feature works&lt;/h2>&lt;p>RudderStack discards any event data going into a &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/" >warehouse destination&lt;/a> that does not strictly conform to the &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/warehouse-schema/" >Warehouse Schema spec&lt;/a> and &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/warehouse-schema/#how-rudderstack-handles-data-type-mismatch" >cannot be fixed&lt;/a>.&lt;/p>
&lt;p>In such cases, RudderStack puts the discarded records into a &lt;code>rudder_discards&lt;/code> table along with a reason. With the latest observability enhancements, the reasons will give more insights on exactly why the data was discarded.&lt;/p>
&lt;p>Some examples are shown below:&lt;/p>
&lt;ul>
&lt;li>&lt;code>incompatible schema conversion from string to boolean&lt;/code>&lt;/li>
&lt;li>&lt;code>incompatible schema conversion from string to int&lt;/code>&lt;/li>
&lt;li>&lt;code>incompatible schema conversion from datetime to string&lt;/code>&lt;/li>
&lt;li>&lt;code>incompatible schema conversion from bigint to float&lt;/code>&lt;/li>
&lt;/ul></description></item><item><title>Releases: Server-side Cookies</title><link>https://www.rudderstack.com/docs/releases/server-side-cookies/</link><pubDate>Tue, 19 Nov 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/server-side-cookies/</guid><description>
&lt;p>You can now set server-side cookies in the JavaScript SDK, ensuring users are tracked across sessions over time, even when browsers expire client-side cookies.&lt;/p>
&lt;p>Web browsers are increasingly implementing user tracking restrictions. For example, Safari’s Intelligent Tracking Prevention (ITP) automatically expires client-side, third-party cookies after 7 days. Suppose one of your visitor’s cookies expire and they return to your website. In that case, RudderStack’s JavaScript SDK sees them as a new user and assigns them a new unique &lt;code>anonymousId&lt;/code>- this can create challenges for customer journey tracking, attribution analytics, and identity resolution because the ID and session data would show two users when, in reality, it is the same user returning to your website.&lt;/p>
&lt;p>With this release, you can configure the JavaScript SDK to set server-side cookies, which aren’t subject to the client-side cookie expiration timelines enforced by Safari and other browsers.&lt;/p>
&lt;p>Read our &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/server-side-cookies/" >server-side cookies documentation&lt;/a> for more information on this feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="workflow" data-heading="Workflow" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/server-side-cookies/" data-title="Server-side Cookies" -->
&lt;h2 id="workflow">Workflow&lt;/h2>&lt;p>To implement server-side cookies, set the&lt;code>useServerSideCookies&lt;/code> option to &lt;code>true&lt;/code> while loading the JavaScript SDK.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">rudderanalytics&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">load&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nx">WRITE_KEY&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="nx">DATA_PLANE_URL&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">useServerSideCookies&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="kc">true&lt;/span> &lt;span class="c1">// Default is false
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">});&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>Setting server-side cookies requires that you make the cookie request to your website domain.&lt;/p>
&lt;p>Most customers use a &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/server-side-cookies/#proxy" >proxy&lt;/a>, but the SDK also supports &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/server-side-cookies/#custom-implementation" >custom implementations&lt;/a>.&lt;/p>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="how-it-works" data-heading="How it works" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/server-side-cookies/" data-title="Server-side Cookies" -->
&lt;h3 id="how-it-works">How it works&lt;/h3>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/event-stream-sources/server-side-cookies-js-sdk.webp" href="https://www.rudderstack.com/docs/docs/images/event-stream-sources/server-side-cookies-js-sdk.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/event-stream-sources/server-side-cookies-js-sdk.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;p>The JavaScript SDK makes explicit &lt;code>POST&lt;/code> requests to the server to set cookies via the &lt;code>/rsaRequest&lt;/code> endpoint:&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/event-stream-sources/rsa-request.webp" href="https://www.rudderstack.com/docs/docs/images/event-stream-sources/rsa-request.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/event-stream-sources/rsa-request.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;p>The response includes &lt;code>Set-Cookie&lt;/code> headers which set the &lt;code>rl_anonymous_id&lt;/code> cookie (user&amp;rsquo;s &lt;code>anonymousId&lt;/code> value which is persisted through the server-side cookie).&lt;/p>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/event-stream-sources/set-cookie-header.webp" href="https://www.rudderstack.com/docs/docs/images/event-stream-sources/set-cookie-header.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/event-stream-sources/set-cookie-header.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Gainsight PX Web Device Mode Integration</title><link>https://www.rudderstack.com/docs/releases/gainsight-px-devicemode/</link><pubDate>Wed, 30 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/gainsight-px-devicemode/</guid><description>
&lt;p>Today, we launched the web device mode integration with &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/gainsight-px/" >Gainsight PX&lt;/a>. Now you can send events from RudderStack to Gainsight PX via the native Gainsight PX SDK.&lt;/p>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/gainsight-px/" >Gainsight PX&lt;/a> destination documentation for more information on setting up and using this integration.&lt;/p></description></item><item><title>Releases: Sprig Mobile Device Mode Integration</title><link>https://www.rudderstack.com/docs/releases/sprig-device-mode/</link><pubDate>Tue, 29 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/sprig-device-mode/</guid><description>
&lt;p>Today, we launched mobile device mode support for the &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/sprig/" >Sprig&lt;/a> destination.&lt;/p>
&lt;p>Now, you can send events from your Android (Java) and iOS (Obj-C) sources (in addition to the previously-supported native web SDK) in device mode to &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/sprig/" >Sprig&lt;/a> in order to collect relevant user insights and boost your product adoption.&lt;/p>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/sprig/device-mode/#add-mobile-device-mode-integration" >Sprig&lt;/a> destination documentation for more information on adding the mobile device mode integration and sending events.&lt;/p></description></item><item><title>Releases: Service Access Tokens</title><link>https://www.rudderstack.com/docs/releases/service-access-tokens/</link><pubDate>Thu, 24 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/service-access-tokens/</guid><description>
&lt;p>We have expanded access to our APIs and services with &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/" >Service Access Tokens (SATs)&lt;/a>. SATs can be created at the organization or workspace level and are not tied to individual user accounts.&lt;/p>
&lt;p>SATs are ideal for production use cases and centralized management of tokens across the RudderStack platform.&lt;/p>
&lt;p>Previously, access to RudderStack APIs required you to create &lt;a href="https://www.rudderstack.com/docs/dashboard-guides/personal-access-token/" >Personal Access Tokens&lt;/a>, which are tied to an individual user’s account. If that user account was removed, or permissions on the account were changed, access to APIs and services was impacted as well.&lt;/p>
&lt;p>With this release, you can create and manage central SATs to ensure stability and security for critical production workflows.&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">Contact the &lt;a href="mailto:support@rudderstack.com" >RudderStack team&lt;/a> to get access to this feature.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&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/releases/service-access-tokens/" data-title="Service Access Tokens" -->
&lt;h2 id="how-it-works">How it works&lt;/h2>&lt;p>Org Admins can create SATs at the organization or workspace level.&lt;/p>
&lt;p>&lt;strong>Organization-level SATs&lt;/strong> can be used to access &lt;a href="https://www.rudderstack.com/docs/user-guides/sso-setup/" >SSO SCIM&lt;/a> and the &lt;a href="https://www.rudderstack.com/docs/api/audit-logs-api/" >Audit Log API&lt;/a>, used for managing SCIM users and accessing audit logs from the platform, respectively.&lt;/p>
&lt;p>&lt;strong>Workspace-level SATs&lt;/strong> can be used to access resources in a specific workspace. These are used to manage programmatic workflows that leverage RudderStack APIs. Some examples are:&lt;/p>
&lt;ul>
&lt;li>Using the &lt;a href="https://www.rudderstack.com/docs/api/transformation-api/" >Transformations API&lt;/a> to manage Transformations programmatically.&lt;/li>
&lt;li>Using the &lt;a href="https://www.rudderstack.com/docs/api/data-catalog-api/" >Data Catalog API&lt;/a> to programmatically manage your Data Catalog and Tracking Plans.&lt;/li>
&lt;li>Using the &lt;a href="https://www.rudderstack.com/docs/api/test-api/" >Test API&lt;/a> to run programmatic end-to-end pipeline tests.&lt;/li>
&lt;/ul>
&lt;p>Operations performed by both SAT types are logged and are available through the &lt;a href="https://www.rudderstack.com/docs/dashboard-guides/audit-logs/" >Audit Logs view&lt;/a> and the &lt;a href="https://www.rudderstack.com/docs/api/audit-logs-api/" >Audit Logs API&lt;/a>.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="create-a-sat" data-heading="Create a SAT" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/service-access-tokens/" data-title="Service Access Tokens" -->
&lt;h2 id="create-a-sat">Create a SAT&lt;/h2>&lt;p>To create SATs, Org Admins can access the Service Access Token view by going to &lt;strong>Settings&lt;/strong> &amp;gt; &lt;strong>Organization&lt;/strong> &amp;gt; &lt;strong>Service Access Tokens&lt;/strong> tab.&lt;/p>
&lt;p>Click the &lt;strong>Organization&lt;/strong> or &lt;strong>Workspace&lt;/strong> tab followed by &lt;strong>Generate new Token&lt;/strong> to generate a new &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/#organization-level-sats" >Organization-level SAT&lt;/a> or &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/#workspace-level-sats" >Workspace-level SAT&lt;/a>.&lt;/p>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/access-management/service-access-tokens/" >Service Access Token documentation&lt;/a> for more information.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="3" data-permalink="https://www.rudderstack.com/docs/releases/service-access-tokens/" data-title="Service Access Tokens" -->
&lt;h3 id="screenshots">Screenshots&lt;/h3>&lt;p>The following screenshots highlight the SAT generation flow:&lt;/p>
&lt;ul>
&lt;li>Generate an organization-level SAT:&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/dashboard-guides/service-access-tokens/service-access-tokens-1.webp" href="https://www.rudderstack.com/docs/docs/images/dashboard-guides/service-access-tokens/service-access-tokens-1.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/dashboard-guides/service-access-tokens/service-access-tokens-1.webp"
alt="Service Access Tokens tab in RudderStack dashboard"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>Copy newly-generated organization-level SAT:&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/dashboard-guides/service-access-tokens/org-sat.webp" href="https://www.rudderstack.com/docs/docs/images/dashboard-guides/service-access-tokens/org-sat.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/dashboard-guides/service-access-tokens/org-sat.webp"
alt="Note org level SAT value"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>Generate a workspace-level SAT:&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/dashboard-guides/service-access-tokens/service-access-tokens-2.webp" href="https://www.rudderstack.com/docs/docs/images/dashboard-guides/service-access-tokens/service-access-tokens-2.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/dashboard-guides/service-access-tokens/service-access-tokens-2.webp"
alt="Service Access Tokens tab in RudderStack dashboard"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>Specify workspace-level SAT permissions:&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/dashboard-guides/service-access-tokens/workspace-sat-generate.webp" href="https://www.rudderstack.com/docs/docs/images/dashboard-guides/service-access-tokens/workspace-sat-generate.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/dashboard-guides/service-access-tokens/workspace-sat-generate.webp"
alt="Generate workspace level SAT"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;ul>
&lt;li>Copy newly-generated workspace-level SAT:&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/dashboard-guides/service-access-tokens/workspace-sat.webp" href="https://www.rudderstack.com/docs/docs/images/dashboard-guides/service-access-tokens/workspace-sat.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/dashboard-guides/service-access-tokens/workspace-sat.webp"
alt="Create workspace level SAT"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;br /></description></item><item><title>Releases: TUNE Destination</title><link>https://www.rudderstack.com/docs/releases/tune/</link><pubDate>Tue, 22 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/tune/</guid><description>
&lt;p>Today, we launched &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/tune/" >TUNE&lt;/a> as a cloud mode destination. Now you can send your events from RudderStack to TUNE seamlessly.&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">Contact the &lt;a href="mailto:support@rudderstack.com" >RudderStack team&lt;/a> to get access to this integration.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;p>&lt;a href="https://www.tune.com/" >TUNE&lt;/a> is a popular affiliate marketing platform for tracking and managing your data and partner programs to optimize performance and ROI.&lt;/p>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/tune/" >TUNE&lt;/a> destination documentation for more information on setting up and using this integration.&lt;/p></description></item><item><title>Releases: Amazon Audience Destination</title><link>https://www.rudderstack.com/docs/releases/amazon-audience/</link><pubDate>Fri, 18 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/amazon-audience/</guid><description>
&lt;p>Today we launched &lt;a href="https://advertising.amazon.com/insights-and-planning/audiences" >Amazon Audience&lt;/a> as a Reverse ETL-compatible destination.&lt;/p>
&lt;p>You can now connect this destination to a &lt;a href="https://www.rudderstack.com/docs/sources/reverse-etl/" >Reverse ETL source&lt;/a> and allow the advertisers to reach specific customer segments based on Amazon&amp;rsquo;s first-party data.&lt;/p>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/destinations/reverse-etl-destinations/amazon-audience/" >Amazon Audience documentation&lt;/a> to get started.&lt;/p></description></item><item><title>Releases: Expanded BigQuery Partitioning Settings</title><link>https://www.rudderstack.com/docs/releases/bigquery-partition-support/</link><pubDate>Fri, 04 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/bigquery-partition-support/</guid><description>
&lt;p>RudderStack now supports expanded &lt;a href="https://cloud.google.com/bigquery/docs/partitioned-tables" >partitioning&lt;/a> options for the BigQuery warehouse destination.&lt;/p>
&lt;p>Previously, RudderStack only loaded data into BigQuery using the &lt;code>ingestion_time&lt;/code> column at a &lt;a href="https://cloud.google.com/bigquery/docs/partitioned-tables#date_timestamp_partitioned_tables" >day-level granularity&lt;/a>. These default settings limited many customers from running cost-efficient, fast queries for use cases that would benefit from partitioning on a different column at a different level of granularity.&lt;/p>
&lt;p>With this release, you can now choose from multiple columns for partitioning and can set an hourly granularity level.&lt;/p>
&lt;p>Partition column options:&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://cloud.google.com/bigquery/docs/partitioned-tables#ingestion_time" >Ingestion Time&lt;/a>&lt;/li>
&lt;li>Loaded At&lt;/li>
&lt;li>Received At&lt;/li>
&lt;li>Timestamp&lt;/li>
&lt;li>Sent At&lt;/li>
&lt;li>Original Timestamp&lt;/li>
&lt;/ul>
&lt;p>Granularity options:&lt;/p>
&lt;ul>
&lt;li>Hour&lt;/li>
&lt;li>Day&lt;/li>
&lt;/ul>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/bigquery-partitioning.png" href="https://www.rudderstack.com/docs/docs/images/releases/bigquery-partitioning.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/bigquery-partitioning.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="updating-your-bigquery-configuration" data-heading="Updating your BigQuery configuration" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/bigquery-partition-support/" data-title="Expanded BigQuery Partitioning Settings" -->
&lt;h2 id="updating-your-bigquery-configuration">Updating your BigQuery configuration&lt;/h2>&lt;p>Note that you cannot edit the partition settings for existing BigQuery destinations through the dashboard. RudderStack automatically sets their partitioning type to &lt;strong>Ingestion Time partitioning&lt;/strong> with a &lt;strong>day&lt;/strong>-level granularity.&lt;/p>
&lt;ul>
&lt;li>To change your partition configuration, RudderStack recommends creating a new BigQuery destination and deprecating the old one.&lt;/li>
&lt;li>To apply partition changes to an existing destination, you can &lt;a href="mailto:support@rudderstack.com" >contact&lt;/a> the RudderStack support team.&lt;/li>
&lt;/ul>
&lt;p>See our &lt;a href="https://www.rudderstack.com/docs/destinations/warehouse-destinations/bigquery/#connection-settings" >BigQuery destination documentation&lt;/a> for more information on using this feature.&lt;/p></description></item><item><title>Releases: Full Custom Consent Manager Support</title><link>https://www.rudderstack.com/docs/releases/custom-consent-management/</link><pubDate>Fri, 04 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/custom-consent-management/</guid><description>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/n2JwMksqfYU" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />
&lt;p>Previously, RudderStack supported fully-integrated consent data flows for &lt;strong>OneTrust&lt;/strong> and &lt;strong>Ketch&lt;/strong> - two popular consent management tools.&lt;/p>
&lt;p>With this release, you can integrate your custom consent management solution with RudderStack, giving you granular control over consent settings for each individual destination.&lt;/p>
&lt;p>You can also use the &lt;a href="https://www.rudderstack.com/docs/data-governance/consent-management/custom-consent-mgmt/" >Custom Consent Management&lt;/a> feature to implement compliant pre-consent user tracking, with the options to store no cookies, store only the session tracking cookie, or only persist the &lt;code>anonymousId&lt;/code>.&lt;/p>
&lt;p>RudderStack also supports running multiple consent management solutions simultaneously, which is useful when consent management solutions differ across platforms.&lt;/p>
&lt;p>Custom Consent Management is now available on all RudderStack plans. See our &lt;a href="https://www.rudderstack.com/docs/data-governance/consent-management/custom-consent-mgmt/" >documentation&lt;/a> for more information on using this feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="workflow-overview" data-heading="Workflow overview" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/custom-consent-management/" data-title="Full Custom Consent Manager Support" -->
&lt;h2 id="workflow-overview">Workflow overview&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>Before capturing user consent, make sure that:&lt;/p>
&lt;ul>
&lt;li>You are running the latest version of the &lt;a href="https://www.rudderstack.com/docs/sources/event-streams/sdks/rudderstack-javascript-sdk/" >JavaScript SDK&lt;/a>.&lt;/li>
&lt;li>You have set the &lt;code>enabled&lt;/code> key to true in the &lt;code>consentManagement&lt;/code> API object. See the &lt;a href="https://www.rudderstack.com/docs/data-governance/consent-management/custom-consent-mgmt/#sdk-initialized-before-capturing-user-consent" >JavaScript SDK documentation&lt;/a> for more information.&lt;/li>
&lt;/ul>
&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;ol>
&lt;li>
&lt;p>Update the code on your website to grab consent IDs from your custom consent manager.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Add the consent setting in the &lt;code>load&lt;/code> object, or pass them to the SDK&amp;rsquo;s consent API using the &lt;code>consent&lt;/code> method, as shown:&lt;/p>
&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-javascript" data-lang="javascript">&lt;span class="line">&lt;span class="cl">&lt;span class="nx">rudderanalytics&lt;/span>&lt;span class="p">.&lt;/span>&lt;span class="nx">consent&lt;/span>&lt;span class="p">({&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">consentManagement&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">allowedConsentIds&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;performance&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;analytics&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nx">deniedConsentIds&lt;/span>&lt;span class="o">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;advertising&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">});&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Using the &lt;code>consent&lt;/code> method is helpful for tracking users who update consent settings and then go on to perform other actions on the same page and in the same session.&lt;/p>
&lt;ol start="3">
&lt;li>Specify the consent settings for each destination by adding the allowed consent ID values in the &lt;strong>Consent settings&lt;/strong> section of the destination configuration. In the below example, the destination accepts data from users have consented to only &lt;code>performance&lt;/code> or &lt;code>analytics&lt;/code> tracking:&lt;/li>
&lt;/ol>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/consent-management-settings.webp" href="https://www.rudderstack.com/docs/docs/images/releases/consent-management-settings.webp"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/consent-management-settings.webp"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: Global Advanced Property Rules across Tracking Plans</title><link>https://www.rudderstack.com/docs/releases/advanced-properties/</link><pubDate>Fri, 04 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/advanced-properties/</guid><description>
&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
&lt;iframe src="https://www.youtube.com/embed/9we2iLrb19Q" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allowfullscreen title="YouTube Video">&lt;/iframe>
&lt;/div>
&lt;br />
&lt;p>Our &lt;a href="https://www.rudderstack.com/docs/data-governance/tracking-plans/" >Tracking Plans&lt;/a> feature evaluates advanced rules for properties, allowing you to flag data that does not align to your settings for enums, data formats, minimum/maximum values, and more.&lt;/p>
&lt;p>Previously, you had to apply &lt;a href="https://www.rudderstack.com/docs/data-governance/data-catalog/#advanced-rules" >advanced rules&lt;/a> individually to each event in each Tracking Plan — a time consuming and error-prone process.&lt;/p>
&lt;p>With this release, advanced rules for properties are now set globally through the &lt;a href="https://www.rudderstack.com/docs/data-governance/data-catalog/" >Data Catalog&lt;/a>. That means the advanced rules are now applied to the property across all events and Tracking Plans, eliminating the need to update rules in multiple places.&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">Advanced rules for properties are now only managed globally through the Data Catalog. You can no longer set individual advanced rules for properties through Tracking Plans.&lt;/div>
&lt;/div>
&lt;/blockquote>
&lt;/html>
&lt;p>Note that:&lt;/p>
&lt;ul>
&lt;li>If you had any existing advanced rules, you have been automatically migrated. Existing settings for advanced rules will not be affected, and any property-level advanced rules you created previously have automatically be propagated to the Data Catalog for global management across all Tracking Plans.&lt;/li>
&lt;li>This release applies to all the customers using our UI-based Tracking Plans features.&lt;/li>
&lt;/ul>
&lt;p>Read our &lt;a href="https://www.rudderstack.com/docs/data-governance/data-catalog/#advanced-rules" >Data Catalog documentation&lt;/a> for more information on this feature.&lt;/p>
&lt;!-- end-chunk -->
&lt;!-- begin-chunk data-anchor="screenshots" data-heading="Screenshots" data-level="2" data-permalink="https://www.rudderstack.com/docs/releases/advanced-properties/" data-title="Global Advanced Property Rules across Tracking Plans" -->
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;figure class="image--main " >
&lt;a
data-lightbox="image-images/releases/global-advanced-property-rules-release-note-screenshot.png" href="https://www.rudderstack.com/docs/docs/images/releases/global-advanced-property-rules-release-note-screenshot.png"
>
&lt;img src="https://www.rudderstack.com/docs/docs/images/releases/global-advanced-property-rules-release-note-screenshot.png"
decoding="async" loading="lazy" class="img-shortcode"/>
&lt;/a>
&lt;/figure></description></item><item><title>Releases: React Native Device Mode Integration for Facebook App Events</title><link>https://www.rudderstack.com/docs/releases/fb-appevents-reactnative-devicemode/</link><pubDate>Tue, 01 Oct 2024 00:00:00 +0000</pubDate><guid>https://www.rudderstack.com/docs/releases/fb-appevents-reactnative-devicemode/</guid><description>
&lt;p>RudderStack now supports React Native device mode integration for Facebook App Events. You can &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/facebook-app-events/#add-device-mode-integration" >configure your React Native app&lt;/a> (Android (Java) or iOS (Obj-C)) to send events to Facebook App Events in the device mode.&lt;/p>
&lt;p>See the &lt;a href="https://www.rudderstack.com/docs/destinations/streaming-destinations/facebook-app-events/" >Facebook App Events documentation&lt;/a> for more information on setting up and using this integration.&lt;/p></description></item></channel></rss>