Realm vs Core Data
In der Welt der lokalen Datenbanken für iOS und mobile Entwicklung treffen zwei starke Akteure aufeinander: das reaktive, plattformübergreifende Realm und Apples integriertes Objektgraph-Framework Core Data.
Die Power von SQLite, die Typsicherheit von Dart — die natürliche Wahl für alle, die SQL beherrschen
NoSQL-Geschwindigkeit und Einfachheit — aber zuerst musst du das richtige Paket wählen
Klare Antwort: Ist dein Datenmodell relational und dein Team SQL-erfahren, ist Drift die sicherere Wahl — Version 2.35.0 vom 2026-09-09, letzter Commit am 2026-09-24, über 1,3 Millionen Downloads pro Monat. Bei Isar ist die einzige kritische Voraussetzung, in der pubspec.yaml `isar_community` einzutragen; das ursprüngliche `isar`-Paket ist seit 2023 eingefroren. Der Fork ist aktiv und bei dokumentähnlichen Daten (Caching, Notizen mit flexiblem Schema) weiterhin eine vernünftige Wahl.
| Kategorie | Drift | Isar |
|---|---|---|
| Performance | 8/10 | 8/10 |
| Erlernbarkeit | 6/10 | 8/10 |
| Ökosystem | 9/10 | 5/10 |
| Community | 8/10 | 5/10 |
| Arbeitsmarkt | 6/10 | 5/10 |
| Zukunftssicherheit | 9/10 | 6/10 |
// Drift - Tabellendefinition + reaktive Abfrage (drift.simonbinder.eu/setup/)
import 'package:drift/drift.dart';
import 'package:drift/native.dart';
import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as p;
part 'database.g.dart';
class Todos extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get title => text().withLength(min: 1, max: 200)();
BoolColumn get isDone => boolean().withDefault(const Constant(false))();
}
@DriftDatabase(tables: [Todos])
class AppDatabase extends _$AppDatabase {
AppDatabase() : super(_openConnection());
@override
int get schemaVersion => 1;
// Reaktiver Stream: wird bei jeder Tabellenänderung automatisch aktualisiert
Stream<List<Todo>> watchPendingTodos() {
return (select(todos)..where((t) => t.isDone.equals(false))).watch();
}
Future<int> addTodo(String title) {
return into(todos).insert(TodosCompanion.insert(title: title));
}
}
LazyDatabase _openConnection() {
return LazyDatabase(() async {
final dbFolder = await getApplicationDocumentsDirectory();
final file = File(p.join(dbFolder.path, 'db.sqlite'));
return NativeDatabase.createInBackground(file);
});
}// isar_community - Collection-Definition + Abfrage (Muster aus dem Readme von pub.dev/packages/isar_community)
import 'package:isar_community/isar.dart';
import 'package:path_provider/path_provider.dart';
part 'todo.g.dart';
@collection
class Todo {
Id id = Isar.autoIncrement;
@Index()
late String title;
bool isDone = false;
}
Future<Isar> openDb() async {
final dir = await getApplicationDocumentsDirectory();
return Isar.open(
[TodoSchema],
directory: dir.path,
);
}
Future<void> addTodo(Isar isar, String title) async {
final todo = Todo()..title = title;
await isar.writeTxn(() async {
await isar.todos.put(todo);
});
}
// Reaktive Abfrage: wird bei jeder Änderung der Collection automatisch aktualisiert
Stream<List<Todo>> watchPendingTodos(Isar isar) {
return isar.todos.filter().isDoneEqualTo(false).watch(fireImmediately: true);
}Klare Antwort: Ist dein Datenmodell relational und dein Team SQL-erfahren, ist Drift die sicherere Wahl — Version 2.35.0 vom 2026-09-09, letzter Commit am 2026-09-24, über 1,3 Millionen Downloads pro Monat. Bei Isar ist die einzige kritische Voraussetzung, in der pubspec.yaml `isar_community` einzutragen; das ursprüngliche `isar`-Paket ist seit 2023 eingefroren. Der Fork ist aktiv und bei dokumentähnlichen Daten (Caching, Notizen mit flexiblem Schema) weiterhin eine vernünftige Wahl.
Kostenlose Beratung erhaltenIn einem neuen Projekt unbedingt isar_community verwenden. Das ursprüngliche isar-Paket wird auf pub.dev seit dem 2023-04-25 und auf GitHub seit dem 2025-06-14 nicht mehr aktualisiert — de facto verlassen. isar_community ist der von der Community übernommene, aktive Fork und heute das Paket, das mit „Isar“ eigentlich gemeint sein sollte.