Pular para o conteúdo principal

Nitro Modules · SQLite · C++ / Swift / Kotlin

SQLite offline-first para React Native, sincronizado inteiramente em código nativo

SQLite offline-first para React Native com um motor de sincronização 100% nativo.

query.ts
Database.select(UserSchema)
.where(and(eq('id', 1), like('email', '%@company.com')))
.orderBy('updatedAt', 'desc')
.limit(50)
.execute();

// every write here queues automatically for the native sync engine
Database.insert(UserSchema)
.values({ id: 2, name: 'Ada', email: 'ada@co.com', updatedAt: Date.now() })
.execute();

Tudo o que um motor de sincronização em segundo plano deveria ser, sem a bagagem do JS

A sincronização roda 100% nativamente

O orquestrador de sincronização, o cliente HTTP, o provedor de credenciais e o agendador em segundo plano vivem inteiramente em C++/Swift/Kotlin. Sem bundle JS, sem thread JS, sem headless task.

Schemas declarativos

Tabelas, índices, relações e contratos de sincronização são dados TypeScript simples, interpretados nativamente. Sem SQL para escrever, sem etapa de codegen para mudanças de schema.

Fila de sincronização automática

Todo INSERT/UPDATE/DELETE — inclusive SQL bruto — é capturado por um trigger do SQLite e enfileirado para sincronização. Você nunca chama enqueue você mesmo.

Query builder tipado

No estilo Drizzle, select/insert/update/delete/transaction, totalmente tipado a partir do seu schema via InferSelectModel/InferInsertModel.

Hooks reativos

useQuery e useInfiniteQuery se inscrevem em mudanças de tabela e re-executam automaticamente, não importa se a escrita veio do seu código ou do motor de sincronização.

OAuth2 pronto para uso

Tokens de acesso/refresh armazenados no Keychain (iOS) / Keystore (Android), renovados nativamente — sem malabarismo de tokens em JS.

Por baixo dos panos

O motor de sincronização nunca acorda o runtime JS

Um job em segundo plano acorda o orquestrador de sincronização nativo diretamente — seu app não precisa estar aberto, e nenhuma thread JS chega a subir para isso.

TypeScript (camada de DX)
JSI (Nitro Modules) — eventos de mudança fluem de volta
Núcleo Nativo (C++)
  • SQLite + cache LRU de prepared statements
  • Migration Engine (ADD COLUMN)
  • Trigger Engine → sync_queue
  • Sync Orchestrator
  • Credential Provider (OAuth2)
  • Cliente HTTP
contratos de função platform::
Camadas Swift (iOS) / Kotlin (Android)
  • BGTaskScheduler / WorkManager — agendador em segundo plano
  • NWPathMonitor / ConnectivityManager — monitor de rede
  • Keychain / Keystore — armazenamento seguro de tokens
Sua API REST

Salve DB Studio

Navegue e edite o banco de dados do seu app em execução, ao vivo

Uma UI local, conectada ao vivo — no estilo Prisma/Drizzle Studio — para o banco SQLite dentro do seu app em execução. Sem configuração extra: seu app se conecta automaticamente via WebSocket no momento em que você chama Database.configure(...) em desenvolvimento.

  • Navegue por todas as tabelas, incluindo as tabelas internas do motor de sincronização
  • Insira, edite e exclua linhas diretamente no dispositivo ao vivo
  • Execute SQL bruto contra o banco de dados em execução
  • Múltiplos dispositivos/simuladores, um único seletor de dispositivo
Aprenda a usar o Studio →
Salve DB Studio

Pronto para ir offline-first?

Declare um schema, envolva seu app em SalveDbProvider, e você já tem queries tipadas, hooks reativos e sincronização nativa em segundo plano em minutos.