Documentation & Guides

Welcome to drift's documentation. This site shows you what drift can do and how to use it.

Welcome to drift

Drift is a reactive persistence library for Dart and Flutter applications. It's built on top of database libraries like the sqlite3 package, sqflite or sql.js and provides additional features, like:

  • Type safety: Instead of writing SQL queries manually and parsing the List<Map<String, dynamic>> that they return, drift turns rows into objects of your choice.
  • Stream queries: Drift lets you "watch" your queries with zero additional effort. Any query can be turned into an auto-updating stream that emits new items when the underlying data changes.
  • Fluent queries: Drift generates a Dart api that you can use to write queries and automatically get their results. Keep an updated list of all users with select(users).watch(). That's it! No SQL to write, no rows to parse.
  • Type-safe SQL: If you prefer to write SQL, that's fine! Drift has an SQL parser and analyzer built in. It can parse your queries at compile time, figure out what columns they're going to return and generate Dart code to represent your rows.
  • Migration utils: Drift makes writing migrations easier thanks to utility functions like .createAllTables(). You don't need to manually write your CREATE TABLE statements and keep them updated.

And much more! Drift validates data before inserting it, so you can get helpful error messages instead of just an SQL error code. Of course, it supports transactions. And DAOs. And efficient batched insert statements. The list goes on.

Getting started

To get started with drift, follow the setup guide. It explains everything from setting up the dependencies to writing database classes and generating code.

It also links a few pages intended for developers getting started with drift, so that you can explore the areas you're most interested in first.


All you need to know about adding drift to your project.

Dart API

Drift's Dart library for declaring tables and writing queries.

Verified SQL

Define your database and queries in SQL without giving up on type-safety.


Tooling and APIs to safely change the schema of your database.

Type converters

Store more complex data in columns with type converters

Custom row classes

Use your own classes as data classes for drift tables

Generation options

Options for drift_dev and build_runner to change the generated code.

Supported platforms

All platforms supported by drift, and how to use them


Guide on writing unit tests for drift databases


Accessing drift databases on multiple isolates.

Command line tools for drift

A set of CLI tools to interact with drift projects

Frequently asked questions

Example apps using drift


Packages contributed by the community

Drift internals

Work in progress documentation on drift internals


How to upgrade between major drift versions