Plugin Reference
Full app.json options for the @dreamhorizonorg/pulse-react-native Expo config plugin.
Top Level
| Option | Required | Description |
|---|---|---|
apiKey | Yes | Project API key |
dataCollectionState | Yes | "ALLOWED", "PENDING", or "DENIED" (see Data collection consent) |
android | No | Android-specific overrides |
ios | No | iOS-specific overrides |
Top-level apiKey and dataCollectionState apply to both platforms. Use android / ios sections to override per platform.
android
Init overrides
| Option | Description |
|---|---|
apiKey | Override API key for Android only |
dataCollectionState | Override consent for Android only ("ALLOWED", "PENDING", or "DENIED") |
globalAttributes | Key/value pairs attached to all Android telemetry |
logLevel | Native Android log verbosity — debugging only, do not set in production. "VERBOSE", "DEBUG", "INFO", "WARN", "ERROR", or "NONE" (default). Case-insensitive. See Android Advanced Configuration. |
coreLibraryDesugaring | { "enabled": boolean } — when minSdkVersion < 26, set enabled: true so core library desugaring is applied at prebuild |
okHttpInstrumentation | { "enabled": boolean } — optional native OkHttp spans (Image / FastImage, etc.). See OkHttp instrumentation |
kotlin19Compat | boolean (default false) — opt-in for apps still compiling with Kotlin 1.9.x (broadly Expo SDK ≤ 52 / RN ≤ 0.76). Writes PulseReactNativeOtel_kotlin19Compat=true to android/gradle.properties so Pulse caps its transitive Kotlin runtime to 1.9-compatible versions. Leave off on Expo SDK 53+ / Kotlin 2.0+. See Setup → Kotlin 1.9.x apps |
OkHttp instrumentation
React Native on Android uses OkHttp for most HTTP traffic. This block wires native OkHttp instrumentation (Pulse OkHttp artifacts plus the Byte Buddy Gradle plugin). If you do not need outbound HTTP spans from the native stack, omit the okHttpInstrumentation key entirely.
"android": {
"okHttpInstrumentation": {
"enabled": true
}
}
Optionally pass byteBuddyGradlePluginVersion to overrride default 1.17.8 version.
android.instrumentation
| Key | Shape | Description |
|---|---|---|
crash | { "enabled": boolean } | Crash reporting |
network | { "enabled": boolean } | Network monitoring |
activity | { "enabled": boolean } | Activity lifecycle |
fragment | { "enabled": boolean } | Fragment lifecycle |
anr | { "enabled": boolean } | ANR detection |
slowRendering | { "enabled": boolean } | Slow frame detection |
interaction | { "enabled": boolean } | Interactions |
ios
Init overrides
| Option | Description |
|---|---|
apiKey | Override API key for iOS only |
dataCollectionState | Override consent for iOS only ("ALLOWED", "PENDING", or "DENIED") |
globalAttributes | Key/value pairs attached to all iOS telemetry |
logLevel | Native iOS log verbosity — debugging only, do not set in production. "VERBOSE", "DEBUG", "INFO", "WARN", "ERROR", or "NONE" (default). Case-insensitive. See iOS SDK Initialization. |
ios.configuration
| Key | Type | Description |
|---|---|---|
includeScreenAttributes | boolean | Attach screen metadata to telemetry |
includeNetworkAttributes | boolean | Attach network metadata |
includeGlobalAttributes | boolean | Attach global attributes |
ios.instrumentation
Simple toggles — { "enabled": boolean } each:
crash, appLifecycle, screenLifecycle, appStartup, location
Full Example
{
"expo": {
"plugins": [
[
"@dreamhorizonorg/pulse-react-native",
{
"apiKey": "your-api-key",
"dataCollectionState": "PENDING",
"android": {
"globalAttributes": { "platform": "android" },
"coreLibraryDesugaring": { "enabled": true },
"okHttpInstrumentation": { "enabled": true },
"instrumentation": {
"crash": { "enabled": true },
"network": { "enabled": true },
"interaction": { "enabled": true }
}
},
"ios": {
"globalAttributes": { "platform": "ios" },
"configuration": {
"includeScreenAttributes": true
},
"instrumentation": {
"crash": { "enabled": true },
"screenLifecycle": { "enabled": false },
}
}
}
]
]
}
}