react-native-mmkv

Fast synchronous key-value storage for React Native via react-native-mmkv (Nitro-backed). Covers creating and configuring MMKV instances, reading/writing all value types (string, number, boolean, buffer), React hooks for reactive UI, value-change listeners, encryption, AsyncStorage migration, and st

By margelo · 670 installs

npx skills add margelo/react-native-skills --skill react-native-mmkv

Source repository · Upstream listing

react native mmkv A focused reference for AI coding assistants working in a project that uses react native mmkv . Answer using the real APIs from this library — not invented ones — by routing to the matching references/ .md file below. Mental model react native mmkv is a high performance, synchronous key value storage library for React Native, backed by Tencent's [MMKV](https://github.com/Tencent/MMKV) C++ engine via Nitro Modules (JSI). It is ~30x faster than AsyncStorage. The three things that trip people up: 1. Everything is synchronous. No await , no Promises. storage.getString('key') returns the value immediately. This is the whole point — MMKV memory maps files and reads/writes in process. 2. It's a key value store, not a database. All data is cached in memory. Keep total size under ~100 MB; for larger datasets use [react native nitro sqlite](https://github.com/margelo/react native nitro sqlite) or WatermelonDB. There is no fixed storage limit — but memory warnings will fire if you go too large. 3. V4 is a breaking rewrite. The constructor changed from new MMKV() to createMMKV() , .delete() became .remove() , and react native nitro modules is now a required peer dependency. See the [upgrade guide](./references/upgrade v4.md). V4 requires React Native 0.75+. It works on both the New Architecture and the old architecture (Nitro is backwards compatible). Routing table — problem to reference Load the matching file from references/ before writing code. Each reference cites real APIs from the library. User is asking about… Read Creating an MMKV instance, configuration options ( id , path , encryptionKey , mode , readOnly , compareBeforeSet ), the createMMKV() factory [ references/create instance.md ](./references/create instance.md) Getting/setting values, all data types (string, number, boolean, buffer, objects via JSON), key management ( contains , getAllKeys , remove , clearAll ), size , trim , importAllFrom [ references/crud operations.md ](./references/crud operations.md) React hooks ( useMMKVString , useMMKVNumber , useMMKVBoolean , useMMKVBuffer , useMMKVObject , useMMKV , useMMKVListener , useMMKVKeys ), reactive UI [ references/hooks.md ](./references/hooks.md) Listening for value changes outside of React, addOnValueChangedListener , cleaning up listeners [ references/listeners.md ](./references/listeners.md) Encryption ( encrypt , decrypt , recrypt ), AES 128 vs AES 256, encryptionKey config [ references/encryption.md ](./references/encryption.md) Migrating from AsyncStorage, data transfer pattern, completion flag [ references/migrate from async storage.md ](./references/migrate from async storage.md) zustand persist middleware, redux persist, jotai atomWithMMKV , react query persister, MobX [ references/state management.md ](./references/state management.md) V4 upgrade, breaking changes from V3, new MMKV() → createMMKV() , .delete() → .remove() [ references/upgrade v4.md ](./references/upgrade v4.md) Storage size limits, memory warnings, when to use a database instead [ references/limits and gotchas.md ](./references/limits and gotchas.md) If the question doesn't match any row, read [ references/create instance.md ](./references/create instance.md) first — most setup questions start there. Installation Expo: After install, rebuild the app. No additional native wiring is required. Quick reference — full MMKV instance API Testing A mocked MMKV instance is automatically used when testing with Jest or Vitest. Use createMMKV() as normal in tests — no manual mocking needed. Verifying the skill is loaded Good test questions: "How do I persist zustand state with MMKV?" → should produce a StateStorage adapter using storage.set , storage.getString , storage.remove — not AsyncStorage wrappers. "How do I migrate from AsyncStorage to MMKV?" → should show the batch copy pattern with a completion flag, not a drop in replacement. "What's the storage limit?" → should explain there's no fixed limit, but data is memory mapped so keep it under ~100 MB; use SQLite for larger datasets. References File Description [create instance.md](./references/create instance.md) createMMKV() factory, all configuration options [crud operations.md](./references/crud operations.md) Set/get all types, key management, objects, buffers [hooks.md](./references/hooks.md) All React hooks for reactive MMKV usage [listeners.md](./references/listeners.md) addOnValueChangedListener , cleanup [encryption.md](./references/encryption.md) Encrypt/decrypt instances, AES options [migrate from async storage.md](./references/migrate from async storage.md) Full migration pattern from AsyncStorage [state management.md](./references/state management.md) zustand, redux persist, jotai, react query, MobX [upgrade v4.md](./references/upgrade v4.md) V3 → V4 breaking changes and migration [limits and gotchas.md](./references/limits and gotchas.md) Storage limits, multi process, logging, common pitfalls Problem → Reference Mapping Problem Reference Action Don't know where to start [create instance.md](./references/create instance.md) Create instance with createMMKV() Need reactive UI updates [hooks.md](./references/hooks.md) Use useMMKVString / useMMKVObject etc. Encrypting sensitive data [encryption.md](./references/encryption.md) Call storage.encrypt(key) App uses AsyncStorage, want to switch [migrate from async storage.md](./references/migrate from async storage.md) Batch migrate then swap calls Zustand/Redux/Jotai persistence [state management.md](./references/state management.md) Wire adapter for your state lib Upgrading from V3 to V4 [upgrade v4.md](./references/upgrade v4.md) new MMKV() → createMMKV() , .delete() → .remove() Storage growing too large [limits and gotchas.md](./references/limits and gotchas.md) Trim or move to SQLite Multi process data sharing [limits and gotchas.md](./references/limits and gotchas.md) Set mode: 'multi process'