Skip to content

ADR-007: MMKV como Storage de Configurações e Estado Rápido

Status: Implementado Data (estimada): commit c73286b4fix(mmkv): use mmkv instead of a web specific alternative Tipo: ADR Retroativo


Contexto

O app precisa de armazenamento síncrono e de alta performance para configurações do usuário (tema, tamanho de fonte, flags de feature) e estado da autenticação. AsyncStorage é assíncrono e mais lento para leituras frequentes.

Decisão

Usar react-native-mmkv como camada de preferências síncronas. Para o ambiente web (react-native-web), foi criada uma estratégia de adaptação (MmkvWebStrategy) que emula a API MMKV usando localStorage.

Alternativas Consideradas

  • AsyncStorage — descartado (assíncrono, API mais verbosa para configurações)
  • localStorage diretamente — descartado no nativo por incompatibilidade
  • "Alternativa web-specific" mencionada no commit — descartada por inconsistência de API
  • Redux Persist — descartado para configurações simples (sobrecarga desnecessária)

Consequências

  • 🟢 Leitura síncrona de configurações — zero latência percebida
  • 🟢 API unificada nativo/web via estratégia de adaptação
  • 🟡 MMKV não é transacional — operações compostas não têm atomicidade garantida
  • 🟢 Performance: MMKV é ~10x mais rápido que AsyncStorage em benchmarks React Native