Files
upstream-mirror e0c588ca1c
Some checks failed
build / lint (22) (push) Failing after 17s
build / test (22) (push) Failing after 8s
build / lint (23) (push) Failing after 2s
build / build (22) (push) Has been skipped
build / build (23) (push) Has been skipped
build / test (23) (push) Failing after 4s
docsearch / docsearch (push) Failing after 1s
snapshot of https://github.com/ueberdosis/hocuspocus.git @ cf3cfa355b4d3bb61c6b6c80071f71783e32470e (2026-09-15)
2026-09-15 17:21:35 +05:00
..

@hocuspocus/extension-database

Version Downloads License Sponsor

A generic persistence base class for Hocuspocus. Provide your own fetch and store functions to plug any database into the collaboration backend — Postgres, MySQL, MongoDB, a REST API, etc.

Installation

npm install @hocuspocus/extension-database

Usage

Plug in any storage backend by implementing two async functions:

import { Server } from "@hocuspocus/server"
import { Database } from "@hocuspocus/extension-database"

const server = new Server({
  extensions: [
    new Database({
      fetch: async ({ documentName }) => {
        // return a Uint8Array of the stored Y.js update, or null for new documents
        return await yourDb.findDocument(documentName)
      },
      store: async ({ documentName, state }) => {
        // persist the binary Y.js state wherever you like
        await yourDb.upsertDocument(documentName, state)
      },
    }),
  ],
})

server.listen()

state is a Buffer containing the encoded Y.js update. Store it as-is and return it unchanged from fetch.

For dedicated storage drivers, see @hocuspocus/extension-sqlite or @hocuspocus/extension-s3, both of which extend this base class.

Documentation

Persistence patterns and performance tips: tiptap.dev/docs/hocuspocus/guides/persistence.

License

MIT — see LICENSE.md.