Releases: ueberdosis/tiptap
Releases · ueberdosis/tiptap
v3.20.3
@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
pluginKeyis 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
pluginKeyis 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 whenignoreWhitespaceis 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
getEmbedUrlFromYoutubeUrlandisValidYoutubeUrlembed URL utility functions
@tiptap/vue-3
Patch Changes
- Generate a stable per-instance menu plugin key automatically when
pluginKeyis 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
includeChildrenis 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
@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
@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'inUniqueIDto target every node type exceptdocandtext.
@tiptap/core
Patch Changes
- Fix inline
styleparsing inmergeAttributesfor values containing:or;(e.g.url(https://...)orurl(data:...;charset=...,)) and skip incomplete declarations
v3.20.0
@tiptap/core
Minor Changes
- Add
transformPastedHTMLextension 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/FloatingMenuto usepluginKeyas the transaction meta key so that multiple instances can be updated independently without affecting each other
@tiptap/extension-floating-menu
Patch Changes
- Fix
BubbleMenu/FloatingMenuto usepluginKeyas 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/menusentrypoint to keep floating-ui optional - Simplified Tiptap component API with guaranteed non-null editor instance from useTiptap hook
Patch Changes
- Fix
BubbleMenu/FloatingMenuto usepluginKeyas 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
CodeBlockLowlightby switching theCodeBlockimport to a named export. This preventsextend is not a functionerrors caused by ESM/CJS interop issues.
@tiptap/extension-invisible-characters
Patch Changes
- Added missing storage typings
v3.19.0
@tiptap/extension-link
Patch Changes
- Add
titleattribute to Link extension. The title can now be set viasetLinkandtoggleLinkcommands 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/menusentrypoint to keep floating-ui optional - Simplified Tiptap component API with guaranteed non-null editor instance from useTiptap hook
v3.18.0
@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.
- Add a new, ergonomic way to initialize and use Tiptap editors in React via
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
dataAttributeto the extension option to control which attribute name will be used for the placeholder label.
v3.17.1
@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 thechildrengetter inNodePosclass - 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
@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
isFirefoxutility 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
@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
findDuplicateshelper performance from O(n²) to O(n) by using Set-based lookups instead of Array.indexOf