AsyncStorage 5,070 was part of React Native 36,878 's core until the community took it over as @react-native-async-storage/async-storage. Its API is the web's localStorage made asynchronous: getItem, setItem, removeItem, multiGet, multiSet, getAllKeys, every value a string, every call a Promise. BookNest already uses it through Zustand 58,763 's persist (Persisting Zustand State). On Android, version 2 keeps everything in one SQLite 4,756 database, RKStorage, capped by default at 6 MB; the library's Gradle 19,597 file reads AsyncStorage_db_size_in_MB from gradle.properties to raise it. Expo SDK 57 6,418 pins 2.2.0; npm 2,036 's latest, 3.1.1, adds createAsyncStorage(name) for separate named databases.
Two replacements keep the same shape. expo-sqlite/kv-store exports Storage (also as AsyncStorage) with the same async methods plus synchronous twins such as getItemSync(), so migrating is an import change: import AsyncStorage from 'expo-sqlite/kv-store'. And import 'expo-sqlite/localStorage/install' installs a global localStorage backed by SQLite, which lets libraries written for the web run unchanged. Use AsyncStorage when a library expects it; for your own code, prefer MMKV 18,748 for small synchronous settings and SQLite for anything you would query.