Realm vs Core Data
Deux acteurs majeurs du monde des bases de données locales en développement iOS et mobile : Realm, réactif et multiplateforme, face à Core Data, le framework de graphe d'objets intégré d'Apple.
La puissance de SQLite, la sécurité de type de Dart — un choix naturel pour ceux qui connaissent le SQL
Vitesse et simplicité NoSQL — mais il faut d'abord choisir le bon paquet
Réponse nette : si votre modèle de données est relationnel et que votre équipe connaît le SQL, Drift est le pari le plus sûr — version 2.35.0 du 2026-09-09, dernier commit le 2026-09-24, plus de 1,3 million de téléchargements mensuels. Côté Isar, la seule condition critique est d'écrire `isar_community` dans le pubspec.yaml ; le paquet original `isar` est gelé depuis 2023. Le fork est vivant et reste un choix raisonnable pour des données de type document (cache, notes à schéma flexible).
| Catégorie | Drift | Isar |
|---|---|---|
| Performance | 8/10 | 8/10 |
| Facilité d'apprentissage | 6/10 | 8/10 |
| Écosystème | 9/10 | 5/10 |
| Communauté | 8/10 | 5/10 |
| Marché de l'emploi | 6/10 | 5/10 |
| Pérennité | 9/10 | 6/10 |
// Drift - Définition de table + requête réactive (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;
// Flux réactif : diffusé automatiquement à chaque changement dans la table
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 - Définition de collection + requête (modèle du readme 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);
});
}
// Requête réactive : diffusée automatiquement à chaque changement de la collection
Stream<List<Todo>> watchPendingTodos(Isar isar) {
return isar.todos.filter().isDoneEqualTo(false).watch(fireImmediately: true);
}Réponse nette : si votre modèle de données est relationnel et que votre équipe connaît le SQL, Drift est le pari le plus sûr — version 2.35.0 du 2026-09-09, dernier commit le 2026-09-24, plus de 1,3 million de téléchargements mensuels. Côté Isar, la seule condition critique est d'écrire `isar_community` dans le pubspec.yaml ; le paquet original `isar` est gelé depuis 2023. Le fork est vivant et reste un choix raisonnable pour des données de type document (cache, notes à schéma flexible).
Obtenir une consultation gratuitePour un nouveau projet, utilisez impérativement isar_community. Le paquet original isar n'est plus mis à jour sur pub.dev depuis le 2023-04-25, ni sur GitHub depuis le 2025-06-14 — il est de fait abandonné. isar_community est le fork actif repris par la communauté, et c'est le paquet que l'on doit entendre aujourd'hui par « Isar ».