tiptap/docs/src/docPages/api/extensions.md
2021-03-30 20:45:48 +02:00

4.9 KiB
Raw Blame History

Extensions

toc

Introduction

Extensions add new capabilities to tiptap and youll read the word extension here very often. Actually, there are literal Extensions. Those cant add to the schema, but can add functionality or change the behaviour of the editor.

There are also some extensions with more capabilities. We call them nodes and marks which can render content in the editor.

List of provided extensions

Title Default Extension Source Code
CharacterCount GitHub
Collaboration GitHub
CollaborationCursor GitHub
Dropcursor Yes GitHub
Focus GitHub
FontFamily GitHub
Gapcursor Yes GitHub
History Yes GitHub
Placeholder GitHub
TextAlign GitHub
Typography GitHub

You dont have to use it, but we prepared a @tiptap/starter-kit which includes the most common extensions. Read more about defaultExtensions().

How extensions work

Although tiptap tries to hide most of the complexity of ProseMirror, its built on top of its APIs and we recommend you to read through the ProseMirror Guide for advanced usage. Youll have a better understanding of how everything works under the hood and get more familiar with many terms and jargon used by tiptap.

Existing nodes, marks and extensions can give you a good impression on how to approach your own extensions. To make it easier to switch between the documentation and the source code, we linked to the file on GitHub from every single extension documentation page.

We recommend to start with customizing existing extensions first, and create your own extensions with the gained knowledge later. Thats why all the below examples extend existing extensions, but all examples will work on newly created extensions aswell.

Create a new extension

Youre free to create your own extensions for tiptap. Here is the boilerplate code thats need to create and register your own extension:

import { Extension } from '@tiptap/core'

const CustomExtension = Extension.create({
  // Your code here
})

const editor = new Editor({
  extensions: [
    // Register your custom extension with the editor.
    CustomExtension,
    // … and dont forget all other extensions.
    Document,
    Paragraph,
    Text,
    // …
  ],

Learn more about custom extensions in our guide.

ProseMirror plugins

ProseMirror has a fantastic eco system with many amazing plugins. If you want to use one of them, you can register them with tiptap like that:

import { history } from 'prosemirror-history'

const History = Extension.create({
  addProseMirrorPlugins() {
    return [
      history(),
      // …
    ]
  },
})