# Install for Expo and React Native The component works in Expo Go on iOS and Android. It only uses parts that Expo Go includes: `react-native-view-shot`, `expo-device` and `expo-constants`. **Not on the web.** The component does not work in Expo for the web (`expo start --web`). Do not test it there. A coding agent must not test through the web, and must never switch off the security of a browser (for example `--disable-web-security`) to make a request work: reports sent that way arrive as the wrong platform. Test in Expo Go on a simulator or a device, and ask the builder to tap (see step 5). You need a Nitpick account with a running subscription to get an app and a public key. `nitpick login` opens the browser where you create the account and start the subscription; see [Billing and limits](/docs/billing). The component itself needs nothing but the public key. ## 1. Add the package ```bash npx expo install @nitpickhq/react-native react-native-view-shot expo-device expo-constants ``` ## 2. Wrap your app With Expo Router, in `app/_layout.tsx`: ```tsx import { Stack, usePathname } from "expo-router"; import { NitpickProvider, useNitpickScreen } from "@nitpickhq/react-native"; function ScreenName() { useNitpickScreen(usePathname()); return null; } export default function RootLayout() { return ( ); } ``` The public key is safe to ship in the app. It can only create reports for this one app. With Expo Router the screen name is the route path (`/settings/profile`), but only through the `ScreenName` component above: the component does not read the router by itself, and without it the `screen` field of every report stays empty. With React Navigation, pass your navigation container ref to the screen name hook (see [Screen names](/docs/screens-elements-masking)). Use your own button instead of the edge tab: ```tsx import { Button } from "react-native"; import { useNitpick } from "@nitpickhq/react-native"; function FeedbackButton() { const { open } = useNitpick(); return