Realm vs Core Data
Dos pesos pesados del mundo de las bases de datos locales en desarrollo iOS y móvil: el reactivo y multiplataforma Realm frente al framework de grafo de objetos integrado de Apple, Core Data.
El poder de SQLite, la seguridad de tipos de Dart — la elección natural para quien conoce SQL
Velocidad y simplicidad NoSQL — pero primero debes elegir el paquete correcto
Respuesta clara: si tu modelo de datos es relacional y tu equipo conoce SQL, Drift es la apuesta más segura — versión 2.35.0 del 2026-09-09, último commit del 2026-09-24, más de 1,3 millones de descargas mensuales. En el lado de Isar, el único requisito crítico es escribir `isar_community` en tu pubspec.yaml; el paquete original `isar` está congelado desde 2023. El fork está vivo y sigue siendo una opción razonable para datos similares a documentos (caché, notas de esquema flexible).
| Categoría | Drift | Isar |
|---|---|---|
| Rendimiento | 8/10 | 8/10 |
| Facilidad de aprendizaje | 6/10 | 8/10 |
| Ecosistema | 9/10 | 5/10 |
| Comunidad | 8/10 | 5/10 |
| Mercado laboral | 6/10 | 5/10 |
| A prueba de futuro | 9/10 | 6/10 |
// Drift - Definición de tabla + consulta reactiva (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;
// Flujo reactivo: se emite automáticamente cuando la tabla cambia
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 - Definición de colección + consulta (patrón del readme de 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);
});
}
// Consulta reactiva: se emite automáticamente cuando la colección cambia
Stream<List<Todo>> watchPendingTodos(Isar isar) {
return isar.todos.filter().isDoneEqualTo(false).watch(fireImmediately: true);
}Respuesta clara: si tu modelo de datos es relacional y tu equipo conoce SQL, Drift es la apuesta más segura — versión 2.35.0 del 2026-09-09, último commit del 2026-09-24, más de 1,3 millones de descargas mensuales. En el lado de Isar, el único requisito crítico es escribir `isar_community` en tu pubspec.yaml; el paquete original `isar` está congelado desde 2023. El fork está vivo y sigue siendo una opción razonable para datos similares a documentos (caché, notas de esquema flexible).
Solicita una consultoría gratuitaEn un proyecto nuevo, usa definitivamente isar_community. El paquete original isar no se actualiza en pub.dev desde el 2023-04-25 ni en GitHub desde el 2025-06-14 — está prácticamente abandonado. isar_community es el fork activo que ha asumido la comunidad, y es el paquete al que hoy debería referirse el nombre 'Isar'.