createStorage()
Namespace + adapter + optional TTL / schema version in one place.
@jayoncode/storage
Namespace it. Expire it. Upgrade it — without localStorage glue.
A small policy layer for browser persistence — namespaces, envelopes, TTL, migrations — on adapters you choose: memory, localStorage, sessionStorage, and IndexedDB.
import { createStorage, createLocalStorageAdapter } from "@jayoncode/storage";
const storage = createStorage({
namespace: "app",
adapter: createLocalStorageAdapter(),
policies: {
preferences: { ttl: { days: 365 } },
cache: { ttl: { minutes: 15 } },
},
});
storage.set("theme", "dark", { policy: "preferences" });
storage.get("theme"); // "dark" | null
storage.peek("theme"); // envelope with expiresAtNamespace + adapter + optional TTL / schema version in one place.
Memory · localStorage · sessionStorage · IndexedDB — the library never auto-picks a backend.
peek() shows when something was saved, when it expires, and which version it is.
Schema upgrades without ad-hoc key rewrites across releases.
Soft quota, transforms hooks, cleanup, backup, and watchers — only when you import them.