NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #281 most downloaded on pub.dev
A crash reporting library for Dart that sends crash reports to Sentry.io. This library supports Dart VM and Web. For Flutter consider sentry_flutter instead.
Last release 6 days ago
02 Oct 2026
Ships on a steady schedule
a new release about every 2 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
9 years old
263 releases · first in 2017
Default traceLifecycle to SentryTraceLifecycle.stream , sending spans as they finish instead of as transactions. Errors, messages, and feedback captur
traceLifecycle to SentryTraceLifecycle.stream, sending spans as they finish instead of as transactions. Errors, messages, and feedback captured inside an active streaming span now link to it. Set options.traceLifecycle = SentryTraceLifecycle.static to keep the previous transaction-based behavior. (#4057)Raise the minimum Android SDK version for Flutter from API 21 to API 26. Set your app's Android minSdk to 26 or higher.
minSdk to 26 or higher. (#4049)One column per quarter.
Remove SDK profiling and deprecated performance collectors. ( #3891 , #3850 )
enableLogs and enableMetrics. Logs and metrics are always enabled. The logging integration forwards Sentry logs by default; adjust minSentryLogLevel or set it to Level.OFF to disable forwarding. (#3983)enableStandaloneAppStartTracing. When tracing is enabled, app start is always reported as a standalone app.start root on Android and iOS. (#3981)beforeSend. These callbacks now also run for events that are subsequently sampled out. (#3955)traceId on SentryLog, make logger methods return void, and remove SentryLogAttribute. (#3842, #3852, #3843)Hint parameter to the before-send callbacks for logs, metrics, and spans. (#3847)copyWith APIs and protocol clones, and make clone() internal. (#3877, #3845)SentryFeedbackWidget. (#3844)options.log with internal logging and make BindingWrapper and bindingUtils internal. (#3932, #3940)file.async from file instrumentation. (#3805, #3841)SentryFlutter.replay: start, startBuffering, pause, resume, stop, and flush. Explicitly started replays work even when both automatic sample rates are 0. (#4010)SensitiveContent by default in Session Replay. (#3973)(flutter) Default desktop to Breakpad by @buenaflor in #4045
(flutter) Revamp app-start frame spans by @buenaflor in #4018
Add manual Session Replay controls on Android and iOS through SentryFlutter.replay : start , startBuffering , pause , resume , stop , and flush . Expl
SentryFlutter.replay: start, startBuffering, pause, resume, stop, and flush. Explicitly started replays work even when both automatic sample rates are 0. by @buenaflor in #4010Unsampled errors affect release health by @buenaflor in #4008
Remove the enableLogs and enableMetrics options. Logs and metrics are now always enabled and can no longer be disabled through SentryOptions . Remove
enableLogs and enableMetrics options. Logs and metrics are now always enabled and can no longer be disabled through SentryOptions. Remove any options.enableLogs / options.enableMetrics assignments from your SDK init. If you use the logging integration, it now forwards log records as Sentry logs as soon as it is added — raise minSentryLogLevel, or set it to Level.OFF, to opt out. by @buenaflor in #3983enableStandaloneAppStartTracing is removed. App start is always a standalone app.start root on Android and iOS when tracing is enabled. The legacy ui.load-attached app start path is gone. by @buenaflor in #3981beforeSend instead of before it, so ignoreErrors, ignored exception types, event processors and beforeSend all take precedence over the sampleRate decision. An event dropped by beforeSend is now reported as a before_send discard rather than a sample_rate one, and beforeSend now runs for events that are later sampled out. (#3855) by @buenaflor in #3955sentry_flutter no longer applies the Kotlin Gradle Plugin itself, which silences Flutter 3.44's warning about plugins applying KGP and unblocks apps moving to AGP 9. by @buenaflor in #3961Remove deprecated copyWith APIs by @buenaflor in #3877
copyWith APIs by @buenaflor in #3877options.log with internalLogger by @buenaflor in #3932BindingWrapper and bindingUtils internal by @buenaflor in #3940MockHub into _sentry_testing by @lucas-zimerman in #3908Make clone() internal and remove deprecated protocol clones by @buenaflor in #3845
Add array attributes to telemetry by @buenaflor in #3778
(flutter) Restore Android replay config by @buenaflor in #4037
Fix an Android native/GPU memory leak caused by the background JNI worker outliving its Flutter engine, while preserving native reporting across cache
chore(deps): Update Android SDK to v8.54.0 by @buenaflor in #4001
Read Windows total physical memory via the native GlobalMemoryStatusEx API instead of spawning the deprecated wmic.exe (or PowerShell) process. by @cf…
app.vitals.start.screen onto standalone app.start children so app start spans can be drilled down by launch screen. by @buenaflor in #3988enableLogs and enableMetrics now only control automatic collection. Logs and metrics sent through Sentry.logger and Sentry.metrics are always captured, regardless of these options. by @buenaflor in #3982GlobalMemoryStatusEx API instead of spawning the deprecated wmic.exe (or PowerShell) process. by @cf-rhett in #3894Add HTTP request/response header and body capture for Session Replay network breadcrumbs, gated by networkDetailAllowUrls / networkDetailDenyUrls . by
networkDetailAllowUrls/networkDetailDenyUrls. by @lucas-zimerman in #3875Standalone app start tracing (experimental) by @buenaflor in #3896 and #3918
App Start root (app.start) spanning process start to the first frame, instead of being nested under the synthetic initial ui.load. This gives startup its own lifecycle and sampling decision.options.enableStandaloneAppStartTracing. Requires tracing, is supported on Android and iOS, and works with both SentryTraceLifecycle.static and SentryTraceLifecycle.stream.SentryFlutter.extendAppStart() and SentryFlutter.finishExtendedAppStart(), so startup work that finishes later — remote config, auth restore, flag hydration — is part of the reported duration.// Opt in during SDK init and extend the app start across your startup work.
await SentryFlutter.init(
(options) {
options.dsn = 'https://example@sentry.io/add-your-dsn-here';
options.tracesSampleRate = 1.0;
options.enableStandaloneAppStartTracing = true;
},
appRunner: () async {
// Extend before the first frame renders.
SentryFlutter.extendAppStart();
runApp(const MyApp());
try {
await remoteConfig.fetchAndActivate();
await auth.restoreSession();
} finally {
// Releases the app start to report, measured up to here.
await SentryFlutter.finishExtendedAppStart();
}
},
);SentryFlutter.getExtendedAppStartSpan() on the static lifecycle, SentryFlutter.getExtendedAppStartSpanV2() on the streaming one. Each returns null on the other lifecycle and once the extension has ended. Finishing the span completes the extension, so there is no need to also call finishExtendedAppStart().// Static lifecycle.
final appStart = SentryFlutter.getExtendedAppStartSpan();
final child = appStart?.startChild('app.init', description: 'Load config');
try {
await loadConfig();
} finally {
await child?.finish();
}
// Streaming lifecycle. Only pass a parent when there is one — passing `null`
// starts a root span instead of a child.
final appStartV2 = SentryFlutter.getExtendedAppStartSpanV2();
if (appStartV2 != null) {
await Sentry.startSpan(
'Load config',
(span) => loadConfig(),
parentSpan: appStartV2,
);
} else {
await loadConfig();
}(replay) Record segment names on Android by @buenaflor in #3897
Add feature flags to hub span by @denrase in #3806
Add array attributes to telemetry by @buenaflor in #3778
(flutter) Add replay trace ID sync for Android by @buenaflor in #3744
ingest_settings metadata by @buenaflor in #3700SentryFeedbackWidget is deprecated and will be removed in the next major version. Use SentryFeedbackForm instead.
SentryFeedbackWidget to SentryFeedbackForm by @denrase in #3702
SentryFeedbackWidget is deprecated and will be removed in the next major version. Use SentryFeedbackForm instead.(span-first) Add transaction and app start type span attributes by @buenaflor in #3678
o123.ingest.sentry.io) and compares it with the sentry-org_id value in incoming baggage headers. When the two differ, the SDK starts a fresh trace instead of continuing the foreign one. This guards against accidentally linking traces across organizations.strictTraceContinuation (default false): when enabled, both the SDK's org ID and the incoming baggage org ID must be present and match for a trace to be continued. Traces with a missing org ID on either side are rejected.orgId: allows explicitly setting the organization ID for self-hosted and Relay setups where it cannot be extracted from the DSN.Span-first trace lifecycle (experimental) by @buenaflor in #3659
options.traceLifecycle. The classic transaction-based SentryTraceLifecycle.static remains the default.Sentry.startSpan / Sentry.startSpanSync APIs — the transaction APIs (Sentry.startTransaction, ISentrySpan.startChild) do nothing in this mode.// Opt in during SDK init.
await SentryFlutter.init((options) {
options.dsn = 'https://example@sentry.io/add-your-dsn-here';
options.tracesSampleRate = 1.0;
options.traceLifecycle = SentryTraceLifecycle.stream;
});
// Async work — the span ends and is sent when the future completes.
final order = await Sentry.startSpan('checkout', (span) async {
span.setAttribute('cart.item_count', SentryAttribute.int(cart.items.length));
// Automatically parents to 'checkout' via zones.
final payment = await Sentry.startSpan('process-payment', (span) {
return paymentService.charge(cart.total);
});
return orderService.create(cart, payment: payment);
});
// Sync variant.
final total = Sentry.startSpanSync('calculate-total', (span) {
return cart.items.fold<double>(0, (sum, item) => sum + item.price);
});
enableNewTraceOnNavigation is now opt-in by @buenaflor in #3657
SentryNavigatorObserver no longer generates a fresh trace id on every push/pop/replace by default. One trace per session (the previous opt-in behavior) is now the default and preserves trace continuity across navigations.SentryNavigatorObserver(
enableNewTraceOnNavigation: true,
);
chore(deps): update Native SDK to v0.13.7 by @github-actions in #3645
Revert fetching sentry-native from release zip, use git source instead to fix permission issues
sentry-native from release zip, use git source instead to fix permission issues (#3630)Experimental span-streaming API with startSpan
startSpangit clone (#3621)Stop re-triggering hitTest in SentryUserInteractionWidget on pointerUp
Nothing published for this version
Add enableTombstone option for improved native crash reporting on Android 12+
enableTombstone option for improved native crash reporting on Android 12+ (#3526)
ApplicationExitInfo.REASON_CRASH_NATIVE to capture native crashes with more detailed thread informationsendDefaultPii for logs and metrics (#3524)<summary><b>Internal Changes</b></summary>
sentry.javascript.browser.flutter sdk name for native js errors (#3525)</details>
Synchronize traceId to native SDKs
traceId to native SDKs (#3507)
<details> <summary><b>Internal Changes</b></summary>
</details>
Remove deprecated beforeMetricCallback from options
Sentry.metrics.gauge(...)Sentry.metrics.count(...)Sentry.metrics.distribution(...)captureNativeFailedRequests option for iOS/macOS (#3472)
captureFailedRequests.null (the default), it falls back to captureFailedRequests for backwards compatibility.false to disable native failed request capturing while keeping Dart-side capturing enabled.<details> <summary><b>Internal Changes</b></summary>
beforeMetricCallback from options (#3484)</details>
Remove deprecated beforeMetricCallback from options
This feature is enabled by default.
Sentry.metrics.gauge(...)Sentry.metrics.count(...)Sentry.metrics.distribution(...)captureNativeFailedRequests option for iOS/macOS (#3472)
captureFailedRequests.null (the default), it falls back to captureFailedRequests for backwards compatibility.false to disable native failed request capturing while keeping Dart-side capturing enabled.Android not sending events when autoInitializedNativeSdk is disabled
autoInitializedNativeSdk is disabled (#3420)Cold/warm start spans not attaching if TTFD takes more than 3 seconds to report
Add Sentry.setAttributes and Sentry.removeAttribute
Sentry.setAttributes and Sentry.removeAttribute (#3352)
sentry_supabase package to instrument supabase with Sentry breadcrumbs, traces and errors.consumerProguardFiles 'proguard-rules.pro' to the debug build configuration to ensure ProGuard rules are consistently applied across both release and debug variants. (#3339)Companion in JNI calls and properly release JNI refs (#3354)
captureReplay and setReplayConfig to use JNI (#3318)init to use JNI (#3324)Revert FFI usage on iOS/macOS due to symbol stripping issues
Add Sentry.setAttributes and Sentry.removeAttribute
Sentry.setAttributes and Sentry.removeAttribute (#3352)
sentry_supabase package to instrument supabase with Sentry breadcrumbs, traces and errors.Companion in JNI calls and properly release JNI refs (#3354)
Nothing published for this version
Mark file sync spans run in the main isolate with blocked_main_thread
blocked_main_thread (#3270)setExtra and removeExtra to use FFI/JNI (#3314)setTag and removeTag to use FFI/JNI (#3313)setContexts and removeContexts to use FFI/JNI (#3312)setUser to use FFI/JNI (#3295)AndroidReplayRecorder to use the new worker isolate api (#3296)captureEnvelope to background isolate for Cocoa and Android (#3232)sentry.replay_id to flutter logs (#3257)sentry_device (#3309)Added consumerProguardFiles 'proguard-rules.pro' to the debug build configuration to ensure ProGuard rules are consistently applied across both releas
consumerProguardFiles 'proguard-rules.pro' to the debug build configuration to ensure ProGuard rules are consistently applied across both release and debug variants. (#3339)Add W3C traceparent header support
traceparent header support (#3246)
propagateTraceparent to allow the propagation of the W3C Trace Context HTTP header traceparent on outgoing HTTP requests.nativeDatabasePath option to SentryFlutterOptions to set the database path for Sentry Native (#3236)sentry.origin to logs created by LoggingIntegration (#3153)firebase_remote_config: >=5.4.3 <7.0.0 (#3213)firebase: (#3258)InheritedWidget (#3200)
InheritedWidgetDioException response data to error breadcrumb (#3164)
dio min verion to 5.2.0captureEnvelope on iOS and Android (#3115)FlutterErrorIntegration (#3202)loadContexts and loadDebugImages to use JNI and FFI (#3224)Uint8List in FileSystemTransport (#3147)navigator.deviceMemory (#3268)openDatabase when using SentrySqfliteDatabaseFactory (#3231)SentryFeedbackWidget for useSentryUser parameter to populate fields with current user data (#3180)ffigen to 19.0.0 and add objective_c version 8.0.0 package used in ffigen on iOS and macOS (#3163)Add nativeDatabasePath option to SentryFlutterOptions to set the database path for Sentry Native
nativeDatabasePath option to SentryFlutterOptions to set the database path for Sentry Native (#3236)Recursion in openDatabase when using SentrySqfliteDatabaseFactory
Add sentry.origin to logs created by LoggingIntegration
sentry.origin to logs created by LoggingIntegration (#3153)firebase_remote_config: >=5.4.3 <7.0.0 (#3213)SentryFeedbackWidget for useSentryUser parameter to populate fields with current user data (#3180)DioException response data to error breadcrumb (#3164)
dio min verion to 5.2.0captureEnvelope on iOS and Android (#3115)FlutterErrorIntegration (#3202)loadContexts and loadDebugImages to use JNI and FFI (#3224)Improve envelope conversion to Uint8List in FileSystemTransport
Note: this release might require updating your Android Gradle Plugin version to at least 8.1.4.
Note: this release might require updating your Android Gradle Plugin version to at least 8.1.4.
ScreenshotWidgetStatus equality issues (#3114)False replay config restarts because of ScreenshotWidgetStatus equality issues
ScreenshotWidgetStatus equality issues (#3114)Debug meta not loaded for split debug info only builds
Report Flutter framework feature flags
flutter:*LoggingIntegration support for SentryLog (#3050)enableNewTraceOnNavigation flag to SentryNavigatorObserver (#3096)
truefalse, e.g.:SentryNavigatorObserver(enableNewTraceOnNavigation: false)
Span ids not re-generating for headers created from scope
ScreenshotIntegration not being added for web (#3055)PropagationContext not being set when Scope is cloned resulting in different trace ids when using withScope (#3069)SPM should use exact instead of from when defining the sentry-cocoa package
exact instead of from when defining the sentry-cocoa package (#3065)SentryScreenshotWidget (#3046)SentryFlutterPlugin (#3036, #3039)isTerminating on captureReplay for Android (#3037)
Respect ancestor text direction in SentryScreenshotWidget
SentryScreenshotWidget (#3046)Add additional crashpad path candidate
Upgrade Kotlin languageVersion to 1.8
languageVersion to 1.8 (#3032)
2.2.0 which requires a languageVersion of 1.8 or higher1.8 or higherSentryFeedbackWidget constructor to SentryFlutterOptions:// configure your feedback widget
options.feedback.showBranding = false;
Your coding agent can read these notes before it upgrades. Set up the MCP server →