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.
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.
- SQLite + cache LRU de prepared statements
- Migration Engine (ADD COLUMN)
- Trigger Engine → sync_queue
- Sync Orchestrator
- Credential Provider (OAuth2)
- Cliente HTTP
- BGTaskScheduler / WorkManager — agendador em segundo plano
- NWPathMonitor / ConnectivityManager — monitor de rede
- Keychain / Keystore — armazenamento seguro de tokens
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

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.