Releases: getsentry/sentry-react-native
Release list
8.17.1
8.17.0
Warning
sentry-react-native 8.17.0 bundle a native library (libsentry-tm-perf-logger.so) that is not 16 KB page aligned, which breaks 16 KB page size compatibility on Android 15+ (and fails Google Play's 16 KB requirement). See #6394.
Please use 8.17.1.
Features
-
Add experimental
enableStandaloneAppStartTracingto send app start as a standaloneapp.starttransaction (#6359) -
Set
app.vitals.start.screenon the standaloneapp.starttransaction from the current route (#6369) -
Expose top-level
Sentry.setAttributeandSentry.setAttributesAPIs (#6354). -
Add
enableTurboModuleTrackingopt-in experimental option to enable Turbo Module performance tracking in the New Architecture (#6307) -
Use the runtime's native
btoafor envelope base64 encoding when available, to improvecaptureEnvelopeperformance. Falls back to the bundled JS encoder ifbtoais missing (#6351). -
Opt-in build-time auto-wrap for Expo Router's per-route
ErrorBoundary(#6347)Enable
autoWrapExpoRouterErrorBoundary: trueingetSentryExpoConfig(orwithSentryConfig) and the Sentry Babel plugin rewritesexport { ErrorBoundary } from 'expo-router'into awrapExpoRouterErrorBoundarycall at build time — no route-file edits needed:// metro.config.js module.exports = getSentryExpoConfig(__dirname, { autoWrapExpoRouterErrorBoundary: true, });
Changes
- Default
mobileReplayIntegration({ networkCaptureBodies })totrue, matching the iOS and Android native SDK defaults (#6372)
Fixes
- Forward Session Replay network detail options to the native SDKs so network request and response bodies are displayed (#6373)
- The Sentry Babel transformer no longer injects
@sentry/babel-plugin-component-annotateunlessannotateReactComponentsis explicitly enabled (#6347)
Dependencies
8.16.0
Features
-
Capture errors that hit Expo Router's per-route
ErrorBoundary(#6318)Wrap the boundary with
Sentry.wrapExpoRouterErrorBoundaryin your route file:// app/_layout.tsx import { ErrorBoundary as ExpoErrorBoundary } from 'expo-router'; import * as Sentry from '@sentry/react-native'; export const ErrorBoundary = Sentry.wrapExpoRouterErrorBoundary(ExpoErrorBoundary);
Render-phase errors that reach the boundary are captured with route context (
route.name,route.path,route.params), the in-flight navigation transaction is tagged as errored, and a breadcrumb is emitted. Concrete paths and params are gated behindsendDefaultPii.
Fixes
- Fix fatal
NSInvalidArgumentExceptioncrash inRNSentryReplayBreadcrumbConverterwhen a touch breadcrumb path contains a non-dictionary element (#6346) - Apply
SENTRY_ENVIRONMENT,SENTRY_RELEASEandSENTRY_DISTbuild-time overrides to the JS bundled options to match the native SDKs (#6330) - Fix user
geobeing dropped from the native scope by forwarding it as a structured object instead of a JSON string (#6309) - Remove unused
React/RCTTextView.himport that broke iOS builds on React Native 0.87, where the header was removed as part of the legacy architecture cleanup (#6322)
Internal
- Hide the
dataCollectionoption until it is fully supported in React Native. It is exposed by@sentry/corebut is not yet honored by the native SDKs (iOS/Android) nor by the RN-specificsendDefaultPiigates, so setting it would silently have no effect. UsesendDefaultPiiinstead. (#6345)
Dependencies
8.14.1
8.15.1
Fixes
- Fix Android Gradle source map upload being silently skipped on some occasions (#6320)
8.15.0
Features
- Add
nativeStackAndroidsupport toNativeLinkedErrors, capturing the JVM stack trace of rejected native module promises as a linked exception (#6278) - Record XHR request/response headers and (optionally) bodies in Mobile Session Replay. Opt in via
mobileReplayIntegrationwithnetworkDetailAllowUrlsto capture headers; setnetworkCaptureBodies: trueto also capture bodies. Other options:networkDetailDenyUrls,networkRequestHeaders,networkResponseHeaders. Authorization-like headers are always stripped, bodies are capped at ~150 KB. Covers XHR-based clients likeaxios; fetch will follow. See Network Details for details. (#6288) - Warn during dev builds when multiple versions of Sentry JS SDK are detected (#6269)
Fixes
- Fix Android
ClassCastExceptionwhen syncing breadcrumbs with a numeric timestamp to the native scope (#6308)
Dependencies
8.14.0
Features
- Correlate deep links with the navigation transaction they trigger. The next idle navigation span started within
routeChangeTimeoutMsof a deep link arrival is tagged withnavigation.trigger: 'deeplink',deeplink.url(sanitized, respectssendDefaultPii), anddeeplink.dispatch_delay_ms(ms gap between URL received and navigation dispatched). Covers both cold start (Linking.getInitialURL()) and warm open ('url'event) paths, including the late-arrival case where Expo Router auto-handles the link before ourgetInitialURL()chain resolves (#6264) - Add memory, CPU, and frame measurements to Android profiling (#6250)
- Add
enableAutoConsoleLogsoption to opt out of automaticconsole.*capture while keepingenableLogs: truefor manualSentry.logger.*calls (#6235) - Instrument Expo Router
push,replace,navigate,back, anddismiss(in addition toprefetch) with breadcrumbs and spans, and tag the resulting idle navigation span with the initiatingnavigation.method(#6221)- Note: Expo Router span/breadcrumb attributes that may contain user identifiers (
route.href,route.params, and concrete pathnames derived from string hrefs such as/users/42) are now gated behindsendDefaultPii. WhensendDefaultPiiis off (the default), prefetch spans for string hrefs useroute.name: 'unknown'and omitroute.href. Templated object hrefs (e.g.{ pathname: '/users/[id]' }) are unaffected.
- Note: Expo Router span/breadcrumb attributes that may contain user identifiers (
- Warn when Gradle resolves
sentry-androidto a version incompatible with the SDK (#6238) - Attach the active TurboModule method to native crash reports as
contexts.turbo_module+turbo_module.name/turbo_module.methodtags (#6227)
Fixes
- Exclude additional server-only modules (
express,postgresjs,requestdata,consola,spanStreaming) from native bundles (#6263) - Enable fetch instrumentation when Expo SDK 56's native
expo/fetchis active (#6226) - Resolve
sentry-cliin isolated dependency layouts (#6242)
Internal
- Convert
sentry.gradleto Kotlin DSL (sentry.gradle.kts) (#6119)- The old
sentry.gradleis kept as a shim forwarding to the new.ktsfile for backward compatibility
- The old
Dependencies
8.13.0 (Stable)
Features
- Add breadcrumbs for dispatched React Navigation events (#6218)
- Add
Sentry.NavigationContainerdrop-in wrapper for React Navigation (#6199) - Opt-in: consume sentry-cocoa via Swift Package Manager. Set
SENTRY_USE_SPM=1beforepod installto pullSentryfrom sentry-cocoa's SPM package as a binary xcframework instead of the CocoaPods source build (#6182) - Add
disableAutoUploadoption to Expo plugin to disable source map and debug symbol uploads (#6195) - Expose
pauseAppHangTrackingandresumeAppHangTrackingAPIs on iOS (#6192) - Better route and dynamic param extraction for Expo Router (#6197)
Fixes
- Rethrow native exceptions from Sentry's Expo host handler so Android crashes terminate the process instead of leaving the app on a blank screen (#6228)
- Bound TTID/TTFD to prevent inflated transactions (#6210)
- Return
NOfromrequiresMainQueueSetupto avoid unnecessarydispatch_syncon the main queue during bridge init (#6202)
Dependencies
8.12.0
Features
- Multi-instance
<TimeToInitialDisplay>/<TimeToFullDisplay>coordination (#6090)- New
readyprop. When a screen has multiple async data sources, mount one<TimeToFullDisplay ready={...} />per source — TTID/TTFD is recorded only when every instance reportsready === true. - The existing
recordprop is unchanged BUT it is now deprecated in favor ofready.
- New
- Extract text content from children of touched components as a label fallback for touch breadcrumbs (#6106)
- Auto-inject
sentry-labelfrom static text content at build time whenannotateReactComponentsis enabled (#6141) - Respect Replay Mask boundaries when reading
sentry-labelfor touch breadcrumbs (#6142) - Add
textComponentNamesoption toannotateReactComponentsfor custom text components (#6169) - Add first-class
expoRouterIntegration()with auto-registration (#6189) - Expose
addConsoleInstrumentationFilterfrom@sentry/core(#6180) - Expose experimental
captureSurfaceViewsoption for Android Session Replay (#6175) - Add OTA SDK version to native
sdk.packageswhen JS bundle version differs from built-in version (#6191)
Fixes
- Deduplicate native HTTP breadcrumbs that duplicate JS XHR/fetch breadcrumbs (#6132)
- Fix duplicate JS error reporting on iOS New Architecture when the native SDK is initialized early via
sentry.options.json("Capture App Start Errors"). It's done by applying theExceptionsManager.reportExceptionC++ wrapper filter in both init paths (#6145) - Fix boolean options from
sentry.options.jsonbeing ignored on Android when usingRNSentrySDK.init(#6130) - Fix
includeWebFeedback: falseMetro config option causing crash at startup (#6150) - Fix
sentry-expo-upload-sourcemapsfailing for projects withdevEngines.packageManagerset to non-npm managers (#6155) - Fix Metro serializer wrapper breaking
getModulesRunBeforeMainModulefor third-party plugins likereact-native-workletsbundleMode(#6188)