Quickstart
Install the SDK and see your first events in five minutes.
By the end of this page your app will send screens, taps and crashes to Riveora, and you’ll see them arrive live in the dashboard.
Create a project
In the dashboard, click Create app (later apps: Add another app in the app switcher) and give it a name. You’ll get a public project key that starts with pk_. It’s safe to ship inside your app: it can only send events, never read data.
Install the packages
npx expo install @riveora/react-native @react-native-async-storage/async-storage react-native-view-shot expo-constantsAsyncStorage and react-native-view-shot have native code, so rebuild your app once after installing them. Reloading in Metro isn’t enough:
npx expo run:ios # or: npx expo run:androidThen close the app completely and open the new build. Expo Go already includes both, so skip this there. If view-shot is missing from a build, everything else still works; only screen pictures are off.
Wrap your app with the provider
Add the provider at the root of your app, together with the screen tracker for your navigation library.
Your app’s Install SDK page in the dashboard shows this for Expo Router, React Navigation or React Native without Expo, with your project key already filled in. If it also shows an endpoint line, keep it: that’s the address your events go to.
import { Stack } from 'expo-router';
import Constants from 'expo-constants';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { RiveoraProvider, AsyncStorageAdapter } from '@riveora/react-native';
import { ExpoRouterTracker } from '@riveora/react-native/expo-router';
const storage = new AsyncStorageAdapter(AsyncStorage);
export default function RootLayout() {
return (
<RiveoraProvider
projectKey="pk_your_project_key"
storage={storage}
appVersion={Constants.expoConfig?.version}
consent="granted"
>
<ExpoRouterTracker />
<Stack />
</RiveoraProvider>
);
}Without storage, the SDK keeps its data in memory only, so every app launch looks like a brand-new user. Without consent="granted", nothing is sent at all. If you ask users for permission first, see Privacy & consent.
Without appVersion, Riveora can’t tell which release an event came from, so “Did my fix work?” can’t compare versions. It isn’t detected automatically. In Expo, pass Constants.expoConfig?.version as above; in bare React Native, use DeviceInfo.getVersion() from react-native-device-info. See App version.
Run your app and check Live events
Start your app and move between a couple of screens. Open Live events in the dashboard: events arrive within about ten seconds, because the SDK sends them in batches every 10 seconds or every 20 events.
In a development build, the Screens page also lists every screen in your app within a few seconds, with a checklist of screens that still need a picture. Open those screens and they tick off.
Not seeing anything? Look for Riveora warnings in your console first: the SDK tells you when consent or storage is missing, or when the project key isn’t recognised. For more detail, pass logLevel="debug" to the provider and check Troubleshooting.