Repository navigation
Releases
8.34.0
Features
-
Add JavaScript (Hermes) samples to UI profiles on Android 15 and newer (#6966)
- When
_experiments.profilingOptionsis set, the SDK sends the Hermes samples as profile chunks of the native profiler session, so the profile of a transaction shows its JavaScript functions.
- When
-
Report JS thread hangs as errors on iOS with the experimental
enableJsHangTrackingoption (#6964)- App Hang tracking watches only the UI thread, so an infinite loop in JS sent no event. The new tracker sends an error event when the JS thread stays blocked for longer than
jsHangTimeoutInterval(2 seconds by default). - With Hermes, the event contains the JS stack trace and the bundle Debug ID for source map symbolication.
- The tracker does not run in development builds, where a paused JS debugger would look like a hang.
Sentry.init({ dsn: '__DSN__', enableJsHangTracking: true, });
- App Hang tracking watches only the UI thread, so an infinite loop in JS sent no event. The new tracker sends an error event when the JS thread stays blocked for longer than
-
Add
longTaskIntegrationto report JS thread long tasks as thereact_native.long_task.durationmetric, also outside of transactions (#6986)- It requires React Native 0.82 or newer on the New Architecture. Set
minDurationMs(default200) andsampleRate(default1) to control what it reports.
- It requires React Native 0.82 or newer on the New Architecture. Set
Fixes
- Detect
expo/fetchin Expo Router apps on@expo/metro-runtimeversions that hide it, so fetch tracing and fetch breadcrumbs are enabled by default (#6965) - Enable native logs on Android when
enableLogsis set (#6967) - Honor
<Sentry.Mask>in iOS error screenshots (#6974)
Dependencies
8.33.0
Changes
- Compile the SDK to ES2018 to stop inlining TypeScript helpers (
__awaiter,__rest) in every file, reducing bundle size (#6957)
Fixes
- Apply
screenshotmasking options to Android error and feedback screenshots (#6930) - Persist fatal JS error envelopes to disk on Android before the process exits (#6937)
- The hard-crash envelope was only queued on the transport thread, so the event was lost when React Native terminated the process right after. It is now written to the offline cache on the calling thread and sent on the next launch, matching iOS.
- Place Session Replay network requests at the correct time in the replay timeline (#6959)
- The network span timestamps came from a different clock than the breadcrumb timestamp. After the device slept or corrected its time, the two drifted apart and the replay timeline was stretched backwards by minutes, which showed an empty gap at the start and misplaced taps.
- Support Expo Router 58 in
expoRouterIntegration. Metro no longer warns about the removedexpo-router/build/global-state/router-storemodule, and the integration creates navigation spans again (#6923) - Start the native iOS SDK from
RNSentrySDKwhensentry.options.jsonis missing or can't be parsed and the DSN is set inconfigureOptions(#6956)- The fallback options always failed to parse, so
configureOptionsnever ran. Before 8.30.0 the app crashed at launch; since then the native SDK silently never started.
- The fallback options always failed to parse, so
- Don't crash the iOS app at launch when
sentry.options.jsoncontains"dsn": null(#6958)
Internal
- Track
sentryWebViewPropsadoption via a feature marker (#6938)
Dependencies
8.32.0
Features
-
Connect React Native traces with embedded WebViews via
sentryWebViewProps(#6794)import { sentryWebViewProps } from '@sentry/react-native'; <WebView source={{ uri: 'https://example.com' }} {...sentryWebViewProps({ allowedHosts: ['example.com'] })} />
- See the WebView docs for details.
Fixes
- Find
ios/.xcode.envin the Expo plugin "Upload Debug Symbols to Sentry" phase when the iOS project uses Swift Package Manager instead of CocoaPods (#6911) - Fix HTTP timing listeners leaking on React Native below 0.83 and when
expo/fetchis detected, and respect theenableHTTPTimingsoption (#6912) - Remove the
@sentry/browserfeedback modules and the server-only@sentry/coremodules from native bundles built on Windows. Before this fix,includeWebFeedback: falsemade these bundles fail at launch (#6915) - Stop wrapping the SDK's own
RNSentrymodule inturboModuleContextIntegrationby default. Each wrapped call wrote to the native scope several times, which added CPU time to every SDK call on iOS (#6921)- To wrap
RNSentryagain, add{ name: 'RNSentry' }to themodulesoption.
- To wrap
- Start and stop the native UI profiler for
_experiments.profilingOptionsin both thetraceandmanuallifecycles, and exportSentry.profiler(#6916)- Before, the profiler ran only for the app start profile, because native tracing is off in React Native and no API controlled the profiler from JS.
- The SDK adds the new
uiProfilingIntegrationby default whenprofilingOptionsis set. If you setdefaultIntegrations: false, addSentry.uiProfilingIntegration()tointegrations, because the SDK ignoresprofilingOptionswithout it.
Dependencies
8.31.0
Features
- Add the
applicationKeyandmoduleMetadataoptions towithSentryConfigandgetSentryExpoConfig, and exportthirdPartyErrorFilterIntegration(#6863)- Set the same key in
applicationKeyand in thefilterKeysoption ofthirdPartyErrorFilterIntegrationto filter errors from third-party code, for example browser extensions on Expo web.
- Set the same key in
Fixes
- Attach the on-error Session Replay buffer to feedback submitted from the feedback form (#6870)
- Do not mark
sendDefaultPiias deprecated in the React Native options (#6864) - Fix duplicate HTTP breadcrumbs for requests with a query string or differently formatted URLs (#6881)
- Include CPU and memory measurements in Android profiles (#6891)
- Load
ios/.xcode.envandios/.xcode.env.localin the Expo plugin "Upload Debug Symbols to Sentry" phase before it runs Node, so the phase finds Node when Xcode starts from the Dock (#6861)
Dependencies
8.30.0
Features
- Report the generation of the cellular network technology in
device.connection_effective_typeon Android and iOS, for example4gor5g(#6827)- On Android 11 and earlier, the app must have the
READ_PHONE_STATEpermission. The SDK does not request this permission.
- On Android 11 and earlier, the app must have the
Changes
- Remove the undocumented
maxTransactionDurationExceededspan attribute; use thedeadline_exceededspan status to filter timed-out transactions instead (#6820)
Fixes
-
Preserve Hermes internal bytecode frames as non-application frames when rewriting Expo stack traces (#6848)
-
Fix stale
turbo_module.*tags on Android native crashes (#6823) -
Forward image attachments to Spotlight instead of stripping them from the envelope (#6818)
-
Don't crash the iOS app when Sentry is initialized with an invalid DSN (#6825)
-
Populate the Hermes runtime version on JS profiles instead of sending an empty value (#6817)
-
Mark
@sentry/react-nativeas side-effect free so bundlers can tree-shake unused exports (#6829) -
Resolve
@sentry/react-nativefrom the Android project directory in the Expo pluginbuild.gradleline, instead of the directory where Gradle started (#6840) -
If
beforeSendLogor another callback option is set, the app no longer crashes on iOS when the native SDK emits a log (#6847)Callback options are for the JavaScript layer only. The SDK now removes all of them before it starts the native SDK.
Dependencies
8.29.0
Features
- Populate
trace_idsin mobile replays so replays can be searched by trace ID (#6786) - Support React Native's Swift Package Manager integration (#6784)
- The SDK now ships a
Package.swift, sonpx react-native spmpicks it up through SwiftPM autolinking instead of failing withPackage.swift is missing for library "@sentry/react-native". - Requires React Native 0.87 or newer, where SwiftPM support is an opt-in preview. CocoaPods remains the default and is unaffected.
- iOS only. macOS, tvOS and visionOS keep building through CocoaPods.
- The SDK now ships a
Fixes
- Don't start the
AsyncExpiringMapcleanup interval at import time, and restart it after the map empties (#6811) - Prevent Sentry's iOS
-force_loadflag from being dropped when another pod setsOTHER_LDFLAGS[sdk=…](#6801) - Fix Android build failing with
cannot find symbol ReplayIntegrationwhensentry-android-replayis excluded (#6803) - Preserve already-quoted React Native bundle script paths in the Expo iOS plugin (#6796)
- Register the session replay mask components through the iOS codegen component provider (#6810)
codegenConfig.ios.componentProvidernow mapsRNSentryReplayMaskandRNSentryReplayUnmaskto their view classes.- React Native resolves both components directly. It no longer falls back to the legacy interop layer for view managers, which an app can turn off with
RCT_REMOVE_LEGACY_COMPONENT_INTEROP. - Both views now set typed default props. They no longer crash on mount through the provider.
Dependencies
8.28.0 (Stable)
Features
- Expose
enableNetworkBreadcrumbs(iOS) to disable native HTTP request breadcrumbs (#6764) - Expose
enableNetworkEventBreadcrumbs(Android) to disable native network connectivity breadcrumbs (#6764) - Expose native breadcrumb off-switches:
enableAutoBreadcrumbTracking(iOS);enableActivityLifecycleBreadcrumbs,enableAppLifecycleBreadcrumbs,enableSystemEventBreadcrumbs,enableAppComponentBreadcrumbs(Android) (#6768) - Expose
reportAccessibilityIdentifier(iOS) to omit PII accessibility identifiers from the view hierarchy (#6771) - Expose
enablePreWarmedAppStartTracing(iOS) to opt out of app-start tracing for pre-warmed starts (#6772) - Expose
enableMetricKitRawPayload(iOS) to attach the raw MetricKit diagnostic payload to MetricKit events (#6772)
Fixes
- Declare optional peer dependencies so imports resolve under strict and Plug'n'Play package managers (#6729)
- Honor
shutdownTimeouton iOS (#6749) - Android Gradle plugin no longer writes generated
sentry.options.jsoninto your source tree during builds (#6751) - Android Gradle plugin no longer writes generated
modules.jsoninto your source tree during release builds (#6753) - Fix Mac Catalyst linking the wrong
Sentry.xcframeworkslice (#6758) FeedbackFormprevents duplicate submissions and keeps the draft on error (#6769)
Internal
- Export already-public option and configuration types from the entry point so their full shape is tracked in the API report (#6731)
Dependencies
8.27.0
Warning
iOS native crashes now set mechanism.synthetic, taking the mach/signal name out of the grouping hash. Expect a one-time regrouping as your app adopts this version.
Features
-
Add Session Replay runtime controls to start, stop, and manage recording manually (#6703)
-
Use
Sentry.getReplay()to access the active replay and control it at runtime with the same API on iOS, Android, and Web:const replay = Sentry.getReplay(); replay?.start(); // start recording a session replay replay?.startBuffering(); // start recording in buffering mode replay?.stop(); // stop recording replay?.pause(); // pause recording (no-op on Web) replay?.resume(); // resume a paused recording (no-op on Web) replay?.flush(); // flush the buffered replay to Sentry
-
-
Add per-class Session Replay masking via
maskedViewClasses/unmaskedViewClassesonmobileReplayIntegration(#6725) -
Add experimental
avoidForegroundResumeHang(iOS) tomobileReplayIntegrationto work around a fatal App Hang that can occur when Session Replay resumes capture on returning to the foreground with a heavy view hierarchy on screen (#6727)
Fixes
- Prevent a fatal
JavaCallback was already settledcrash fromgetNewScreenTimeToDisplayunder rapid navigation on Android (#6722) - Mask React Native
<Image>in Session Replay on the iOS New Architecture whenmaskAllImagesis enabled (#6726) - Background root spans (app-start, expo-updates) no longer overwrite the native propagation context of an active navigation trace (#6720)
- Honor the host app's pinned
ndkVersionon Android instead of letting AGP download its own default NDK for the module's native code (#6724)
Dependencies
8.26.0
Features
- Sync JS scope propagation context to native scope (#6686)
- Native HTTP spans (OkHttp on Android, URLSession on iOS) now automatically share the same
trace_idas the active JS navigation transaction, linking them in the Sentry trace waterfall.
- Native HTTP spans (OkHttp on Android, URLSession on iOS) now automatically share the same
- Expose the iOS
enableMemoryIntrospectionoption to omit memory contents from native crash reports (#6547) - Add
anrProfilingSampleRateoption to profile ANRs on Android (#6673)
Fixes
- Time to initial display is no longer understated on Android in optimized release builds (#6692)
- Fix visionOS compilation (#6676)
- A throwing
beforeBreadcrumbnow drops the breadcrumb, and a throwingtracesSamplernow falls back to the configuredtracesSampleRate(#6675) - Stop uploading on-error Session Replays for errors dropped by
sampleRate(#6685)
Internal
Dependencies
8.25.0 (Stable)
Features
- Copy
app.vitals.start.screenandapp.vitals.start.typeonto standaloneapp.startchildren, including user spans underapp.start.extended(#6631) featureFlagsIntegrationnow forwards flag evaluations to the native SDKs, so flags are attached to native crashes too (#6613)
Fixes
- Prevent silently dropped logs and spans on iOS with React Native >= 0.86 caused by an unreliable
performance.timeOrigin(#6654) - Fix Metro bundler crash on Expo static/EAS Update exports (#6652)
- No longer logs
NSNull cannot be convertedwarnings on iOS with the New Architecture when clearing a scope context (#6651) time_to_initial_display/time_to_full_displaynow measure the actual screen render for apps whose first navigation happens well after app start (#6626)
Internal
- Resolve Metro from the app's project root when generating source maps (#6625)