3 pontos por GN⁺ 2025-08-09 | Ainda não há comentários. | Compartilhar no WhatsApp
  • Ao usar o Linear, minha visão sobre o desenvolvimento de aplicações web mudou bastante
  • O Linear funciona com uma abordagem local-first, oferecendo respostas imediatas e interações sem latência de rede
  • Esse modelo faz com que o cliente tenha uma base de dados independente, e as alterações são sincronizadas com o servidor de forma assíncrona
  • Mas a dificuldade de implementação para sincronização em ambiente distribuído, resolução de conflitos e tratamento offline é alta
  • Soluções diversas do ecossistema local-first, como Jazz, Electric SQL e Zero, estão surgindo, e a experiência do desenvolvedor também está melhorando gradualmente

Visão geral

Ao usar a ferramenta de gerenciamento de projetos Linear, fiquei muito impressionado com a extraordinária velocidade e experiência do usuário do modo local-first. Foi marcante perceber que não se sentia nada de latência de rede, estados de carregamento, atualização de página etc.

Com essa experiência, aprofundei a exploração dos princípios técnicos e dos casos reais de aplicação do paradigma local-first.

Descendo o buraco do coelho

Ao investigar o segredo técnico do Linear, descobri que eles usam o IndexedDB do navegador como um banco de dados de verdade. Todas as mudanças são processadas imediatamente no cliente primeiro e, em seguida, a sincronização ocorre em segundo plano com GraphQL e Websockets.

  • O termo local-first pode ser interpretado de diferentes formas, como estratégia de UX (reatividade imediata) ou como uma filosofia de manter os próprios dados em local e sincronizar
  • Em um app web tradicional, o servidor era a fonte única da verdade, mas na estrutura local-first cada cliente possui seu próprio banco de dados
  • Como a localização do banco de dados se move para perto do usuário, a latência de rede é totalmente removida da interação do usuário

O desafio: isso não é trivial

Ao tentar implementar o mesmo modo do Linear, percebi que a complexidade é considerável.

  • Tratamento de troca entre offline e online
  • Resolução de conflitos entre clientes distribuídos
  • Sincronização parcial (para evitar baixar todos os dados)
  • Migração de schema de dados em cache
  • Segurança e controle de acesso em ambiente distribuído
  • Essas áreas exigem enorme investimento de tempo e esforço de engenharia

O ecossistema local-first em 2025

Em 2025, o ecossistema local-first já conta com várias soluções fortes.

  • Electric SQL: motor de sincronização baseado em Postgres
  • PowerSync: solução com foco em enterprise
  • Jazz: ferramenta que facilita a construção de apps local-first
  • Replicache: uma das soluções principais existentes (fim de desenvolvimento)
  • Zero: novo direcionamento da equipe do Replicache
  • Triplit: sincronização baseada em TripleStore
  • Instant: com foco na experiência do desenvolvedor
  • LiveStore: fornece uma camada de sincronização em tempo real

Análise aprofundada: Jazz

Jazz chama atenção por prometer que torna um app local-first tão simples quanto uma atualização de estado.

Modelo mental

Jazz introduz os Collaborative Values (CoValues), uma estrutura de colaboração em tempo real.

  • Definir schema com Jazz e Zod: essa definição não é apenas um tipo simples, mas funciona como objetos vivos com sincronização automática
  • Sem rotas de API separadas, lógica de request/resposta ou DTOs, basta alterar o estado dos objetos para a sincronização acontecer automaticamente

Como o Jazz faz isso

A estrutura interna do Jazz é assim:

  • Garantia de unicidade: atribuição automática de IDs únicos para cada dado
  • Event sourcing: o histórico de alterações é salvo como eventos, otimizando a eficiência da sincronização em tempo real
  • Criptografia ponta a ponta: criptografia no cliente antes da sincronização. O servidor só vê blobs criptografados
  • Modelo de permissão por grupo: em vez de ACLs tradicionais, a propriedade é separada com clareza por grupo

Os trade-offs

Essa estrutura é extremamente produtiva para protótipos e desenvolvimento rápido de UI. Mas há aspectos que exigem atenção:

Seu servidor é cego

Com criptografia ponta a ponta, o servidor não pode ler os dados do usuário. Se você não definir com antecedência quais dados o servidor precisa acessar, há limitações para governança, como monitoramento ou prevenção de armazenamento malicioso.

Viagem no tempo é obrigatória

Com event sourcing, todo o histórico de mudanças é mantido de forma permanente. Isso torna Undo/Redo muito prático, mas tem o ponto fraco de dificultar a exclusão quando há exigências legais como GDPR.

Armazenamento dispara

Como nada é removido, o uso de armazenamento cresce progressivamente. Em projetos pequenos isso é aceitável, mas em SaaS em grande escala os custos de armazenamento podem aumentar bastante.

O desenvolvimento local ainda tem detalhes chatos

A autenticação baseada em Passkeys é padrão, mas no desenvolvimento próprio ou em ambiente local há inconvenientes iniciais, como HTTPS, gerenciamento de certificados e migração de chaves. Mesmo assim, há melhorias previstas, como integração com Better Auth.

Mas sinceramente? Ainda vale a pena

Mesmo com essas limitações, a experiência de desenvolvimento e produtividade do Jazz é muito impressionante. Ainda é uma versão inicial, mas há perspectiva de que vários problemas sejam resolvidos gradualmente.

Explorando: Electric SQL e Zero

Diferente do Jazz, Electric SQL e Zero adotam uma abordagem incremental.

  • É possível aproveitar as tabelas Postgres existentes
  • O Electric SQL permite assinar partes da tabela como uma reactive query (Shape) para sincronizar com a UI
  • A forma de tratar mutações é diferente da do Jazz, e há opções diversas, como integração com LiveStore
  • Zero é semelhante ao Electric, mas tem suporte embutido para sincronização de mudanças

Quando local-first faz sentido?

A seguir, um resumo do que é adequado e o que é desafiador no paradigma local-first.

Adequado:

  • Ferramentas criativas (design, escrita, música etc.)
  • Aplicações de suporte à colaboração
  • Apps móveis que precisam funcionar offline
  • Ferramentas para desenvolvedores
  • Aplicativos de produtividade pessoal

Desafiador:

  • Lógica de negócio pesada no lado do servidor
  • Requisitos rigorosos de auditoria
  • Sistemas de análise de alto volume
  • Sistemas legacy profundamente integrados
  • Sistemas que rejeitam frequentemente solicitações no servidor

Olhando para o futuro

Local-first significa uma mudança de paradigma no desenvolvimento web. O Linear já comprovou um grande impacto na experiência do usuário. Cabe ao desenvolvedor decidir se esses trade-offs estruturais fazem sentido para seu projeto.

Ao criar um app pessoal com Jazz, venho experimentando os prós e contras reais e os limites de abstração na prática. O ecossistema ainda está em fase inicial, e no futuro ferramentas e padrões devem amadurecer e melhorar. No entanto, os benefícios de manter os dados no local são claros e isso parece não desaparecer.

Em novos projetos, se for possível aceitar as restrições, vale muito a pena experimentar local-first. No pior caso, você aprende um novo padrão de arquitetura, e no melhor, consegue criar uma experiência de usuário incrivelmente rápida. Em uma corrida contra respostas de 300ms, isso vira uma vantagem importante.

Ainda não há comentários.

Ainda não há comentários.