La ontología de Local-First
El mapa mental del software local-first: los siete ideales, el almacenamiento en el cliente, la convergencia con CRDT, el direccionamiento por contenido y los motores de sincronización.
El software que usas a diario no vive en tu ordenador: vive en el de otro, y tú miras una fotografía suya a través de una rueda de carga. Local-first propone lo contrario —que la copia que tienes delante sea la verdadera y la red sea solo un mecanismo de propagación—, y esa inversión, que suena a nostalgia del escritorio de los noventa, resulta ser el problema técnico más interesante de la década: sin un servidor que arbitre, la corrección de una aplicación deja de ser una cuestión de reglas de negocio y pasa a ser una propiedad algebraica de sus estructuras de datos.
- Ver el mapa mental completo del territorio local-first, de los siete ideales a los motores de sincronización.
- Entender la inversión de autoridad: la copia local como fuente de verdad y la red como detalle.
- Situar las tres capas técnicas: almacenamiento en el cliente, convergencia y transporte.
- Reconocer el criterio para no aplicarlo, que importa tanto como saber aplicarlo.
El territorio, de un vistazo
mindmap
root((Local First))
Principios
Siete ideales
Propiedad del dato
Cuando no
Almacenamiento
IndexedDB
OPFS
SQLite WASM
Cuotas
Concurrencia
Workers
SharedWorker
Web Locks
Convergencia
Relojes
CRDT
Secuencias
Arboles
Contenido
Hash
Merkle DAG
Git
BLAKE3
Red
P2P
QUIC
Sync engines
Confianza
Identidad
E2EE
MigracionesLas ideas clave
El servidor pasa a ser un caché
Deja de ser la fuente de verdad y se convierte en un caché compartido: un punto de encuentro para propagar cambios entre dispositivos, no el oráculo que dictamina qué ocurrió. Leer y escribir pasa a ser siempre una operación local.
El conflicto se define, no se evita
Sin autoridad central, nadie puede impedir que dos copias diverjan. El conflicto deja de ser un error que se previene y pasa a ser un caso que se define matemáticamente: la convergencia la garantiza la estructura de datos, no una regla.
El cliente ya no es un juguete
localStorage guardaba preferencias. Hoy SQLite compilado a WebAssembly sobre OPFS mueve gigabytes a velocidad casi nativa dentro de una pestaña. El navegador dejó de ser un terminal para convertirse en una base de datos.
Sincronizar es la parte fácil
Lo difícil viene después: quién eres sin un servidor que te autentique, cómo cifras extremo a extremo sin renunciar a la búsqueda, y cómo migras el esquema en dispositivos apagados que no controlas y que reaparecerán dentro de un año.
Por qué importa
Es tentador leer local-first como una optimización —una capa de caché agresiva, una app que además aguanta el metro— y esa lectura te llevará a implementarlo mal. No es una técnica de latencia: es un cambio de quién tiene la autoridad sobre los datos. En la arquitectura cliente-servidor que heredamos, el servidor decide qué es verdad y el cliente pregunta; de ahí salen en línea recta las tres patologías que damos por normales: la rueda de carga, que aparece porque cada lectura es una pregunta remota; la aplicación que muere sin conexión, porque no queda nadie que pueda responderla; y tus datos, que dejan de existir el día que la empresa cierra, porque nunca fueron tuyos. Local-first invierte la relación: la copia que tienes en el dispositivo ES la verdad, y la red pasa a ser un detalle de propagación entre iguales. El artículo de Ink and Switch que acuñó el término en 2019 formalizó esa intuición en siete ideales —velocidad, multidispositivo, funcionar sin red, colaboración, longevidad, privacidad y propiedad—, pero el precio del cambio está entero en el problema que crea: cuando dos copias divergen no hay árbitro que dirima, de modo que la convergencia tiene que estar garantizada por las matemáticas de la estructura de datos y no por una regla de negocio escrita dentro de un if. Por eso este track dedica quince niveles a los CRDT antes que a ningún framework: la propiedad que necesitas —que dos réplicas que han visto las mismas operaciones en cualquier orden terminen idénticas— es algebraica, no arquitectónica. Y hace tiempo que dejó de ser investigación: Automerge 3.0 recortó el consumo de memoria diez veces a finales de 2025, Zero de Rocicorp alcanzó su 1.0 en junio de 2026, iroh publicó la suya el 15 de junio de 2026 y FOSDEM 2026 dedicó una sala entera a local-first, motores de sincronización y CRDT. Todo lo demás que estudies aquí se deduce de esa única inversión.
El camino
- Niveles 1–5 · Los principios — los siete ideales, la propiedad real del dato y el criterio para decidir cuándo NO aplicarlo.
- Niveles 6–15 · Almacenamiento en el cliente — de
localStoragea SQLite sobre OPFS, con IndexedDB, cuotas y desalojo por el camino. - Niveles 16–19 · Concurrencia — Workers, SharedWorker, pestañas que compiten por el mismo estado y elección de líder con Web Locks.
- Niveles 20–24 · Relojes y conflictos — tiempo lógico, causalidad, y las dos escuelas enfrentadas: transformación operacional frente a CRDT.
- Niveles 25–39 · CRDT a fondo — de la teoría de semirretículos a implementar uno: contadores, conjuntos, secuencias y árboles con movimientos.
- Niveles 40–43 · Las librerías reales — Automerge, Yjs y Loro, y cómo se comportan de verdad cuando el documento y su historia crecen.
- Niveles 44–48 · Contenido — compactación, poda de historia, direccionamiento por contenido, Merkle DAG, BLAKE3 y lo que Git ya sabía.
- Niveles 49–53 · Red — P2P, atravesar NAT, QUIC y la anatomía de los motores de sincronización modernos.
- Niveles 54–58 · Confianza — identidad sin servidor, cifrado extremo a extremo, migraciones de esquema y la síntesis final.
- Coge una app que uses a diario y córtale la red: anota qué sigue funcionando, qué se congela y qué se pierde. Ahí está la frontera entre un caché y local-first.
- Exporta tus datos de esa misma app. Cronometra cuánto tardas y mira en qué formato salen: eso mide cuánta propiedad tienes realmente.
- Ábrela en dos dispositivos, edita lo mismo en ambos sin conexión y vuelve a conectarlos. Anota qué versión ganó y si alguien te avisó.
- Comprométete con la premisa: la copia local es la verdad, y todo conflicto que no resuelva la estructura de datos acabará resolviéndolo el usuario.