> This is a page from the ElevenLabs documentation. For a complete page index, fetch https://elevenlabs.io/docs/llms.txt. For the full documentation in a single file, fetch https://elevenlabs.io/docs/llms-full.txt. # React Native SDK > **Info** > > Refer to the [ElevenAgents overview](/docs/eleven-agents/overview) for an explanation of how > ElevenAgents works. ## Installation Install the package and its dependencies in your React Native project. ```shell npm install @elevenlabs/react-native @livekit/react-native @livekit/react-native-webrtc livekit-client ``` > **Tip** > > An example app using this SDK with Expo can be found > [here](https://github.com/elevenlabs/packages/tree/main/examples/react-native-expo) > **Tip** > > Upgrading from an earlier version? Run `npx skills add elevenlabs/packages` to install the > `elevenlabs:sdk-migration` skill for your AI coding agent, which automates import changes, > `ConversationProvider` wrapping, and API updates. ## Requirements * React Native with LiveKit dependencies * Microphone permissions configured for your platform * Expo compatibility (development builds only) * React Native 0.79.0+, or Metro configured to resolve `package.json` `"exports"` on older versions > **Warning** > > This SDK was designed and built for use with the Expo framework. Due to its dependency on > LiveKit's WebRTC implementation, it requires development builds and cannot be used with Expo Go. > **Warning** > > `@elevenlabs/react-native` resolves its React Native entry point via the `package.json` > [`"exports"`](https://nodejs.org/api/packages.html#exports) field. Metro only resolves > `"exports"` by default starting with Metro 0.82.0, which shipped in [React Native 0.79.0](https://reactnative.dev/blog/2025/04/08/react-native-0.79) (released April 8, 2025). If > you're on a React Native version older than 0.79, set `resolver.unstable_enablePackageExports = > true` in your `metro.config.js` so this package resolves correctly: > > ```js > const { getDefaultConfig } = require("metro-config"); > > const config = getDefaultConfig(__dirname); > config.resolver.unstable_enablePackageExports = true; > > module.exports = config; > ``` ## Setup ### Provider Setup Wrap your app with the `ConversationProvider` to enable ElevenAgents functionality. ```tsx import { ConversationProvider } from "@elevenlabs/react-native"; import React from "react"; function App() { return ( ); } ``` > **Note** > > `@elevenlabs/react-native` re-exports `ConversationProvider` and all hooks from > `@elevenlabs/react`. The API is identical to the web React SDK — see the [React SDK documentation](/docs/eleven-agents/libraries/react) for the full API reference. ## Usage All hooks from the React SDK are available via `@elevenlabs/react-native`: * **`useConversation`** — convenience hook combining all state and methods * **`useConversationControls`** — action methods (startSession, endSession, etc.) * **`useConversationStatus`** — connection status * **`useConversationInput`** — mute state * **`useConversationMode`** — speaking/listening state * **`useConversationFeedback`** — feedback availability and submission * **`useConversationClientTool`** — dynamic client tool registration * **`useRawConversation`** — raw conversation instance ### Starting a conversation ```tsx import { useConversationControls, useConversationStatus } from "@elevenlabs/react-native"; import React from "react"; import { View, Text, Button } from "react-native"; function ConversationComponent() { const { startSession, endSession } = useConversationControls(); const { status } = useConversationStatus(); const handleStart = async () => { await startSession({ agentId: "agent_7101k5zvyjhmfg983brhmhkd98n6", }); }; return ( Status: {status}