SDK Installation (React Native)
Detour provides a React Native SDK (@swmansion/react-native-detour) compatible with Expo and bare React Native projects.
Before installation, make sure your app is created in the Detour Dashboard and you have:
appIDfrom API configuration- publishable
apiKeyfrom API configuration - platform integration snippets from App configuration
Install package
- NPM
- YARN
- PNPM
- BUN
npm install @swmansion/react-native-detour
yarn add @swmansion/react-native-detour
pnpm add @swmansion/react-native-detour
bun add @swmansion/react-native-detour
Install peer dependencies (Expo projects)
For Expo projects (including prebuild), install peer dependencies with Expo CLI so versions are matched to your Expo SDK:
npx expo install expo-application expo-clipboard expo-constants expo-localization @react-native-async-storage/async-storage
Bare React Native projects
If you are not using Expo CLI, install peer dependencies with your package manager and pin versions compatible with your React Native/Expo Modules setup.
- NPM
- YARN
- PNPM
- BUN
npm install expo-application expo-clipboard expo-constants expo-localization @react-native-async-storage/async-storage
yarn add expo-application expo-clipboard expo-constants expo-localization @react-native-async-storage/async-storage
pnpm add expo-application expo-clipboard expo-constants expo-localization @react-native-async-storage/async-storage
bun add expo-application expo-clipboard expo-constants expo-localization @react-native-async-storage/async-storage
@react-native-async-storage/async-storageis optional if you provide a custom storage adapter in config. See Custom Storage.
Expo Modules setup (React Native CLI)
The peer dependencies above (expo-application, expo-clipboard, expo-constants, expo-localization) are Expo Modules — they ship native code that has to be autolinked into your android/ and ios/ projects. In an Expo project this happens automatically; in a bare React Native CLI project you add Expo Modules once:
npx install-expo-modules@latest
This sets up Expo Modules autolinking (and on iOS raises the deployment target to the Expo Modules minimum).
install-expo-modules also switches the native JS bundling step to Expo CLI (export:embed), which requires metro.config.js to extend expo/metro-config (a superset of @react-native/metro-config, safe in bare projects). The tool usually migrates this for you — verify it, especially if you had a customized metro.config.js:
const { getDefaultConfig } = require("expo/metro-config");
const { mergeConfig } = require("@react-native/metro-config");
module.exports = mergeConfig(getDefaultConfig(__dirname), {});
Then align the Expo package versions to your setup:
npx expo install --fix
If the app throws at startup or a release build fails after adding Expo Modules, see bare React Native CLI build issues.
Device info provider
The SDK reads the device model, manufacturer, and OS version for probabilistic fingerprinting (deferred-link matching). Install one of the supported providers — both are optional peer dependencies and the SDK auto-detects whichever is present:
- expo-device (recommended for Expo)
- react-native-device-info
npx expo install expo-device
npm install react-native-device-info
Choose
react-native-device-infoif your project already depends on it; otherwiseexpo-deviceis the simplest option for Expo apps. If neither is installed, fingerprinting falls back to"unknown"device values, which reduces deferred-match accuracy.
Credentials in app config
import { type Config } from '@swmansion/react-native-detour';
export const detourConfig: Config = {
apiKey: process.env.EXPO_PUBLIC_DETOUR_API_KEY!,
appID: process.env.EXPO_PUBLIC_DETOUR_APP_ID!,
shouldUseClipboard: true,
};
Keep apiKey and appID in environment variables or another secure configuration layer.
Next steps
- Implement the provider and link handling in SDK Usage.
- Pick a runnable app pattern in Examples.
- If upgrading existing code, follow Migration to v2 and start from From 0.x or From 1.0.1.