---
title: "Tracing"
description: "Learn how to enable tracing in your app and discover valuable performance insights of your application."
url: https://docs.sentry.io/platforms/dart/guides/flutter/tracing/
---

# Set Up Tracing | Sentry for Flutter

With [tracing](https://docs.sentry.io/product/dashboards/sentry-dashboards.md), Sentry tracks your software performance, measuring metrics like throughput and latency, and displaying the impact of errors across multiple systems. Sentry captures distributed traces consisting of transactions and spans, which measure individual services and individual operations within those services. Learn more about our model in [Distributed Tracing](https://docs.sentry.io/concepts/key-terms/tracing/distributed-tracing.md).

If you're adopting Tracing in a high-throughput environment, we recommend testing prior to deployment to ensure that your service's performance characteristics maintain expectations.

Sentry can send spans in one of two ways: the default transaction mode or stream mode, where spans are streamed to Sentry as they finish. See [Streamed Spans](https://docs.sentry.io/platforms/dart/guides/flutter/tracing/streamed-spans.md) to learn more.

## [Configure](https://docs.sentry.io/platforms/dart/guides/flutter/tracing.md#configure)

First, enable tracing and configure the sample rate for transactions (or service spans in stream mode). Set the sample rate by either:

* Setting a uniform sample rate for all transactions/service spans using the `tracesSampleRate` option in your SDK config to a number between `0` and `1`. (For example, to send 20% of transactions/service spans, set `tracesSampleRate` to `0.2`.)
* Controlling the sample rate based on the transaction/service span itself and the context in which it's captured, by providing a function to the `tracesSampler` config option.

The two options are meant to be mutually exclusive. If you set both, `tracesSampler` will take precedence.

```dart
SentryFlutter.init((options) {
+  // To set a uniform sample rate
+  options.tracesSampleRate = 1.0;

+  // OR if you prefer, determine traces sample rate
+  // based on the sampling context
+  options.tracesSampler = (samplingContext) {
+    // return a number between 0 and 1 or null (to fallback
+    // to configured value)
+  };
});
```

Learn more about tracing [options](https://docs.sentry.io/platforms/dart/guides/flutter/configuration/options.md#tracing-options), how to use the [tracesSampler](https://docs.sentry.io/platforms/dart/guides/flutter/configuration/sampling.md#setting-a-sampling-function) function, or how to [sample transactions and service spans](https://docs.sentry.io/platforms/dart/guides/flutter/configuration/sampling.md#sampling-transaction-events).

## [Verify](https://docs.sentry.io/platforms/dart/guides/flutter/tracing.md#verify)

Verify that tracing is working correctly by using our [automatic instrumentation](https://docs.sentry.io/platforms/dart/guides/flutter/tracing/instrumentation/automatic-instrumentation.md) or by starting and finishing a transaction/service span using [custom instrumentation](https://docs.sentry.io/platforms/dart/guides/flutter/tracing/instrumentation/custom-instrumentation.md).

Test out tracing by starting and finishing a transaction/service span, which you *must* do so data can be sent to Sentry. Learn how in our [Custom Instrumentation](https://docs.sentry.io/platforms/dart/guides/flutter/tracing/instrumentation/custom-instrumentation.md) content.

While you're testing, set `tracesSampleRate` to `1.0`, as that ensures that every transaction/service span will be sent to Sentry. Once testing is complete, you may want to set a lower `tracesSampleRate` value, or switch to using `tracesSampler` to selectively sample and filter your transactions/service spans, based on contextual data.

## [Standalone App Start Tracing](https://docs.sentry.io/platforms/dart/guides/flutter/tracing.md#standalone-app-start-tracing)

This feature is experimental and available since [version 9.26.0](https://github.com/getsentry/sentry-dart/blob/main/CHANGELOG.md#9260). The API is subject to change and may introduce breaking changes in future releases.

By default, app start data is attached to the first `ui.load` transaction in your app. Standalone app start tracing sends the app start as its own transaction instead, which gives you more accurate app start measurements because they no longer depend on a screen transaction being started. It's supported on Android and iOS.

```dart
await SentryFlutter.init((options) {
  options.tracesSampleRate = 1.0;
  options.enableStandaloneAppStartTracing = true;
});
```

For more details, including how to extend the app start past the first frame, see [App Start Instrumentation](https://docs.sentry.io/platforms/dart/guides/flutter/integrations/app-start-instrumentation.md#standalone-app-start-tracing).

## [Next Steps](https://docs.sentry.io/platforms/dart/guides/flutter/tracing.md#next-steps)

* #### [Streamed Spans](https://docs.sentry.io/platforms/dart/guides/flutter/tracing/streamed-spans.md)

  Learn how to use stream mode to send spans to Sentry as they finish, removing the 1,000-span limit and making trace data visible sooner.

* #### [Instrumentation](https://docs.sentry.io/platforms/dart/guides/flutter/tracing/instrumentation.md)

  Learn how to instrument tracing in your app.

* #### [Trace Propagation](https://docs.sentry.io/platforms/dart/guides/flutter/tracing/trace-propagation.md)

  Learn how to connect events across applications/services.

## Pages in this section

- [Streamed Spans](https://docs.sentry.io/platforms/dart/guides/flutter/tracing/streamed-spans.md)
- [Instrumentation](https://docs.sentry.io/platforms/dart/guides/flutter/tracing/instrumentation.md)
- [Trace Propagation](https://docs.sentry.io/platforms/dart/guides/flutter/tracing/trace-propagation.md)
