Skip to content

Releases: ueberdosis/tiptap

v3.20.3

16 Mar 17:14
48e0289

Choose a tag to compare

@tiptap/react

Patch Changes

  • Forward BubbleMenu and FloatingMenu HTML props to the actual menu element so attributes like className, style, data-*, and event handlers bind to the positioned menu container.
  • Generate a stable per-instance menu plugin key automatically when pluginKey is omitted, so multiple BubbleMenu or FloatingMenu components can be mounted without colliding.

@tiptap/vue-2

Patch Changes

  • Forward BubbleMenu and FloatingMenu HTML props to the actual menu element so attributes like className, style, data-*, and event handlers bind to the positioned menu container.
  • Generate a stable per-instance menu plugin key automatically when pluginKey is omitted, so multiple BubbleMenu or FloatingMenu components can be mounted without colliding.

@tiptap/core

Patch Changes

  • Fixed isNodeEmpty() so multi-line text with non-whitespace content is no longer treated as empty when ignoreWhitespace is enabled.
  • Fixed overlapping bold and italic markdown serialization and round-tripping.

@tiptap/extension-unique-id

Patch Changes

  • Fixed a bug where empty paragraphs accumulated in the document on every page reload when using the UniqueID extension with the Collaboration extension and an externally created Yjs provider.

@tiptap/extension-youtube

Patch Changes

  • Export missing getEmbedUrlFromYoutubeUrl and isValidYoutubeUrl embed URL utility functions

@tiptap/vue-3

Patch Changes

  • Generate a stable per-instance menu plugin key automatically when pluginKey is omitted, so multiple BubbleMenu or FloatingMenu components can be mounted without colliding.

@tiptap/extension-placeholder

Patch Changes

  • Skip placeholder decorations on non-textblock nodes when includeChildren is enabled to prevent duplicate placeholders on wrapper nodes like lists.

@tiptap/extension-bold

Patch Changes

  • Fixed overlapping bold and italic markdown serialization and round-tripping.

@tiptap/extension-italic

Patch Changes

  • Fixed overlapping bold and italic markdown serialization and round-tripping.

@tiptap/markdown

Patch Changes

  • Fixed overlapping bold and italic markdown serialization and round-tripping.

v3.20.2

15 Mar 17:50
cbc999f

Choose a tag to compare

@tiptap/core

Patch Changes

  • Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and   markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.

@tiptap/extension-blockquote

Patch Changes

  • Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and   markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.

@tiptap/extension-list

Patch Changes

  • Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and   markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.

@tiptap/extension-paragraph

Patch Changes

  • Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and   markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.

@tiptap/markdown

Patch Changes

  • Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and   markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.

v3.20.1

06 Mar 12:45

Choose a tag to compare

@tiptap/extension-code-block

Patch Changes

  • Fix tilde-fenced code blocks (~~~) being silently dropped when parsing markdown

@tiptap/extension-drag-handle

Patch Changes

  • Fix Drag event listener is removed when a plugin is registered after the DragHandle plugin.

@tiptap/extension-unique-id

Patch Changes

  • Add support for types: 'all' in UniqueID to target every node type except doc and text.

@tiptap/core

Patch Changes

  • Fix inline style parsing in mergeAttributes for values containing : or ; (e.g. url(https://...) or url(data:...;charset=...,)) and skip incomplete declarations

v3.20.0

18 Feb 09:59
5a123c3

Choose a tag to compare

@tiptap/core

Minor Changes

  • Add transformPastedHTML extension API that allows extensions to transform pasted HTML content before it's parsed into the editor, enabling cleanup of styles, removal of dangerous content, and modification of pasted HTML through a chainable transform system.

Patch Changes

  • Fix checking if mark is active and toggling off marks when part of the selection does not allow the mark (e.g. a code block)
  • Global attributes now support shorthand string values for types: use '*' to apply to all nodes and marks, 'nodes' for all nodes (excluding text), or 'marks' for all marks.
  • Fixed a typo in the documentation of editor.view

@tiptap/extension-drag-handle

Patch Changes

  • Fix drag handle not appearing for atom/leaf nodes like images in both nested and non-nested modes
  • Add table structure rules to prevent drag handle on table rows, cells, and headers, and fix ghost table rows when dragging tables
  • Fix drag position resolving outside the document when dragging an empty text node at the end of the document

@tiptap/markdown

Patch Changes

  • Fixed getMarkdown() returning   instead of empty string when editor is empty

@tiptap/extension-bubble-menu

Patch Changes

  • Fix BubbleMenu/FloatingMenu to use pluginKey as the transaction meta key so that multiple instances can be updated independently without affecting each other

@tiptap/extension-floating-menu

Patch Changes

  • Fix BubbleMenu/FloatingMenu to use pluginKey as the transaction meta key so that multiple instances can be updated independently without affecting each other

@tiptap/react

Minor Changes

  • Moved BubbleMenu and FloatingMenu to separate @tiptap/react/menus entrypoint to keep floating-ui optional
  • Simplified Tiptap component API with guaranteed non-null editor instance from useTiptap hook

Patch Changes

  • Fix BubbleMenu/FloatingMenu to use pluginKey as the transaction meta key so that multiple instances can be updated independently without affecting each other

@tiptap/extension-code-block-lowlight

Patch Changes

  • Fixed a runtime error when initializing CodeBlockLowlight by switching the CodeBlock import to a named export. This prevents extend is not a function errors caused by ESM/CJS interop issues.

@tiptap/extension-invisible-characters

Patch Changes

  • Added missing storage typings

v3.19.0

03 Feb 16:57

Choose a tag to compare

@tiptap/extension-link

Patch Changes

  • Add title attribute to Link extension. The title can now be set via setLink and toggleLink commands and is rendered as an HTML title attribute.
  • Add title attribute support for markdown rendering. Links with titles are now serialized to markdown format [text](url "title").

@tiptap/react

Minor Changes

  • Moved BubbleMenu and FloatingMenu to separate @tiptap/react/menus entrypoint to keep floating-ui optional
  • Simplified Tiptap component API with guaranteed non-null editor instance from useTiptap hook

v3.18.0

28 Jan 12:38
a0ab1d6

Choose a tag to compare

@tiptap/extension-bubble-menu

Patch Changes

  • Fix BubbleMenu and FloatingMenu props not updating after initialization

@tiptap/extension-floating-menu

Patch Changes

  • Fix BubbleMenu and FloatingMenu props not updating after initialization

@tiptap/react

Minor Changes

  • Introduce a new, optional React integration that provides a declarative <Tiptap /> component for setting up editors in React apps.

    Summary

    • Add a new, ergonomic way to initialize and use Tiptap editors in React via <Tiptap /> components. This is an additive change and does not remove or change existing APIs.

    Why this change

    • Improves ergonomics for React users by offering a component-first API that pairs well with React patterns (hooks, JSX composition and props-driven configuration).

    Migration and usage

    • The old programmatic setup remains supported for this major version — nothing breaks. We encourage consumers to try the new <Tiptap /> component and migrate when convenient.

    Example

    import { Tiptap, useEditor } from '@tiptap/react'
    
    function MyEditor() {
      const editor = useEditor({ extensions: [StarterKit], content: '<h1>Hello from Tiptap</h1>' })
    
      return (
        <Tiptap instance={editor}>
          <Tiptap.Content />
          <Tiptap.BubbleMenu>My Bubble Menu</Tiptap.BubbleMenu>
          <Tiptap.FloatingMenu>My Floating Menu</Tiptap.FloatingMenu>
          <MenuBar /> {/* MenuBar can use the new `useTiptap` hook to read the editor instance from context */}
        </Tiptap>
      )
    }

    Deprecation plan

    • The old imperative setup will remain fully backward-compatible for this major release. We plan to deprecate (and remove) the legacy setup in the next major version — a deprecation notice and migration guide will be published ahead of that change.

Patch Changes

  • Fix BubbleMenu and FloatingMenu props not updating after initialization
  • Fixed extension storage not updating in React and Vue node views

@tiptap/vue-3

Patch Changes

  • Fixed extension storage not updating in React and Vue node views

@tiptap/markdown

Patch Changes

  • Upgrade marked.js from v15.0.12 to v17.0.1.

@tiptap/extensions

Patch Changes

  • Added a new dataAttribute to the extension option to control which attribute name will be used for the placeholder label.

v3.17.1

24 Jan 16:53
f592f0a

Choose a tag to compare

@tiptap/extension-paragraph

Patch Changes

  • Fixed markdown serialization doubling newlines and parsing collapsing multiple blank lines

@tiptap/markdown

Patch Changes

  • Fixed markdown serialization doubling newlines and parsing collapsing multiple blank lines
  • Fixed markdown HTML parsing when window object is unavailable in server-side environments
  • Fixed ordered list numbering when list has a non-default start value

@tiptap/vue-3

Patch Changes

  • Fixed IME input (Chinese, Japanese, Korean) in Vue 3 mark views by preventing DOM element destruction during composition events

@tiptap/extension-collaboration-caret

Patch Changes

  • Fixed CollaborationCaret crash with "Cannot read properties of undefined (reading 'doc')" error by updating to @tiptap/y-tiptap@3.0.2, which includes a guard against undefined state during editor initialization. This issue affected editors initialized with HTML content, particularly when using tables.

@tiptap/extension-collaboration

Patch Changes

  • Fixed CollaborationCaret crash with "Cannot read properties of undefined (reading 'doc')" error by updating to @tiptap/y-tiptap@3.0.2, which includes a guard against undefined state during editor initialization. This issue affected editors initialized with HTML content, particularly when using tables.

@tiptap/extension-drag-handle

Patch Changes

  • Fixed CollaborationCaret crash with "Cannot read properties of undefined (reading 'doc')" error by updating to @tiptap/y-tiptap@3.0.2, which includes a guard against undefined state during editor initialization. This issue affected editors initialized with HTML content, particularly when using tables.

@tiptap/html

Patch Changes

  • Fixed server-side HTML parsing crash when content contains link, script, or style tags with resource references.
  • Fixed server exports failing in Node.js test environments with jsdom/happy-dom

@tiptap/extension-bubble-menu

Patch Changes

  • Fixed bubble and floating menus to properly handle hide middleware data, hiding menus when reference element is scrolled out of view

@tiptap/extension-floating-menu

Patch Changes

  • Fixed bubble and floating menus to properly handle hide middleware data, hiding menus when reference element is scrolled out of view

@tiptap/core

Patch Changes

  • Fixed $nodes() method to correctly return inline nodes (like text, mention, etc.) by fixing the children getter in NodePos class
  • Fixed ResizableNodeView contentDOM getter to return null instead of undefined for proper TypeScript compatibility

@tiptap/extension-list

Patch Changes

  • Fixed ordered list numbering when list has a non-default start value

v3.17.0

23 Jan 13:13
408e1e7

Choose a tag to compare

@tiptap/extension-bubble-menu

Patch Changes

  • Added a safeguard to avoid TypeError: Cannot read properties of null (reading 'domFromPos') being thrown when the editor was being destroyed

@tiptap/extension-drag-handle

Minor Changes

  • Added nested drag handle support, allowing drag handles to appear for nested content like list items and blockquotes with configurable edge detection and custom rules.

Patch Changes

  • Fixed Firefox bug where the text caret becomes invisible after drag and drop.

@tiptap/core

Patch Changes

  • Added isFirefox utility to core

@tiptap/extension-drag-handle-react

Minor Changes

  • Added nested drag handle support, allowing drag handles to appear for nested content like list items and blockquotes with configurable edge detection and custom rules.

@tiptap/extension-drag-handle-vue-2

Minor Changes

  • Added nested drag handle support, allowing drag handles to appear for nested content like list items and blockquotes with configurable edge detection and custom rules.

@tiptap/extension-drag-handle-vue-3

Minor Changes

  • Added nested drag handle support, allowing drag handles to appear for nested content like list items and blockquotes with configurable edge detection and custom rules.

v3.16.0

20 Jan 12:00
332dfba

Choose a tag to compare

@tiptap/extension-audio

Minor Changes

  • Add a native audio extension with demos and tests.

@tiptap/markdown

Patch Changes

  • Fix incorrect Markdown output when underline is mixed with bold or italic and their ranges do not fully overlap.
  • Fix overlapping underline/bold/italic serialization and add tests

@tiptap/extension-link

Patch Changes

  • Fixed an issue where clicking on non-link elements (like images) required multiple clicks to select them. The link click handler now properly returns early when the clicked element is not a link, allowing other node handlers to process the click event.

@tiptap/extension-floating-menu

Minor Changes

  • Add updateEvent support for FloatingMenu to allow programmatic position updates via setMeta('floatingMenu', 'updatePosition')

@tiptap/react

Minor Changes

  • Add updateEvent support for FloatingMenu to allow programmatic position updates via setMeta('floatingMenu', 'updatePosition')

@tiptap/vue-2

Minor Changes

  • Add updateEvent support for FloatingMenu to allow programmatic position updates via setMeta('floatingMenu', 'updatePosition')

@tiptap/vue-3

Minor Changes

  • Add updateEvent support for FloatingMenu to allow programmatic position updates via setMeta('floatingMenu', 'updatePosition')

@tiptap/extension-unique-id

Patch Changes

  • Improved findDuplicates helper performance from O(n²) to O(n) by using Set-based lookups instead of Array.indexOf

v3.15.3

07 Jan 14:43
3a64925

Choose a tag to compare

@tiptap/core

Patch Changes

  • Fix Safari scrolling to top when using editor.chain().focus() commands