vanilla-storage
A small async storage abstraction for browser storage drivers.
Install
NPM:
Shellnpm install vanilla-create-storage
CDN:
HTML<!-- umd: GlobalName: vanillaStorage --><script src="https://unpkg.com/vanilla-create-storage/dist/index.umd.js"></script><script> const { createStorage } = vanillaStorage;</script><!-- es module --><script type="module"> import { createStorage } from 'https://unpkg.com/vanilla-create-storage/dist/index.js';</script>
Usage
JavaScriptimport { createStorage } from 'vanilla-create-storage';const storage = createStorage({ driver: 'indexedDB', namespace: 'my-app', fallback: ['localStorage', 'memory'], ttl: 60_000,});await storage.set('user', { id: 1, name: 'Ada' });await storage.set('token', 'abc', { ttl: 5 * 60_000 });const user = await storage.get('user');const token = await storage.get('token', { defaultValue: null });await storage.delete('token');await storage.clear();
API
JavaScriptconst storage = createStorage(options);await storage.set(key, value, options);await storage.get(key, options);await storage.has(key);await storage.delete(key);await storage.remove(key);await storage.clear();await storage.keys();await storage.rawKeys();await storage.values();await storage.entries();await storage.size();await storage.prune(options);await storage.close();
Drivers
localStoragesessionStorageindexedDBcookiememory
Design Principles
- Unified API: different drivers use the same async method set.
- Explicit fallback: persistence and capacity semantics are not changed silently.
- Single encoding layer: records are JSON stringified only once, reducing cookie size and server-side integration friction.
- Compact structure: records use
v/c/e/valto reduce cookie and storage usage. - Evolvable protocol:
vis preserved so future structure changes can be safely rejected or migrated.