The React Native architecture the app is running on. `new` for the New Architecture, where native modules are resolved as TurboModules through `TurboModuleRegistry`, `legacy` for the Old Architecture bridge.
{
"key": "react_native.architecture",
"brief": "The React Native architecture the app is running on. `new` for the New Architecture, where native modules are resolved as TurboModules through `TurboModuleRegistry`, `legacy` for the Old Architecture bridge.",
"type": "string",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"examples": [
"new",
"legacy"
],
"alias": [
"turbo_module.arch"
],
"changelog": [
{
"version": "0.24.0",
"prs": [
564
],
"description": "Added react_native.architecture attribute"
}
]
}
The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated.
{
"key": "react_native.module.call.distinct_count",
"brief": "The number of distinct native module and method pairs called during the lifetime of the span. Useful as a cardinality signal when the per-method breakdown has been truncated.",
"type": "integer",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"examples": [
7
],
"alias": [
"turbo_module.unique_methods",
"turbo_modules.unique_methods"
],
"changelog": [
{
"version": "0.24.0",
"prs": [
564
],
"description": "Added react_native.module.call.distinct_count attribute"
}
]
}
The combined wall-clock duration of all native module calls observed during the lifetime of the span, in milliseconds. Calls overlap, so this can exceed the span duration.
The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback.
{
"key": "react_native.module.error.count",
"brief": "The number of native module calls that failed during the lifetime of the span. A call counts as failed when it threw, rejected, or — on the Old Architecture bridge only — invoked its failure callback.",
"type": "integer",
"apply_scrubbing": {
"key": "manual"
},
"is_in_otel": false,
"visibility": "public",
"examples": [
2
],
"alias": [
"turbo_module.total_error_count",
"turbo_modules.total_error_count"
],
"changelog": [
{
"version": "0.24.0",
"prs": [
564
],
"description": "Added react_native.module.error.count attribute"
}
]
}
The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key.
Scrubbing ReasonNative module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable
{
"key": "react_native.module.name",
"brief": "The name of the native module the call was dispatched to. On the New Architecture this is the TurboModule name, on the Old Architecture the `NativeModules` key.",
"type": "string",
"apply_scrubbing": {
"key": "manual",
"reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable"
},
"is_in_otel": false,
"visibility": "public",
"examples": [
"RNDeviceInfo"
],
"alias": [
"turbo_module.name"
],
"changelog": [
{
"version": "0.24.0",
"prs": [
564
],
"description": "Added react_native.module.name attribute"
}
]
}
{
"key": "react_native.module.top.name",
"brief": "The native module and method that accounted for the most total duration during the lifetime of the span, formatted as `<module>.<method>`.",
"type": "string",
"apply_scrubbing": {
"key": "manual",
"reason": "Native module and method names are app-defined identifiers, but scrubbing them would make the call attribution unusable"
},
"is_in_otel": false,
"visibility": "public",
"examples": [
"RNDeviceInfo.getUniqueId"
],
"alias": [
"turbo_module.top_module"
],
"changelog": [
{
"version": "0.24.0",
"prs": [
564
],
"description": "Added react_native.module.top.name attribute"
}
]
}