sentry_flutter 9.7.0-beta.2
sentry_flutter: ^9.7.0-beta.2 copied to clipboard
Sentry SDK for Flutter. This package aims to support different Flutter targets by relying on the many platforms supported by Sentry with native SDKs.
Changelog #
9.7.0-beta.2 #
Features #
- Add
sentry.originto logs created byLoggingIntegration(#3153) - Tag all spans with thread info on non-web platforms (#3101, #3144)
- feat(feedback): Add option to disable keyboard resize (#3154)
- Support
firebase_remote_config: >=5.4.3 <7.0.0(#3213)
Fixes #
- Implement prefill logic in
SentryFeedbackWidgetforuseSentryUserparameter to populate fields with current user data (#3180) - Structured Logs: Don’t add template when there are no 'sentry.message.parameter.x’ attributes (#3219)
Enhancements #
- Add
DioExceptionresponse data to error breadcrumb (#3164)- Bumped
diomin verion to5.2.0
- Bumped
- Use FFI/JNI for
captureEnvelopeon iOS and Android (#3115) - Log a warning when dropping envelope items (#3165)
- Call options.log for structured logs (#3187)
- Remove async usage from
FlutterErrorIntegration(#3202) - Tag all spans during app start with start type info (#3190)
- Refactor
loadContextsandloadDebugImagesto use JNI and FFI (#3224)
Dependencies #
9.7.0-beta.1 #
9.6.0 #
Note: this release might require updating your Android Gradle Plugin version to at least 8.1.4.
Fixes #
- False replay config restarts because of
ScreenshotWidgetStatusequality issues (#3114) - Debug meta not loaded for split debug info only builds (#3104)
- TTID/TTFD root transactions (#3099, #3111)
- Web, Linux and Windows now create a UI transaction for the root page
- iOS, Android now correctly create idle transactions
- Fixes behaviour of traceId generation and TTFD for app start
- Directionality assertion issue in debug mode (#3088)
Dependencies #
Internal #
- Use lifecycle hook for before send event (#3017)
9.6.0-beta.2 #
9.6.0-beta.1 #
Fixes #
- Debug meta not loaded for split debug info only builds (#3104)
- TTID/TTFD root transactions (#3099, #3111)
- Web, Linux and Windows now create a UI transaction for the root page
- iOS, Android now correctly create idle transactions
- Fixes behaviour of traceId generation and TTFD for app start
- Directionality assertion issue in debug mode (#3088)
Dependencies #
Internal #
- Use lifecycle hook for before send event (#3017)
9.5.0 #
Features #
- Report Flutter framework feature flags (#2991)
- Search for feature flags that are prefixed with
flutter:* - This works on Flutter builds that include this PR
- Search for feature flags that are prefixed with
- Add
LoggingIntegrationsupport forSentryLog(#3050) - Add
enableNewTraceOnNavigationflag toSentryNavigatorObserver(#3096)- Default:
true - Disable by passing
false, e.g.:SentryNavigatorObserver(enableNewTraceOnNavigation: false) - Note: traces differ from transactions/spans — see tracing concepts here
- Default:
Fixes #
- Ensure consistent sampling per trace (#3079)
Enhancements #
- Add sampled flag in propagation context (#3084)
Dependencies #
- Bump Native SDK from v0.9.0 to v0.9.1 (#3018)
- Bump JavaScript SDK from v9.5.0 to v9.40.0 (#3085, #3092)
Internal #
- Automate Sentry JS SDK version updates (#3080)
9.4.1 #
Fixes #
- Span ids not re-generating for headers created from scope (#3051)
ScreenshotIntegrationnot being added for web (#3055)PropagationContextnot being set whenScopeis cloned resulting in different trace ids when usingwithScope(#3069)- Drift transaction rollback not executed when parent span is null (#3062)
Enhancements #
9.4.0 #
Fixes #
- SPM should use
exactinstead offromwhen defining the sentry-cocoa package (#3065) - Respect ancestor text direction in
SentryScreenshotWidget(#3046) - Add additional crashpad path candidate (#3016)
- Replay JNI usage with
SentryFlutterPlugin(#3036, #3039) - Do not set
isTerminatingoncaptureReplayfor Android (#3037)- Previously segments might be missing on Android replays if an unhandled error happened
Dependencies #
9.4.0-beta.1 #
9.3.0 #
Breaking Change (Tooling) #
- Upgrade Kotlin
languageVersionto1.8(#3032)- This allows usage of the Kotlin Android Plugin
2.2.0which requires alanguageVersionof1.8or higher - If you are experiencing an issue we recommend upgrading to a toolchain compatible with Kotlin
1.8or higher
- This allows usage of the Kotlin Android Plugin
Features #
- SentryFeedbackWidget Improvements (#2964)
- Capture a device screenshot for feedback
- Customize tests and required fields
- Customization moved from the
SentryFeedbackWidgetconstructor toSentryFlutterOptions:
// configure your feedback widget
options.feedback.showBranding = false;
9.2.0 #
9.1.0 #
Features #
- Flutter Web: add debug ids to events (#2917)
- This allows support for symbolication based on debug ids
- This only works if you use the Sentry Dart Plugin version
3.0.0or higher
- Improved TTID/TTFD API (#2866)
- This improves the stability and consistency of TTFD reporting by introducing new APIs
// Prerequisite: `SentryNavigatorObserver` is set up and routes you navigate to have unique names, e.g configured via `RouteSettings`
// Info: Stateless widgets will report TTFD automatically when wrapped with `SentryDisplayWidget` - no need to call `reportFullyDisplayed`.
// Method 1: wrap your widget that you navigate to in `SentryDisplayWidget`
SentryDisplayWidget(child: YourWidget())
// Then report TTFD after long running work (File I/O, Network) within your widget.
@override
void initState() {
super.initState();
// Do some long running work...
Future.delayed(const Duration(seconds: 3), () {
if (mounted) {
SentryDisplayWidget.of(context).reportFullyDisplayed();
}
});
}
// Method 2: use the API directly to report TTFD - this does not require wrapping your widget with `SentryDisplayWidget`:
@override
void initState() {
super.initState();
// Get a reference to the current display before doing work.
final currentDisplay = SentryFlutter.currentDisplay();
// Do some long running work...
Future.delayed(const Duration(seconds: 3), () {
currentDisplay?.reportFullyDisplayed();
});
}
- Add
messageparameter tocaptureException()(#2882) - Add module in SentryStackFrame (#2931)
- Set
SentryOptions.includeModuleInStackTrace = trueto enable this. This may change grouping of exceptions.
- Set
Dependencies #
Enhancements #
- Only enable load debug image integration for obfuscated apps (#2907)
9.0.0 #
Version 9.0.0 marks a major release of the Sentry Dart/Flutter SDKs containing breaking changes.
The goal of this release is the following:
- Bump the minimum Dart and Flutter versions to
3.5.0and3.24.0respectively - Bump the minimum Android API version to 21
- Add interoperability with the Sentry Javascript SDK in Flutter Web for features such as release health and reporting native JS errors
- GA the Session Replay feature
- Provide feature flag support as well as Firebase Remote Config support
- Trim down unused and potentially confusing APIs
How To Upgrade #
Please carefully read through the migration guide in the Sentry docs on how to upgrade from version 8 to version 9
Breaking changes #
- Increase minimum SDK version requirements to Dart
v3.5.0and Flutterv3.24.0(#2643) - Update naming of
LoadImagesListIntegrationtoLoadNativeDebugImagesIntegration(#2833) - Set sentry-native backend to
crashpadby default andbreakpadfor Windows ARM64 (#2791)- Setting the
SENTRY_NATIVE_BACKENDenvironment variable will override the defaults.
- Setting the
- Remove manual TTID implementation (#2668)
- Remove screenshot option
attachScreenshotOnlyWhenResumed(#2664) - Remove deprecated
beforeScreenshot(#2662) - Remove old user feedback api (#2686)
- This is replaced by
beforeCaptureScreenshot
- This is replaced by
- Remove deprecated loggers (#2685)
- Remove user segment (#2687)
- Enable Sentry JS SDK native integration by default (#2688)
- Remove
enableTracing(#2695) - Remove
options.autoAppStartandsetAppStartEnd(#2680) - Bump Drift min version to
2.24.0and useQueryInterceptorinstead ofQueryExecutor(#2679) - Add hint for transactions (#2675)
BeforeSendTransactionCallbacknow has aHintparameter
- Remove
dart:htmlusage in favour ofpackage:web(#2710) - Remove max response body size (#2709)
- Responses are now only attached if size is below ~0.15mb
- Responses are attached to the
Hintobject, which can be read inbeforeSend/beforeSendTransactioncallbacks viahint.response. - For now, only the
diointegration is supported.
- Enable privacy masking for screenshots by default (#2728)
- Set option
anrEnabledtotrueby default (#2878) - Mutable Data Classes (#2818)
- Some SDK classes do not have
constconstructors anymore. - The
copyWithandclonemethods of SDK classes were deprecated.
- Some SDK classes do not have
// old
options.beforeSend = (event, hint) {
event = event.copyWith(release: 'my-release');
return event;
}
// new
options.beforeSend = (event, hint) {
event.release = 'my-release';
return event;
}
Features #
- Sentry Structured Logs Beta (#2919)
- The old
SentryLoggerhas been renamed toSdkLogCallbackand can be accessed throughoptions.lognow. - Adds support for structured logging though
Sentry.logger:
- The old
// Enable in `SentryOptions`:
options.enableLogs = true;
// Use `Sentry.logger`
Sentry.logger.info("This is a info log.");
Sentry.logger.warn("This is a warning log with attributes.", attributes: {
'string-attribute': SentryLogAttribute.string('string'),
'int-attribute': SentryLogAttribute.int(1),
'double-attribute': SentryLogAttribute.double(1.0),
'bool-attribute': SentryLogAttribute.bool(true),
});
// Manually track a feature flag
Sentry.addFeatureFlag('my-feature', true);
// or use the Sentry Firebase Remote Config Integration (sentry_firebase_remote_config package is required)
// Add the integration to automatically track feature flags from firebase remote config.
await SentryFlutter.init(
(options) {
options.dsn = 'https://example@sentry.io/add-your-dsn-here';
options.addIntegration(
SentryFirebaseRemoteConfigIntegration(
firebaseRemoteConfig: yourFirebaseRemoteConfig,
),
);
},
);
- Properly generates and links trace IDs for errors and spans (#2869, #2861):
- With
SentryNavigatorObserver- each navigation event starts a new trace. - Without
SentryNavigatorObserveron non-web platforms - a new trace is started from app lifecycle hooks. - Web without
SentryNavigatorObserver- the same trace ID is reused until the page is refreshed or closed.
- With
- Add support for Flutter Web release health (#2794)
- Requires using
SentryNavigatorObserver;
- Requires using
Behavioral changes #
- Set log level to
warningby default whendebug = true(#2836) - Set HTTP client breadcrumbs log level based on response status code (#2847)
- 5xx is mapped to
SentryLevel.error - 4xx is mapped to
SentryLevel.warning
- 5xx is mapped to
- Parent-child relationship for the PlatformExceptions and Cause (#2803)
- Improves and more accurately represent exception groups
- Disabled by default as it may cause issues to group differently
- You can enable this feature by setting
options.groupException = true
Improvements #
- Replay: improve Android native interop performance by using JNI (#2670)
- Align User Feedback API (#2949)
- Don’t apply breadcrumbs and extras from scope to feedback events
- Capture session replay when processing feedback events
- Record
feedbackclient report for dropped feedback events - Record
feedbackclient report for errors when usingHttpTransport
- Truncate feedback message to max 4096 characters (#2954)
- Replay: Mask RichText Widgets by default (#2975)
Dependencies #
- Bump Android SDK from v7.22.4 to v8.12.0 (#2941, #2819, #2831, #2848, [#2873](https://github.com/getsentry/sentry-dart/pull/2873, #2883))
- Bump Cocoa SDK from v8.46.0 to v8.51.0 (#2820, #2851, #2884, #2951))
- Bump Native SDK from v0.8.2 to v0.8.4 (#2823, #2872)
- Bump jni from v0.14.0 to v0.14.1 ([#2800])(https://github.com/getsentry/sentry-dart/pull/2800)
9.0.0-RC.3 #
Features #
- Sentry Structured Logs (#2919)
- The old
SentryLoggerhas been renamed toSdkLogCallbackand can be accessed throughoptions.lognow. - Adds support for structured logging though
Sentry.logger:
- The old
// Enable in `SentryOptions`:
options.enableLogs = true;
// Use `Sentry.logger`
Sentry.logger.info("This is a info log.");
Sentry.logger.warn("This is a warning log with attributes.", attributes: {
'string-attribute': SentryLogAttribute.string('string'),
'int-attribute': SentryLogAttribute.int(1),
'double-attribute': SentryLogAttribute.double(1.0),
'bool-attribute': SentryLogAttribute.bool(true),
});
9.0.0-RC.2 #
9.0.0-RC #
Various fixes & improvements #
- build(deps): bump ruby/setup-ruby from 1.233.0 to 1.237.0 (#2908) by @dependabot
- build(deps): bump actions/create-github-app-token from 2.0.2 to 2.0.6 (#2909) by @dependabot
9.0.0-beta.2 #
9.0.0-beta.1 #
Features #
- Properly generates and links trace IDs for errors and spans (#2869, #2861):
- With
SentryNavigatorObserver- each navigation event starts a new trace. - Without
SentryNavigatorObserveron non-web platforms - a new trace is started from app lifecycle hooks. - Web without
SentryNavigatorObserver- the same trace ID is reused until the page is refreshed or closed.
- With
- Add
FeatureFlagIntegration(#2825)
// Manually track a feature flag
Sentry.addFeatureFlag('my-feature', true);
- Firebase Remote Config Integration (#2837)
// Add the integration to automatically track feature flags from firebase remote config.
await SentryFlutter.init(
(options) {
options.dsn = 'https://example@sentry.io/add-your-dsn-here';
options.addIntegration(
SentryFirebaseRemoteConfigIntegration(
firebaseRemoteConfig: yourFirebaseRemoteConfig,
),
);
},
);
- Make hierarchical exception grouping opt-in (#2858)
Fixes #
- Trace propagation in HTTP tracing clients not correctly set up if performance is disabled (#2850)
Behavioral changes #
- Mutable Data Classes (#2818)
- Some SDK classes do not have
constconstructors anymore. - The
copyWithandclonemethods of SDK classes were deprecated.
- Some SDK classes do not have
- Set log level to
warningby default whendebug = true(#2836) - Set HTTP client breadcrumbs log level based on response status code (#2847)
- 5xx is mapped to
SentryLevel.error - 4xx is mapped to
SentryLevel.warning
- 5xx is mapped to
- Parent-child relationship for the PlatformExceptions and Cause (#2803, #2858)
- Improves and changes exception grouping. To opt in, set
groupExceptions=true
- Improves and changes exception grouping. To opt in, set
- Set
anrEnabledenabled per default (#2878)
API Changes #
- Update naming of
LoadImagesListIntegrationtoLoadNativeDebugImagesIntegration(#2833) - Remove
otherfromSentryRequest(#2879)
Dependencies #
8.14.2 #
9.0.0-alpha.2 #
Features #
- Add support for Flutter Web release health (#2794)
- Requires using
SentryNavigatorObserver;
- Requires using
Dependencies #
- Bump Native SDK from v0.7.20 to v0.8.2 (#2761, #2807)
- Bump Javascript SDK from v8.42.0 to v9.5.0 (#2784)
Behavioral changes #
- Set sentry-native backend to
crashpadby default andbreakpadfor Windows ARM64 (#2791)- Setting the
SENTRY_NATIVE_BACKENDenvironment variable will override the defaults.
- Setting the
- Remove renderer from
flutter_context(#2751)
API changes #
8.14.1 #
8.14.0 #
This release fixes an issue where Cold starts can be incorrectly reported as Warm starts on Android.
Behavioral changes #
- ⚠️ Auto IP assignment for
SentryUseris now guarded bysendDefaultPii(#2726)- If you rely on Sentry automatically processing the IP address of the user, set
options.sendDefaultPii = trueor manually set the IP address of theSentryUserto{{auto}}
- If you rely on Sentry automatically processing the IP address of the user, set
- Adding the device name to Contexts is now guarded by
sendDefaultPii(#2741)- Set
options.sendDefaultPii = trueif you want to have the device name reported
- Set
- Remove macOS display refresh rate support (#2628)
- Can't reliably detect on multi-monitor systems and on older macOS versions.
- Not very meaningful, as other applications may be running in parallel and affecting it.
Enhancements #
- Add Flutter runtime information (#2742)
- This works if the version of Flutter you're using includes this code.
- Use
loadDebugImagesForAddressesAPI for Android (#2706)- This reduces the envelope size and data transferred across method channels
- If debug images received by
loadDebugImagesForAddressesare empty, the SDK loads all debug images as fallback
- Disable
ScreenshotIntegration,WidgetsBindingIntegrationandSentryWidgetin multi-view apps #2366 (#2366)
Fixes #
- Pass missing
captureFailedRequestsparam toFailedRequestInterceptor(#2744) - Bind root screen transaction to scope (#2756)
- Reference to
SentryWidgetsFlutterBindingin warning message inFramesTrackingIntegration(#2704)
Deprecations #
- Deprecate Drift
SentryQueryExecutor(#2715)- This will be replace by
SentryQueryInterceptorin the next major v9
- This will be replace by
// Example usage in Sentry Flutter v9
final executor = NativeDatabase.memory().interceptWith(
SentryQueryInterceptor(databaseName: 'your_db_name'),
);
final db = AppDatabase(executor);
- Deprecate
autoAppStartandsetAppStartEnd(#2681)
Dependencies #
9.0.0-alpha.1 #
Breaking changes #
- Remove
SentryDisplayWidgetand manual TTID implementation (#2668) - Increase minimum SDK version requirements to Dart v3.5.0 and Flutter v3.24.0 (#2643)
- Remove screenshot option
attachScreenshotOnlyWhenResumed(#2664) - Remove deprecated
beforeScreenshot(#2662) - Remove old user feedback api (#2686)
- Remove deprecated loggers (#2685)
- Remove user segment (#2687)
- Enable JS SDK native integration by default (#2688)
- Remove
enableTracing(#2695) - Remove
options.autoAppStartandsetAppStartEnd(#2680) - Bump Drift min version to
2.24.0and useQueryInterceptorinstead ofQueryExecutor(#2679) - Add hint for transactions (#2675)
BeforeSendTransactionCallbacknow has aHintparameter
- Remove
dart:htmlusage in favour ofpackage:web(#2710) - Remove max response body size (#2709)
- Responses are now only attached if size is below ~0.15mb
- Responses are attached to the
Hintobject, which can be read inbeforeSend/beforeSendTransactioncallbacks viahint.response. - For now, only the
diointegration is supported.
- Enable privacy masking for screenshots by default (#2728)
Enhancements #
- Replay: improve Android native interop performance by using JNI (#2670)
Dependencies #
8.14.0-beta.1 #
Behavioral changes #
- ⚠️ Auto IP assignment for
SentryUseris now guarded bysendDefaultPii(#2726)- If you rely on Sentry automatically processing the IP address of the user, set
options.sendDefaultPii = trueor manually set the IP address of theSentryUserto{{auto}}
- If you rely on Sentry automatically processing the IP address of the user, set
- Adding the device name to Contexts is now guarded by
sendDefaultPii(#2741)- Set
options.sendDefaultPii = trueif you want to have the device name reported
- Set
Features #
- Disable
ScreenshotIntegration,WidgetsBindingIntegrationandSentryWidgetin multi-view apps #2366 (#2366)
Enhancements #
- Use
loadDebugImagesForAddressesAPI for Android (#2706)- This reduces the envelope size and data transferred across method channels
- If debug images received by
loadDebugImagesForAddressesare empty, the SDK loads all debug images as fallback
Fixes #
- Reference to
SentryWidgetsFlutterBindingin warning message inFramesTrackingIntegration(#2704)
Deprecations #
- Deprecate Drift
SentryQueryExecutor(#2715)- This will be replace by
SentryQueryInterceptorin the next major v9
- This will be replace by
// Example usage in Sentry Flutter v9
final executor = NativeDatabase.memory().interceptWith(
SentryQueryInterceptor(databaseName: 'your_db_name'),
);
final db = AppDatabase(executor);
- Deprecate
autoAppStartandsetAppStartEnd(#2681)
Other #
- Remove macOS display refresh rate support (#2628)
- Can't reliably detect on multi-monitor systems and on older macOS versions.
- Not very meaningful, as other applications may be running in parallel and affecting it.
Dependencies #
8.13.3 #
8.13.2 #
Warning
This release contains an issue where Cold starts can be incorrectly reported as Warm starts on Android. We recommend staying on version 8.12.0 if you use this feature on Android. See issue #2769 for more details.
Fixes #
build_web_compilererror (#2736)- Use
if (dart.library.html)instead ofif (dart.html)for imports
- Use
8.13.1 #
Warning
This release contains an issue where Cold starts can be incorrectly reported as Warm starts on Android. We recommend staying on version 8.12.0 if you use this feature on Android. See issue #2769 for more details.
Fixes #
- Replay video interruption if a
navigationbreadcrumb is missingtoroute info (#2720)
Dependencies #
8.13.0 #
Warning
This release contains an issue where Cold starts can be incorrectly reported as Warm starts on Android. We recommend staying on version 8.12.0 if you use this feature on Android. See issue #2769 for more details.
Breaking changes #
- Remove Metrics API (#2571)
- The Metrics product never reached maturity from beta and has officially ended in October 7th, 2024
- Read this post for more information
Features #
- Add
beforeCapturefor View Hierarchy (#2523)- View hierarchy calls are now debounced for 2 seconds.
- JS SDK integration (#2572)
- Enable the integration by setting
options.enableSentryJs = true - Features:
- Sending envelopes through Sentry JS transport layer
- Capturing native JS errors
- Enable the integration by setting
- Add SentryReplayQuality setting (
options.experimental.replay.quality) (#2582) - SPM Support (#2280)
Enhancements #
- Replay: improve iOS native interop performance (#2530, #2573)
- Replay: improve orientation change tracking accuracy on Android (#2540)
- Print a warning if the rate limit was reached (#2595)
- Add replay masking config to tags and report SDKs versions (#2592)
- Enable
options.debugwhen in debug mode (#2597) - Propagate sample seed in baggage header (#2629)
- Read more about the specs here
- Finish and start new transaction when tapping same element again (#2623)
Fixes #
- Replay: fix masking for frames captured during UI changes (#2553, #2657)
- Replay: fix widget masks overlap when navigating between screens (#2486, #2576)
- WASM compat for Drift (#2580)
- Fix image flickering when using
SentryAssetBundle(#2577) - Fix print recursion detection (#2624)
Misc #
- Transfer ownership of
sentry_linkto Sentry. You can view the changelog for the previous versions here (#2338)- No functional changes have been made. This version is identical to the previous one.
- Change license from Apache to MIT
Dependencies #
8.13.0-beta.3 #
8.13.0-beta.2 #
8.13.0-beta.1 #
Breaking changes #
- Remove Metrics API (#2571)
- The Metrics product never reached maturity from beta and has officially ended in October 7th, 2024
- Read this post for more information
Features #
- Add
beforeCapturefor View Hierarchy (#2523)- View hierarchy calls are now debounced for 2 seconds.
- JS SDK integration (#2572)
- Enable the integration by setting
options.enableSentryJs = true - Features:
- Sending envelopes through Sentry JS transport layer
- Capturing native JS errors
- Enable the integration by setting
Enhancements #
- Replay: improve iOS native interop performance (#2530, #2573)
- Replay: improve orientation change tracking accuracy on Android (#2540)
Fixes #
- Replay: fix masking for frames captured during UI changes (#2553)
- Replay: fix widget masks overlap when navigating between screens (#2486, #2576)
Dependencies #
8.12.0 #
Deprecations #
- Manual TTID (#2477)
Fixes #
- Missing replay gestures on Android (#2515)
- Replay mask sizing on scaling transform widget children (#2520)
- Masking semi-transparent widgets (#2472)
- Check
SentryTracertype in TTFD tracker (#2508)
Features #
-
Replay: device orientation change support & improve video size fit on Android (#2462)
-
Support custom
Sentry.runZoneGuardedzone 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.runZonedGuardedcreates 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)
Dependencies #
8.12.0-beta.2 #
Deprecations #
- Manual TTID (#2477)
Fixes #
- Missing replay gestures on Android (#2515)
- Replay mask sizing on scaling transform widget children (#2520)
Enhancements #
- Check
SentryTracertype 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)
Dependencies #
8.11.2 #
Changes #
-
Windows & Linux native crash handlers: add
SENTRY_NATIVE_BACKENDenv var with default setting ofnone. (#2522) Native crash reporting support withsentry-native'scrashpadwas 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=crashpadenvironment 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
crashpadin the next major SDK release.
8.11.1 #
8.12.0-beta.1 #
Features #
- Replay: device orientation change support & improve video size fit on Android (#2462)
- Support custom
Sentry.runZoneGuardedzone 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.runZonedGuardedcreates 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. });
Fixes #
- Masking semi-transparent widgets (#2472)
8.11.0 #
Features #
-
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
BeforeScreenshotCallbackwith newBeforeCaptureCallback.
-
-
Improve app start measurements by using
addTimingsCallbackinstead ofaddPostFrameCallbackto determine app start end (#2405)- ⚠️ This change may result in reporting of shorter app start durations
-
Improve frame tracking accuracy (#2372)
-
Introduces
SentryWidgetsFlutterBindingthat tracks a frame starting fromhandleBeginFrameand ending inhandleDrawFrame, this is approximately the buildDuration time -
By default,
SentryFlutter.init()automatically initializesSentryWidgetsFlutterBindingthrough theWidgetsFlutterBindingIntegration -
If you need to initialize the binding before
SentryFlutter.init, useSentryWidgetsFlutterBinding.ensureInitializedinstead 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
-
Enhancements #
- Only send debug images referenced in the stacktrace for events (#2329)
- Remove
sentryframes 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
Fixes #
- Catch errors thrown during
handleBeginFrameandhandleDrawFrame(#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.4to1.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
Dependencies #
8.11.0-beta.2 #
Features #
- 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
BeforeScreenshotCallbackwith newBeforeCaptureCallback.
Fixes #
- Catch errors thrown during
handleBeginFrameandhandleDrawFrame(#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.4to1.6(#2456)
Dependencies #
8.11.0-beta.1 #
Features #
- Windows native error & obfuscation support (#2286, #2426)
- Improve app start measurements by using
addTimingsCallbackinstead ofaddPostFrameCallbackto determine app start end (#2405)- ⚠️ This change may result in reporting of shorter app start durations
- Improve frame tracking accuracy (#2372)
- Introduces
SentryWidgetsFlutterBindingthat tracks a frame starting fromhandleBeginFrameand ending inhandleDrawFrame, this is approximately the buildDuration time - By default,
SentryFlutter.init()automatically initializesSentryWidgetsFlutterBindingthrough theWidgetsFlutterBindingIntegration - If you need to initialize the binding before
SentryFlutter.init, useSentryWidgetsFlutterBinding.ensureInitializedinstead 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
Enhancements #
- Only send debug images referenced in the stacktrace for events (#2329)
- Remove
sentryframes 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
Fixes #
- 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
Dependencies #
8.10.0 #
Features #
-
Emit
transaction.datainsidecontexts.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, usecaptureFeedbackinstead. - Deprecated
Hub.captureUserFeedback, usecaptureFeedbackinstead. - Deprecated
SentryClient.captureUserFeedback, usecaptureFeedbackinstead. - Deprecated
SentryUserFeedback, useSentryFeedbackinstead.
- Deprecated
-
Add
SentryFeedbackWidget(#2240)Navigator.push( context, MaterialPageRoute( builder: (context) => SentryFeedbackWidget(associatedEventId: id), fullscreenDialog: true, ), ); -
Add screenshot to
SentryFeedbackWidget(#2369)- Use
SentryFlutter.captureScreenshotto create a screenshot attachment - Call
SentryFeedbackWidgetwith 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
Enhancements #
- 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)
Fixes #
- 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
onErrorSampleRateis specified (#2306) - Fix TTID timing issue (#2326)
- TTFD fixes
- Accessing invalid json fields from
fetchNativeAppStartshould return null (#2340)
Deprecate #
- Metrics API (#2312)
Dependencies #
8.10.0-beta.1 #
Features #
-
Emit
transaction.datainsidecontexts.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, usecaptureFeedbackinstead. - Deprecated
Hub.captureUserFeedback, usecaptureFeedbackinstead. - Deprecated
SentryClient.captureUserFeedback, usecaptureFeedbackinstead. - Deprecated
SentryUserFeedback, useSentryFeedbackinstead.
- Deprecated
-
Add
SentryFeedbackWidget(#2240)Navigator.push( context, MaterialPageRoute( builder: (context) => SentryFeedbackWidget(associatedEventId: id), fullscreenDialog: true, ), );
Enhancements #
- 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)
Fixes #
- 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
onErrorSampleRateis 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
fetchNativeAppStartshould return null (#2340) - Error when calling
SentryFlutter.reportFullyDisplayed()twice (#2339) - TTFD measurements should only be added for successful TTFD spans (#2348)
Deprecate #
- Metrics API (#2312)
Dependencies #
8.9.0 #
Features #
-
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
keyspecified. (#2242) -
Add
enableDartSymbolicationoption 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.
trueby default but automatically set tofalsewhen using SentryFlutter.init() because the SentryFlutter fetches debug images from the native SDK integrations.
Dependencies #
Fixes #
- Only access renderObject if
hasSizeis true (#2263)
8.8.0 #
Features #
- Add
SentryFlutter.nativeCrash()using MethodChannels for Android and iOS (#2239)- This can be used to test if native crash reporting works
- Add
ignoreRoutesparameter 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"]),
Improvements #
- Debouncing of SentryWidgetsBindingObserver.didChangeMetrics with delay of 100ms. (#2232)
Dependencies #
8.8.0-alpha.1 #
Features #
- iOS Session Replay Alpha (#2209)
- Android replay touch tracking support (#2228)
- Add
ignoreRoutesparameter 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"]),
Dependencies #
8.7.0 #
Features #
-
Add support for span level measurements. (#2214)
-
Add
ignoreTransactionsandignoreErrorsto 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
SentryProxyobject 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
Improvements #
- Deserialize and serialize unknown fields (#2153)
Dependencies #
8.6.0 #
Improvements #
- Add error type identifier to improve obfuscated Flutter issue titles (#2170)
- Example: transforms issue titles from
GAtoFlutterErrororminified:nEtoFlutterError - This is enabled automatically and will change grouping if you already have issues with obfuscated titles
- If you want to disable this feature, set
enableExceptionTypeIdentificationtofalsein 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
Deprecated #
- Deprecate
enableTracing(#2199)- The
enableTracingoption has been deprecated and will be removed in the next major version. We recommend removing it in favor of thetracesSampleRateandtracesSampleroptions. If you want to enable performance monitoring, please set thetracesSampleRateto a sample rate of your choice, or provide a sampling function astracesSampleroption instead. If you want to disable performance monitoring, remove thetracesSamplerandtracesSampleRateoptions.
- The
Dependencies #
8.6.0-alpha.2 #
Features #
-
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
8.5.0 #
Features #
- 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
Fixes #
- 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
Improvements #
- 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.
Dependencies #
8.4.0 #
Features #
- 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
reportViewHierarchyIdentifiersto 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
Fixes #
- 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
autoAppStartsisfalseandsetAppStartEndhas not been called, the app start event processor will now return early instead of waiting forgetAppStartInfoto finish
Improvements #
- Set dart runtime version with parsed
Platform.version(#2156)
Dependencies #
Deprecated #
8.4.0-beta.1 #
Features #
- 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)
Deprecated #
- User segment is now deprecated and will be removed in version 9.0.0. Use a custom tag or context instead. (#2119)
Dependencies #
8.3.0 #
8.2.0 #
Enhancements #
- Include sentry frames in stacktraces to enable SDK crash detection (#2050)
Fixes #
- Event processor blocking transactions from being sent if
autoAppStartis false (#2028)
Features #
- Create app start transaction when no
SentryNavigatorObserveris present (#2017) - Adds native spans to app start transaction (#2027)
- Adds app start spans to first transaction (#2009)
Fixes #
- Fix
PlatformExceptiontitle parsing (#2033)
Dependencies #
8.1.0 #
Features #
- Set snapshot to
trueif stacktrace is not provided (#2000)- If the stacktrace is not provided, the Sentry SDK will fetch the current stacktrace via
StackTrace.currentand the snapshot will be set totrue- this may change the grouping behavior snapshot = truemeans 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
Fixes #
- Timing metric aggregates metrics in the created span (#1994)
Dependencies #
8.0.0 #
This release contains breaking changes, please read the changelog carefully.
Changes from the latest v7 release are included in this major release
Breaking Changes #
- 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
hintnon-nullable inBeforeSendCallback,BeforeBreadcrumbCallandEventProcessor(#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
Features #
- Add support for exception aggregates (#1866)
7.20.0 #
7.19.0 #
Features #
- 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"} );
Dependencies #
- Expand
package_info_plusversion range to6.0.0(#1948)
Improvements #
- Set
sentry_flutter.podspecversion frompubspec.yaml(#1941)
7.18.0 #
Features #
- 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 = truein yourSentryFlutterOptionsto 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:
automaticmode is enabled by default for all screens and will yield only an approximation result.manualmode requires manual instrumentation and will yield a more accurate result.- To use
manualmode, 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
didPopdoesn't trigger a new transaction- Change transaction operation name to
ui.loadinstead ofnavigation
- Add override
captureFailedRequestsoption (#1931)- The
diointegration andSentryHttpClientnow take an additionalcaptureFailedRequestsoption. - This is useful if you want to disable this option on native and only enable it on
diofor example.
- The
Improvements #
- Update root name for navigator observer (#1934)
- The root name for transactions is now
root /instead ofroot ("/").
- The root name for transactions is now
Dependencies #
7.17.0 #
Fixes #
- 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)
Features #
- Use
recordHttpBreadcrumbsto set iOSenableNetworkBreadcrumbs(#1884) - Apply
beforeBreadcrumbon native iOS crumbs (#1914) - Add
maxQueueSizeto limit the number of unawaited events sent to Sentry (#1868)
Improvements #
- App start is now fetched within integration instead of event processor (#1905)
Dependencies #
7.16.1 #
8.0.0-beta.2 #
Breaking Changes #
- 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
hintnon-nullable inBeforeSendCallback,BeforeBreadcrumbCallandEventProcessor(#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
Fixes #
- Remove Flutter dependency from Drift integration (#1867)
- Remove dead code, cold start bool is now always present (#1861)
- Fix iOS "Arithmetic Overflow" (#1874)
Dependencies #
8.0.0-beta.1 #
This release is replaced by 8.0.0-beta.2
7.16.0 #
Features #
- Add
SentryWidget(#1846)- Prefer to use
SentryWidgetnow instead ofSentryScreenshotWidgetandSentryUserInteractionWidgetdirectly
- Prefer to use
- Performance monitoring support for Isar (#1726)
- Tracing without performance for Dio integration (#1837)
- Accept
Map<String, dynamic>inHintclass (#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 ofdynamicinstead ofObject - Method
hint.get(String key)now returnsdynamicinstead ofObject?
- Factory constructor
- Please check if everything works as expected when using
Dependencies #
7.15.0 #
Features #
- Add Spotlight support (#1786)
- Set
options.spotlight = Spotlight(enabled: true)to enable Spotlight
- Set
- Add
ConnectivityIntegrationfor web (#1765)- We only get the info if online/offline on web platform. The added breadcrumb is set to either
wifiornone.
- 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
appFlavorto theflutter_context(#1799) - Add beforeScreenshotCallback to SentryFlutterOptions (#1805)
- Add support for
readTransactioninsqflite(#1819)
Dependencies #
7.14.0 #
- Add option to opt out of fatal level for automatically collected errors (#1738)
Fixes #
- Add debug_meta to all events (#1756)
- Fixes obfuscated stacktraces when
captureMessageorcaptureEventis called withattachStacktraceoption
- Fixes obfuscated stacktraces when
Features #
- Add option to opt out of fatal level for automatically collected errors (#1738)
- Add
Hivebreadcrumbs (#1773)
Dependencies #
7.13.2 #
7.13.1 #
7.13.0 #
Fixes #
- 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)
Features #
- Add APM integration for Drift (#1709)
- StackTraces in
PlatformException.messagewill get nicely formatted too when present (#1716) - Breadcrumbs for database operations (#1656)
- APM for hive (#1672)
- Add
attachScreenshotOnlyWhenResumedto options (#1700)
Dependencies #
7.12.0 #
7.11.0 #
7.10.1 #
Enhancements #
- 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
fataleven ifdebugis disabled (#1635)
Features #
- Tracing without performance (#1621)
Fixes #
- Normalize data properties of
SentryUserandBreadcrumbbefore 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)
Dependencies #
7.9.0 #
Features #
- 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
appHangTimeoutIntervaltoSentryFlutterOptions(#1568) - DioEventProcessor: Append http response body (#1557)
- This is opt-in and depends on
maxResponseBodySize - Only for
diopackage
- This is opt-in and depends on
Dependencies #
7.8.0 #
7.7.0 #
7.6.3 #
Fixes #
- Check if the Native SDKs are enabled when using
autoInitializeNativeSdk=false(#1489) - Align http method to span convention (#1477)
- Wrapped methods return a
Futureinstead of executing right away (#1476)- Relates to (#1462)
- Fix readTimeoutMillis wrongly configures connectionTimeoutMillis instead of the correct field (#1485)
Dependencies #
7.6.2 #
7.6.1 #
Features #
- Add
sent_atto envelope header (#1428)
Fixes #
- 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)
Breaking Changes #
- Android
minSdkVersionis now 19 (Flutter already defines 19-20 as best effort) - Deprecate
extrain favor ofcontexts(#1435)
Dependencies #
7.5.2 #
7.5.0 #
Features #
- Add
SentryIOOverridesIntegrationthat automatically wrapsFileintoSentryFile(#1362)
import 'package:sentry_file/sentry_file.dart';
// SDK init. options
options.addIntegration(SentryIOOverridesIntegration());
- Add
enableTracingoption (#1395)- This change is backwards compatible. The default is
nullmeaning existing behaviour remains unchanged (setting eithertracesSampleRateortracesSamplerenables performance). - If set to
true, performance is enabled, even if notracesSampleRateortracesSamplerhave been configured. - If set to
true, sampler will use default sample rate of 1.0, if notracesSampleRateis set. - If set to
falseperformance is disabled, regardless oftracesSampleRateandtracesSampleroptions.
- This change is backwards compatible. The default is
// SDK init. options
options.enableTracing = true;
- Sync
connectionTimeoutandreadTimeoutto Android (#1397)
// SDK init. options
options.connectionTimeout = Duration(seconds: 10);
options.readTimeout = Duration(seconds: 10);
- Set User
nameandgeoin 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;
};
Fixes #
- 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)
Dependencies #
7.4.1 #
Fixes #
- Fix Dart web builds breaking due to
dart:ioimports when usingSentryIsolateorSentryIsolateExtension(#1371)- When using
SentryIsolateorSentryIsolateExtension, importsentry_io.dart.
- When using
- Export
SentryBaggage(#1377) - Remove breadcrumbs from transaction to avoid duplication (#1366)
Dependencies #
7.4.0 #
7.3.0 #
7.2.0 #
7.1.0 #
7.0.0 #
Features #
- Platform Exception Event Processor (#1297)
- Support failedRequestTargets for HTTP Client errors (#1285)
- Captures errors for the default range
500-599ifcaptureFailedRequestsis 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
throwabletoSentryException
- Add
- Dart 3 Support (#1220)
- Introduce
Hintdata bag (#1136) - Use
Hintfor screenshots (#1165) - Support custom units for custom measurements (#1181)
Enhancements #
- Replace
toImagewithtoImageSyncfor Flutter >= 3.7 (1268) - Don't await
FutureOr<T>if it's not a future. This should marginally improve the performance (#1310) - Replace
StackTrace.emptywithStackTrace.current(#1183)
Breaking Changes #
- Enable enableNdkScopeSync by default (#1276)
- Update
sentry_dioto dio v5 (#1282) - Remove deprecated fields (#1227)
- Remove deprecated fields from the
Scopeclass.user(SentryUser? user), using thesetUser(SentryUser? user)instead.attachements, using theattachmentsinstead.
- Remove deprecated field from the
SentryFlutterOptionsclass.anrTimeoutIntervalMillis, using theanrTimeoutIntervalinstead.autoSessionTrackingIntervalMillis, using theautoSessionTrackingIntervalinstead.
- 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
devicecontext- 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
sentryClientNameinstead ofsdk.identifier(#1135) - Refactor
BindingUtilstoBindingWrapperto enable the use of custom bindings (#1184) - Bump Flutter min to 3.0.0 and Dart to 2.17.0 (#1180)
Dependencies #
Fixes #
7.0.0-rc.2 #
Features #
- Platform Exception Event Processor (#1297)
- Support failedRequestTargets for HTTP Client errors (#1285)
- Captures errors for the default range
500-599ifcaptureFailedRequestsis enabled
- Captures errors for the default range
- Sentry Isolate Extension (#1266)
- Allow sentry user to control resolution of captured Flutter screenshots (#1288)
Enhancements #
6.22.0 #
7.0.0-rc.1 #
6.21.0 #
7.0.0-beta.4 #
7.0.0-alpha.5 #
7.0.0-alpha.4 #
Breaking Changes #
- Remove deprecated fields (#1227)
- Remove deprecated fields from the
Scopeclass.user(SentryUser? user), using thesetUser(SentryUser? user)instead.attachements, using theattachmentsinstead.
- Remove deprecated field from the
SentryFlutterOptionsclass.anrTimeoutIntervalMillis, using theanrTimeoutIntervalinstead.autoSessionTrackingIntervalMillis, using theautoSessionTrackingIntervalinstead.
- Remove deprecated fields from the
Dependencies #
7.0.0-alpha.3 #
7.0.0-alpha.2 #
7.0.0-alpha.1 #
Features #
- Feat: Introduce
Hintdata bag (#1136) - Feat: Use
Hintfor screenshots (#1165) - Feat: Support custom units for custom measurements (#1181)
Fixes #
- Fix: Remove
SentryOptionsrelated parameters from classes which also takeHubas a parameter (#816)
Enhancements #
- Enha: Replace
StackTrace.emptywithStackTrace.current(#1183)
Breaking Changes #
- Removed various deprecated fields (#1036):
- Removed the following fields from the
devicecontext- 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
sentryClientNameinstead ofsdk.identifier(#1135) - Refactor
BindingUtilstoBindingWrapperto enable the use of custom bindings (#1184) - Bump Flutter min to 3.0.0 and Dart to 2.17.0 (#1180)
6.19.0 #
6.18.3 #
6.18.2 #
6.18.1 #
6.18.0 #
6.17.0 #
6.16.1 #
6.16.0 #
Features #
- Add request context to
HttpException,SocketExceptionandNetworkImageLoadException(#1118) SocketExceptionandFileSystemExceptionwithOSErrors report theOSErroras root exception (#1118)
Fixes #
- VendorId should be a String (#1112)
- Disable
enableUserInteractionBreadcrumbson Android whenenableAutoNativeBreadcrumbsis disabled (#1131) - Transaction name is reset after the transaction finishes (#1125)
Dependencies #
6.15.0 #
6.14.0 #
6.13.0 #
6.12.0 #
6.11.2 #
6.11.1 #
6.11.0 #
6.9.1 #
6.9.0 #
6.8.1 #
6.8.0 #
6.7.0 #
Fixes #
- 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
SentryRequestinDioEventProcessor#933
Features #
6.6.2 #
Features #
Fixes #
- Send DidBecomeActiveNotification when OOM enabled (#905)
dio.addSentryhangs ifdsnis empty and SDK NoOp (#920)- addBreadcrumb throws on Android API < 24 because of NewApi usage (#923)
sentry_diois promoted to GA and not experimental anymore (#914)
6.6.0 #
Fixes #
- 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:
SentryAssetBundleon Flutter >= 3.1 (#877)
Features #
- 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)
Sentry Self-hosted Compatibility #
- Starting with version
6.6.0ofsentry, Sentry's version >= v21.9.0 is required or you have to manually disable sending client reports via thesendClientReportsoption. This only applies to self-hosted Sentry. If you are using sentry.io, no action is needed.
6.6.0-beta.4 #
- Bump: Sentry-Cocoa to 7.17.0 and Sentry-Android to 6.1.1 (#891)
6.6.0-beta.3 #
- Bump: Sentry-Cocoa to 7.16.1 (#886)
6.6.0-beta.2 #
- Fix: Add user setter back in the scope (#883)
- Fix: clear method sets all properties synchronously (#882)
6.6.0-beta.1 #
- Feat: Sync Scope to Native (#858)
6.6.0-alpha.3 #
- Feat: Attach Isolate name to thread context (#847)
- Fix:
SentryAssetBundleon 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)
6.6.0-alpha.2 #
- Fix serialization of threads (#844)
- Feat: Allow manual init of the Native SDK (#765)
6.6.0-alpha.1 #
- Feat: Client Reports (#829)
- Fix: Add missing iOS contexts (#761)
Sentry Self-hosted Compatibility #
- Starting with version
6.6.0ofsentry, Sentry's version >= v21.9.0 is required or you have to manually disable sending client reports via thesendClientReportsoption. This only applies to self-hosted Sentry. If you are using sentry.io, no action is needed.
6.5.1 #
- Update event contexts (#838)
6.5.0 #
- No documented changes.
6.5.0-beta.2 #
- Fix: Do not set the transaction to scope if no op (#828)
6.5.0-beta.1 #
- No documented changes.
6.5.0-alpha.3 #
- Feat: Support for platform stacktraces on Android (#788)
6.5.0-alpha.2 #
- 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)
6.5.0-alpha.1 #
- Feat: Mobile Vitals - Native App Start (#749)
- Feat: Mobile Vitals - Native Frames (#772)
6.4.0 #
Various fixes & improvements #
- Fix: Missing userId on iOS when userId is not set (#782) by @marandaneto
- Allow to set startTimestamp & endTimestamp manually to SentrySpan (#676) by @fatihergin
6.4.0-beta.3 #
- 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)
6.4.0-beta.2 #
- No documented changes.
6.4.0-beta.1 #
- 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
DioEventProcessorwhich 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)
6.3.0 #
- Feat: Support maxSpan for performance API and expose SentryOptions through Hub (#716)
- Fix: await ZonedGuard integration to run (#732)
- Fix:
sentry_loggingincorrectly 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
SentryAssetBundlefor automatic spans for asset loading (#685) - Fix:
maxRequestBodySizeshould beneverby 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)
6.3.0-beta.4 #
- Feat: Support Attachment.addToTransactions (#709)
- Fix: captureTransaction should return emptyId when transaction is discarded (#713)
6.3.0-beta.3 #
- Feat: Auto transactions duration trimming (#702)
- Add
SentryAssetBundlefor automatic spans for asset loading (#685) - Feat: Configure idle transaction duration (#705)
- Fix:
maxRequestBodySizeshould beneverby default when using the FailedRequestClientAdapter directly (#701)
6.3.0-beta.2 #
- 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)
6.3.0-beta.1 #
- 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)
6.3.0-alpha.1 #
- Feat: Automatically create transactions when navigating between screens (#643)
6.2.2 #
- Fix: ConcurrentModificationError in when finishing span (#664)
- Feat: Add enableNdkScopeSync Android support (#665)
6.2.1 #
- Fix:
sentry_loggingworks now on web (#660) - Fix:
sentry_loggingtimestamps are in UTC (#660) - Fix:
sentry_loggingLevel.Off is never recorded (#660) - Fix: Rate limiting fallback to retryAfterHeader (#658)
6.2.0 #
- Feat: Integration for
logging(#631) - Feat: Add logger name to
SentryLoggerand send errors in integrations to the registered logger (#641)
6.1.2 #
- Fix: Remove is Enum check to support older Dart versions (#635)
6.1.1 #
- Fix: Transaction serialization if not encodable (#633)
6.1.0 #
- 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)
Breaking Changes: #
SentryEventinherits from theSentryEventLikemixinScope#transactionsets and reads from theScope#spanobject if bound to the Scope
6.1.0-beta.1 #
- Feat: Add current route as transaction (#615)
- Feat: Add Breadcrumbs for Flutters
debugPrint(#618)
6.1.0-alpha.2 #
6.1.0-alpha.1 #
- Performance API for Dart/Flutter (#530)
Breaking Changes: #
SentryEventinherits from theSentryEventLikemixinScope#transactionsets and reads from theScope#spanobject if bound to the Scope
6.0.1 #
- 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)
6.0.0 #
- Fix: Update
SentryUseraccording 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)
6.0.0-beta.4 #
Breaking Changes: #
- 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)
6.0.0-beta.3 #
- Fix: Re-initialization of Flutter SDK (#526)
- Enhancement: Call
toString()on all non-serializable fields (#528) - Fix: Always call
Flutter.onErrorin order to not swallow messages (#533) - Bump: Android SDK to 5.1.0-beta.6 (#535)
6.0.0-beta.2 #
- Fix: Serialization of Flutter Context (#520)
- Feat: Add support for attachments (#505)
- Feat: Add support for User Feedback (#506)
6.0.0-beta.1 #
- 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:
beforeSendcallback accepts async code (#494)
Breaking Changes: #
- Ref: EventProcessor changed to an interface (#489)
- Feat: Support envelope based transport for events (#391)
- The method signature of
Transportchanged fromFuture<SentryId> send(SentryEvent event)toFuture<SentryId> send(SentryEnvelope envelope)
- The method signature of
- Remove
Sentry.currentHub(#490) - Ref: Rename
cacheDirSizetomaxCacheItemsand addmaxCacheItemsfor iOS (#495) - Ref: Add error and stacktrace parameter to logger (#503)
- Feat: Change timespans to Durations in SentryOptions (#504)
- Feat:
beforeSendcallback accepts async code (#494)
Sentry Self Hosted Compatibility #
- Since version
6.0.0of 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.
5.1.0 #
- 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)
5.1.0-beta.1 #
- 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.currentHubas 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:
SentryHttpClienttracks 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
\u0000from Windows package info (#420) - Feature: Log calls to
print()as Breadcrumbs (#439) - Fix:
distwas 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
withScopecallback to capture methods (#463) - Fix: Add missing properties
language,screenHeightPixelsandscreenWidthPixelstoSentryDevice(#465)
Sentry Self Hosted Compatibility #
- This version of the
sentryDart package requires Sentry server >= v20.6.0. This only applies to on-premise Sentry, if you are using sentry.io no action is needed.
5.0.0 #
- Sound null safety
- Fix: event.origin and event.environment tags have wrong value for iOS (#365) and (#369)
- Fix: Fix deprecated
registrar.messengercall 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_infotopackage_info_plusplugin (#370) - Fix: Set
SentryOptions.debuginsentry(#376) - Fix: Read all environment variables in
sentry(#375)
Breaking Changes: #
- Return type of
Sentry.close()changed fromvoidtoFuture<void>andIntegration.close()changed fromvoidtoFutureOr<void>(#395) - Remove deprecated member
enableLifecycleBreadcrumbs. UseenableAppLifecycleBreadcrumbsinstead. (#366)
4.1.0-nullsafety.1 #
- 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)
Breaking Changes: #
- 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->SentryAppBrowser->SentryBrowserDevice->SentryDeviceGpu->SentryGpuIntegration->SentryIntegrationMessage->SentryMessageOperatingSystem->SentryOperatingSystemRequest->SentryRequestUser->SentryUserOrientation->SentryOrientation
- A couple of classes were often conflicting with user's code.
Thus this change renames the following classes:
4.1.0-nullsafety.0 #
- 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
4.0.6 #
- Fix: captureMessage defaults SentryLevel to info
- Fix: SentryEvent.throwable returns the unwrapped throwable instead of the throwableMechanism
- Feat: Support enableNativeCrashHandling on iOS
4.0.5 #
- Bump: sentry-android to v4.0.0
- Fix: Pana Flutter upper bound deprecation
- Fix: sentry_flutter static analysis (pana) using stable version
4.0.4 #
- Fix: Call WidgetsFlutterBinding.ensureInitialized() within runZoneGuarded
4.0.3 #
- Fix: Auto session tracking start on iOS #274
- Bump: Sentry-cocoa to 6.1.4
4.0.2 #
- Fix: Mark session as
erroredin 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
4.0.1 #
- Ref: Changed category of Flutter lifecycle tracking #240
- Fix: Envelope length should be based on the UTF8 array instead of String length
4.0.0 #
Release of Sentry's new SDK for Dart/Flutter.
New features not offered by <= v4.0.0:
Dart SDK #
- Sentry's Unified API.
- Complete Sentry's Protocol available.
- Dart SDK docs.
- Automatic HTTP Breadcrumbs for http.Client
- No boilerplate for
runZonedGuardedandIsolate.current.addErrorListener - All events are enriched with Scope's Contexts, this includes Breadcrumbs, tags, User, etc...
Flutter SDK #
- 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
WidgetsBindingObserverwrapper - 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-infofor 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
Sentry Self Hosted Compatibility #
- Since version
4.0.0of 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.
4.0.0-beta.2 #
- 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.environmenton 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
LoggertoSentryLoggerto prevent name clashes with logging packages - Fix: Scope Event processors should be awaited
- Fix: Package usage as git dependency
Breaking changes #
Loggertypedef is renamed toSentryLoggerattachStackTraceis renamed toattachStacktrace
4.0.0-beta.1 #
- 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
Breaking changes #
Sentry.initandSentryFlutter.inithave an optional callback argument which runs the host App after Sentry initialization.Integrationis anInterfaceinstead of a pure FunctionHintsare optional arguments- Sentry Dart SDK adds an
IsolateErrorhandler by default
4.0.0-alpha.2 #
- Enhancement:
Contextswere added to theScope#154 - Fix: App. would hang if
debugmode was enabled and refactoring ##157 - Enhancement: Sentry Protocol v7
- Enhancement: Added missing Protocol fields,
Request,SentryStackTrace...) #155 - Feat: Added
attachStackTraceoptions to attach stack traces oncaptureMessagecalls - Feat: Flutter SDK has the Native SDKs embedded (Android and Apple) #158
Breaking changes #
Sentry.initreturns 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
addInAppIncludelist, e.g.options.addInAppInclude('sentry_flutter_example'); - A few classes of the
Protocolwere renamed.
Sentry Self Hosted Compatibility #
- Since version
4.0.0of thesentry_flutter,Sentryversion >=v20.6.0is required. This only applies to on-premise Sentry, if you are using sentry.io no action is needed.
4.0.0-alpha.1 #
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
3.0.1 #
- Add support for Contexts in Sentry events
3.0.0+1 #
pubspec.yamland example code clean-up.
3.0.0 #
- Support Web
SentryClientfrompackage:sentry/sentry.dartwith conditional importSentryBrowserClientfor web frompackage:sentry/browser_client.dartSentryIOClientfor VM and Flutter frompackage:sentry/io_client.dart
2.3.1 #
- Support non-standard port numbers and paths in DSN URL.
2.3.0 #
- Add breadcrumb support.
2.2.0 #
- Add a
stackFrameFilterargument toSentryClient'scapturemethod (96be842). - Clean-up code using pre-Dart 2 API (91c7706, b01ebf8).
2.1.1 #
- Defensively copy internal maps event attributes to avoid shared mutable state (https://github.com/flutter/sentry/commit/044e4c1f43c2d199ed206e5529e2a630c90e4434)
2.1.0 #
- Support DNS format without secret key.
- Remove dependency on
package:quiver. - The
clockargument toSentryClientconstructor should now beClockProvider(but still acceptsClockfor backwards compatibility).
2.0.2 #
- Add support for user context in Sentry events.
2.0.1 #
- Invert stack frames to be compatible with Sentry's default culprit detection.
2.0.0 #
- Fixed deprecation warnings for Dart 2
- Refactored tests to work with Dart 2
1.0.0 #
- first and last Dart 1-compatible release (we may fix bugs on a separate branch if there's demand)
- fix code for Dart 2
0.0.6 #
- use UTC in the
timestampfield
0.0.5 #
- remove sub-seconds from the timestamp
0.0.4 #
- parse and report async gaps in stack traces
0.0.3 #
- environment attributes
- auto-generate event_id and timestamp for events
0.0.2 #
- parse and report stack traces
- use x-sentry-error HTTP response header
- gzip outgoing payloads by default
0.0.1 #
- basic ability to send exception reports to Sentry.io



