---
title: "Configure Hocuspocus Server"
canonical_url: "https://tiptap.dev/docs/hocuspocus/server/configuration"
---

# Configure Hocuspocus Server

## Introduction

There are only a few settings to pass for now. Most things are controlled through [hooks](https://tiptap.dev/docs/hocuspocus/server/hooks.md).

## Settings

| Setting            | Description                                                                                                                          | Default value   |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------ | --------------- |
| `name`             | A name for the instance, used for logging.                                                                                           |                 |
| `port`             | The port the server should listen on.                                                                                                | `80`            |
| `timeout`          | A connection healthcheck interval in milliseconds. Increased from 30s to 60s in v4.                                                  | `60000 (= 60s)` |
| `debounce`         | Debounces the call of the onStoreDocument hook for the given amount of time in ms. Otherwise every single update would be persisted. | `2000 (= 2s)`   |
| `maxDebounce`      | Makes sure to call onStoreDocument at least in the given amount of time (ms).                                                        | `10000 (= 10s)` |
| `quiet`            | By default, the servers show a start screen. If passed false, the server will start quietly.                                         | `false`         |
| `websocketOptions` | Options forwarded to the underlying WebSocket server (e.g. `{ maxPayload: 1024 * 1024 }`). Moved inside the config object in v4.     | `{}`            |

## Usage

```js
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:

```ts
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.
