# stringee-react-native-v2

> The Stringee communication platform makes it easy to embed high-quality interactive video, voice, SMS into webs and mobile apps.

Latest version **1.1.3** (published 2026-10-16) · MIT license · 0 weekly downloads

## Install

```sh
npm install stringee-react-native-v2
pnpm add stringee-react-native-v2
yarn add stringee-react-native-v2
bun add stringee-react-native-v2
```

## Health

**Score 65/100 (B)** — status: active.

Positive: has types; no vulnerabilities; recently updated; high maintenance score; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 1.1.3 |
| Published | 2026-10-16 |
| First published | 2023-10-17 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 703.2 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Stringee |
| Maintainers | stringeecom |
| Keywords | stringee, react-native, webrtc, ios, android, video, react |

## Links

- npm: https://www.npmjs.com/package/stringee-react-native-v2
- Repository: https://github.com/stringeecom/stringee-react-native-v2
- Homepage: https://stringee.com
- Issues: https://github.com/stringeecom/stringee-react-native-v2/issues
- npm.io page: https://npm.io/package/stringee-react-native-v2

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 1.1.3 (latest) — 2026-10-16
- 1.1.2 — 2026-10-09
- 1.1.1 — 2026-09-10
- 1.1.0 — 2026-08-13
- 1.0.11 — 2026-05-08
- 1.0.10 — 2026-03-23
- 1.0.9 — 2026-02-26
- 1.0.8 — 2025-10-30
- 1.0.7 — 2025-10-28
- 1.0.6 — 2025-10-24
- 1.0.5 — 2025-10-08
- 1.0.4 — 2025-02-06
- 1.0.3 — 2024-12-16
- 1.0.2 — 2024-12-07
- 1.0.1 — 2024-11-08
- … 2 more at https://npm.io/package/stringee-react-native-v2/versions

## README

# stringee-react-native-v2

React Native SDK for adding Stringee voice/video calls, custom messages, chat,
and live-chat features to Android and iOS applications.

The package supports the same package-root imports in JavaScript and TypeScript.
JavaScript consumers receive precompiled CommonJS; TypeScript consumers also
receive strict declarations.

## Requirements

- React Native `>=0.60`
- iOS `13.0` or later
- AndroidX-enabled Android project
- A Stringee access token generated by a trusted backend

Expo is supported through a development build or a production build. Expo Go is
not supported because this package contains custom native modules and a native
video view.

## Installation

```bash
npm install stringee-react-native-v2
```

## Expo projects

The limitation of older Expo managed projects was Expo Go: its native binary
contains only the native libraries selected by Expo. It cannot load this SDK at
runtime. Current Expo projects can use the SDK by compiling it into a custom
development or production build.

Stringee remains a standard React Native native library; it does not need to be
rewritten as an Expo Module. Expo autolinking discovers
`RNStringeeReactPackage` on Android and `RNStringee.podspec` on iOS. Do not add
`expo-module.config.json`, manually register `RNStringeeReactPackage`, or add the
pod by hand.

| Expo runtime | Supported | Required action |
|---|---:|---|
| Expo Go / Snack using Expo Go | No | Use a development build instead |
| Local development build | Yes | Run `npx expo run:android` or `npx expo run:ios` |
| EAS development/preview/production build | Yes | Build a new native binary with EAS |
| OTA JavaScript update | Yes, after installation | Cannot add or upgrade the native SDK by itself |

Autolinking does not configure permissions owned by the host application. This
release does not include an Expo config plugin, so a project that uses Expo CNG
must declare them in `app.json` or `app.config.js`:

```json
{
  "expo": {
    "ios": {
      "infoPlist": {
        "NSCameraUsageDescription": "This app uses the camera for video calls.",
        "NSMicrophoneUsageDescription": "This app uses the microphone for calls."
      }
    },
    "android": {
      "permissions": [
        "android.permission.INTERNET",
        "android.permission.ACCESS_NETWORK_STATE",
        "android.permission.ACCESS_WIFI_STATE",
        "android.permission.RECORD_AUDIO",
        "android.permission.MODIFY_AUDIO_SETTINGS",
        "android.permission.CAMERA",
        "android.permission.BLUETOOTH",
        "android.permission.BLUETOOTH_CONNECT"
      ]
    }
  }
}
```

These entries add build-time declarations only. On Android, request camera,
microphone, and `BLUETOOTH_CONNECT` at runtime with React Native's
`PermissionsAndroid` before using the related call feature.

Create and run a development build instead of opening the application in Expo
Go:

```bash
npx expo install expo-dev-client
npx expo prebuild --clean
npx expo run:android
# or
npx expo run:ios
```

EAS Build also works. When the repository does not contain `android` and `ios`
directories, EAS applies the app config during prebuild. Rebuild the development
client after installing or upgrading this SDK because its native binaries have
changed.

Running only `npx expo start` or `npx expo prebuild` is not enough on first
installation: prebuild generates the native projects, but the development
client still has to be compiled and installed. A Stringee config plugin is not
required for native module registration; a config plugin is only needed to
automate native configuration that cannot be represented in app config.

Do not edit generated `AndroidManifest.xml` or `Info.plist` in a CNG project.
A local config plugin is only needed for optional `<uses-feature>` declarations
or the legacy Bluetooth permission's `maxSdkVersion="30"` attribute.

See Expo's documentation for
[development builds](https://docs.expo.dev/develop/development-builds/introduction/),
[permissions](https://docs.expo.dev/guides/permissions/), and
[config plugins](https://docs.expo.dev/config-plugins/plugins/). The
[`expo-build-properties` reference](https://docs.expo.dev/versions/latest/sdk/build-properties/)
documents `android.extraProguardRules`.

This integration was verified with a clean Expo SDK 57 / React Native 0.86
fixture using New Architecture: Expo detected both native targets, Android
`assembleDebug` completed, and the iOS `RNStringee` pod compiled for the
simulator. A TypeScript screen importing `StringeeClient` and rendering
`StringeeVideoView` also passed type checking and Metro's Android export.

## React Native projects with native folders

### iOS

Install CocoaPods dependencies:

```bash
cd ios
pod install
cd ..
```

Open the generated `.xcworkspace` rather than the `.xcodeproj`. Add camera and
microphone usage descriptions to the application `Info.plist`:

```xml
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) uses the camera for video calls.</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) uses the microphone for calls.</string>
```

The podspec resolves Stringee iOS SDK `2.0.2` automatically.

### Android

Enable AndroidX in the application `gradle.properties`:

```properties
android.useAndroidX=true
```

Add the required permissions and hardware declarations to
`android/app/src/main/AndroidManifest.xml`:

```xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission
    android:name="android.permission.BLUETOOTH"
    android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="false" />
<uses-feature android:glEsVersion="0x00020000" android:required="false" />
```

Request camera, microphone, and any required Bluetooth permission at runtime on
Android versions where they are dangerous permissions.

Stringee Android SDK `2.1.18` includes its required R8 rules. Do not add
package-wide Stringee or WebRTC keep rules to the host application.

The package resolves Stringee Android SDK `2.1.18` and WebRTC `150.7871.01`.
Do not add separate Stringee, WebRTC, or Volley dependencies to the host app.

## JavaScript and TypeScript projects

JavaScript and TypeScript projects use the same native setup and the same
package-root imports. No additional Babel or Metro configuration is required:

- JavaScript receives compiled CommonJS and does not need TypeScript installed.
- TypeScript resolves the bundled declarations automatically with a normal React
  Native or Expo `tsconfig.json`; `skipLibCheck` is not required.
- Use named imports from `stringee-react-native-v2`. Do not import from `src` or
  `lib/commonjs`, because those are implementation paths.

JavaScript can use either module syntax supported by the application:

```js
import {StringeeClient} from 'stringee-react-native-v2';

// CommonJS projects can use:
const {StringeeCall} = require('stringee-react-native-v2');
```

TypeScript can import runtime values normally and public interfaces as
type-only imports:

```ts
import {StringeeClient} from 'stringee-react-native-v2';
import type {StringeeClientOptions} from 'stringee-react-native-v2';

const options: StringeeClientOptions = {};
const client = new StringeeClient(options);
```

When upgrading an existing app, remove any old deep imports into the package
source. If Metro still serves declarations or JavaScript from the previous
version, reinstall dependencies and restart it with `npx expo start --clear` or
`npx react-native start --reset-cache`.

## Basic usage

```ts
import {
  StringeeClient,
  StringeeClientListener,
} from 'stringee-react-native-v2';

const client = new StringeeClient();
const listener = new StringeeClientListener();

listener.onConnect = (_connectedClient, userId) => {
  console.log('Connected as', userId);
};

listener.onFailWithError = (_failedClient, code, message) => {
  console.error('Stringee connection failed', code, message);
};

listener.onIncomingCall = (_connectedClient, call) => {
  console.log('Incoming call from', call.from);
};

client.setListener(listener);
client.connect(accessToken);
```

Listeners use optional callbacks, so applications can assign only the events
they need. On sign-out or component cleanup:

```ts
client.unregisterEvents();
client.disconnect();
```

Never embed a Stringee secret or long-lived production access token in the app.

## Local example

The [`example`](./example) app is a React Native `0.84` TypeScript consumer that
links this repository through `file:..`.

```bash
npm run example:install
npm run example:start

# Run in another terminal
npm run example:android
# or
npm run example:ios
```

See [`example/README.md`](./example/README.md) for supported flows and native
prerequisites.

## Documentation

- [React Native integration](./docs/react-native-integration.md)
- [API reference](./docs/api-reference.md)
- [Migration guide](./MIGRATEGUIDE.md)
- [SDK architecture](./docs/architecture.md)
- [Changelog](./CHANGELOG.md)

---
_Source: https://npm.io/package/stringee-react-native-v2 · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
