> ## Documentation Index
> Fetch the complete documentation index at: https://docs.clariodesk.com/llms.txt
> Use this file to discover all available pages before exploring further.

# React Native installation

> Bare RN and Expo (dev build + Expo Go), the config plugin, and the peer-dependency matrix.

## Compatibility

The SDK supports the full surface below: every target can open a chat, and none
of them crash.

| Capability                  | Bare RN (old + New Arch)    | Expo dev build / EAS  | Expo Go                    |
| --------------------------- | --------------------------- | --------------------- | -------------------------- |
| Device key                  | ✅ Secure Enclave / Keystore | ✅ (via config plugin) | ⚠️ software P-256 fallback |
| Secure storage              | ✅ `react-native-keychain`   | ✅ `expo-secure-store` | ✅ `expo-secure-store`      |
| Realtime (Centrifugo + SSE) | ✅                           | ✅                     | ✅                          |
| Push                        | ✅ (host Firebase)           | ✅                     | ⛔ remote push N/A in Go    |
| Attachments                 | ✅                           | ✅                     | ✅ (Expo pickers)           |
| Prebuilt UI                 | ✅                           | ✅                     | ✅                          |

The hardware key needs a dev build (Expo Go can't load native modules); the SDK
transparently falls back to a software ECDSA P-256 key, so you can evaluate the
whole flow in Expo Go and ship hardware-backed with no code change.

## Core install

```sh theme={null}
npm install @clariodesk/react-native
npm install react-native-get-random-values   # secure RNG (required)
```

<Warning>
  Import `react-native-get-random-values` once, at the very top of `index.js`,
  before any other import. The crypto layer depends on it being registered first.
</Warning>

## Peer dependencies

Install only what your stack and features need:

```sh theme={null}
# secure storage (required, pick one)
npx expo install expo-secure-store        # Expo
npm install react-native-keychain         # bare RN

# attachments (optional, only if you attach files)
npx expo install expo-image-picker expo-document-picker expo-image-manipulator   # Expo
npm install react-native-image-picker @react-native-documents/picker             # bare RN

# connectivity-reactive reconnect (optional)
npm install @react-native-community/netinfo
```

## Expo

Add the config plugin, then make a dev build (or run in Expo Go for the software
tier):

```jsonc theme={null}
{ "expo": { "plugins": ["@clariodesk/react-native"] } }
// parameterize: ["@clariodesk/react-native", { "enableCamera": false, "enablePush": true }]
```

```sh theme={null}
npx expo prebuild && npx expo run:ios
```

The config plugin wires the native module and adds the iOS photo/camera/mic
usage strings needed for attachments.

## Bare React Native

Autolinking handles the native module. Run the Expo modules installer once
(the device-key module is authored with the Expo Modules API), then install pods:

```sh theme={null}
npx install-expo-modules@latest
cd ios && pod install
```

## Push (separate package)

Push lives in `@clariodesk/react-native-push` so Firebase never autolinks into a
headless host. See the [push guide](/react-native/push).

<Card title="Next: lifecycle" icon="user-check" href="/react-native/lifecycle">
  Wire login, launch, logout, and user-switch.
</Card>
