- Replay: improve performance of screenshot data to native recorder (#2530)
- Manual TTID (#2477)
- Missing replay gestures on Android (#2515)
- Replay mask sizing on scaling transform widget children (#2520)
- Masking semi-transparent widgets (#2472)
- Check
SentryTracer
type in TTFD tracker (#2508)
-
Replay: device orientation change support & improve video size fit on Android (#2462)
-
Support custom
Sentry.runZoneGuarded
zone creation (#2088)- Sentry will not create a custom zone anymore if it is started within a custom one.
- This fixes Zone miss-match errors when trying to initialize WidgetsBinding before Sentry on Flutter Web
Sentry.runZonedGuarded
creates a zone and also captures exceptions & breadcrumbs automatically.
Sentry.runZonedGuarded(() { WidgetsBinding.ensureInitialized(); // Errors before init will not be handled by Sentry SentryFlutter.init( (options) { ... }, appRunner: () => runApp(MyApp()), ); } (error, stackTrace) { // Automatically sends errors to Sentry, no need to do any // captureException calls on your part. // On top of that, you can do your own custom stuff in this callback. });
-
Warning (in a debug build) if a potentially sensitive widget is not masked or unmasked explicitly (#2375)
-
Replay: ensure visual update before capturing screenshots (#2527)
- Bump Native SDK from v0.7.15 to v0.7.17 (#2465, #2516)
- Bump Android SDK from v7.18.1 to v7.19.0 (#2488)
- Manual TTID (#2477)
- Missing replay gestures on Android (#2515)
- Replay mask sizing on scaling transform widget children (#2520)
- Check
SentryTracer
type in TTFD tracker (#2508) - Warning (in a debug build) if a potentially sensitive widget is not masked or unmasked explicitly (#2375)
- Replay: ensure visual update before capturing screenshots (#2527)
- Bump Native SDK from v0.7.15 to v0.7.17 (#2465, #2516)
- Bump Android SDK from v7.18.1 to v7.19.0 (#2488)
-
Windows & Linux native crash handlers: add
SENTRY_NATIVE_BACKEND
env var with default setting ofnone
. (#2522) Native crash reporting support withsentry-native
'scrashpad
was added in v8.11.0 and has caused build-time issues for some users, because it required newer build tools (newer versions of MSVC/Clang/GCC) than base Flutter SDK. This broke the ability to build the app for some users compiling Windows and Linux apps with older toolchains.To avoid this issue, we're disabling the native crash handling by default for Linux and Windows for now. You can enable it manually by setting the
SENTRY_NATIVE_BACKEND=crashpad
environment variable before runningflutter build
. You can read more about available backends that fit your use-case in sentry-native docs.We plan to change the default back to
crashpad
in the next major SDK release.
- Check for type before casting in TTID (#2497)
- SentryWidgetsFlutterBinding initializing even if a binding already exists (#2494)
- Replay: device orientation change support & improve video size fit on Android (#2462)
- Support custom
Sentry.runZoneGuarded
zone creation (#2088)- Sentry will not create a custom zone anymore if it is started within a custom one.
- This fixes Zone miss-match errors when trying to initialize WidgetsBinding before Sentry on Flutter Web
Sentry.runZonedGuarded
creates a zone and also captures exceptions & breadcrumbs automatically.
Sentry.runZonedGuarded(() { WidgetsBinding.ensureInitialized(); // Errors before init will not be handled by Sentry SentryFlutter.init( (options) { ... }, appRunner: () => runApp(MyApp()), ); } (error, stackTrace) { // Automatically sends errors to Sentry, no need to do any // captureException calls on your part. // On top of that, you can do your own custom stuff in this callback. });
- Masking semi-transparent widgets (#2472)
-
Support for screenshot PII content masking (#2361) By default, masking is enabled for SessionReplay. To also enable it for screenshots captured with events, you can specify
options.experimental.privacy
:await SentryFlutter.init( (options) { ... // the defaults are: options.experimental.privacy.maskAllText = true; options.experimental.privacy.maskAllImages = true; options.experimental.privacy.maskAssetImages = false; // you cal also set up custom masking, for example: options.experimental.privacy.mask<WebView>(); }, appRunner: () => runApp(MyApp()), );
Actually, just accessing this field will cause it to be initialized with the default settings to mask all text and images:
await SentryFlutter.init( (options) { ... // this has a side-effect of creating the default privacy configuration, thus enabling Screenshot masking: options.experimental.privacy; }, appRunner: () => runApp(MyApp()), );
-
Linux native error & obfuscation support (#2431)
-
Improve Device context on plain Dart and Flutter desktop apps (#2441)
-
Add debounce to capturing screenshots (#2368)
-
Per default, screenshots are debounced for 2 seconds.
-
If you need more granular screenshots, you can opt out of debouncing:
await SentryFlutter.init((options) { options.beforeCaptureScreenshot = (event, hint, debounce) { if (debounce) { return true; // Capture screenshot even if the SDK wants to debounce it. } else { // check event and hint ... } }; });
-
Replace deprecated
BeforeScreenshotCallback
with newBeforeCaptureCallback
.
-
-
Improve app start measurements by using
addTimingsCallback
instead ofaddPostFrameCallback
to determine app start end (#2405)⚠️ This change may result in reporting of shorter app start durations
-
Improve frame tracking accuracy (#2372)
-
Introduces
SentryWidgetsFlutterBinding
that tracks a frame starting fromhandleBeginFrame
and ending inhandleDrawFrame
, this is approximately the buildDuration time -
By default,
SentryFlutter.init()
automatically initializesSentryWidgetsFlutterBinding
through theWidgetsFlutterBindingIntegration
-
If you need to initialize the binding before
SentryFlutter.init
, useSentryWidgetsFlutterBinding.ensureInitialized
instead ofWidgetsFlutterBinding.ensureInitialized
:void main() async { // Replace WidgetsFlutterBinding.ensureInitialized() SentryWidgetsFlutterBinding.ensureInitialized(); await SentryFlutter.init(...); runApp(MyApp()); }
-
⚠️ Frame tracking will be disabled if a different binding is used
-
- Only send debug images referenced in the stacktrace for events (#2329)
- Remove
sentry
frames if SDK falls back to current stack trace (#2351)- Flutter doesn't always provide stack traces for unhandled errors - this is normal Flutter behavior
- When no stack trace is provided (in Flutter errors,
captureException
, orcaptureMessage
):- SDK creates a synthetic trace using
StackTrace.current
- Internal SDK frames are removed to reduce noise
- SDK creates a synthetic trace using
- Original stack traces (when provided) are left unchanged
- Catch errors thrown during
handleBeginFrame
andhandleDrawFrame
(#2446) - OS & device contexts missing on Windows (#2439)
- Native iOS/macOS SDK session didn't start after Flutter hot-restart (#2452)
- Kotlin 2.1.0 compatibility on Android, bump Kotlin language version from
1.4
to1.6
(#2456) - Apply default IP address (
{{auto}}
) to transactions (#2395)- Previously, transactions weren't getting the default IP address when user context was loaded
- Now consistently applies default IP address to both events and transactions when:
- No user context exists
- User context exists but IP address is null
- Bump Cocoa SDK from v8.40.1 to v8.41.0 (#2442)
- Bump Android SDK from v7.16.0 to v7.18.1 (#2408, #2419, #2457)
- Bump Native SDK from v0.7.12 to v0.7.15 (#2430)
- Support for screenshot PII content masking (#2361)
By default, masking is enabled for SessionReplay. To also enable it for screenshots captured with events, you can specify
options.experimental.privacy
:Actually, just accessing this field will cause it to be initialized with the default settings to mask all text and images:await SentryFlutter.init( (options) { ... // the defaults are: options.experimental.privacy.maskAllText = true; options.experimental.privacy.maskAllImages = true; options.experimental.privacy.maskAssetImages = false; // you cal also set up custom masking, for example: options.experimental.privacy.mask<WebView>(); }, appRunner: () => runApp(MyApp()), );
await SentryFlutter.init( (options) { ... // this has a side-effect of creating the default privacy configuration, thus enabling Screenshot masking: options.experimental.privacy; }, appRunner: () => runApp(MyApp()), );
- Linux native error & obfuscation support (#2431)
- Improve Device context on plain Dart and Flutter desktop apps (#2441)
- Add debounce to capturing screenshots (#2368)
- Per default, screenshots are debounced for 2 seconds.
- If you need more granular screenshots, you can opt out of debouncing:
await SentryFlutter.init((options) { options.beforeCaptureScreenshot = (event, hint, debounce) { if (debounce) { return true; // Capture screenshot even if the SDK wants to debounce it. } else { // check event and hint ... } }; });
- Replace deprecated
BeforeScreenshotCallback
with newBeforeCaptureCallback
.
- Catch errors thrown during
handleBeginFrame
andhandleDrawFrame
(#2446) - OS & device contexts missing on Windows (#2439)
- Native iOS/macOS SDK session didn't start after Flutter hot-restart (#2452)
- Kotlin 2.1.0 compatibility on Android, bump Kotlin language version from
1.4
to1.6
(#2456)
- Windows native error & obfuscation support (#2286, #2426)
- Improve app start measurements by using
addTimingsCallback
instead ofaddPostFrameCallback
to determine app start end (#2405)⚠️ This change may result in reporting of shorter app start durations
- Improve frame tracking accuracy (#2372)
- Introduces
SentryWidgetsFlutterBinding
that tracks a frame starting fromhandleBeginFrame
and ending inhandleDrawFrame
, this is approximately the buildDuration time - By default,
SentryFlutter.init()
automatically initializesSentryWidgetsFlutterBinding
through theWidgetsFlutterBindingIntegration
- If you need to initialize the binding before
SentryFlutter.init
, useSentryWidgetsFlutterBinding.ensureInitialized
instead ofWidgetsFlutterBinding.ensureInitialized
:
void main() async { // Replace WidgetsFlutterBinding.ensureInitialized() SentryWidgetsFlutterBinding.ensureInitialized(); await SentryFlutter.init(...); runApp(MyApp()); }
⚠️ Frame tracking will be disabled if a different binding is used
- Introduces
- Only send debug images referenced in the stacktrace for events (#2329)
- Remove
sentry
frames if SDK falls back to current stack trace (#2351)- Flutter doesn't always provide stack traces for unhandled errors - this is normal Flutter behavior
- When no stack trace is provided (in Flutter errors,
captureException
, orcaptureMessage
):- SDK creates a synthetic trace using
StackTrace.current
- Internal SDK frames are removed to reduce noise
- SDK creates a synthetic trace using
- Original stack traces (when provided) are left unchanged
- Apply default IP address (
{{auto}}
) to transactions (#2395)- Previously, transactions weren't getting the default IP address when user context was loaded
- Now consistently applies default IP address to both events and transactions when:
- No user context exists
- User context exists but IP address is null
- Bump Android SDK from v7.16.0 to v7.18.0 (#2408, #2419)
- Bump Native SDK from v0.7.12 to v0.7.15 (#2430)
- Android build error when compiling (#2397)
-
Emit
transaction.data
insidecontexts.trace.data
(#2284) -
Blocking app starts span if "appLaunchedInForeground" is false. (Android only) (#2291)
-
Replay: user-configurable masking (redaction) for widget classes and specific widget instances. (#2324) Some examples of the configuration:
await SentryFlutter.init( (options) { ... options.experimental.replay.mask<IconButton>(); options.experimental.replay.unmask<Image>(); options.experimental.replay.maskCallback<Text>( (Element element, Text widget) => (widget.data?.contains('secret') ?? false) ? SentryMaskingDecision.mask : SentryMaskingDecision.continueProcessing); }, appRunner: () => runApp(MyApp()), );
Also, you can wrap any of your widgets with
SentryMask()
orSentryUnmask()
widgets to mask/unmask them, respectively. For example:SentryUnmask(Text('Not secret at all'));
-
Support
captureFeedback
(#2230)- Deprecated
Sentry.captureUserFeedback
, usecaptureFeedback
instead. - Deprecated
Hub.captureUserFeedback
, usecaptureFeedback
instead. - Deprecated
SentryClient.captureUserFeedback
, usecaptureFeedback
instead. - Deprecated
SentryUserFeedback
, useSentryFeedback
instead.
- Deprecated
-
Add
SentryFeedbackWidget
(#2240)Navigator.push( context, MaterialPageRoute( builder: (context) => SentryFeedbackWidget(associatedEventId: id), fullscreenDialog: true, ), );
-
Add screenshot to
SentryFeedbackWidget
(#2369)- Use
SentryFlutter.captureScreenshot
to create a screenshot attachment - Call
SentryFeedbackWidget
with this attachment to add it to the user feedback
final id = await Sentry.captureMessage('UserFeedback'); final screenshot = await SentryFlutter.captureScreenshot(); Navigator.push( context, MaterialPageRoute( builder: (context) => SentryFeedbackWidget( associatedEventId: id, screenshot: screenshot, ), fullscreenDialog: true, ), );
- Use
- Avoid sending too many empty client reports when Http Transport is used (#2380)
- Cache parsed DSN (#2365)
- Handle backpressure earlier in pipeline (#2371)
- Drops max un-awaited parallel tasks earlier, so event processors & callbacks are not executed for them.
- Change by setting
SentryOptions.maxQueueSize
. Default is 30.
- Use native spotlight integrations on Flutter Android, iOS, macOS (#2285)
- Improve app start integration (#2266)
- Only store slow and frozen frames for frame delay calculation (#2337)
- Add ReplayIntegration to the integrations list on events when replay is enabled. (#2349)
- App lag with frame tracking enabled when span finishes after a long time (#2311)
- Only start frame tracking if we receive valid display refresh data (#2307)
- Rounding error used on frames.total and reject frame measurements if frames.total is less than frames.slow or frames.frozen (#2308)
- iOS replay integration when only
onErrorSampleRate
is specified (#2306) - Fix TTID timing issue (#2326)
- TTFD fixes
- Accessing invalid json fields from
fetchNativeAppStart
should return null (#2340)
- Metrics API (#2312)
- Bump Native SDK from v0.7.10 to v0.7.12 (#2390)
- Bump Android SDK from v7.15.0 to v7.16.0 (#2373)
- Bump Cocoa SDK from v8.37.0 to v8.40.1 (#2394)
- Temporarily disable Windows native error & obfuscation support (#2363)
-
Emit
transaction.data
insidecontexts.trace.data
(#2284) -
Blocking app starts if "appLaunchedInForeground" is false. (Android only) (#2291)
-
Windows native error & obfuscation support (#2286)
-
Replay: user-configurable masking (redaction) for widget classes and specific widget instances. (#2324) Some examples of the configuration:
await SentryFlutter.init( (options) { ... options.experimental.replay.mask<IconButton>(); options.experimental.replay.unmask<Image>(); options.experimental.replay.maskCallback<Text>( (Element element, Text widget) => (widget.data?.contains('secret') ?? false) ? SentryMaskingDecision.mask : SentryMaskingDecision.continueProcessing); }, appRunner: () => runApp(MyApp()), );
Also, you can wrap any of your widgets with
SentryMask()
orSentryUnmask()
widgets to mask/unmask them, respectively. For example:SentryUnmask(Text('Not secret at all'));
-
Support
captureFeedback
(#2230)- Deprecated
Sentry.captureUserFeedback
, usecaptureFeedback
instead. - Deprecated
Hub.captureUserFeedback
, usecaptureFeedback
instead. - Deprecated
SentryClient.captureUserFeedback
, usecaptureFeedback
instead. - Deprecated
SentryUserFeedback
, useSentryFeedback
instead.
- Deprecated
-
Add
SentryFeedbackWidget
(#2240)Navigator.push( context, MaterialPageRoute( builder: (context) => SentryFeedbackWidget(associatedEventId: id), fullscreenDialog: true, ), );
- Use native spotlight integrations on Flutter Android, iOS, macOS (#2285)
- Improve app start integration (#2266)
- Only store slow and frozen frames for frame delay calculation (#2337)
- Add ReplayIntegration to the integrations list on events when replay is enabled. (#2349)
- App lag with frame tracking enabled when span finishes after a long time (#2311)
- Only start frame tracking if we receive valid display refresh data (#2307)
- Rounding error used on frames.total and reject frame measurements if frames.total is less than frames.slow or frames.frozen (#2308)
- iOS replay integration when only
onErrorSampleRate
is specified (#2306) - Fix TTID timing issue (#2326)
- Start missing TTFD for root screen transaction (#2332)
- Match TTFD to TTID end timespan if TTFD is unfinished when user navigates to another screen (#2347)
- Accessing invalid json fields from
fetchNativeAppStart
should return null (#2340) - Error when calling
SentryFlutter.reportFullyDisplayed()
twice (#2339) - TTFD measurements should only be added for successful TTFD spans (#2348)
- Metrics API (#2312)
- Bump Cocoa SDK from v8.36.0 to v8.37.0 (#2334)
- Bump Android SDK from v7.14.0 to v7.15.0 (#2342)
- Bump Native SDK from v0.7.8 to v0.7.10 (#2344)
-
Session replay Alpha for Android and iOS (#2208, #2269, #2236, #2275, #2270). To try out replay, you can set following options (access is limited to early access orgs on Sentry. If you're interested, sign up for the waitlist):
await SentryFlutter.init( (options) { ... options.experimental.replay.sessionSampleRate = 1.0; options.experimental.replay.onErrorSampleRate = 1.0; }, appRunner: () => runApp(MyApp()), );
-
Support allowUrls and denyUrls for Flutter Web (#2227)
await SentryFlutter.init( (options) { ... options.allowUrls = ["^https://sentry.com.*\$", "my-custom-domain"]; options.denyUrls = ["^.*ends-with-this\$", "denied-url"]; }, appRunner: () => runApp(MyApp()), );
-
Collect touch breadcrumbs for all buttons, not just those with
key
specified. (#2242) -
Add
enableDartSymbolication
option to Sentry.init() for Flutter iOS, macOS and Android (#2256)- This flag enables symbolication of Dart stack traces when native debug images are not available.
- Useful when using Sentry.init() instead of SentryFlutter.init() in Flutter projects for example due to size limitations.
true
by default but automatically set tofalse
when using SentryFlutter.init() because the SentryFlutter fetches debug images from the native SDK integrations.
- Only access renderObject if
hasSize
is true (#2263)
- Add
SentryFlutter.nativeCrash()
using MethodChannels for Android and iOS (#2239)- This can be used to test if native crash reporting works
- Add
ignoreRoutes
parameter toSentryNavigatorObserver
. (#2218)- This will ignore the Routes and prevent the Route from being pushed to the Sentry server.
- Ignored routes will also create no TTID and TTFD spans.
SentryNavigatorObserver(ignoreRoutes: ["/ignoreThisRoute"]),
- Debouncing of SentryWidgetsBindingObserver.didChangeMetrics with delay of 100ms. (#2232)
- iOS Session Replay Alpha (#2209)
- Android replay touch tracking support (#2228)
- Add
ignoreRoutes
parameter toSentryNavigatorObserver
. (#2218)- This will ignore the Routes and prevent the Route from being pushed to the Sentry server.
- Ignored routes will also create no TTID and TTFD spans.
SentryNavigatorObserver(ignoreRoutes: ["/ignoreThisRoute"]),
-
Add support for span level measurements. (#2214)
-
Add
ignoreTransactions
andignoreErrors
to options (#2207)await SentryFlutter.init( (options) { options.dsn = 'https://examplePublicKey@o0.ingest.sentry.io/0'; options.ignoreErrors = ["my-error", "^error-.*\$"]; options.ignoreTransactions = ["my-transaction", "^transaction-.*\$"]; ... }, appRunner: () => runApp(MyApp()), );
-
Add proxy support (#2192)
- Configure a
SentryProxy
object and set it onSentryFlutter.init
import 'package:flutter/widgets.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; Future<void> main() async { await SentryFlutter.init( (options) { options.dsn = 'https://example@sentry.io/add-your-dsn-here'; options.proxy = SentryProxy( type: SentryProxyType.http, host: 'localhost', port: 8080, ); }, // Init your App. appRunner: () => runApp(MyApp()), ); }
- Configure a
- Deserialize and serialize unknown fields (#2153)
-
Add error type identifier to improve obfuscated Flutter issue titles (#2170)
- Example: transforms issue titles from
GA
toFlutterError
orminified:nE
toFlutterError
- This is enabled automatically and will change grouping if you already have issues with obfuscated titles
- If you want to disable this feature, set
enableExceptionTypeIdentification
tofalse
in your Sentry options - You can add your custom exception identifier if there are exceptions that we do not identify out of the box
// How to add your own custom exception identifier class MyCustomExceptionIdentifier implements ExceptionIdentifier { @override String? identifyType(Exception exception) { if (exception is MyCustomException) { return 'MyCustomException'; } if (exception is MyOtherCustomException) { return 'MyOtherCustomException'; } return null; } } SentryFlutter.init((options) => options..prependExceptionTypeIdentifier(MyCustomExceptionIdentifier()));
- Example: transforms issue titles from
- Deprecate
enableTracing
(#2199)- The
enableTracing
option has been deprecated and will be removed in the next major version. We recommend removing it in favor of thetracesSampleRate
andtracesSampler
options. If you want to enable performance monitoring, please set thetracesSampleRate
to a sample rate of your choice, or provide a sampling function astracesSampler
option instead. If you want to disable performance monitoring, remove thetracesSampler
andtracesSampleRate
options.
- The
-
Android Session Replay Alpha (#2032)
To try out replay, you can set following options:
await SentryFlutter.init( (options) { ... options.experimental.replay.sessionSampleRate = 1.0; options.experimental.replay.onErrorSampleRate = 1.0; }, appRunner: () => runApp(MyApp()), );
Access is limited to early access orgs on Sentry. If you're interested, sign up for the waitlist
- Add dart platform to sentry frames (#2193)
- This allows viewing the correct dart formatted raw stacktrace in the Sentry UI
- Support
ignoredExceptionsForType
(#2150)- Filter out exception types by calling
SentryOptions.addExceptionFilterForType(Type exceptionType)
- Filter out exception types by calling
- Disable sff & frame delay detection on web, linux and windows (#2182)
- Display refresh rate is locked at 60 for these platforms which can lead to inaccurate metrics
- Capture meaningful stack traces when unhandled errors have empty or missing stack traces (#2152)
- This will affect grouping for unhandled errors that have empty or missing stack traces.
- Bump Android SDK from v7.11.0 to v7.12.0 (#2173)
- Bump Cocoa SDK from v8.30.1 to v8.32.0 (#2174, #2195)
- Add API for pausing/resuming iOS and macOS app hang tracking (#2134)
- This is useful to prevent the Cocoa SDK from reporting wrongly detected app hangs when the OS shows a system dialog for asking specific permissions.
- Use
SentryFlutter.pauseAppHangTracking()
andSentryFlutter.resumeAppHangTracking()
- Capture total frames, frames delay, slow & frozen frames and attach to spans (#2106)
- Support WebAssembly compilation (dart2wasm) (#2113)
- Add flag to disable reporting of view hierarchy identifiers (#2158)
- Use
reportViewHierarchyIdentifiers
to enable or disable the option
- Use
- Record dropped spans in client reports (#2154)
- Add memory usage to contexts (#2133)
- Only for Linux/Windows applications, as iOS/Android/macOS use native SDKs
- Fix sentry_drift compatibility with Drift 2.19.0 (#2162)
- App starts hanging for 30s (#2140)
- Time out for app start info retrieval has been reduced to 10s
- If
autoAppStarts
isfalse
andsetAppStartEnd
has not been called, the app start event processor will now return early instead of waiting forgetAppStartInfo
to finish
- Set dart runtime version with parsed
Platform.version
(#2156)
- User segment is now deprecated and will be removed in version 9.0.0. Use a custom tag or context instead. (#2119)
- Deprecate
setExtra
andremoveExtra
(#2159)- Use the
Contexts
structure viasetContexts
instead
- Use the
- Add API for pausing/resuming iOS and macOS app hang tracking (#2134)
- This is useful to prevent the Cocoa SDK from reporting wrongly detected app hangs when the OS shows a system dialog for asking specific permissions.
- Use
SentryFlutter.pauseAppHangTracking()
andSentryFlutter.resumeAppHangTracking()
- Capture total frames, frames delay, slow & frozen frames and attach to spans (#2106)
- Support WebAssembly compilation (dart2wasm) (#2113)
- User segment is now deprecated and will be removed in version 9.0.0. Use a custom tag or context instead. (#2119)
- Load contexts integration not setting
SentryUser
(#2089) - Change app start span description from
Cold start
toCold Start
andWarm start
toWarm Start
(#2076) - Parse
PlatformException
from details instead of message (#2052)
- Bump
sqflite
minimum version from^2.0.0
to^2.2.8
(#2075)- This is not a breaking change since we are using api internally that is only valid from that version.
- Bump Cocoa SDK from v8.25.2 to v8.29.0 (#2060, #2092, #2100)
- Bump Android SDK from v7.9.0 to v7.10.0 (#2090)
- Include sentry frames in stacktraces to enable SDK crash detection (#2050)
- Event processor blocking transactions from being sent if
autoAppStart
is false (#2028)
- Create app start transaction when no
SentryNavigatorObserver
is present (#2017) - Adds native spans to app start transaction (#2027)
- Adds app start spans to first transaction (#2009)
- Fix
PlatformException
title parsing (#2033)
- Set snapshot to
true
if stacktrace is not provided (#2000)- If the stacktrace is not provided, the Sentry SDK will fetch the current stacktrace via
StackTrace.current
and the snapshot will be set totrue
- this may change the grouping behavior snapshot = true
means it's a synthetic exception, reflecting the current state of the thread rather than the stack trace of a real exception
- If the stacktrace is not provided, the Sentry SDK will fetch the current stacktrace via
- Timing metric aggregates metrics in the created span (#1994)
- Bump Cocoa SDK from v8.21.0 to v8.25.0 (#2018)
- Expand dependency range of
package_info_plus
to allow an open range starting from version 1 (#2010)
This release contains breaking changes, please read the changelog carefully.
Changes from the latest v7 release are included in this major release
- Bump iOS minimum deployment target from 11 to 12 (#1821)
- Mark exceptions not handled by the user as
handled: false
(#1535)- This will affect your release health data, and is therefore considered a breaking change.
- Refrain from overwriting the span status for unfinished spans (#1577)
- Older self-hosted sentry instances will drop transactions containing unfinished spans.
- This change was introduced in relay/#1690 and released with 22.12.0
- Older self-hosted sentry instances will drop transactions containing unfinished spans.
- Do not leak extensions of external classes (#1576)
- Make
hint
non-nullable inBeforeSendCallback
,BeforeBreadcrumbCall
andEventProcessor
(#1574)- This will affect your callbacks, making this a breaking change.
- Load Device Contexts from Sentry Java (#1616)
- Now the device context from Android is available in
BeforeSendCallback
- Now the device context from Android is available in
- Set ip_address to {{auto}} by default, even if sendDefaultPII is disabled (#1665)
- Instead use the "Prevent Storing of IP Addresses" option in the "Security & Privacy" project settings on sentry.io
- Add support for exception aggregates (#1866)
- Bump compileSdkVersion to 34 in Gradle buildscripts (#1980)
- Add textScale(r) value to Flutter context (#1886)
- Expand dependency range of
package_info_plus
to include major version 7 (#1984) - Bump Android SDK from v7.6.0 to v7.8.0 (#1977)
- Experimental: Add support for Sentry Developer Metrics (#1940, #1949, #1954, #1958)
Use the Metrics API to track processing time, download sizes, user signups, and conversion rates and correlate them back to tracing data in order to get deeper insights and solve issues faster. Our API supports counters, distributions, sets, gauges and timers, and it's easy to get started:
To learn more about Sentry Developer Metrics, head over to our Dart and Flutter docs page.
Sentry.metrics() .increment( 'button_login_click', // key value: 1.0, unit: null, tags: {"provider": "e-mail"} );
- Expand
package_info_plus
version range to6.0.0
(#1948)
- Set
sentry_flutter.podspec
version frompubspec.yaml
(#1941)
- Add TTFD (time to full display), which allows you to measure the time it takes to render the full screen (#1920)
- Requires using the routing instrumentation.
- Set
enableTimeToFullDisplayTracing = true
in yourSentryFlutterOptions
to enable TTFD - Manually report the end of the full display by calling
SentryFlutter.reportFullyDisplayed()
- If not reported within 30 seconds, the span will be automatically finish with the status
deadline_exceeded
- Add TTID (time to initial display), which allows you to measure the time it takes to render the first frame of your screen (#1910)
- Requires using the routing instrumentation.
- Introduces two modes:
automatic
mode is enabled by default for all screens and will yield only an approximation result.manual
mode requires manual instrumentation and will yield a more accurate result.- To use
manual
mode, you need to wrap your desired widget:SentryDisplayWidget(child: MyScreen())
.
- To use
- You can mix and match both modes in your app.
- Other significant fixes
didPop
doesn't trigger a new transaction- Change transaction operation name to
ui.load
instead ofnavigation
- Add override
captureFailedRequests
option (#1931)- The
dio
integration andSentryHttpClient
now take an additionalcaptureFailedRequests
option. - This is useful if you want to disable this option on native and only enable it on
dio
for example.
- The
- Update root name for navigator observer (#1934)
- The root name for transactions is now
root /
instead ofroot ("/")
.
- The root name for transactions is now
- Fix transaction end timestamp trimming (#1916)
- Transaction end timestamps are now correctly trimmed to the latest child span end timestamp
- remove transitive dart:io reference for web (#1898)
- Use
recordHttpBreadcrumbs
to set iOSenableNetworkBreadcrumbs
(#1884) - Apply
beforeBreadcrumb
on native iOS crumbs (#1914) - Add
maxQueueSize
to limit the number of unawaited events sent to Sentry (#1868)
- App start is now fetched within integration instead of event processor (#1905)
- Remove Flutter dependency from Drift integration (#1867)
- Remove dead code, cold start bool is now always present (#1861)
- Fix iOS "Arithmetic Overflow" (#1874)
- Bump iOS minimum deployment target from 11 to 12 (#1821)
- Mark exceptions not handled by the user as
handled: false
(#1535)- This will affect your release health data, and is therefore considered a breaking change.
- Refrain from overwriting the span status for unfinished spans (#1577)
- Older self-hosted sentry instances will drop transactions containing unfinished spans.
- This change was introduced in relay/#1690 and released with 22.12.0
- Older self-hosted sentry instances will drop transactions containing unfinished spans.
- Do not leak extensions of external classes (#1576)
- Make
hint
non-nullable inBeforeSendCallback
,BeforeBreadcrumbCall
andEventProcessor
(#1574)- This will affect your callbacks, making this a breaking change.
- Load Device Contexts from Sentry Java (#1616)
- Now the device context from Android is available in
BeforeSendCallback
- Now the device context from Android is available in
- Set ip_address to {{auto}} by default, even if sendDefaultPII is disabled (#1665)
- Instead use the "Prevent Storing of IP Addresses" option in the "Security & Privacy" project settings on sentry.io
- Remove Flutter dependency from Drift integration (#1867)
- Remove dead code, cold start bool is now always present (#1861)
- Fix iOS "Arithmetic Overflow" (#1874)
This release is replaced by 8.0.0-beta.2
- Add
SentryWidget
(#1846)- Prefer to use
SentryWidget
now instead ofSentryScreenshotWidget
andSentryUserInteractionWidget
directly
- Prefer to use
- Performance monitoring support for Isar (#1726)
- Tracing without performance for Dio integration (#1837)
- Accept
Map<String, dynamic>
inHint
class (#1807)- Please check if everything works as expected when using
Hint
- Factory constructor
Hint.withMap(Map<String, dynamic> map)
now takesMap<String, dynamic>
instead ofMap<String, Object>
- Method
hint.addAll(Map<String, dynamic> keysAndValues)
now takesMap<String, dynamic>
instead ofMap<String, Object>
- Method
set(String key, dynamic value)
now takes value ofdynamic
instead ofObject
- Method
hint.get(String key)
now returnsdynamic
instead ofObject?
- Factory constructor
- Please check if everything works as expected when using
- Add Spotlight support (#1786)
- Set
options.spotlight = Spotlight(enabled: true)
to enable Spotlight
- Set
- Add
ConnectivityIntegration
for web (#1765)- We only get the info if online/offline on web platform. The added breadcrumb is set to either
wifi
ornone
.
- We only get the info if online/offline on web platform. The added breadcrumb is set to either
- Add isar breadcrumbs (#1800)
- Starting with Flutter 3.16, Sentry adds the
appFlavor
to theflutter_context
(#1799) - Add beforeScreenshotCallback to SentryFlutterOptions (#1805)
- Add support for
readTransaction
insqflite
(#1819)
- Bump Android SDK from v7.0.0 to v7.2.0 (#1788, #1815)
- Bump Cocoa SDK from v8.17.2 to v8.18.0 (#1803)
- Add option to opt out of fatal level for automatically collected errors (#1738)
- Add debug_meta to all events (#1756)
- Fixes obfuscated stacktraces when
captureMessage
orcaptureEvent
is called withattachStacktrace
option
- Fixes obfuscated stacktraces when
- Add option to opt out of fatal level for automatically collected errors (#1738)
- Add
Hive
breadcrumbs (#1773)
- Bump Android SDK from v6.34.0 to v7.0.0 (#1768)
- Bump Cocoa SDK from v8.15.2 to v8.17.2 (#1761, #1771, #1787)
- Fix SIGSEV, SIGABRT and SIGBUS crashes happening after/around the August Google Play System update, see #2955 for more details (fix provided by Native SDK bump)
- Update package-info-plus constraint to include 5.0.1 (#1749)
- Bump Android SDK from v6.33.1 to v6.34.0 (#1746)
- Fixes release of drift & hive and adds missing integration & sdk version information in the hub options (#1729)
- Fixes setting the correct locale to contexts with navigatorKey (#1724)
- If you have a selected locale in e.g MaterialApp, this fix will retrieve the correct locale for the event context.
- Flutter renderer information was removed on dart:io platforms since it didn't add the correct value (#1723)
- Unsupported types with Expando (#1690)
- Add APM integration for Drift (#1709)
- StackTraces in
PlatformException.message
will get nicely formatted too when present (#1716) - Breadcrumbs for database operations (#1656)
- APM for hive (#1672)
- Add
attachScreenshotOnlyWhenResumed
to options (#1700)
- Bump Android SDK from v6.32.0 to v6.33.1 (#1710, #1713)
- Bump Cocoa SDK from v8.14.2 to v8.15.2 (#1712, #1714, #1717)
- Log warning if both tracesSampleRate and tracesSampler are set (#1701)
- Better Flutter framework stack traces - we now collect Flutter framework debug symbols for iOS, macOS and Android automatically on the Sentry server (#1673)
- Initial (alpha) support for profiling on iOS and macOS (#1611)
- Add
SentryNavigatorObserver
current route toevent.app.contexts.viewNames
(#1545)- Requires relay version 23.9.0 for self-hosted instances
- Session: missing mechanism.handled is considered crash (#3353)
- Breadcrumbs for file I/O operations (#1649)
- Enable compatibility with uuid v4 (#1647)
- Bump Android SDK from v6.29.0 to v6.32.0 (#1660, #1676, #1688)
- Bump Cocoa SDK from v8.11.0 to v8.14.2 (#1650, #1655, #1677, #1691)
- Add Sampling Decision to Trace Envelope Header (#1639)
- Add http.request.method attribute to http spans data (#1633)
- Add db.system and db.name attributes to db spans data (#1629)
- Log SDK errors to the console if the log level is
fatal
even ifdebug
is disabled (#1635)
- Tracing without performance (#1621)
- Normalize data properties of
SentryUser
andBreadcrumb
before sending over method channel (#1591) - Fixing memory leak issue in SentryFlutterPlugin (Android Plugin) (#1588)
- Discard empty stack frames (#1625)
- Disable scope sync for cloned scopes (#1628)
- Bump Android SDK from v6.25.2 to v6.29.0 (#1586, #1630)
- Bump Cocoa SDK from v8.9.1 to v8.11.0 (#1584, #1606, #1626)
- Send trace origin (#1534)
Trace origin indicates what created a trace or a span. Not all transactions and spans contain enough information to tell whether the user or what precisely in the SDK created it. Origin solves this problem. The SDK now sends origin for transactions and spans.
- Add
appHangTimeoutInterval
toSentryFlutterOptions
(#1568) - DioEventProcessor: Append http response body (#1557)
- This is opt-in and depends on
maxResponseBodySize
- Only for
dio
package
- This is opt-in and depends on
- Add
apiTarget
field toSentryRequest
anddata
field toSentryResponse
(#1517)
- Bump Android SDK from v6.21.0 to v6.23.0 (#1512, #1520)
- Bump Cocoa SDK from v8.7.3 to v8.8.0 (#1521)
- Enums use its name instead of non exhaustive switches (##1506)
- Add http fields to
span.data
(#1497)- Set
http.response.status_code
- Set
http.response_content_length
- Set
- Improve
SentryException#value
, remove stringified stack trace (##1470)
- Check if the Native SDKs are enabled when using
autoInitializeNativeSdk=false
(#1489) - Align http method to span convention (#1477)
- Wrapped methods return a
Future
instead of executing right away (#1476)- Relates to (#1462)
- Fix readTimeoutMillis wrongly configures connectionTimeoutMillis instead of the correct field (#1485)
- Bump Android SDK from v6.19.0 to v6.20.0 (#1466, #1491)
- Bump Cocoa SDK from v8.7.2 to v8.7.3 (#1487)
SentryAssetBundle
returns Future by default (#1462)
- Support
http
>= 1.0.0 (#1475)
- Add
sent_at
to envelope header (#1428)
- Fix battery level conversion for iOS 16.4 (#1433)
- Adds a namespace for compatibility with AGP 8.0. (#1427)
- Avoid dependency conflict with package_info_plus v4 (#1440)
- Android
minSdkVersion
is now 19 (Flutter already defines 19-20 as best effort) - Deprecate
extra
in favor ofcontexts
(#1435)
- Fix
event.origin
andevent.environment
on unhandled exceptions (#1419) - Fix authority redaction (#1424)
- Fallback Uri parsing to
unknown
if its invalid (#1414)
- Add
SentryIOOverridesIntegration
that automatically wrapsFile
intoSentryFile
(#1362)
import 'package:sentry_file/sentry_file.dart';
// SDK init. options
options.addIntegration(SentryIOOverridesIntegration());
- Add
enableTracing
option (#1395)- This change is backwards compatible. The default is
null
meaning existing behaviour remains unchanged (setting eithertracesSampleRate
ortracesSampler
enables performance). - If set to
true
, performance is enabled, even if notracesSampleRate
ortracesSampler
have been configured. - If set to
true
, sampler will use default sample rate of 1.0, if notracesSampleRate
is set. - If set to
false
performance is disabled, regardless oftracesSampleRate
andtracesSampler
options.
- This change is backwards compatible. The default is
// SDK init. options
options.enableTracing = true;
- Sync
connectionTimeout
andreadTimeout
to Android (#1397)
// SDK init. options
options.connectionTimeout = Duration(seconds: 10);
options.readTimeout = Duration(seconds: 10);
- Set User
name
andgeo
in native plugins (#1393)
Sentry.configureScope(
(scope) => scope.setUser(SentryUser(
id: '1234',
name: 'Jane Doe',
email: 'jane.doe@example.com',
geo: SentryGeo(
city: 'Vienna',
countryCode: 'AT',
region: 'Austria',
))),
);
import 'dart:convert';
options.beforeSend = (event, {hint}) {
final text = 'This event should not be sent happen in prod. Investigate.';
final textAttachment = SentryAttachment.fromIntList(
utf8.encode(text),
'event_info.txt',
contentType: 'text/plain',
);
hint?.attachments.add(textAttachment);
return event;
};
- Screenshots and View Hierarchy should only be added to errors (#1385)
- View Hierarchy is removed from Web errors since we don't symbolicate minified View Hierarchy yet.
- More improvements related to not awaiting
FutureOr<T>
if it's not a future (#1385) - Do not report only async gap frames for logging calls (#1398)
- Fix breadcrumbs not being sent on Android web (#1378)
- Fix Dart web builds breaking due to
dart:io
imports when usingSentryIsolate
orSentryIsolateExtension
(#1371)- When using
SentryIsolate
orSentryIsolateExtension
, importsentry_io.dart
.
- When using
- Export
SentryBaggage
(#1377) - Remove breadcrumbs from transaction to avoid duplication (#1366)
- SentryUserInteractionWidget: add support for PopupMenuButton and PopupMenuItem (#1361)
- Fix
SentryUserInteractionWidget
throwing when Sentry is not enabled (#1363) - Fix enableAutoNativeBreadcrumbs and enableNativeCrashHandling sync flags (#1367)
- Sanitize sensitive data from URLs (span desc, span data, crumbs, client errors) (#1327)
- Sync missing properties to the Native SDKs (#1354)
- sqflite Support for Flutter (#1306)
DioErrorExtractor
no longer extractsDioError.stackTrace
which is done viaDioStackTraceExtractor
instead (#1344)- LoadImageListIntegration won't throw bad state if there is no exceptions in the event (#1347)
- Exception StackTrace Extractor (#1335)
- SentryUserInteractionWidget checks if the Elements are mounted before comparing them (#1339)
- Platform Exception Event Processor (#1297)
- Support failedRequestTargets for HTTP Client errors (#1285)
- Captures errors for the default range
500-599
ifcaptureFailedRequests
is enabled
- Captures errors for the default range
- Sentry Isolate Extension (#1266)
- Allow sentry user to control resolution of captured Flutter screenshots (#1288)
- Support beforeSendTransaction (#1238)
- Add In Foreground to App context (#1260)
- Error Cause Extractor (#1198, #1236)
- Add
throwable
toSentryException
- Add
- Dart 3 Support (#1220)
- Introduce
Hint
data bag (#1136) - Use
Hint
for screenshots (#1165) - Support custom units for custom measurements (#1181)
- Replace
toImage
withtoImageSync
for Flutter >= 3.7 (1268) - Don't await
FutureOr<T>
if it's not a future. This should marginally improve the performance (#1310) - Replace
StackTrace.empty
withStackTrace.current
(#1183)
- Enable enableNdkScopeSync by default (#1276)
- Update
sentry_dio
to dio v5 (#1282) - Remove deprecated fields (#1227)
- Remove deprecated fields from the
Scope
class.user(SentryUser? user)
, using thesetUser(SentryUser? user)
instead.attachements
, using theattachments
instead.
- Remove deprecated field from the
SentryFlutterOptions
class.anrTimeoutIntervalMillis
, using theanrTimeoutInterval
instead.autoSessionTrackingIntervalMillis
, using theautoSessionTrackingInterval
instead.
- Remove deprecated fields from the
- Rename APM tracking feature flags to tracing (#1222)
- Rename
- enableAutoPerformanceTracking to enableAutoPerformanceTracing
- enableOutOfMemoryTracking to enableWatchdogTerminationTracking
- Rename
- Enable APM features by default (#1217)
- Enable by default
- captureFailedRequests
- enableStructuredDataTracing
- enableUserInteractionTracing
- Enable by default
- Mark transaction as internal_error in case of unhandled errors (#1218)
- Removed various deprecated fields (#1036):
- Removed the following fields from the
device
context- language
- timezone
- screenResolution
- theme
- Removed isolate name from Dart context. It's now reported via the threads interface. It can be enabled via
options.attachThreads
- Removed the following fields from the
- Use
sentryClientName
instead ofsdk.identifier
(#1135) - Refactor
BindingUtils
toBindingWrapper
to enable the use of custom bindings (#1184) - Bump Flutter min to 3.0.0 and Dart to 2.17.0 (#1180)
- View hierarchy reads size from RenderBox only (#1258)
- Try to avoid ConcurrentModificationError by not using a Future.forEach (#1259)
- isWeb check for WASM (#1249)
- Don't suppress error logs (#1228)
- Fix: Remove
SentryOptions
related parameters from classes which also takeHub
as a parameter (#816)
- Platform Exception Event Processor (#1297)
- Support failedRequestTargets for HTTP Client errors (#1285)
- Captures errors for the default range
500-599
ifcaptureFailedRequests
is enabled
- Captures errors for the default range
- Sentry Isolate Extension (#1266)
- Allow sentry user to control resolution of captured Flutter screenshots (#1288)
- Replace
toImage
withtoImageSync
for Flutter >= 3.7 (1268) - Don't await
FutureOr<T>
if it's not a future. This should marginally improve the performance (#1310)
- Add proguard_uui property to SentryFlutterOptions to set proguard information at runtime (#1312)
- Change podspec
EXCLUDED_ARCHS
value to allow podfiles to add more excluded architetures (#1303)
- Implement
loadStructuredBinaryData
from updated AssetBundle (#1272)
- Pass processed Breadcrumb to scope observer (#1298)
- Remove duplicated breadcrumbs when syncing with iOS/macOS (#1283)
- Set client name with version in Android SDK (#1274)
- View hierarchy reads size from RenderBox only (#1258)
- Try to avoid ConcurrentModificationError by not using a Future.forEach (#1259)
- isWeb check for WASM (#1249)
- Remove deprecated fields (#1227)
- Remove deprecated fields from the
Scope
class.user(SentryUser? user)
, using thesetUser(SentryUser? user)
instead.attachements
, using theattachments
instead.
- Remove deprecated field from the
SentryFlutterOptions
class.anrTimeoutIntervalMillis
, using theanrTimeoutInterval
instead.autoSessionTrackingIntervalMillis
, using theautoSessionTrackingInterval
instead.
- Remove deprecated fields from the
- Rename APM tracking feature flags to tracing (#1222)
- Rename
- enableAutoPerformanceTracking to enableAutoPerformanceTracing
- enableOutOfMemoryTracking to enableWatchdogTerminationTracking
- Rename
- Migrate to sentry cocoa v8 (#1197)
- Dart 3 Support (#1220)
- Enable APM features by default (#1217)
- Enable by default
- captureFailedRequests
- enableStructuredDataTracing
- enableUserInteractionTracing
- Enable by default
- Mark transaction as internal_error in case of unhandled errors (#1218)
- Feat: Introduce
Hint
data bag (#1136) - Feat: Use
Hint
for screenshots (#1165) - Feat: Support custom units for custom measurements (#1181)
- Fix: Remove
SentryOptions
related parameters from classes which also takeHub
as a parameter (#816)
- Enha: Replace
StackTrace.empty
withStackTrace.current
(#1183)
- Removed various deprecated fields (#1036):
- Removed the following fields from the
device
context- language
- timezone
- screenResolution
- theme
- Removed isolate name from Dart context. It's now reported via the threads interface. It can be enabled via
options.attachThreads
- Removed the following fields from the
- Use
sentryClientName
instead ofsdk.identifier
(#1135) - Refactor
BindingUtils
toBindingWrapper
to enable the use of custom bindings (#1184) - Bump Flutter min to 3.0.0 and Dart to 2.17.0 (#1180)
- intl is now more version permissive (>=0.17.0 <1.0.0) (#1247)
- sentry_file now requires Dart >= 2.19 (#1240)
- Fix Pod target for iOS (#1237)
- enableUserInteractionTracing sometimes finds the wrong widget (#1212)
- Only call method channels on native platforms (#1196)
- Bump Android SDK from v6.9.2 to v6.11.0 (#1194, #1209)
- Bump Cocoa SDK from v7.31.3 to v7.31.5 (#1190, #1207)
- Missing slow and frozen frames for Auto transactions (#1172)
- Tracing for File IO integration (#1160)
- Capture Future errors for Flutter Web automatically (#1152)
- User Interaction transactions and breadcrumbs (#1137)
- Do not attach headers if Span is NoOp (#1143)
- Add request context to
HttpException
,SocketException
andNetworkImageLoadException
(#1118) SocketException
andFileSystemException
withOSError
s report theOSError
as root exception (#1118)
- VendorId should be a String (#1112)
- Disable
enableUserInteractionBreadcrumbs
on Android whenenableAutoNativeBreadcrumbs
is disabled (#1131) - Transaction name is reset after the transaction finishes (#1125)
- Bump Cocoa SDK from v7.30.2 to v7.31.1 (#1132, #1139)
- Bump Android SDK from v6.7.0 to v6.7.1 (#1112)
- Feat: Screenshot Attachment (#1088)
- Merging of integrations and packages (#1111)
- Add missing
fragment
for HTTP Client Errors (#1102) - Sync user name and geo for Android (#1102)
- Add mechanism to Dio Http Client error (#1114)
- Capture response information in
SentryHttpClient
(#1095)
- Remove experimental
SentryResponse
fields:url
,body
,redirected
,status
(#1095) SentryHttpClient
request body capture checks default PII capture setting, same as the DIO integration (#1095)
- Bump Android SDK from v6.5.0 to v6.6.0 (#1090)
- Bump Cocoa SDK from v7.28.0 to v7.30.0 (#1089, #1101)
- Avoid dependency conflict with package_info_plus v3 (#1084)
- Use PlatformDispatcher.onError in Flutter 3.3 (#1039)
- Bring protocol up to date with latest Sentry protocol (#1038)
- Avoid dependency conflict with package_info_plus v2 (#1068)
- Handle traces sampler exception (#1040)
- tracePropagationTargets ignores invalid Regex (#1043)
- SentryDevice cast error (#1059)
- Added Flutter renderer information to events (#1035)
- Added missing DSN field into the SentryEnvelopeHeader (#1050)
- Tracer does not allow setting measurement if finished (#1026)
- Add missing measurements units (#1033)
- Scope cloning method was not setting the user (#1013)
- Prepare future support for iOS and macOS obfuscated app symbolication using dSYM (requires Flutter
master
channel) (#823) - Bump Android SDK from v6.3.1 to v6.4.2 (#989, #1009)
- Bump Cocoa SDK from v7.23.0 to v7.25.1 (#993, #996, #1000, #1007)
- Scope.clone incorrectly accesses tags (#978)
- beforeBreadcrumb was not adding the mutated breadcrumb (#982)
- Bump Flutter's min. supported version from 1.17.0 to 2.0.0 (#966)
This should not break anything since the Dart's min. version is already 2.12.0 and Flutter 2.0.0 uses Dart 2.12.0
- Back compatibility of Object.hash for Dart 2.12.0 (#966)
- Fix back compatibility for OnErrorIntegration integration (#965)
Scope#setContexts
pasing a List value would't not work (#932)
- Add integration for
PlatformDispatcher.onError
(#915)
- Missing OS context for iOS events (#958)
- Fix:
Scope#clone
calls the Native bridges again via thescopeObserver
(#959)
- Dio Integration adds response data (#934)
- Maps with Key Object, Object would fail during serialization if not String, Object (#935)
- Breadcrumbs "Concurrent Modification" (#948)
- Duplicative Screen size changed breadcrumbs (#888)
- Duplicated Android Breadcrumbs with no Mechanism (#954)
- Fix windows native method need default result (#943)
- Add request instead of response data to
SentryRequest
inDioEventProcessor
#933
- Context Escape with ScopeCallback (#925)
- Send DidBecomeActiveNotification when OOM enabled (#905)
dio.addSentry
hangs ifdsn
is empty and SDK NoOp (#920)- addBreadcrumb throws on Android API < 24 because of NewApi usage (#923)
sentry_dio
is promoted to GA and not experimental anymore (#914)
- Filter out app starts with more than 60s (#895)
- Bump: Sentry-Cocoa to 7.18.0 and Sentry-Android to 6.1.2 (#892)
- Fix: Add missing iOS contexts (#761)
- Fix serialization of threads (#844)
- Fix:
SentryAssetBundle
on Flutter >= 3.1 (#877)
- Feat: Client Reports (#829)
- Feat: Allow manual init of the Native SDK (#765)
- Feat: Attach Isolate name to thread context (#847)
- Feat: Add Android thread to platform stacktraces (#853)
- Feat: Sync Scope to Native (#858)
- Starting with version
6.6.0
ofsentry
, Sentry's version >= v21.9.0 is required or you have to manually disable sending client reports via thesendClientReports
option. This only applies to self-hosted Sentry. If you are using sentry.io, no action is needed.
- Bump: Sentry-Cocoa to 7.17.0 and Sentry-Android to 6.1.1 (#891)
- Bump: Sentry-Cocoa to 7.16.1 (#886)
- Fix: Add user setter back in the scope (#883)
- Fix: clear method sets all properties synchronously (#882)
- Feat: Sync Scope to Native (#858)
- Feat: Attach Isolate name to thread context (#847)
- Fix:
SentryAssetBundle
on Flutter >= 3.1 (#877) - Feat: Add Android thread to platform stacktraces (#853)
- Fix: Rename auto initialize property (#857)
- Bump: Sentry-Android to 6.0.0 (#879)
- Fix serialization of threads (#844)
- Feat: Allow manual init of the Native SDK (#765)
- Feat: Client Reports (#829)
- Fix: Add missing iOS contexts (#761)
- Starting with version
6.6.0
ofsentry
, Sentry's version >= v21.9.0 is required or you have to manually disable sending client reports via thesendClientReports
option. This only applies to self-hosted Sentry. If you are using sentry.io, no action is needed.
- Update event contexts (#838)
- No documented changes.
- Fix: Do not set the transaction to scope if no op (#828)
- No documented changes.
- Feat: Support for platform stacktraces on Android (#788)
- Bump: Sentry-Android to 5.7.0 and Sentry-Cocoa to 7.11.0 (#796)
- Fix: Dio event processor safelly bails if no DioError in the exception list (#795)
- Feat: Mobile Vitals - Native App Start (#749)
- Feat: Mobile Vitals - Native Frames (#772)
- Fix: Missing userId on iOS when userId is not set (#782) by @marandaneto
- Allow to set startTimestamp & endTimestamp manually to SentrySpan (#676) by @fatihergin
- Feat: Allow to set startTimestamp & endTimestamp manually to SentrySpan (#676)
- Bump: Sentry-Cocoa to 7.10.0 (#777)
- Feat: Additional Dart/Flutter context information (#778)
- Bump: Kotlin plugin to 1.5.31 (#763)
- Fix: Missing userId on iOS when userId is not set (#782)
- No documented changes.
- Fix: Disable log by default in debug mode (#753)
- [Dio] Ref: Replace FailedRequestAdapter with FailedRequestInterceptor (#728)
- Fix: Add missing return values - dart analyzer (#742)
- Feat: Add
DioEventProcessor
which improves DioError crash reports (#718) - Fix: Do not report duplicated packages and integrations (#760)
- Feat: Allow manual init of the Native SDK or no Native SDK at all (#765)
- Feat: Support maxSpan for performance API and expose SentryOptions through Hub (#716)
- Fix: await ZonedGuard integration to run (#732)
- Fix:
sentry_logging
incorrectly setting SDK name (#725) - Bump: Sentry-Android to 5.6.1 and Sentry-Cocoa to 7.9.0 (#736)
- Feat: Support Attachment.addToTransactions (#709)
- Fix: captureTransaction should return emptyId when transaction is discarded (#713)
- Add
SentryAssetBundle
for automatic spans for asset loading (#685) - Fix:
maxRequestBodySize
should benever
by default when using the FailedRequestClientAdapter directly (#701) - Feat: Add support for Dio (#688)
- Fix: Use correct data/extras type in tracer (#693)
- Fix: Do not throw when Throwable type is not supported for associating errors to a transaction (#692)
- Feat: Automatically create transactions when navigating between screens (#643)
- Feat: Support Attachment.addToTransactions (#709)
- Fix: captureTransaction should return emptyId when transaction is discarded (#713)
- Feat: Auto transactions duration trimming (#702)
- Add
SentryAssetBundle
for automatic spans for asset loading (#685) - Feat: Configure idle transaction duration (#705)
- Fix:
maxRequestBodySize
should benever
by default when using the FailedRequestClientAdapter directly (#701)
- Feat: Improve configuration options of
SentryNavigatorObserver
(#684) - Feat: Add support for Dio (#688)
- Bump: Sentry-Android to 5.5.2 and Sentry-Cocoa to 7.8.0 (#696)
- Enha: Replace flutter default root name '/' with 'root' (#678)
- Fix: Use 'navigation' instead of 'ui.load' for auto transaction operation (#675)
- Fix: Use correct data/extras type in tracer (#693)
- Fix: Do not throw when Throwable type is not supported for associating errors to a transaction (#692)
- Feat: Automatically create transactions when navigating between screens (#643)
- Fix: ConcurrentModificationError in when finishing span (#664)
- Feat: Add enableNdkScopeSync Android support (#665)
- Fix:
sentry_logging
works now on web (#660) - Fix:
sentry_logging
timestamps are in UTC (#660) - Fix:
sentry_logging
Level.Off is never recorded (#660) - Fix: Rate limiting fallback to retryAfterHeader (#658)
- Feat: Integration for
logging
(#631) - Feat: Add logger name to
SentryLogger
and send errors in integrations to the registered logger (#641)
- Fix: Remove is Enum check to support older Dart versions (#635)
- Fix: Transaction serialization if not encodable (#633)
- Bump: Sentry-Android to 5.3.0 and Sentry-Cocoa to 7.5.1 (#629)
- Fix: event.origin tag for macOS and other Apple platforms (#622)
- Feat: Add current route as transaction (#615)
- Feat: Add Breadcrumbs for Flutters
debugPrint
(#618) - Feat: Enrich Dart context with isolate name (#600)
- Feat: Sentry Performance for HTTP client (#603)
- Performance API for Dart/Flutter (#530)
SentryEvent
inherits from theSentryEventLike
mixinScope#transaction
sets and reads from theScope#span
object if bound to the Scope
- Feat: Add current route as transaction (#615)
- Feat: Add Breadcrumbs for Flutters
debugPrint
(#618)
- Bump Sentry Android SDK to 5.2.0 (#594)
- Feat: Enrich Dart context with isolate name (#600)
- Feat: Sentry Performance for HTTP client (#603)
- Performance API for Dart/Flutter (#530)
SentryEvent
inherits from theSentryEventLike
mixinScope#transaction
sets and reads from theScope#span
object if bound to the Scope
- Fix: Set custom SentryHttpClientError when HTTP error is captured without an exception (#580)
- Bump: Android AGP 4.1 (#586)
- Bump: Sentry Cocoa to 7.3.0 (#589)
- Fix: Update
SentryUser
according to docs (#561) - Feat: Enable or disable reporting of packages (#563)
- Bump: Sentry-Cocoa to 7.2.7 (#578)
- Bump: Sentry-Android to 5.1.2 (#578)
- Fix: Read Sentry config from environment variables as fallback (#567)
- Feat: Lists of exceptions and threads (#524)
- Feat: Collect more information for exceptions collected via
FlutterError.onError
(#538) - Feat: Add maxAttachmentSize option (#553)
- Feat: HTTP breadcrumbs have the request & response size if available (#552)
- Fix: Re-initialization of Flutter SDK (#526)
- Enhancement: Call
toString()
on all non-serializable fields (#528) - Fix: Always call
Flutter.onError
in order to not swallow messages (#533) - Bump: Android SDK to 5.1.0-beta.6 (#535)
- Fix: Serialization of Flutter Context (#520)
- Feat: Add support for attachments (#505)
- Feat: Add support for User Feedback (#506)
- Feat: Browser detection (#502)
- Feat: Enrich events with more context (#452)
- Feat: Add Culture Context (#491)
- Feat: Add DeduplicationEventProcessor (#498)
- Feat: Capture failed requests as event (#473)
- Feat:
beforeSend
callback accepts async code (#494)
- Ref: EventProcessor changed to an interface (#489)
- Feat: Support envelope based transport for events (#391)
- The method signature of
Transport
changed fromFuture<SentryId> send(SentryEvent event)
toFuture<SentryId> send(SentryEnvelope envelope)
- The method signature of
- Remove
Sentry.currentHub
(#490) - Ref: Rename
cacheDirSize
tomaxCacheItems
and addmaxCacheItems
for iOS (#495) - Ref: Add error and stacktrace parameter to logger (#503)
- Feat: Change timespans to Durations in SentryOptions (#504)
- Feat:
beforeSend
callback accepts async code (#494)
- Since version
6.0.0
of thesentry
, Sentry's version >= v20.6.0 is required. This only applies to on-premise Sentry, if you are using sentry.io no action is needed.
- Fix: Merge user from event and scope (#467)
- Feature: Allow setting of default values for in-app-frames via
SentryOptions.considerInAppFramesByDefault
(#482) - Bump: sentry-android to v5.0.1 (#486)
- Bump: Sentry-Cocoa to 7.1.3 for iOS and macOS (#488)
- Fix:
Sentry.close()
closes native SDK integrations (#388) - Feat: Support for macOS (#389)
- Feat: Support for Linux (#402)
- Feat: Support for Windows (#407)
- Fix: Mark
Sentry.currentHub
as deprecated (#406) - Fix: Set console logger as default logger in debug mode (#413)
- Fix: Use name from pubspec.yaml for release if package id is not available (#411)
- Feat:
SentryHttpClient
tracks the duration which a request takes and logs failed requests (#414) - Bump: sentry-cocoa to v7.0.0 (#424)
- Feat: Support for Out-of-Memory-Tracking on macOS/iOS (#424)
- Fix: Trim
\u0000
from Windows package info (#420) - Feature: Log calls to
print()
as Breadcrumbs (#439) - Fix:
dist
was read fromSENTRY_DSN
, now it's read fromSENTRY_DIST
(#442) - Bump: sentry-cocoa to v7.0.3 (#445)
- Fix: Fix adding integrations on web (#450)
- Fix: Use
log()
instead ofprint()
for SDK logging (#453) - Bump: sentry-android to v5.0.0-beta.2 (#457)
- Feature: Add
withScope
callback to capture methods (#463) - Fix: Add missing properties
language
,screenHeightPixels
andscreenWidthPixels
toSentryDevice
(#465)
- This version of the
sentry
Dart package requires Sentry server >= v20.6.0. This only applies to on-premise Sentry, if you are using sentry.io no action is needed.
- Sound null safety
- Fix: event.origin and event.environment tags have wrong value for iOS (#365) and (#369)
- Fix: Fix deprecated
registrar.messenger
call inSentryFlutterWeb
(#364) - Fix: Enable breadcrumb recording mechanism based on platform (#366)
- Feat: Send default PII options (#360)
- Bump: sentry-cocoa to v6.2.1 (#360)
- Feat: Migration from
package_info
topackage_info_plus
plugin (#370) - Fix: Set
SentryOptions.debug
insentry
(#376) - Fix: Read all environment variables in
sentry
(#375)
- Return type of
Sentry.close()
changed fromvoid
toFuture<void>
andIntegration.close()
changed fromvoid
toFutureOr<void>
(#395) - Remove deprecated member
enableLifecycleBreadcrumbs
. UseenableAppLifecycleBreadcrumbs
instead. (#366)
- Bump: sentry-android to v4.3.0 (#343)
- Fix: Multiple FlutterError.onError calls in FlutterErrorIntegration (#345)
- Fix: Pass hint to EventProcessors (#356)
- Fix: EventProcessors were not dropping events when returning null (#353)
- Fix: Plugin Registrant class moved to barrel file (#358)
- This changed the import from
import 'package:sentry_flutter/src/sentry_flutter_web.dart';
toimport 'package:sentry_flutter/sentry_flutter_web.dart';
- This could lead to breaking changes. Typically it shouldn't because the referencing file is auto-generated.
- This changed the import from
- Fix: Prefix classes with Sentry (#357)
- A couple of classes were often conflicting with user's code.
Thus this change renames the following classes:
App
->SentryApp
Browser
->SentryBrowser
Device
->SentryDevice
Gpu
->SentryGpu
Integration
->SentryIntegration
Message
->SentryMessage
OperatingSystem
->SentryOperatingSystem
Request
->SentryRequest
User
->SentryUser
Orientation
->SentryOrientation
- A couple of classes were often conflicting with user's code.
Thus this change renames the following classes:
- Fix: Do not append stack trace to the exception if there are no frames
- Fix: Empty DSN disables the SDK and runs the App
- Feat: sentry and sentry_flutter null-safety thanks to @ueman and @fzyzcjy
- Fix: captureMessage defaults SentryLevel to info
- Fix: SentryEvent.throwable returns the unwrapped throwable instead of the throwableMechanism
- Feat: Support enableNativeCrashHandling on iOS
- Bump: sentry-android to v4.0.0
- Fix: Pana Flutter upper bound deprecation
- Fix: sentry_flutter static analysis (pana) using stable version
- Fix: Call WidgetsFlutterBinding.ensureInitialized() within runZoneGuarded
- Fix: Auto session tracking start on iOS #274
- Bump: Sentry-cocoa to 6.1.4
- Fix: Mark session as
errored
in iOS #270 - Fix: Pass auto session tracking interval to iOS
- Fix: Deprecated binaryMessenger (MethodChannel member) for Flutter Web
- Ref: Make
WidgetsFlutterBinding.ensureInitialized();
the first thing the Sentry SDK calls. - Bump: Sentry-cocoa to 6.0.12
- Feat: Respect FlutterError silent flag #248
- Bump: Android SDK to v3.2.1 #273
- Ref: Changed category of Flutter lifecycle tracking #240
- Fix: Envelope length should be based on the UTF8 array instead of String length
Release of Sentry's new SDK for Dart/Flutter.
New features not offered by <= v4.0.0:
- Sentry's Unified API.
- Complete Sentry's Protocol available.
- Dart SDK docs.
- Automatic HTTP Breadcrumbs for http.Client
- No boilerplate for
runZonedGuarded
andIsolate.current.addErrorListener
- All events are enriched with Scope's Contexts, this includes Breadcrumbs, tags, User, etc...
- The Flutter SDK is built on top of the Dart SDK, so it includes all the available features, plus
- Flutter SDK docs.
- Automatic NavigatorObserver Breadcrumbs
- Automatic Device's Breadcrumbs through the Android and iOS SDKs or via Sentry's
WidgetsBindingObserver
wrapper - No boilerplate for
FlutterError.onError
- All events are enriched with Contexts's data, this includes Device's, OS, App info, etc...
- Offline caching
- Release health
- Captures not only Dart and Flutter errors, but also errors caused on the native platforms, Like Kotlin, Java, C and C++ for Android and Swift, ObjC, C, C++ for iOS
- Supports Fatal crashes, Event is going to be sent on App's restart
- Supports
split-debug-info
for Android only - Flutter Android, iOS and limited support for Flutter Web
Improvements:
- Feat: Added a copyWith method to all the protocol classes
Packages were released on sentry pubdev and sentry_flutter pubdev
- Since version
4.0.0
of thesentry_flutter
, Sentry's version >= v20.6.0 is required. This only applies to on-premise Sentry, if you are using sentry.io no action is needed.
- Ref: Remove duplicated attachStackTrace field
- Fix: Flutter Configurations should be able to mutate the SentryFlutterOptions
- Enhancement: Add SentryWidgetsBindingObserver, an Integration that captures certain window and device events.
- Enhancement: Set
options.environment
on SDK init based on the flags (kReleaseMode, kDebugMode, kProfileMode or SENTRY_ENVIRONMENT). - Feature: SentryHttpClient to capture HTTP requests as breadcrumbs
- Ref: Only assign non-null option values in Android native integration in order preserve default values
- Enhancement: Add 'attachThreads' in options. When enabled, threads are attached to all logged events for Android
- Ref: Rename typedef
Logger
toSentryLogger
to prevent name clashes with logging packages - Fix: Scope Event processors should be awaited
- Fix: Package usage as git dependency
Logger
typedef is renamed toSentryLogger
attachStackTrace
is renamed toattachStacktrace
- Fix: StackTrace frames with 'package' uri.scheme are inApp by default #185
- Fix: Missing App's StackTrace frames for Flutter errors
- Enhancement: Add isolateErrorIntegration and runZonedGuardedIntegration to default integrations in sentry-dart
- Fix: Breadcrumb list is a plain list instead of a values list #201
- Ref: Remove deprecated classes (Flutter Plugin for Android) and cleaning up #186
- Fix: Handle immutable event lists and maps
- Fix: NDK integration was being disabled by a typo
- Fix: Missing toList for debug meta #192
- Enhancement: NavigationObserver to record Breadcrumbs for navigation events #197
- Fix: Integrations should be closeable
- Feat: Support split-debug-info for Android #191
- Fix: the event payload must never serialize null or empty fields
- Ref: Make hints optional
Sentry.init
andSentryFlutter.init
have an optional callback argument which runs the host App after Sentry initialization.Integration
is anInterface
instead of a pure FunctionHints
are optional arguments- Sentry Dart SDK adds an
IsolateError
handler by default
- Enhancement:
Contexts
were added to theScope
#154 - Fix: App. would hang if
debug
mode was enabled and refactoring ##157 - Enhancement: Sentry Protocol v7
- Enhancement: Added missing Protocol fields,
Request
,SentryStackTrace
...) #155 - Feat: Added
attachStackTrace
options to attach stack traces oncaptureMessage
calls - Feat: Flutter SDK has the Native SDKs embedded (Android and Apple) #158
Sentry.init
returns aFuture
.- Dart min. SDK is
2.8.0
- Flutter min. SDK is
1.17.0
- Timestamp has millis precision.
- For better groupping, add your own package to the
addInAppInclude
list, e.g.options.addInAppInclude('sentry_flutter_example');
- A few classes of the
Protocol
were renamed.
- Since version
4.0.0
of thesentry_flutter
,Sentry
version >=v20.6.0
is required. This only applies to on-premise Sentry, if you are using sentry.io no action is needed.
First Release of Sentry's new SDK for Dart/Flutter.
New features not offered by <= v4.0.0:
- Sentry's Unified API.
- Complete Sentry Protocol available.
- Docs and Migration is under review on this PR
- For all the breaking changes follow this PR, they'll be soon available on the Migration page.
Packages were released on pubdev
We'd love to get feedback and we'll work in getting the GA 4.0.0 out soon. Until then, the stable SDK offered by Sentry is at version 3.0.1
- Add support for Contexts in Sentry events
pubspec.yaml
and example code clean-up.
- Support Web
SentryClient
frompackage:sentry/sentry.dart
with conditional importSentryBrowserClient
for web frompackage:sentry/browser_client.dart
SentryIOClient
for VM and Flutter frompackage:sentry/io_client.dart
- Support non-standard port numbers and paths in DSN URL.
- Add breadcrumb support.
- Add a
stackFrameFilter
argument toSentryClient
'scapture
method (96be842). - Clean-up code using pre-Dart 2 API (91c7706, b01ebf8).
- Defensively copy internal maps event attributes to avoid shared mutable state (https://github.com/flutter/sentry/commit/044e4c1f43c2d199ed206e5529e2a630c90e4434)
- Support DNS format without secret key.
- Remove dependency on
package:quiver
. - The
clock
argument toSentryClient
constructor should now beClockProvider
(but still acceptsClock
for backwards compatibility).
- Add support for user context in Sentry events.
- Invert stack frames to be compatible with Sentry's default culprit detection.
- Fixed deprecation warnings for Dart 2
- Refactored tests to work with Dart 2
- first and last Dart 1-compatible release (we may fix bugs on a separate branch if there's demand)
- fix code for Dart 2
- use UTC in the
timestamp
field
- remove sub-seconds from the timestamp
- parse and report async gaps in stack traces
- environment attributes
- auto-generate event_id and timestamp for events
- parse and report stack traces
- use x-sentry-error HTTP response header
- gzip outgoing payloads by default
- basic ability to send exception reports to Sentry.io