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

# React Native

> A React Native wrapper for the chmod SDK is in progress.

<Note>
  **In progress.** A React Native package that wraps the native iOS and Android SDKs is
  under development. This page will carry installation, usage and configuration once it
  ships.

  Talk to your chmod account manager if you need it for a planned integration — timelines
  are set against real demand.
</Note>

## In the meantime

The native SDKs work in a React Native app today through a bridge you own. The flow is
launched from the native side and the outcome is sent back to JavaScript.

You would need:

<Steps>
  <Step title="Install both native SDKs">
    Follow [iOS installation](/sdk/ios/installation) and
    [Android installation](/sdk/android/installation) in the `ios/` and `android/`
    directories of your app.
  </Step>

  <Step title="Write a native module on each platform">
    One method that takes the `sdkToken`, launches the flow, and resolves a promise with
    the outcome. On Android the launch has to go through an `ActivityResultContract`
    registered on the host activity; on iOS it presents from the root view controller.
  </Step>

  <Step title="Map the result">
    Convert `completed` / `cancelled` / `failed` and the failure code into a plain object
    your JavaScript can switch on.
  </Step>
</Steps>

The shape you are aiming for:

```typescript lines theme={null}
import { NativeModules } from "react-native";

const { ChmodKyc } = NativeModules;

const { sdk_token } = await api.post("/kyc/start");

const result = await ChmodKyc.verify({
  baseUrl:  "https://api.chmod.com",
  sdkToken: sdk_token,
});

switch (result.status) {
  case "completed": showUnderReview(); break;
  case "cancelled": goBack();          break;
  case "failed":    handle(result.code); break;
}
```

<Warning>
  Everything the native guides say still applies through a bridge — `completed` does not
  mean approved, the token must come from your backend, and the permissions belong to the
  SDK. A wrapper does not change the contract.
</Warning>

## Meanwhile

<CardGroup cols={2}>
  <Card title="iOS SDK" icon="apple" href="/sdk/ios/installation">
    Available now.
  </Card>

  <Card title="Android SDK" icon="android" href="/sdk/android/installation">
    Available now.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.