---
title: "Drift Database Instrumentation"
description: "Learn more about the Sentry Drift Database Instrumentation for the Flutter SDK."
url: https://docs.sentry.io/platforms/dart/guides/flutter/integrations/drift-instrumentation/
---

# Drift Database Instrumentation | Sentry for Flutter

Drift is a library for easily managing SQLite databases within Flutter applications. The [sentry\_drift](https://pub.dev/packages/sentry_drift) package provides `Drift` support for database performance instrumentation and allows you to track the performance of your queries.

## [Instrumentation Behaviour](https://docs.sentry.io/platforms/dart/guides/flutter/integrations/drift-instrumentation.md#instrumentation-behaviour)

The created spans will be attached to the transaction on the scope - if no transaction is on the scope the Drift span will not be sent to Sentry.

## [Prerequisites](https://docs.sentry.io/platforms/dart/guides/flutter/integrations/drift-instrumentation.md#prerequisites)

Before starting, ensure:

1. The Sentry Flutter SDK is initialized. Learn more [here](https://docs.sentry.io/platforms/dart/guides/flutter.md#configure).
2. Tracing is set up. Learn more [here](https://docs.sentry.io/platforms/dart/guides/flutter/tracing.md).

## [Install](https://docs.sentry.io/platforms/dart/guides/flutter/integrations/drift-instrumentation.md#install)

Add the `sentry_drift` dependency to install the Drift database instrumentation.

`pubspec.yaml`

```yml
dependencies:
sentry_flutter: ^9.16.0
sentry_drift: ^9.16.0
```

## [Setup](https://docs.sentry.io/platforms/dart/guides/flutter/integrations/drift-instrumentation.md#setup)

Add the `SentryQueryInterceptor` to a `QueryExecutor` or `DatabaseConnection`. Read the [Drift documentation](https://drift.simonbinder.eu/examples/tracing/) for more information on how to use interceptors in Drift.

```dart
final interceptor = SentryQueryInterceptor(databaseName: 'my_database_name');
final executor = inMemoryExecutor().interceptWith(interceptor);

// AppDatabase is an example of the auto-generated database class by Drift.
final database = AppDatabase(executor);
```

## [Verify](https://docs.sentry.io/platforms/dart/guides/flutter/integrations/drift-instrumentation.md#verify)

### [1. Execute the Code](https://docs.sentry.io/platforms/dart/guides/flutter/integrations/drift-instrumentation.md#1-execute-the-code)

```dart
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'package:sentry/sentry.dart';
import 'package:sentry_drift/sentry_drift.dart';

import 'your_database.dart';

Future<void> driftTest() async {
  final tr = Sentry.startTransaction(
    'driftTest',
    'op',
    bindToScope: true
  );
  final interceptor = SentryQueryInterceptor(databaseName: 'my_database_name');
  final executor = inMemoryExecutor().interceptWith(interceptor);
  final db = AppDatabase(executor);

  await db.into(db.todoItems).insert(
        TodoItemsCompanion.insert(
          title: 'This is a test title',
          content: 'test',
        ),
      );

  final items = await db.select(db.todoItems).get();

  await db.close();

  await tr.finish(status: const SpanStatus.ok());
}
```

### [2. View the Transaction on Sentry.io](https://docs.sentry.io/platforms/dart/guides/flutter/integrations/drift-instrumentation.md#2-view-the-transaction-on-sentryio)

To view the recorded transaction, log into [sentry.io](https://sentry.io) and open your project. Clicking **Performance** will open a page with transactions, where you can select the just recorded transaction with the name `driftTest`.
