react-native-blob-persist
v0.1.0
Published
File-based storage with optional compression, compatible with redux-persist
Maintainers
Readme
📦 react-native-blob-persist
The goal of this library is to overcome the size limit of AsyncStorage and provide a suitable alternative for use with Redux Persist.
It uses file-based storage, allowing you to persist large amounts of data safely and efficiently.
✨ Features
- 🔒 Atomic and safe writes (no risk of corruption in case of crash)
- 📉 Large object compression (lz-string)
- ⚡ Key index for performance
- 🎵 Binary storage (images, audio, PDFs, etc.)
- 🔑 AsyncStorage-compatible API (setItem, getItem, removeItem, getAllKeys, clear, multiSet, multiRemove)
🚀 Installation
You need to manually install the dependencies:
npm install react-native-blob-persist📖 Basic usage
import { BlobFileStorage } from "react-native-blob-persist";
await BlobFileStorage.setItem("user", { name: "Patrick", age: 30 });
const user = await BlobFileStorage.getItem("user");
await BlobFileStorage.removeItem("user");
const keys = await BlobFileStorage.getAllKeys();
await BlobFileStorage.clear();🔗 Usage with Redux Persist (without compression)
import { BlobFileStorage } from "react-native-blob-persist";
const persistConfig = {
key: "root",
storage: BlobFileStorage,
};📦 Usage with Redux Persist + Compression
import { createTransform } from "redux-persist";
import { BlobFileStorage, compressObject, decompressObject } from "react-native-blob-persist";
const compressTransform = createTransform(
(inboundState) => compressObject(inboundState),
(outboundState) => decompressObject(outboundState)
);
const persistConfig = {
key: "root",
storage: BlobFileStorage,
transforms: [compressTransform],
};📦 Manual compression (without Redux)
import { compressObject, decompressObject } from "react-native-blob-persist";
const bigObject = { foo: "bar", items: Array(10000).fill("x") };
const compressed = compressObject(bigObject);
await BlobFileStorage.setItem("big", compressed);
const stored = await BlobFileStorage.getItem("big");
const original = decompressObject(stored);⚡ Key index
const keys = await BlobFileStorage.getAllKeys();📚 Batch operations
// multiSet
await BlobFileStorage.multiSet([
["user", { name: "Patrick" }],
["settings", { darkMode: true }],
]);
// multiRemove
await BlobFileStorage.multiRemove(["user", "settings"]);🎵 Binary storage
await BlobFileStorage.setBinaryItem("profile-pic", base64Image, "base64");
const imageBase64 = await BlobFileStorage.getBinaryItem("profile-pic", "base64");
await BlobFileStorage.setBinaryItem("voice-note", asciiAudio, "ascii");
const audioAscii = await BlobFileStorage.getBinaryItem("voice-note", "ascii");⚙️ Custom configuration
BlobFileStorage.config({
storagePath: `${ReactNativeBlobUtil.fs.dirs.DocumentDir}/myAppStorage`,
encoding: "utf8",
toFileName: (name) => name.replace(":", "_"),
fromFileName: (name) => name.replace("_", ":"),
});📜 License
MIT
