diff --git a/docs/platforms/react-native/guides/expo/index.mdx b/docs/platforms/react-native/guides/expo/index.mdx index 38ad51e19c6e9..564ecb802efc2 100644 --- a/docs/platforms/react-native/guides/expo/index.mdx +++ b/docs/platforms/react-native/guides/expo/index.mdx @@ -161,7 +161,7 @@ To verify that everything is working as expected, build the `Release` version of ## Expo-Specific Features -- [Expo Updates](/platforms/react-native/guides/expo/manual-setup/expo/expo-updates/) — Automatic OTA update context, searchable tags, and emergency launch alerts +- [Expo Updates](/platforms/react-native/guides/expo/manual-setup/expo/expo-updates/) — Automatic OTA update context, searchable tags, performance spans for update checks and downloads, and emergency launch alerts - [EAS Build Hooks](/platforms/react-native/guides/expo/manual-setup/expo/eas-build-hooks/) — Capture build failures and lifecycle events from EAS Build - [Sentry Android Gradle Plugin](/platforms/react-native/guides/expo/manual-setup/expo/gradle/) — Advanced Android build configuration - [Expo Router tracing](/platforms/react-native/guides/expo/tracing/instrumentation/expo-router/) — Navigation transitions, performance spans, prefetch instrumentation, and per-route `ErrorBoundary` capture diff --git a/docs/platforms/react-native/guides/expo/manual-setup/expo/expo-updates.mdx b/docs/platforms/react-native/guides/expo/manual-setup/expo/expo-updates.mdx index 1f2a0b61f42a0..0899b0ba5f563 100644 --- a/docs/platforms/react-native/guides/expo/manual-setup/expo/expo-updates.mdx +++ b/docs/platforms/react-native/guides/expo/manual-setup/expo/expo-updates.mdx @@ -1,10 +1,10 @@ --- title: Expo Updates -description: "Automatic context, breadcrumbs, and alerts for Expo OTA updates." +description: "Automatic context, breadcrumbs, performance spans, and alerts for Expo OTA updates." sidebar_order: 20 --- -When you ship OTA updates with Expo Updates, events captured by Sentry are automatically enriched with information about which update is running. This lets you filter issues by update channel, runtime version, or update ID — and get alerted when an emergency launch occurs. +When you ship OTA updates with Expo Updates, events captured by Sentry are automatically enriched with information about which update is running. This lets you filter issues by update channel, runtime version, or update ID — track how long update checks and downloads take — and get alerted when an emergency launch occurs. These integrations are enabled by default in Expo projects. No additional setup is required. @@ -61,6 +61,28 @@ Update lifecycle breadcrumbs only run in native builds, not in Expo Go. +## Performance Spans + +The SDK automatically creates performance spans that measure how long update checks and downloads take. These spans appear as standalone transactions in the **Performance** page and can be queried in **Discover**. + +| Span Name | Operation | Created When | +|---|---|---| +| `expo-updates check` | `app.update.check` | The app starts checking for an available update | +| `expo-updates download` | `app.update.download` | The app starts downloading an update | + +Each span ends when the corresponding operation completes or fails: + +- **Success**: The span finishes with an `ok` status. If an update was found (check) or downloaded, the `expo.update.id` attribute is set to the manifest ID. +- **Failure**: The span finishes with an `error` status and the error message from the Expo Updates state machine. + +Spans are created with `forceTransaction: true` because OTA update checks typically happen outside of user-interaction transactions (for example, at app startup). This means each check or download appears as its own transaction in Sentry rather than as a child span of another trace. + + + +Performance spans only run in native builds, not in Expo Go. + + + ## Emergency Launch Warnings Expo Updates performs an _emergency launch_ when it fails to load the latest OTA update and falls back to the embedded bundle. This can silently degrade user experience.