Find out what's new in Tiptap V3

What's new in Tiptap V3

Tiptap V3 introduces significant updates to the core editor. This guide highlights important changes clearly, making your upgrade straightforward. Use it to quickly find everything essential to update your integration.

Upgrade guide

If you’re upgrading from Tiptap 2.x to 3.x, refer to our upgrade guide. It covers breaking changes, important updates, and new features clearly—ensuring your migration process is efficient.

Breaking Changes

ChangeDescription
Removed UMD buildsUMD builds have been removed. We recommend using ESM builds instead. UMD builds are not compatible with the new @tiptap/extension-* packages.
New shouldRerenderOnTransaction option with false defaultThe new shouldRerenderOnTransaction option is disabled by default to minimize rerendering with React components. This can cause your editor component to not rerender as expected. Read more.
Migration from tippy.js to floating-uiWe replaced the outdated tippy.js library with the new floating-ui library. This change improves the performance and reliability of our menus and tooltips.
Changes to our Text Style APIThe @tiptap/extension-text-style package has seen API updates providing a new TextStyleKit extension that encapsulates all possible text styling functionalities in one extension. Default options were also updated.
Commands were changedThe behavior or names of commands were changed. clearContent and setContent now emit updates correctly while setContent also received a change to its parameters. insertContent was changed to prevent unwanted text splitting.
NodeView getPos now can return undefinednodeView.getPos() can now return undefined making a check for undefined necessary to handle this case properly.
editor.getCharacterCount() was removedThe editor.getCharacterCount() method was removed. It was marked as deprecated in the previous version and is now removed. You can use editor.storage.characterCount.characters() instead while using the CharacterCount extension.
considerAnyAsEmpty option removed from placeholder extensionThe considerAnyAsEmpty option was removed from the placeholder extension as it was deprecated already and wasn't respected in the previous version.
Stricter Typing3.0.0 brings stricter typing to the editor. This change improves the overall type safety of the editor and makes it easier to work with but might require some adjustments in your code. We recommend using TypeScript to benefit from the improved type safety.
Moved Utility ExtensionsWe moved all our utility extensions like History, Placeholder, CharacterCount, DropCursor, GapCursor, TrailingNode, Focus, and Selection to the new @tiptap/extensions package.
Renamed Collaboration CursorThe CollaborationCursor extension was renamed to CollaborationCaret as we felt cursors was to general and could clash with potential other cursor types in the future.
Renamed History ExtensionThe History extension was renamed to UndoRedo to better reflect its purpose and avoid confusion with the collaborative History feature. This also includes the history option on the StarterKit.

New features

  • New @tiptap/extensions extension - The new @tiptap/extensions package includes and combines multiple utility extensions. Read more.

  • New MarkView support - MarkViews are now supported by Tiptap. This can be useful to render custom HTML for marks. Read more.

  • Improved Server-Side Rendering - The editor can now run on SSR environments without rendering the editor content. Read more.

  • Deletes can now be tracked as an event - Editor deletions can now be tracked as an event. Read more.

  • Nodes and marks have new attribute validation support - Validating attributes on nodes or marks is now supported.

  • StarterKit updates - The StarterKit was made more powerful now including more extensions by default. Read more.

  • TableKit - The new TableKit extension allows you to register all important table extensions in one package. Read more.

  • ListKit - The new ListKit extension allows you to register all important list extensions in one package. Read more.

  • TextStyleKit - The new TextStyleKit extension registers all important text-style extensions in one package. Read more.

  • New rewriteUnknownContent helper - This helper function can be imported from the @tiptap/core.

  • New unmount as an alternative to destroying the editor - The editor instance now supports an unmount method which allows for mounting and unmounting the editor to the DOM. This encourages re-use of editor instances by preserving all the same options between instances. This is different from the destroy method, which will unmount, emit the destroy event, and remove all event listeners.

  • New toggleTextStyle command for text styles - The toggleTextStyle command allows you to toggle text styles on and off. This is useful for toggling text styles like bold or italic.

  • Static Renderer - The Static Renderer helps render JSON content as HTML, Markdown, or React components without an editor instance. Read more.

  • JSX Renderer - With 3.0.0 you will have the ability to use framework agnostic JSX for the renderHTML function of your extensions. Read more.

Improvements

  • Improved transaction handling - Transactions are now handled more efficiently and reliably. This change improves the overall performance of the editor.
  • focusEvent plugin key is exported - You can now import the focusEvent plugin key if needed from the core package.
  • Improvements on mobile devices - The 3.0.0 release brings improvements for mobile devices primarily focusing on touch events.
  • Minor IME bugfixes - The 3.0.0 release includes a few minor bugfixes for IME input handling.
  • TextStyle can now consume style attributes - The TextStyle extension can now consume styles from the style attribute and will skip parsing of other styles if there was an override defined in the style attribute. See this Github Comment.
  • TableView on Table extension is now importable - The TableView class on the Table extension is now importable to allow for custom table views that still are resizable.

Additional changes

  • HTML parsing with happy-dom-without-node - We now use happy-dom-without-node to parse HTML as a lightweight alternative to zeed-dom.
  • Various smaller bugfixes - The 3.0.0 release includes various smaller bugfixes and improvements to the overall performance of the editor.

What's next in Tiptap 3.X?

We're already exploring future features for releases beyond Tiptap 3.0.

Provide Feedback

If you have any feedback on an additional use case you’d like us to consider, please let us know.

  • Content migrations: Migrations allow you to rewrite your document JSON to align with your current schema, facilitating document updates during schema changes with fully customizable solutions tailored to your needs.
  • Markdown support: Enhance your editing capabilities by enabling the editor to both accept and output content in markdown, meeting the demands of modern applications and leveraging the strengths of LLMs in markdown generation.
  • Decorations API: The new Decorations API allows you to influence document presentation without altering its content, providing an intuitive way to add visual enhancements beyond complex ProseMirror internals.