Readme · Guides · Reference · Contributing
Warning
The Optimization SDK Suite is pre-release (alpha). Breaking changes can be published at any time.
This is a reference implementation for the Optimization React Native SDK and is part of the Contentful Optimization SDK Suite.
Use this implementation when you need an end-to-end React Native example for Android and iOS app targets. It demonstrates SDK initialization, optimized entry rendering, interaction tracking, navigation/screen tracking, offline behavior, preview-panel scenarios, and Detox E2E coverage.
- Node.js >= 20.19.0 (24.13.0 recommended to match
.nvmrc) - pnpm 10.x
- An Android emulator available and running for Android Detox flows
- Xcode with an iOS Simulator available for iOS Detox flows
Run all steps from the monorepo root.
-
Install pnpm packages:
pnpm install
-
Build and package SDK tarballs used by this implementation:
pnpm build:pkgs
-
Install implementation dependencies:
pnpm implementation:run -- react-native-sdk implementation:install
See implementations/react-native-sdk/package.json for more commands.
Android E2E tests use Detox. Run these commands from the monorepo root.
-
Run the full Android E2E flow:
pnpm implementation:run -- react-native-sdk test:e2e:android:full
-
Build Android Detox binaries:
pnpm implementation:run -- react-native-sdk test:e2e:android:build
-
Run Android Detox tests only:
pnpm implementation:run -- react-native-sdk test:e2e:android:run
-
Pass script arguments through to the one-shot runner:
pnpm implementation:run -- react-native-sdk test:e2e:android:full -- --test-file e2e/offline-behavior.test.js
The one-shot Android command:
- creates
.envfrom.env.examplefor E2E - starts the mock server and Metro
- configures adb reverse
- builds the Android app (unless skipped)
- runs Detox tests
- cleans up background processes
- creates
-
Useful one-shot variants:
Skip rebuild if the app is already built:
SKIP_BUILD=true pnpm implementation:run -- react-native-sdk test:e2e:android:full
Run one test file:
pnpm implementation:run -- react-native-sdk test:e2e:android:full -- --test-file e2e/offline-behavior.test.js
Run tests matching a name pattern:
pnpm implementation:run -- react-native-sdk test:e2e:android:full -- -t "should recover gracefully when network is restored" -
Run iOS Detox commands when needed:
pnpm implementation:run -- react-native-sdk test:e2e:ios:build pnpm implementation:run -- react-native-sdk test:e2e:ios:run
Local Android E2E logging is intentionally minimal by default.
-
Enable script/service logs (Metro, mock server, and adb logcat stream):
STREAM_BACKGROUND_LOGS=true ENABLE_DEVICE_LOGCAT=true METRO_VERBOSE=true pnpm implementation:run -- react-native-sdk test:e2e:android:full
-
Increase Detox runner logging and artifacts:
pnpm --dir implementations/react-native-sdk --ignore-workspace exec detox test --configuration android.emu.debug --loglevel trace --record-logs all --take-screenshots failing --record-videos failing
-
Read generated logs:
implementations/react-native-sdk/logs/mock-server.logimplementations/react-native-sdk/logs/metro.logimplementations/react-native-sdk/logs/device.logimplementations/react-native-sdk/logs/test-results.log
- @contentful/optimization-react-native - React Native SDK package
- React Native SDK package-local dev dashboard - Interactive development harness
- Mocks package - Shared mock API server and fixtures