# Connection Modes: Cloud, Device, and Hybrid


This guide explains the RudderStack connection modes — **cloud mode** and **device mode** — and gives an overview of **hybrid mode**, which lets you send events through both connection modes.

## What are connection modes in RudderStack?

Connection modes determine how event data is tracked, transformed, and routed from **sources** to **destinations**.

You can send event data from your source apps to destinations in two primary connection modes:

- Cloud mode
- Device mode

For select destinations, you can use hybrid mode to route events through both cloud and device mode.

## Cloud mode

In cloud mode, the SDK sends event data directly to the RudderStack server. The server transforms the data into a destination-specific format using the [Transformer](https://github.com/rudderlabs/rudder-transformer) module and routes it to the destination.

{{< success >}}
Cloud mode also supports [Transformations]({{< ref "transformations/overview.md" >}}), so you can apply custom logic to events before they reach the destination.
{{< /success >}}

### How cloud mode works

{{< warning >}}
Note that:

- [Warehouse destinations]({{< ref "destinations/warehouse-destinations/_index.md" >}}) support cloud mode only.
- Server-side SDKs support cloud mode only — they run in the backend and cannot load destination-specific SDKs on the client.
{{< /warning >}}

1. The SDK sends the event to the RudderStack server.
2. The [Transformer](https://github.com/rudderlabs/rudder-transformer) module converts the event to a destination-specific format.
3. The server forwards the transformed event to the destination.

{{< info >}}
Events must follow the [RudderStack event spec]({{< ref "event-spec/standard-events/_index.md" >}}). When they do, RudderStack handles destination-specific formatting for you.
{{< /info >}}

#### Cloud mode transformations

You can connect a [transformation]({{< ref "transformations/usage.md#cloud-mode" >}}) to a cloud mode destination to filter, enrich, or mask PII before the event is converted to the destination-specific format.

See [Use transformations in cloud mode]({{< ref "transformations/usage.md#cloud-mode" >}}) for detailed setup instructions.

When a transformation is connected, custom logic runs **before** destination format conversion:

1. The RudderStack server receives the event from the SDK.
2. Your [transformation]({{< ref "transformations/overview.md" >}}) logic is applied to the event.
3. The [Transformer](https://github.com/rudderlabs/rudder-transformer) module converts the event to the destination-specific format and returns it to the server.
4. RudderStack forwards the event to the destination.

{{< image src="images/rs-cloud/rudderstack-cloud-mode.svg" alt="RudderStack cloud mode workflow with optional transformations" >}}

## Device mode

In device mode, events are sent to destinations directly from your client (web or mobile app).

{{< warning >}}
[Live Events]({{< ref "monitor/live-events.md" >}}) are not supported in device mode.
{{< /warning >}}

RudderStack SDKs load the destination's native client libraries on your website or mobile app. These libraries call destination APIs directly from the device — without routing events through the data plane (backend) for ingestion.

### How device mode works

1. The SDK loads the destination's native client library.
2. The SDK formats the event for the destination.
3. The SDK sends the event to the destination via the native SDK.

Suppose you want to send event data from your mobile app to Firebase via the RudderStack {{< legacy-tooltip "android-java" >}} (or any other mobile SDK). [Add an Android (Java) source]({{< ref "dashboard-guides/sources/_index.md#adding-a-source" >}}) and connect it to the [Firebase destination]({{< ref "destinations/streaming-destinations/firebase.md" >}}) in the dashboard.

The SDK downloads the Firebase SDK, formats events for Firebase, and sends them directly to Firebase.

#### Device mode transformations

On the [Enterprise](https://www.rudderstack.com/enterprise-quote/) plan, you can connect a [transformation]({{< ref "transformations/usage.md#device-mode" >}}) to device mode destinations. The transformation logic runs **before** the native SDK delivers events to the destination.

See [Use transformations in device mode]({{< ref "transformations/usage.md#device-mode" >}}) for detailed setup instructions.

When a device mode transformation is connected:

1. The SDK sends the event to the [Client Transformation service]({{< ref "transformations/usage.md#client-transformation-service-architecture" >}}).
2. The Client Transformation service applies the connected transformation and returns the transformed event to the SDK.
3. The SDK forwards the transformed event to the destination via the native SDK.

{{< image src="images/rs-cloud/rudderstack-device-mode.svg" alt="RudderStack device mode workflow with optional device mode transformations" >}}

## Hybrid mode

In hybrid mode, some events are sent to the destination directly from your client while others are routed through the RudderStack server.

Hybrid mode gives you:

- A single connection that captures critical event data from native SDKs
- Cloud mode benefits like faster page loads, reliable data collection, and first-party data capture

Hybrid mode is currently available for the following destinations:

- [GA4]({{< ref "destinations/streaming-destinations/google-analytics-4/_index.md" >}})
- [Braze]({{< ref "destinations/streaming-destinations/braze/_index.md" >}})
- [Leanplum]({{< ref "destinations/streaming-destinations/leanplum.md" >}}) 
- [Rockerbox]({{< ref "destinations/streaming-destinations/rockerbox/_index.md" >}})

## FAQ

#### Which connection mode should I choose?

- Choose **cloud mode** for faster page loads, reliable data collection, and first-party data capture.
- Choose **device mode** when destinations must load directly on the user's device to function correctly — for example, tools that write identifiers or session data locally.

#### How to check which connection mode is supported by the destination?

See the destination-specific [documentation]({{< ref "destinations/overview.md" >}}) — supported connection modes are listed in the **Connection compatibility** section.

#### What are the benefits of using cloud mode to send events to the destination?

In cloud mode, events are sent from the source to the RudderStack server. The server handles transformation and format conversion, so your page size and load times are unaffected.

#### Can I use an event forwarding or data plane proxy in the device mode?

Yes. You can use an event forwarding or data plane proxy with device mode destinations — the default vendor API endpoint continues to work as expected.

#### Can I use transformations in device mode?

{{< info >}}
Device Mode Transformations is a beta feature available on the [Enterprise](https://www.rudderstack.com/enterprise-quote/) plan only.
{{< /info >}}

Yes. [Device mode transformations]({{< ref "transformations/usage.md#device-mode" >}}) apply custom logic to events before they reach the destination via the native SDK.

See [Use transformations in device mode]({{< ref "transformations/usage.md#device-mode" >}}) for detailed setup instructions.

<br />
