Skip to content

piotr-cz/redux-persist-idb-storage

Repository files navigation

Redux Persist adapter for IndexedDB storage

Storage adapter to use IndexedDB via idb v3 with redux-persist ripped from idb v3 docs > Examples section

Installation

Using npm:

npm install --save @piotr-cz/redux-persist-idb-storage

or Yarn:

yarn add @piotr-cz/redux-persist-idb-storage

Requirements

Setup

Import the storage and include it in persistConfig when creating Redux store:

// configureStore.js

import createIdbStorage from '@piotr-cz/redux-persist-idb-storage'

const persistConfig = {
  key: 'root',
  storage: createIdbStorage({name: 'myApp', storeName: 'keyval'}),
  serialize: false, // Data serialization is not required and disabling it allows you to inspect storage value in DevTools; Available since [email protected]
  deserialize: false, // Required to bear same value as `serialize` since [email protected]
}

// ...

Server-Side Rendering

When using Server-Side Rendering (SSR), indexedDB won't be available in the environment.

In this case you may use feature detection with a fallback to use default redux-persist storage (which resolves to noop functions):

// configureStore.js

// Redux Persist storage
import defaultStorage from 'redux-persist/lib/storage'

// IndexedDB storage
import createIdbStorage from '@piotr-cz/redux-persist-idb-storage/src'

const persistConfig = {
  key: 'root',
  storage: globalThis.indexedDB ? createIdbStorage({name: 'myApp', storeName: 'keyval'}) : defaultStorage,
  serialize: false, 
}

Options

See idb API

  • name (optional): IndexedDB Database name. Defaults to 'keyval-store'.
  • storeName (optional): IndexedDB Store name. Defaults to 'keyval'.
  • version (optional): Schema version. Defaults to 1.
  • upgradeCallback (optional): Defaults to upgradeDb => upgradeDb.createObjectStore(options.storeName).

Notes

  • idb dependency is locked to version ^3.0.0 as 4+ uses proxies which are not supported in older browsers
  • credits go to idb authors