An Expo app runs on many phones, and the bug that one user sees often depends on the device. This guide shows how to collect bug reports from an Expo app that say which screen, which element, which app version and which device, without making users fill in a form or create an account.
What one report contains
Every report that Nitpick receives has the same fields, which your agent and dashboard can filter on:
| Field | What it tells you |
|---|---|
comment |
What the user wrote, 1 to 2000 characters. |
kind |
general for a comment about the app, specific when the user pointed at something. |
screen |
The name you pass to useNitpickScreen; with Expo Router that can be the route path, such as /settings/profile. |
element and element_match |
The element you named, and whether the tap was exact, nearest or none. |
tap, element_frame, viewport |
Where the user tapped and the box of the element, in points. |
platform |
ios or android. |
app_version and build |
Read from your app config through expo-constants. |
device |
Model, OS version and language, read through expo-device. |
sdk |
The component and its version. |
On iOS the model is the identifier, such as iPhone16,1. On Android it is the manufacturer and the model name. A report never has a name, an email address or an account id, so feedback stays anonymous and you cannot write back to the user.
Make the reports point at your code
The component does not read the router for you: with Expo Router, pass usePathname() to useNitpickScreen once inside the provider (see in-app feedback for Expo). Then name the elements people tend to point at, using names that lead to the file:
<NitpickElement name="checkout.pay-button">
<Pressable onPress={pay}><Text>Pay</Text></Pressable>
</NitpickElement>
A report with element: checkout.pay-button and element_match: exact means the user tapped that very button. With nearest they tapped within 44 points of it, and with none only the screen is known.
Read and sort the reports
Filter by version and platform on the command line:
nitpick feedback list --app-version 1.4.2 --platform android
nitpick feedback show <id> --screenshot report.png
Your agent uses the MCP tools list_feedback and get_feedback, and feedback_stats counts open reports by screen, by element and by app version. When a bug only shows up on one platform, the platform field tells you before you open the screenshot.
Close the loop
Let your agent fix a report and call resolve_feedback. If the problem returns in a later build, reopen_feedback makes the report open again. The prompt that wires this up is on Cursor with Expo, and the commands are in the CLI reference.
Things the screenshot cannot show
The screenshot comes from react-native-view-shot, so a ScrollView shows only its visible part and video, maps and web views can be empty. Use the tap position and element name in those cases. Nothing is masked automatically, so wrap personal data in NitpickMask. See how the screenshot works in Expo. To add the component first, read in-app feedback for Expo. The MCP tools are described in the MCP reference.