Migrating to Dartastic
Leaving Sentry or Datadog does not have to be a rewrite. For Flutter and Dart apps there are three routes, and you can stop at any of them.
| Route | What changes in your app | What you get |
|---|---|---|
| Add a Dartastic Labs bridge | One package and one line. Your vendor SDK stays, and keeps sending. | What your SDK captures, as standard OTel logs and spans. |
| Change your Sentry DSN | One string. Your Sentry SDK stays and sends to Dartastic. | Errors, transactions and sessions in your Observatory. |
| Move to Native OTel | Replace the vendor SDK. | Everything: native crashes, jank attribution, every RUM level. |
Want the cost first? The calculator prices your workload on Dartastic, Sentry and Datadog.
Add a Dartastic Labs bridge
A bridge is a Dart package that copies what your vendor SDK captures into standard OpenTelemetry, inside your app. Your vendor keeps getting everything it gets today, so you can run both and compare on your own sessions. The packages come from Dartastic Pub: dart pub token add https://pub.dartastic.io with a Pub token.
dependencies:
otel_sentry:
hosted: https://pub.dartastic.ioSentry: otel_sentry
One line inside SentryFlutter.init. Every event and breadcrumb Sentry captures also becomes an OpenTelemetry log record, on the trace and span that were active when it happened.
import 'package:dartastic_opentelemetry/dartastic_opentelemetry.dart';
import 'package:flutter/material.dart';
import 'package:otel_sentry/otel_sentry.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
Future<void> main() async {
await OTel.initialize(serviceName: 'my-app');
await SentryFlutter.init(
(options) {
options.dsn = const String.fromEnvironment('SENTRY_DSN');
installOTelSentryBridge(options); // the one new line
},
appRunner: () => runApp(const MyApp()),
);
} Your existing beforeSend and beforeBreadcrumb keep running, so your scrubbing and sampling stay as they are. If breadcrumbs are too much traffic, pass bridgeBreadcrumbs: false.
Datadog: otel_datadog
This bridge wraps Datadog's RUM SDK. Call rum where your code calls DatadogSdk.instance.rum today. Each call still goes to Datadog, and also emits OpenTelemetry: errors, actions and timings as logs, and each view as a span. Set up OTel with OTel.initialize first, as in the Sentry example.
import 'package:datadog_flutter_plugin/datadog_flutter_plugin.dart';
import 'package:otel_datadog/otel_datadog.dart';
final rum = OTelDatadogRum(DatadogSdk.instance.rum);
rum.addAction(RumActionType.tap, 'checkout');
try {
await checkout();
} catch (e, st) {
rum.addError(e, RumErrorSource.source, stackTrace: st);
rethrow;
}Other vendors
Dartastic Labs has bridges for New Relic, Bugsnag, Embrace, Dynatrace, Honeycomb, Splunk and more. They are all in the Dartastic Labs catalog.
Your vendor's library integrations
Each of these vendor packages has a Dartastic Labs package that does the same job in standard OTel.
| If you use | Add |
|---|---|
sentry_dio | otel_dio |
sentry_logging | otel_logging |
sentry_sqflite | otel_sqflite |
sentry_drift | otel_drift |
sentry_hive | otel_hive |
sentry_isar | otel_isar |
sentry_link | otel_graphql |
sentry_grpc | otel_grpc |
datadog_dio | otel_dio |
datadog_tracking_http_client | otel_http |
datadog_grpc_interceptor | otel_grpc |
datadog_gql_link | otel_graphql_flutter |
Change your Sentry DSN
Your Sentry SDK speaks a protocol, and Dartastic understands it. Point the SDK at Dartastic with a new DSN and your errors, transactions and sessions land in your Observatory. No new package, and no code beyond that one string. Any Sentry SDK works, in any language.
- In Control Room, open Sentry DSNs and mint a DSN. It takes the
keys.managepermission. - Set that DSN where your app sets its Sentry DSN today.
- Run your app, and look for your errors under Issues.
await SentryFlutter.init(
(options) {
options.dsn = const String.fromEnvironment('DARTASTIC_SENTRY_DSN');
},
appRunner: () => runApp(const MyApp()),
);What comes across
| From your Sentry SDK | In Dartastic |
|---|---|
| Errors and crashes | Issues, with the stack trace your SDK sent |
| Transactions and their spans | Traces |
| Release health sessions | Sessions and crash-free rate |
What stays behind
- Session Replay and profiles. Replay levels come with Native OTel.
- Source map uploads and your Sentry issue history.
- Sentry's own issue states, assignments and alert rules. Set alerts up in Dartastic.
Sentry traffic counts as ingress, like every other byte you send. See pricing.
Move to Native OTel
The last step replaces the vendor SDK with Dartastic's, written in Dart and Rust. This is where you get native crash capture, jank attribution down to the widget, targeted recording and every replay level. Add OpenTelemetry to your app has the full setup.
// Before, with Sentry
await SentryFlutter.init((options) => options.dsn = dsn, appRunner: start);
Sentry.captureException(e, stackTrace: st);
// Before, with Datadog
await DatadogSdk.instance.initialize(config, TrackingConsent.granted);
DatadogSdk.instance.rum?.addError(e, RumErrorSource.source, stackTrace: st);
// After
await DOTel.initialize(serviceName: 'my-app', serviceVersion: '1.0.0');
DartasticErrorTracker.recordError(e, st);DartasticViewObserver() takes the place of SentryNavigatorObserver() or DatadogNavigationObserver in navigatorObservers. Your HTTP, gRPC, database and logging integrations become the Dartastic Labs packages above.
Drop your symbol upload step
Remove sentry_dart_plugin or datadog-ci flutter-symbols upload from your build. Build obfuscated with symbols, and publish the release to your private Dartastic Pub with its .symbols: Dartastic reads them from there, with no upload step.
flutter build apk --release --obfuscate --split-debug-info=symbols/Where to find what you know
| In your vendor | In Dartastic |
|---|---|
| Sentry Issues, Datadog Error Tracking | Issues |
| Sentry Release Health | Sessions and crash-free rate for each build |
| Datadog RUM Explorer | Sessions |
| Datadog RUM Views | Screens |
| Sentry Traces, Datadog APM | Traces |
| Sentry Session Replay, Datadog Session Replay | Replay, at the level you choose |
| Sentry Seer, Bits AI | Dartastic AI |
| Sentry Alerts, Datadog Monitors | Alerts |
Sentry and Datadog are trademarks of their respective owners, named here to help you move, not to imply affiliation. See how Dartastic compares.