- Um banco de dados no lado do cliente que facilita a criação de apps colaborativos em tempo real, como Notion ou Figma
- Ao escrever consultas relacionais, o Instant cuida da busca de dados, verificação de permissões e cache offline
- Também lida automaticamente com atualizações otimistas e rollback quando os dados mudam
- Todas as consultas oferecem suporte multiplayer por padrão
- Também oferece suporte a atualizações transitórias, como cursor ou status online
- Atualmente fornece SDKs para Javascript, React e React Native
Motivação para o desenvolvimento
- O desenvolvimento moderno de apps exige muito trabalho, como configuração de servidor, banco de dados, cache, ORM e endpoints
- Também é necessário escrever código no lado do cliente, gerenciar estado e renderizar a UI
- Ao adicionar recursos multiplayer, é preciso considerar um servidor com estado; ao oferecer suporte offline, é preciso pensar em IndexedDB e filas de transações
- Sempre que um novo recurso é adicionado, é preciso repetir a escrita de modelos, endpoints, gerenciamento de estado e UI
- Em 2021, perceberam que a maioria dos problemas enfrentados por engenheiros de UI eram, na verdade, problemas de banco de dados
- Se houver um banco de dados no lado do cliente, basta escrever consultas sem precisar pensar em gerenciamento de estado, endpoints ou cache local
- Se as consultas oferecerem suporte multiplayer por padrão, não é preciso se preocupar com um servidor com estado
- Se o banco de dados oferecer suporte a rollback, atualizações otimistas vêm “de graça”
- Por isso desenvolveram o Instant. O Instant fornece um banco de dados utilizável no cliente, permitindo foco na construção da UX
Visão geral da arquitetura
- O Instant armazena todos os dados dos usuários em um único grande banco de dados Postgres, em forma de triplas
- Oferece uma camada gratuita com configuração multi-tenant
- Um servidor de sincronização escrito em Clojure se comunica com o Postgres
- Foi criado um mecanismo de consultas que entende o InstaQL, semelhante a Datalog e GraphQL
- Inspirado no WorldStore da Asana e no LiveGraph da Figma, ele rastreia o WAL do Postgres para detectar novos dados e invalidar consultas relacionadas
- No frontend, foi criado um triple store no lado do cliente
- O SDK armazena o cache das consultas recentes em IndexedDB na web e em AsyncStorage no React Native
- Todos os dados passam por um sistema de permissões alimentado pela biblioteca CEL do Google
Resumo do GN⁺
- O Instant é um banco de dados no lado do cliente que facilita a criação de apps colaborativos em tempo real
- Por meio de consultas relacionais, ele lida automaticamente com busca de dados, verificação de permissões e cache offline
- Oferece suporte nativo a recursos multiplayer, atualizações otimistas e rollback
- Inspirado na Asana e na Figma, ele rastreia o WAL do Postgres para detectar novos dados e invalidar consultas relacionadas
- Gerencia os dados com eficiência por meio de um triple store no lado do cliente e de um sistema de permissões
2 comentários
Parece um projeto realmente muito promissor, na mesma linha do Supabase.
Opiniões no Hacker News
Fundador do Firebase: animado com a combinação do Instant de offline, tempo real, consultas relacionais e código aberto. Havia muitos pedidos por consultas relacionais. O cliente do Firebase é open source, mas não conseguiram abrir o código do backend
Feedback: os exemplos de código não estão completos. A origem de
transacteuseQuerynão está clara. Pequenos detalhes importamSe é possível fazer self-hosting: muitas vezes parte da ferramenta não pode ser hospedada pelo próprio usuário. Isso precisa ficar claro
Alternativas ao modelo offline-first: escolheu PowerSync. WatermelonDB também é bom. ElectricSQL ainda é imaturo. CouchDB e PocketDB não são modernos. Pretende usar PowerSync e Supabase como backend
Relação com apps CRUD: é difícil entender a relação entre apps CRUD e os conceitos do InstantDB ou Firebase. Para editores de texto colaborativos, usaria uma implementação CRDT em Javascript
Experiência usando Instant: usou Instant por 6 meses e ficou satisfeito. Recursos de tempo real, relacional e offline eram importantes. Tentou outras ferramentas, mas falhou. Desde o Instant, não usa mais outras ferramentas
Resumo do sistema de permissões: o Firebase separa a lógica de busca/atualização de dados das políticas de acesso. O Instant avalia a lógica de permissões com base no resultado da consulta. O Firebase verifica a segurança antes de executar a consulta
Se o motor Datalog é exposto: há outros motores Datalog que suportam consultas recursivas. Pergunta se é possível fazer cache e composição de consultas. No passado houve um Java InstantDB com o mesmo nome. Fornece uma lista de outros motores Datalog implementados em Clojure
Quer uma experiência tipo ActiveRecord: quer trabalhar em React/Vue/Solid de uma forma parecida com ActiveRecord. Quer uma API tipo grafo de objetos. Não quer uma API parecida com SQL. Quer que o ORM funcione como se tivesse todo o grafo de objetos em memória
Problema de desempenho de triple store: quando a maioria das consultas busca o objeto inteiro ou vários campos do mesmo objeto, a performance de triple stores não é boa. O Postgres também não é tão excelente assim. Está perguntando sobre experiências relacionadas