Configure Hocuspocus Server

Introduction

There are only a few settings to pass for now. Most things are controlled through hooks.

Settings

SettingDescriptionDefault value
nameA name for the instance, used for logging.
portThe port the server should listen on.80
timeoutA connection healthcheck interval in milliseconds. Increased from 30s to 60s in v4.60000 (= 60s)
debounceDebounces the call of the onStoreDocument hook for the given amount of time in ms. Otherwise every single update would be persisted.2000 (= 2s)
maxDebounceMakes sure to call onStoreDocument at least in the given amount of time (ms).10000 (= 10s)
quietBy default, the servers show a start screen. If passed false, the server will start quietly.false
websocketOptionsOptions forwarded to the underlying WebSocket server (e.g. { maxPayload: 1024 * 1024 }). Moved inside the config object in v4.{}

Usage

import { Server } from '@hocuspocus/server'

const server = new Server({
  name: 'hocuspocus-fra1-01',
  port: 1234,
  timeout: 60000,
  debounce: 5000,
  maxDebounce: 30000,
  quiet: true,
  websocketOptions: { maxPayload: 1024 * 1024 },
})

server.listen()

Generic Context type

Since v4, the server accepts a generic Context type parameter for end-to-end type safety across all hooks:

import { Server } from '@hocuspocus/server'

interface MyContext {
  userId: string
  permissions: string[]
}

const server = new Server<MyContext>({
  async onAuthenticate({ token }) {
    // Return value is typed as MyContext
    return { userId: '123', permissions: ['read', 'write'] }
  },
  async onChange({ context }) {
    // context.userId is typed as string
    console.log(context.userId)
  },
})

The generic defaults to any, so existing code without explicit typing continues to work.