Select spec version:

Destination Type Reference for Rudder CLI Beta

Complete Rudder CLI reference for the supported destination types, their config keys, source types, and connection modes.
Available Plans
  • free
  • growth
  • enterprise

Every destination spec names a type, and that type decides which config keys the spec accepts. This section documents those keys, one page per destination type.

The rules on this page apply to every type. The per-type pages cover only what’s specific to that destination.

Destination support requires Rudder CLI v0.25.0 or later. Some types need a later version — see the Minimum CLI version column in Supported destination types.

Upgrade if you’re using an earlier version.

Supported destination types

Use the type value in YAML. Every type below takes definition_version: 1. The Minimum CLI version column in the below table shows the release these pages document for each type. On an earlier release the type is either unavailable or behaves differently.

A selected version lists every destination documented for that release, including ones documented earlier. For example, v0.26.0 includes destinations documented for v0.25.0 and v0.26.0.

Showing 24 of 24 destinations

DestinationtypeMinimum CLI versionConfig reference
ActiveCampaignactive_campaignv0.25.0Here
Amazon Redshiftrsv0.27.0Here
Amazon S3s3v0.25.0Here
Amplitudeamv0.26.0Here
Attentive Tagattentive_tagv0.25.0Here
BigQuerybqv0.25.0Here
BigQuery Streambqstreamv0.25.0Here
Brazebrazev0.26.0Here
Customer.iocustomeriov0.27.0Here
Facebook Conversionsfacebook_conversionsv0.26.0Here
Facebook Pixelfacebook_pixelv0.26.0Here
Google Adsgoogleadsv0.26.0Here
Google Analytics 4ga4v0.26.0Here
Google Cloud Storagegcsv0.26.0Here
HTTP Webhookhttpv0.25.0Here
HubSpothsv0.26.0Here
Iterableiterablev0.26.0Here
Mixpanelmpv0.27.0Here
PostgreSQLpostgresv0.26.0Here
PostHogposthogv0.26.0Here
S3 Data Lakes3_datalakev0.26.0Here
Snowflakesnowflakev0.27.0Here
TikTok Adstiktok_adsv0.26.0Here
Webhookwebhookv0.26.0Here

Important considerations

  • Rudder CLI rejects any type outside this table. You can define more destinations in the RudderStack dashboard than what you can define in Rudder CLI.
  • To start from a destination you already configured in the dashboard, run rudder-cli import workspace — the imported YAML uses the same keys these pages document. See How to Import Workspace Resources for more information.

Config key rules

These rules hold for every destination type.

Keys are snake_case

Local YAML uses snake_case config keys. Rudder CLI converts them to the API’s camelCase at apply time. A camelCase key in the spec is treated as an unknown key.

Unknown keys fail validation

config accepts only the keys its type declares. Anything else fails rudder-cli validate with:

unknown config field "<key>"

A key that’s valid for one destination type isn’t valid for another. There are no shared optional extras beyond connection_mode and consent_management.

Omitting a key with a default is safe

Where a key declares a default, Rudder CLI fills that value in before it validates the spec and before the spec reaches the API, because the backend applies the same default when it stores the destination. Omitting such a key is equivalent to writing its default: it doesn’t produce a permanent diff on the next plan or apply, and it’s validated as though you had written the default — which can make another key required.

Keys without a default are sent only when you set them.

Some keys can’t change after the first apply

A key marked immutable on a type page is fixed once the destination exists. The API rejects an update that changes it.

Rudder CLI doesn’t check immutability locally. validate accepts the change and apply sends it, so the failure surfaces at the API rather than in your pull request. To change an immutable key, create a new destination instead.

Some keys aren’t in the dashboard

A key marked internal on a type page isn’t surfaced by the RudderStack dashboard. Rudder CLI accepts it so that an existing value survives an update, and so that a spec you import round-trips unchanged. Set it only if you know your destination needs it.

Source types

A destination declares the source types it accepts events from. Each type page lists its own set, drawn from the tokens below.

Source typeSources that resolve to it
webJavaScript SDK
androidAndroid SDK
android_kotlinAndroid Kotlin SDK
iosiOS SDK
ios_swiftiOS Swift SDK
react_nativeReact Native SDK
flutterFlutter SDK
cordovaCordova SDK
unityUnity SDK
ampAMP Analytics
shopifyShopify
cloudWebhook sources and every server-side SDK — Node.js, Python, Go, Java, Ruby, PHP, .NET, Rust
cloud_sourceCloud app sources
warehouseReverse ETL sources

A source’s own definition resolves to exactly one token. Note that cloud and cloud_source are different tokens: a webhook or server-side SDK source resolves to cloud, while a cloud app source resolves to cloud_source.

Connection modes

A connection mode describes how a given source type connecting to this destination instance routes its events:

Connection modeDescription
cloudThe SDK sends events to RudderStack, which forwards them to the destination from its servers.
deviceThe SDK loads the destination’s own SDK and sends events to it directly from the device or browser.
hybridBoth at once — RudderStack forwards events from its servers, and also loads the destination’s SDK for the features that need it, like in-app messages and push notifications.

This mode is supported by ActiveCampaign, Braze, and Google Analytics 4 on some source types.

Note that:

  • The connection mode is a property of the source-destination pair, not of the source or the destination alone.
  • Two destinations fed by the same source can run in different modes.
  • A source type supported in device or hybrid mode by one destination may be cloud-only on another.

For more information, see RudderStack Connection Modes.

Where the mode is declared

connection_mode lives in the destination’s config block, keyed by local source type — not on the connection spec.

yaml
config:
  connection_mode:
    web: device
    android_kotlin: cloud

Naming a source type the destination doesn’t support fails validation, and so does a mode that source type doesn’t support on this destination.

An entry is required for every source type you connect. Without one, validate reports:

destination '<id>' config has no 'connection_mode' entry for source type '<source_type>'

consent_management is accepted by every destination type, keyed by local source type. Each source type maps to an array of consent entries.

yaml
config:
  consent_management:
    web:
      - provider: oneTrust
        consents:
          - analytics
          - marketing
    react_native:
      - provider: custom
        resolution_strategy: and
        consents:
          - analytics
FieldRequiredValue
providerYesOne of custom, iubenda, ketch, oneTrust
resolution_strategyWhen provider is customand or or
consentsNoArray of consent category strings

Within one source type’s array, each provider can appear at most once. Only source types the destination supports are allowed.

Each consent string must be at most 100 characters, unless it’s written as a {{ path || fallback }} template, which is accepted at any length.

A plain value over the limit reports 'consent' must be at most 100 characters.

For the feature itself, see Consent Management in RudderStack.

Secrets

Each type page lists the keys Rudder CLI treats as secrets. Write them as {{ .VARIABLE_NAME }} references rather than literals, and supply the values at apply time:

bash
rudder-cli apply --var-file secrets.vars.yaml

The YAML that rudder-cli import writes may or may not include secret keys. Before you apply, make sure every secret key your configuration needs is present and populated through variable substitution.

See How to Use Variable Substitution in Rudder CLI.

See more

Questions? Let's figure it out together.

Join the RudderStack Slack community to connect with other users, customers, and the RudderStack team — or reach out for direct support.