Local-first · Real-time · Type-safe

The real-time database for Flutter

A Flutter/Dart port of InstantDB. Offline-first SQLite, instant sync across clients, reactive widgets, and a fully type-safe query & transaction layer generated from your models.

$ flutter pub add flutter_instantdb

todos_screen.dart
// Reactive, typed query — rebuilds on change
final todos = await TodoTable()
    .query()
    .where((t) => t.done.eq(false))
    .order((t) => t.createdAt.desc())
    .getAll(db);

// Typed write — wrong types won't compile
await db.transact(
  TodoTable().tx(db).createModel(
    Todo(id: db.id(), title: 'Ship it', done: false),
  ),
);

One codebase · every platform

iOSAndroidWebmacOSWindowsLinux

Everything you need to build collaborative apps

The local-first developer experience of InstantDB, native to Flutter.

Real-time sync

Changes propagate instantly to every connected client with reliable conflict resolution.

Offline-first

Local SQLite storage. Your app works offline and syncs the moment connectivity returns.

Reactive UI

Widgets rebuild automatically when data changes — powered by Signals, no manual state.

Type-safe

A typed query + transaction DSL catches wrong fields and value types at compile time.

Code generation

Annotate a model with @InstantModel and generate typed tables, relations and writes.

Presence

Cursors, typing indicators, reactions and avatars for live multiplayer collaboration.

Typed layer

Your models, end to end type-safe

Declare a model, run the generator, and get typed tables, relation accessors, reactive queries and transactions. Relations, cursor pagination and whole-model writes — all checked by the compiler.

  • Typed query DSL with where / order / pagination
  • Code generation from @InstantModel classes
  • @InstantLink relations with typed .include(...)
  • Typed transactions: create / update / merge / link
Explore the typed layer
models.dart
@InstantModel('todos')
class Todo {
  final String id;
  final String title;
  final bool done;

  @InstantLink()
  final List<Tag> tags;
}

// generated → TodoTable, getAll, tx, include…

Ship a synced app this afternoon

Go from an empty project to a real-time, offline-first, reactive todo list in minutes.