Browser
Store values in localStorage, sessionStorage, or IndexedDB.
These drivers require browser APIs. Avoid creating them during server-side rendering unless you provide a compatible storage object.
#Local storage
Driver import: unstorage/drivers/localstorage
import { createStorage } from "unstorage";
import localStorageDriver from "unstorage/drivers/localstorage";
const storage = createStorage({
driver: localStorageDriver({ base: "my-app" }),
});#Options
base: Prefixes keys to avoid collisions with other applications.storage: AlocalStorage-compatible object. By default, the driver useswindow.localStorage.windowKey: Selects"localStorage"(default) or"sessionStorage"from the window object.window: A customwindowobject. Pass it to enable nativestorageevent watching.
#Session storage
Driver import: unstorage/drivers/session-storage
The session driver has the same options as the local storage driver but selects window.sessionStorage by default.
import { createStorage } from "unstorage";
import sessionStorageDriver from "unstorage/drivers/session-storage";
const storage = createStorage({
driver: sessionStorageDriver({ base: "my-app" }),
});Note
Web Storage values are scoped to the browser origin. sessionStorage is additionally scoped to the current tab and is cleared when that tab's session ends.
#IndexedDB
Driver import: unstorage/drivers/indexeddb
The IndexedDB driver uses idb-keyval.
npm i idb-keyvalimport { createStorage } from "unstorage";
import indexedDBDriver from "unstorage/drivers/indexeddb";
const storage = createStorage({
driver: indexedDBDriver({
base: "my-app",
dbName: "my-app-db",
storeName: "keyval",
}),
});#Options
base: Prefixes all keys.dbName: Custom database name. Set it together withstoreName.storeName: Custom object store name. Set it together withdbName.lib: An importedidb-keyvalmodule or a function that returns it. See Driver dependencies.
When dbName and storeName are omitted, idb-keyval uses its default keyval-store database and keyval object store.
The regular API stores serialized values. Use the experimental raw API to preserve IndexedDB-native structured clone values:
await storage.setItemRaw("profile", { name: "Ada" });
const profile = await storage.getItemRaw("profile");