Guide

Custom Driver

It is possible to extend unstorage by creating a custom driver.

Explore src/drivers to get an idea of how to implement them. Methods can:

import { createStorage, defineDriver } from "unstorage";

const myStorageDriver = defineDriver((options) => {
  return {
    name: "my-custom-driver",
    options,
    async hasItem(key, _opts) {},
    async getItem(key, _opts) {},
    async setItem(key, value, _opts) {},
    async removeItem(key, _opts) {},
    async getKeys(base, _opts) {},
    async clear(base, _opts) {},
    async dispose() {},
    async watch(callback) {},
  };
});

const storage = createStorage({
  driver: myStorageDriver(),
});

Some important notes:

  • Keys should be normalized following foo:bar convention
  • Remove any open watcher and handlers in dispose()
  • Returning a promise is optional, you can return a direct value (see memory driver)
  • You don't have acces to the mount base
  • Value returned by getItem can be a serializable object or string
  • When setting watch method, the unstorage default handler will be disabled. You are responsible for emitting an event on getItem, setItem and removeItem.