- Una base de datos del lado del cliente que facilita la creación de apps colaborativas en tiempo real como Notion o Figma
- Escribes consultas relacionales y Instant se encarga de obtener los datos, verificar permisos y hacer caché offline
- También maneja automáticamente las actualizaciones optimistas y el rollback cuando cambian los datos
- Todas las consultas soportan multijugador por defecto
- También soporta actualizaciones efímeras como cursores o estado en línea
- Actualmente ofrece SDK para Javascript, React y React Native
Motivación de desarrollo
- El desarrollo moderno de apps requiere mucho trabajo: configurar servidores, bases de datos, caché, ORM y endpoints
- También hay que escribir código del lado del cliente, gestionar estado y renderizar la UI
- Al agregar funciones multijugador, hay que considerar un servidor con estado, y para soportar modo offline, IndexedDB y colas de transacciones
- Cada vez que se agrega una nueva función, hay que volver a escribir repetidamente modelos, endpoints, manejo de estado y UI
- En 2021 se dieron cuenta de que la mayoría de los problemas que enfrenta un ingeniero de UI son en realidad problemas de base de datos
- Si existiera una base de datos del lado del cliente, bastaría con escribir consultas sin tener que pensar en gestión de estado, endpoints ni caché local
- Si las consultas soportan multijugador por defecto, no hay que preocuparse por un servidor con estado
- Si la base de datos soporta rollback, se obtienen actualizaciones optimistas gratis
- Por eso desarrollaron Instant. Instant ofrece una base de datos utilizable desde el cliente para que puedas concentrarte en construir la UX
Resumen de la arquitectura
- Instant guarda todos los datos de usuario en una sola gran base de datos Postgres en forma de triples
- Ofrece un nivel gratuito con una configuración multi-tenant
- Un servidor de sincronización escrito en Clojure se comunica con Postgres
- Escribieron un motor de consultas que entiende InstaQL, similar a Datalog y GraphQL
- Inspirados por WorldStore de Asana y LiveGraph de Figma, rastrean el WAL de Postgres para detectar datos nuevos e invalidar las consultas relacionadas
- En el frontend, escribieron un triple store del lado del cliente
- El SDK guarda la caché de consultas recientes en IndexedDB en web y en AsyncStorage en React Native
- Todos los datos se procesan a través de un sistema de permisos impulsado por la biblioteca CEL de Google
Resumen de GN⁺
- Instant es una base de datos del lado del cliente que facilita la creación de apps colaborativas en tiempo real
- Mediante consultas relacionales, automatiza la obtención de datos, la verificación de permisos y el caché offline
- Soporta por defecto funciones multijugador, actualizaciones optimistas y rollback
- Inspirado en Asana y Figma, rastrea el WAL de Postgres para detectar datos nuevos e invalidar las consultas relacionadas
- Gestiona los datos de forma eficiente mediante un triple store del lado del cliente y un sistema de permisos
2 comentarios
Parece un proyecto realmente prometedor, en la misma línea que Supabase.
Opiniones en Hacker News
Fundador de Firebase: Está entusiasmado con la combinación de Instant de modo offline, tiempo real, consultas relacionales y código abierto. Hubo muchas solicitudes de consultas relacionales. El cliente de Firebase es de código abierto, pero no lograron abrir el backend
Retroalimentación: Los ejemplos de código no están completos. No está claro de dónde vienen
transactyuseQuery. Los pequeños detalles importanPosibilidad de self-hosting: A menudo, algunas partes de la herramienta no pueden alojarse por cuenta propia. Esto debería quedar claro
Alternativa al modelo offline-first: Eligió PowerSync. WatermelonDB también está bien. ElectricSQL aún está inmaduro. CouchDB y PocketDB no están actualizados. Planea usar PowerSync y Supabase como backend
Relación con las apps CRUD: Es difícil entender la relación entre las apps CRUD y el concepto de InstantDB o Firebase. Para un editor de texto colaborativo, usaría una implementación de CRDT en Javascript
Experiencia usando Instant: Ha usado Instant durante 6 meses y quedó satisfecho. Las funciones de tiempo real, relacionales y offline eran importantes. Probó otras herramientas, pero fracasaron. Desde Instant, ya no usa otras herramientas
Resumen del sistema de permisos: Firebase separa la lógica de búsqueda/actualización de datos y las políticas de acceso. Instant evalúa la lógica de permisos según los resultados de la consulta. Firebase verifica la seguridad antes de ejecutar la consulta
Exposición del motor Datalog: Hay otros motores Datalog que soportan consultas recursivas. Está preguntando sobre la posibilidad de caché de consultas y uniones. En el pasado hubo un Java InstantDB con el mismo nombre. Proporciona una lista de otros motores Datalog implementados en Clojure
Quiere una experiencia tipo ActiveRecord: Quiere trabajar en React/Vue/Solid de una forma parecida a ActiveRecord. Quiere una API tipo grafo de objetos. No quiere una API tipo SQL. Quiere que el ORM funcione como si tuviera en memoria todo el grafo de objetos
Problema de rendimiento de triple store: Cuando la mayoría de las consultas traen el objeto completo o varios campos del mismo objeto, el rendimiento de un triple store no es bueno. Postgres tampoco destaca mucho. Está preguntando por experiencias relacionadas con esto