---
title: Compatibility - React Native
description: Requirements and limitations to develop with the Contentsquare React Native Bridge
lastUpdated: 25 February 2026
source_url:
  html: https://docs.contentsquare.com/en/csq-sdk-react-native/product-analytics/compatibility/
  md: https://docs.contentsquare.com/en/csq-sdk-react-native/product-analytics/compatibility/index.md
---

Before implementing the SDK, make sure your app meets the following technical prerequisites to avoid integration issues and ensure optimal performance.

## Supported platforms

Currently, only React Native application on the following platforms are supported by the `CSQ React Native Bridge`:

* Android
* iOS

If you need to use the SDK on another platform, contact our support team.

Hybrid applications are not supported. By hybrid application, we mean [integrating React Native component ↗](https://reactnative.dev/docs/integration-with-existing-apps) to existing native applications.

## Compatibility matrix

Each version of the CSQ bridge will be linked to specific, fixed versions of each native SDK. In order to make that clear, here is a compatibility table to consider when choosing your version of the bridge. Refer to the [React Native Bridge Changelog](https://docs.contentsquare.com/en/react-native/changelog/) to know what the changes are for each version.

| Bridge Version | iOS SDK Version | Android SDK Version | Min React Native Version | Max React Native Version |
| - | - | - | - | - |
| 6.1.0 | 1.6.0 | 1.5.0 | 0.71.0[1](#user-content-fn-1) | 0.84.x |
| 6.0.5 | 1.5.1 | 1.4.7 | 0.71.0[1](#user-content-fn-1) | 0.82.x |
| 6.0.3 | 1.5.1 | 1.4.2 | 0.71.0[1](#user-content-fn-1) | 0.82.x |
| 6.0.2 | 1.5.1 | 1.4.2 | 0.71.0[1](#user-content-fn-1) | 0.82.x |
| 6.0.1 | 1.5.1 | 1.4.2 | 0.71.0[1](#user-content-fn-1) | 0.81.x |

## Important note about React Native apps with native code

Depending on if you created your app as a React Native first app, or if you gradually added some React Native code to your Native first app, you might be using some non JavaScript elements in your app, as well as a mix of native screens and JavaScript screens. If that is the case, it is your responsibility to track all of the screens, either by calling our native SDKs directly in the first case, or the bridge in the second. The same remark applies for other functionalities of the SDK - for example, you might need to send a Transaction Event via the native SDK or via the bridge, depending on the technology used to create your buying page.

Have a look at the [Android](https://docs.contentsquare.com/en/android/) and [iOS](https://docs.contentsquare.com/en/ios/) SDKs to find out how to call them in native parts of your app.

Also, note that we specifically cover the use of the JavaScript bridge in this documentation. You should never call the Bridge's NativeModule directly yourself. If for any reason you do so, know that we cannot certify that your implementation will work as expected. Only call our SDKs through the JavaScript CSQ module we provide in you JavaScript code (as explained in this document), or directly in your native code.

## Note about using CSQ along with Expo

To use the SDK on an Expo app, you need to have an Expo project with EAS (Expo Application Services). The SDK compatibility with Expo projects requires the extra steps described below.

### Configuration

Add the plugin and your CSQ bundle identifier to your app configuration file:

```jsx
{
  "expo": {
    ...,
    "ios": {
      "bundleIdentifier": "com.cs.expo.app", // replace with your bundle id
      ...
    },
    "android": {
      "package": "com.cs.expo.app", // replace with your bundle id
      ...
    },
    "plugins": [
      "@contentsquare/react-native-bridge",
    ],
}
```

### Run

To run your Expo app with the CSQ SDK, you can't use Expo Go since it needs native files and features. To run your app, use `expo run:ios` or `expo run:android`.

Or, you can replace the scripts to your app in your project's `package.json`:

```javascript
"scripts": {
  ...
  "android": "expo run:android",
  "ios": "expo run:ios",
},
```

## Known limitations and recommendations

### React Native Webview goBack()

Warning

iOS only: We have identified an issue with the `goBack()` method of the React Native WebView component. When this method is called, it may not be registered by Session Replay in some cases, leading to some webview pages not being replayed correctly.

### Use of PanResponder

If you are using PanResponders in your app, a bug might appear on the element implementing it where it will only move for about a second and then freeze. This bug is caused by a conflict between the React Native SDK and our Bridge related to tracking swipe events. May you encounter this bug, the current workaround is to stop the Contentsquare tracking when the pan gesture starts, and resume it as the gesture ends, as follows:

```javascript
const panResponder = useRef(
  PanResponder.create({
    [...]
    onPanResponderGrant: (evt, gestureState) => {
 Contentsquare.stopTracking();
 [...]
    },
    onPanResponderRelease: (evt, gestureState) => {
 Contentsquare.resumeTracking();
 [...]
    },
    [...]
  })


).current;
```

Note that, although this workaround fixes the bug, applying it means that swipes on view using the PanResponder won't be tracked by Contentsquare.

## Footnotes

1. We support all React Native versions that are currently maintained and listed on the official [React Native documentation ↗](https://reactnative.dev/versions). [↩](#user-content-fnref-1) [↩2](#user-content-fnref-1-2) [↩3](#user-content-fnref-1-3) [↩4](#user-content-fnref-1-4) [↩5](#user-content-fnref-1-5)
