Linear me llevó al agujero de conejo del enfoque local-first
(bytemash.net)- Linear cambió por completo mi forma de ver el desarrollo de aplicaciones web
- Linear opera en modo local-first, ofreciendo interacciones instantáneas y sin latencia de red
- En este modelo, el cliente tiene una base de datos independiente y los cambios se sincronizan con el servidor de forma asíncrona
- Sin embargo, la implementación de sincronización en entornos distribuidos, resolución de conflictos y procesamiento offline tiene alta complejidad
- Surgen soluciones cada vez más diversas en el ecosistema local-first como Jazz, Electric SQL, Zero, y la experiencia para desarrolladores también mejora poco a poco
Resumen
Al usar Linear como herramienta de gestión de proyectos, me sentí muy inspirado por la velocidad y la experiencia de usuario del enfoque local-first. Lo más llamativo fue que en una app web tradicional casi no se percibían latencia de red, estados de carga o recargas de página. A partir de esta experiencia, exploré a fondo los principios técnicos y los casos reales del paradigma local-first.
Bajando a la madriguera de conejo
Al investigar los secretos técnicos de Linear descubrí que usan el IndexedDB del navegador como una base de datos real. Todos los cambios se procesan primero de inmediato en local, y luego se sincronizan en segundo plano mediante GraphQL y WebSockets.
- El término local-first puede interpretarse como una estrategia de UX (respuesta instantánea) o como una filosofía de guardar los datos localmente y sincronizarlos
- En las apps web tradicionales, el servidor era la fuente única de verdad, pero en una arquitectura local-first cada cliente tiene su propia base de datos
- Al mover la ubicación de la base de datos cerca del usuario, la latencia de red se elimina por completo de la interacción del usuario
El reto: esto no es trivial
Al intentar implementar directamente el enfoque de Linear, me di cuenta de que la complejidad es considerable.
- Manejo de transición offline/online
- Resolución de conflictos entre clientes distribuidos
- Sincronización parcial (para no descargar todos los datos)
- Migración de esquema de datos en caché
- Seguridad y control de acceso en entornos distribuidos
- Estas capacidades requieren una gran cantidad de tiempo y esfuerzo de ingeniería
El ecosistema local-first en 2025
A partir de 2025, en el ecosistema local-first han aparecido varias soluciones fuertes.
- Electric SQL: motor de sincronización basado en Postgres
- PowerSync: solución con foco empresarial
- Jazz: herramienta para construir apps local-first con facilidad
- Replicache: solución principal anterior (descontinuada)
- Zero: nueva dirección del equipo de Replicache
- Triplit: sincronización basada en TripleStore
- Instant: con énfasis en la experiencia del desarrollador
- LiveStore: proporciona una capa de sincronización en tiempo real
Análisis en profundidad: Jazz
Jazz llama la atención con su promesa distintiva de que “hacer una app local-first es tan fácil como actualizar estado”.
El modelo mental
Jazz introduce los Collaborative Values (CoValues), una estructura de colaboración en tiempo real.
- Definir esquema con Jazz y Zod: esa definición no es solo un tipo simple, sino un objeto vivo de sincronización automática
- Sin rutas API separadas, lógica de request/response ni DTO, basta con cambiar el estado del objeto para que la sincronización ocurra automáticamente
Cómo logra esto Jazz
La estructura interna de Jazz es la siguiente:
- Unicidad garantizada: asigna un ID único automáticamente a cada dato
- Event sourcing: guarda el historial de cambios como eventos, optimizando la eficiencia de la sincronización en tiempo real
- Cifrado de extremo a extremo: los datos se cifran en el cliente antes de sincronizar. El servidor solo ve blobs cifrados
- Permisos basados en grupos: en vez de ACL tradicionales, permisos por grupo, con propiedad claramente separada
Las compensaciones
Esta estructura es muy productiva para prototipado y desarrollo de UI rápido. Pero por ciertas características hay que considerar algunos puntos:
Tu servidor está ciego
Con el cifrado de extremo a extremo, el servidor no puede leer los datos del usuario. Si no defines con antelación qué datos debe acceder el servidor, hay limitaciones para gestión como monitoreo o prevención de almacenamiento malicioso
El viaje en el tiempo es obligatorio
Gracias al event sourcing, todo el historial de cambios se guarda de forma permanente. Esto facilita muchísimo Undo/Redo, pero tiene el inconveniente de que, al considerar requisitos legales como GDPR, el borrado puede ser difícil
El almacenamiento se dispara
Al no ejecutarse eliminaciones, el uso de almacenamiento crece gradualmente. En proyectos pequeños está bien, pero en SaaS a gran escala el costo de almacenamiento puede aumentar considerablemente
El desarrollo local aún tiene peculiaridades
La autenticación basada en Passkeys es predeterminada, pero en desarrollo propio o local hay molestias iniciales con HTTPS, administración de certificados y migración de llaves. Sin embargo, se prevén mejoras como la integración con Better Auth
Pero honestamente, aún vale la pena
Aun con esas restricciones, la experiencia de desarrollo y productividad de Jazz es muy llamativa. Aún está en versión temprana, pero se espera que diversos problemas se vayan resolviendo con el tiempo.
Explorando: Electric SQL y Zero
A diferencia de Jazz, Electric SQL y Zero adoptan un enfoque incremental.
- Puedes seguir usando tus tablas de Postgres tal como están
- Electric SQL permite suscribirse por reactive query (Shape) a una parte de la tabla para sincronizarla con la UI
- El manejo de mutaciones difiere de Jazz, y hay diversas opciones, como integración con LiveStore
- Zero es parecido a Electric pero incluye soporte integrado para sincronización de cambios
¿Cuándo tiene sentido el local-first?
Se resume así cuándo el paradigma local-first es apropiado y cuándo es desafiante
Apropiado:
- Herramientas de creación (diseño, escritura, música, etc.)
- Aplicaciones con soporte de colaboración
- Apps móviles con necesidad de soporte offline
- Herramientas para desarrolladores
- Aplicaciones de productividad personal
Desafiante:
- Lógica de negocio pesada del lado del servidor
- Requisitos estrictos de auditoría
- Sistemas de analítica de gran volumen
- Sistemas profundamente integrados existentes
- Sistemas que rechazan solicitudes con frecuencia desde el servidor
Mirando hacia adelante
El local-first significa un cambio de paradigma en el desarrollo web. Linear ya demostró un gran impacto en la experiencia de usuario. El desarrollador debe valorar si estas compensaciones estructurales encajan en su proyecto.
Con Jazz estoy construyendo una app personal para experimentar directamente sus ventajas, desventajas reales y los límites de la abstracción. El ecosistema aún está en una etapa inicial y, con el tiempo, las herramientas y patrones madurarán y mejorarán. Sin embargo, el beneficio de tener los datos en local es claro y parece que no va a desaparecer.
Si un nuevo proyecto puede aceptar las limitaciones, vale la pena probar el local-first. En el peor caso, aprenderás un nuevo patrón de arquitectura; en el mejor, podrás implementar una experiencia de usuario increíblemente rápida. En la competencia de respuesta en 300 ms, esto se vuelve una ventaja clave.
Aún no hay comentarios.