# React Native product analytics installation - Docs

Our React Native library enables you to integrate PostHog with your React Native project. For Expo projects, there are no mobile native dependencies outside of supported Expo packages.

1.  1

    ## Install the package

    Required

    Install the PostHog React Native library and its dependencies:

    PostHog AI

    ### Expo

    ```bash
    npx expo install posthog-react-native expo-file-system expo-application expo-device expo-localization
    ```

    ### yarn

    ```bash
    yarn add posthog-react-native @react-native-async-storage/async-storage react-native-device-info react-native-localize
    # for iOS
    cd ios && pod install
    ```

    ### npm

    ```bash
    npm i -s posthog-react-native @react-native-async-storage/async-storage react-native-device-info react-native-localize
    # for iOS
    cd ios && pod install
    ```

2.  2

    ## Configure PostHog

    Required

    PostHog is most easily used via the `PostHogProvider` component. Wrap your app with the provider:

    App.tsx

    PostHog AI

    ```jsx
    import { PostHogProvider } from 'posthog-react-native'
    export function MyApp() {
        return (
            <PostHogProvider
                apiKey="<ph_project_token>"
                options={{
                    host: "https://us.i.posthog.com",
                }}
            >
                <RestOfApp />
            </PostHogProvider>
        )
    }
    ```

3.  3

    ## Send events

    Recommended

    Once installed, PostHog will automatically start capturing events. You can also manually send events using the `usePostHog` hook:

    Component.tsx

    PostHog AI

    ```jsx
    import { usePostHog } from 'posthog-react-native'
    function MyComponent() {
        const posthog = usePostHog()
        const handlePress = () => {
            posthog.capture('button_pressed', {
                button_name: 'signup'
            })
        }
        return <Button onPress={handlePress} title="Sign Up" />
    }
    ```

4.  4

    ## Next steps

    Recommended

    Now that you're capturing events, continue with the resources below to learn what else Product Analytics enables within the PostHog platform.

    | Resource | Description |
    | --- | --- |
    | [Capturing events](/docs/product-analytics/capture-events.md) | Learn how to capture custom events beyond autocapture |
    | [Identifying users](/docs/product-analytics/identify.md) | Associate events with specific users |
    | [Creating insights](/docs/product-analytics/insights.md) | Build trends, funnels, and retention charts |
    | [Group analytics](/docs/product-analytics/group-analytics.md) | Track events at the company or account level |

### React Native Web and macOS

If you're using [React Native Web](https://github.com/necolas/react-native-web) or [React Native macOS](https://github.com/microsoft/react-native-macos), don't use [expo-file-system](https://github.com/expo/expo/tree/master/packages/expo-file-system) since Web and macOS targets aren't supported. Use [@react-native-async-storage/async-storage](https://github.com/react-native-async-storage/async-storage) instead.

### Without the PostHogProvider

If you prefer not to use the provider, initialize PostHog in its own file and import the instance:

posthog.ts

PostHog AI

```jsx
import PostHog from 'posthog-react-native'
export const posthog = new PostHog('<ph_project_token>', {
  host: 'https://us.i.posthog.com' // usually 'https://us.i.posthog.com' or 'https://eu.i.posthog.com'
})
```

Then access PostHog by importing your instance:

React Native

PostHog AI

```jsx
import { posthog } from './posthog'
export function MyApp() {
    useEffect(() => {
        posthog.capture('event_name')
    }, [])
    return <View>Your app code</View>
}
```

You can also use this instance with the PostHogProvider:

React Native

PostHog AI

```jsx
import { posthog } from './posthog'
export function MyApp() {
  return <PostHogProvider client={posthog}>{/* Your app code */}</PostHogProvider>
}
```

### Community questions

Ask a question

### Was this page useful?

HelpfulCould be better