--- description: Collaborative text editing can be fricking complex, but it doesn’t have to be that way. icon: user-voice-line --- # Collaboration [![Version](https://img.shields.io/npm/v/@tiptap/extension-collaboration.svg?label=version)](https://www.npmjs.com/package/@tiptap/extension-collaboration) [![Downloads](https://img.shields.io/npm/dm/@tiptap/extension-collaboration.svg)](https://npmcharts.com/compare/@tiptap/extension-collaboration?minimal=true) The Collaboration extension enables you to collaborate with others in a single document. The implementation is based on [Y.js by Kevin Jahns](https://github.com/yjs/yjs), which is the coolest thing to [integrate collaborative editing](/guide/collaborative-editing) in your project. The history works totally different in a collaborative editing setup. If you undo a change, you don’t want to undo changes of other users. To handle that behaviour this extension provides an own `undo` and `redo` command. Don’t load the default [`History`](/api/extensions/history) extension together with the Collaboration extension to avoid conflicts. :::pro Pro Extension We kindly ask you to [sponsor our work](/sponsor) when using this extension in production. ::: ## Installation ```bash npm install @tiptap/extension-collaboration yjs y-websocket y-prosemirror ``` ## Settings ### document An initialized Y.js document. Default: `null` ```js Collaboration.configure({ document: new Y.Doc(), }) ``` ### field Name of a Y.js fragment, can be changed to sync multiple fields with one Y.js document. Default: `'default'` ```js Collaboration.configure({ document: new Y.Doc(), field: 'title', }) ``` ### fragment A raw Y.js fragment, can be used instead of `document` and `field`. Default: `null` ```js Collaboration.configure({ fragment: new Y.Doc().getXmlFragment('body'), }) ``` ## Commands The `Collboration` extension comes with its own history extension. Make sure to disable the default extension, if you’re working with the `StarterKit`. ### undo() Undo the last change. ```js editor.commands.undo() ``` ### redo() Redo the last change. ```js editor.commands.redo() ``` ## Keyboard shortcuts | Command | Windows/Linux | macOS | | ------- | ----------------------------------------------------- | --------------------------------------------- | | undo() | `Control` `Z` | `Cmd` `Z` | | redo() | `Shift` `Control` `Z`
`Control` `Y` | `Shift` `Cmd` `Z`
`Cmd` `Y` | ## Source code [packages/extension-collaboration/](https://github.com/ueberdosis/tiptap/blob/main/packages/extension-collaboration/) ## Usage :::warning Public The content of this editor is shared with other users. ::: https://embed.tiptap.dev/preview/Extensions/Collaboration?hideSource https://embed.tiptap.dev/preview/Extensions/Collaboration