ueberdosis/tiptap
 Watch   
 Star   
 Fork   
5 days ago
tiptap

v3.27.3

@tiptap/core

Patch Changes

  • 94de762: Fix deleteSelection to delete content across all selection ranges instead of only the first range. This restores multi-cell table selections and other custom selections with multiple ranges.
  • @tiptap/pm@3.27.3

@tiptap/extension-list

Patch Changes

  • 94de762: Fix markdown parsing bugs where block elements right after an ordered list item (with no blank line in between) were wrongly treated as lazy continuation of the list item, instead of terminating the list the way other markdown parsers do:

    • Thematic breaks (---, ***, ___, * * *) were swallowed into the list item as literal paragraph text — along with every line after them. They now terminate the list and become a horizontal rule.
    • Fenced code blocks (``` and ~~~) were nested inside the list item. They now terminate the list and become a top-level code block.
    • Unindented bullet markers (- item) were nested inside the ordered list item. They now terminate the ordered list and start a new top-level bullet list. Indented bullets still nest inside the item as before.

    An indented ***/___ inside item content is now also parsed as a horizontal rule inside the item instead of literal text. A --- line directly below item paragraph text keeps its current behavior because it is a setext heading underline per CommonMark, not a thematic break.

  • 94de762: Fix indented ordered list items (e.g. one leading space before the marker, as happens when a top-level ordered list is itself nested inside another list) losing inline formatting during markdown parsing. The custom ordered-list markdown tokenizer built its nested structure with a hardcoded base indentation of 0, so an item whose actual indentation was non-zero never matched, causing the tokenizer to silently produce zero items and bail out — falling back to a path that left the item's content as literal, unparsed text instead of running it through inline tokenization (bold, italic, etc. were lost). The base indentation is now taken from the first collected item instead of being hardcoded.

  • Updated dependencies [94de762]

    • @tiptap/core@3.27.3
    • @tiptap/pm@3.27.3

@tiptap/extensions

Patch Changes

  • 94de762: Fixed placeholder flickering and disappearance on large documents. Replaced the viewport-based decoration scan with an incremental StateField<DecorationSet> that only re-computes decorations for top-level nodes touched by each transaction. This eliminates the dependency on DOM measurement (posAtCoords), requestAnimationFrame scheduling, and scroll listeners that caused flickering under collaboration, occlusion, and rapid edits.
6 days ago
tiptap

v3.27.2

@tiptap/extension-emoji

Patch Changes

  • ceebb31: Fix arrow key navigation past emoji nodes in Firefox. Previously, pressing ArrowLeft with the cursor adjacent to an inline non-selectable emoji node at a paragraph boundary would not move the cursor in Firefox. The cursor now correctly skips over emoji nodes in both directions.
  • Updated dependencies [ceebb31]
    • @tiptap/pm@3.27.2
    • @tiptap/core@3.27.2
    • @tiptap/suggestion@3.27.2

@tiptap/extension-file-handler

Patch Changes

  • ceebb31: Add consumePasteEvent option to the file-handler extension. When true, handlePaste returns true even when HTML content is present in the clipboard, preventing paste rules from other extensions from creating duplicate content. Default is false.
  • Updated dependencies [ceebb31]
    • @tiptap/pm@3.27.2
    • @tiptap/core@3.27.2
    • @tiptap/extension-text-style@3.27.2

@tiptap/extension-drag-handle

Patch Changes

  • ceebb31: Fix NodeRangeSelection not being restored after drag-and-drop when Collaboration (Yjs) is enabled. Drop anchor positions are now tracked with Yjs relative positions and remapped across isChangeOrigin document rebuilds, and selection restore runs via appendTransaction after the drop transaction settles.
  • ceebb31: Fix the drag handle when the editor renders zero-size widget decorations, such as the page chrome injected by the Pages extension. The handle now resolves to the correct block instead of failing to position or aligning to a decoration, and it stays above positioned page chrome so it remains clickable.
  • Updated dependencies [ceebb31]
    • @tiptap/pm@3.27.2
    • @tiptap/core@3.27.2
    • @tiptap/extension-collaboration@3.27.2
    • @tiptap/extension-node-range@3.27.2

@tiptap/extension-link

Patch Changes

  • ceebb31: Coerce undefined HTMLAttributes (target, rel, class) to null so ProseMirror does not emit "No value supplied for attribute" warnings when these options are explicitly set to undefined.
  • Updated dependencies [ceebb31]
    • @tiptap/pm@3.27.2
    • @tiptap/core@3.27.2

@tiptap/extension-list

Patch Changes

  • ceebb31: Fix a markdown parsing bug where a heading right after an ordered list item (with no blank line in between) got pulled into the list item as plain text, so you'd see a literal ### inside the list instead of an actual heading. Headings now end the list and get parsed properly, the way other markdown parsers handle it. Indented headings inside a list item are also parsed as real headings now instead of literal text.
  • Updated dependencies [ceebb31]
    • @tiptap/pm@3.27.2
    • @tiptap/core@3.27.2

@tiptap/extension-mathematics

Patch Changes

  • ceebb31: Allow KaTeX 0.17
  • Updated dependencies [ceebb31]
    • @tiptap/pm@3.27.2
    • @tiptap/core@3.27.2

@tiptap/react

Patch Changes

  • ceebb31: Change prop types of the Tiptap component so that either the editor or the instance fields are required
  • Updated dependencies [ceebb31]
    • @tiptap/pm@3.27.2
    • @tiptap/core@3.27.2

@tiptap/extension-drag-handle-react

Patch Changes

  • ceebb31: Fix React 19 strict mode compatibility by using useRef instead of useState for the portal element. Changing the className prop now updates the element in place without re-registering the drag handle plugin.
  • Updated dependencies [ceebb31]
  • Updated dependencies [ceebb31]
  • Updated dependencies [ceebb31]
  • Updated dependencies [ceebb31]
    • @tiptap/extension-drag-handle@3.27.2
    • @tiptap/react@3.27.2
    • @tiptap/pm@3.27.2

@tiptap/static-renderer

Patch Changes

  • ceebb31: Fix the static renderer ignoring unhandledNode and unhandledMark for node or mark types missing from the schema; such content now falls back to those renderers instead of throwing in Node.fromJSON
  • Updated dependencies [ceebb31]
    • @tiptap/pm@3.27.2
    • @tiptap/core@3.27.2

@tiptap/pm

Patch Changes

  • ceebb31: Updated all ProseMirror packages to the latest publicly available versions
23 days ago
tiptap

v3.27.1

@tiptap/extension-drag-handle

Patch Changes

  • a16901d: Respect margin properties passed via dragImageProperties on the drag preview. The clone reset its margin to 0 after copying styles, which discarded any margin the user explicitly requested. The reset now runs only when no margin property is listed in dragImageProperties, so the drag image can keep the same spacing as the live block.
  • @tiptap/core@3.27.1
    • @tiptap/extension-collaboration@3.27.1
    • @tiptap/extension-node-range@3.27.1
    • @tiptap/pm@3.27.1

@tiptap/extension-list

Patch Changes

  • a16901d: Fix ordered list parsing so under-indented continuation lines preserve their first character.
  • @tiptap/core@3.27.1
    • @tiptap/pm@3.27.1

@tiptap/extensions

Patch Changes

  • a16901d: Fix Placeholder flickering while a modal overlay is open. When the editor was occluded during a stream of transactions (e.g. remote collaboration edits), the viewport measurement fell back to a full-document range and repeatedly toggled the data-placeholder attribute on empty blocks. The viewport window is now frozen when the editor can't be measured reliably, so placeholders stay stable.
  • @tiptap/core@3.27.1
    • @tiptap/pm@3.27.1
25 days ago
tiptap

v3.27.0

@tiptap/extension-list

Minor Changes

  • 6270b99: Ordered lists now support the type attribute (a, A, i, I).

    The <ol> type attribute is now fully preserved through the HTML round-trip:

    • type="a" → lowercase alphabetical markers
    • type="A" → uppercase alphabetical markers
    • type="i" → lowercase roman numeral markers
    • type="I" → uppercase roman numeral markers

    Paste from external editors (Google Docs, Word, LibreOffice) now correctly detects the list style — both from the HTML type attribute and from CSS list-style-type properties.

    Plain text paste of typed ordered list markers (e.g. a. Item, I) Item, i. Item\nii. Item) is detected and converted to the correct list type.

    Markdown round-trip preserves typed markers: parsing a. Item creates type: "a", and serializing a typed list back to markdown uses the correct prefix (e.g. I., ii.).

    Joining of adjacent lists now respects type — two lists with different types (e.g. default numeric and type="a") are not merged.

Patch Changes

  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
    • @tiptap/core@3.27.0
    • @tiptap/pm@3.27.0

@tiptap/core

Patch Changes

  • 6270b99: Ordered lists now support the type attribute (a, A, i, I).

    The <ol> type attribute is now fully preserved through the HTML round-trip:

    • type="a" → lowercase alphabetical markers
    • type="A" → uppercase alphabetical markers
    • type="i" → lowercase roman numeral markers
    • type="I" → uppercase roman numeral markers

    Paste from external editors (Google Docs, Word, LibreOffice) now correctly detects the list style — both from the HTML type attribute and from CSS list-style-type properties.

    Plain text paste of typed ordered list markers (e.g. a. Item, I) Item, i. Item\nii. Item) is detected and converted to the correct list type.

    Markdown round-trip preserves typed markers: parsing a. Item creates type: "a", and serializing a typed list back to markdown uses the correct prefix (e.g. I., ii.).

    Joining of adjacent lists now respects type — two lists with different types (e.g. default numeric and type="a") are not merged.

  • 6270b99: parseAttributes now supports any word characters at the start of classes or id attributes.

  • 6270b99: Fix marksEqual to compare mark arrays as multisets instead of index-by-index, so order of marks no longer affects the result. Broaden the type signature to accept ProseMirror Mark objects (where type is an object with a name property) alongside the existing JSON mark shape ({ type: string }).

  • 6270b99: Fix a edge-case in rewriteUnknownContent to not fail on null-ish values inside marks or nodes.

  • @tiptap/pm@3.27.0

@tiptap/extension-link

Patch Changes

  • 6270b99: Fix isAllowedUri accepting unknown protocols whose name contains a hyphen (e.g. unknown-protocol://test). The hyphen is a valid scheme character per RFC 3986, but the regex was built from a template literal where \- collapsed to -, leaving the terminator class [^a-z+.-:] to parse .-: as a character range that excluded 0-9 and / rather than -. With the proper double-escape, the regex correctly excludes - and unknown hyphenated schemes are rejected again.
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
    • @tiptap/core@3.27.0
    • @tiptap/pm@3.27.0

@tiptap/suggestion

Minor Changes

  • 6270b99: Add props.mount(element) for fully managed popup positioning. It mounts the popup into the configured container (default document.body), keeps it anchored to the cursor, and automatically repositions on scroll, resize, and layout shifts via Floating UI's autoUpdate — no manual listeners required. It returns an unmount function to call in onExit.

    This is additive and opt-in: mounting and positioning manually with props.floatingUi + props.clientRect remains supported as an escape hatch.

  • 6270b99: Dismiss managed suggestion popups when the user clicks outside both the popup and the editor. Enabled by default for popups mounted via props.mount, and configurable with the new dismissOnOutsideClick option.

  • 6270b99: Expose Floating UI positioning configuration through SuggestionProps. Consumers can now read placement, offset, flip, container, and a resolved floatingUi config to drive their own positioning loop.

  • 6270b99: Add async suggestion lifecycle handling, including debounced async items(), in-flight request aborting, initialItems, a loading state, and a minQueryLength filter.

Patch Changes

  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
    • @tiptap/core@3.27.0
    • @tiptap/pm@3.27.0

@tiptap/markdown

Patch Changes

  • 6270b99: Fix parsing with injected Marked instances so custom markdown tokenizers registered via marked.use(...) are respected.
  • 6270b99: Fix unrecognized HTML detection during markdown parsing to work without window.DOMParser or HTMLUnknownElement, so angle-bracket placeholders are preserved as literal text in SSR and Node environments.
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
    • @tiptap/core@3.27.0
    • @tiptap/pm@3.27.0

@tiptap/extension-drag-handle

Patch Changes

  • 6270b99: Fix multi-block drags only removing the first block when nested mode is enabled
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
  • Updated dependencies [6270b99]
    • @tiptap/core@3.27.0
    • @tiptap/extension-collaboration@3.27.0
    • @tiptap/extension-node-range@3.27.0
    • @tiptap/pm@3.27.0
2026-06-11 20:48:11
tiptap

v3.26.1

v3.26.1

@tiptap/extension-node-range

Patch Changes

  • a38c9c0: Fixed drag-and-drop duplicating blocks during collaboration. When a remote collaborator edited the document mid-drag, dropping left an empty copy of the dragged block at its original position. This fix also requires a version of @tiptap/y-tiptap that restores node range selections across remote updates.
  • a38c9c0: Bump @tiptap/y-tiptap to version ^3.0.5
  • @tiptap/core@3.26.1
    • @tiptap/pm@3.26.1

@tiptap/extension-drag-handle

Patch Changes

  • a38c9c0: Restore the node range selection after dragging multiple blocks. Previously, dropping a multi-block drag left a text selection inside the moved content instead of keeping the dragged blocks selected.
  • a38c9c0: Bump @tiptap/y-tiptap to version ^3.0.5
  • Updated dependencies [a38c9c0]
  • Updated dependencies [a38c9c0]
    • @tiptap/extension-node-range@3.26.1
    • @tiptap/extension-collaboration@3.26.1
    • @tiptap/core@3.26.1
    • @tiptap/pm@3.26.1

@tiptap/extension-collaboration-caret

Patch Changes

  • a38c9c0: Bump @tiptap/y-tiptap to version ^3.0.5
  • @tiptap/core@3.26.1
    • @tiptap/pm@3.26.1

@tiptap/extension-collaboration

Patch Changes

  • a38c9c0: Bump @tiptap/y-tiptap to version ^3.0.5
  • @tiptap/core@3.26.1
    • @tiptap/pm@3.26.1
2026-06-05 18:18:30
tiptap

v3.26.0

@tiptap/extension-blockquote

Minor Changes

  • 7fb19eb: Backspace at the start of a non-first child of a blockquote now lifts that child out, splitting the blockquote around it. A second backspace at the start of a top-level textblock whose previous sibling is a blockquote merges the textblock's inline content into the blockquote's last textblock instead of pulling the paragraph back inside.

Patch Changes

  • @tiptap/core@3.26.0

@tiptap/server-ai-toolkit

Patch Changes

  • 7fb19eb: Only add hash attributes to nodes, not to marks.

@tiptap/extensions

Patch Changes

  • 7fb19eb: Fix the Selection extension highlighting beyond the selected text on multi-line selections: the native browser selection is now hidden while the editor is blurred, so only the styled .selection decoration is shown.
  • @tiptap/core@3.26.0
    • @tiptap/pm@3.26.0
2026-06-03 15:19:09
tiptap

v3.25.0

@tiptap/core

Patch Changes

  • 711c2e3: Fix: dragging an inline/resizable image within the editor no longer creates a duplicate

    When the Image extension was configured with inline: true or resize enabled, dragging an image within the editor could insert a duplicate at the drop position instead of moving it. This happened because the browser's native image drag behavior could populate dataTransfer.files, causing the FileHandler extension to intercept the drop before ProseMirror's internal move logic could run.

  • 711c2e3: Add clearable mark option (default true). unsetAllMarks now skips marks with clearable: false, so semantic marks like comments are not removed by "clear formatting".

  • 711c2e3: Add attrsEqual and marksEqual utility functions to @tiptap/core. attrsEqual compares two attribute objects for equality regardless of key ordering. marksEqual compares two arrays of mark objects by type and attributes using attrsEqual.

  • 711c2e3: Fix plain-text copy of table cell selections including content from unselected cells in between. Each selected range is now serialized independently and joined in document order, so dragging upward (reverse selection) also produces output in document order.

  • Updated dependencies [711c2e3]

    • @tiptap/pm@3.25.0

@tiptap/extension-file-handler

Patch Changes

  • 711c2e3: Fix: dragging an inline/resizable image within the editor no longer creates a duplicate

    When the Image extension was configured with inline: true or resize enabled, dragging an image within the editor could insert a duplicate at the drop position instead of moving it. This happened because the browser's native image drag behavior could populate dataTransfer.files, causing the FileHandler extension to intercept the drop before ProseMirror's internal move logic could run.

  • Updated dependencies [711c2e3]

  • Updated dependencies [711c2e3]

  • Updated dependencies [711c2e3]

  • Updated dependencies [711c2e3]

  • Updated dependencies [711c2e3]

    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0
    • @tiptap/extension-text-style@3.25.0

@tiptap/extension-image

Patch Changes

  • 711c2e3: Fix: dragging an inline/resizable image within the editor no longer creates a duplicate

    When the Image extension was configured with inline: true or resize enabled, dragging an image within the editor could insert a duplicate at the drop position instead of moving it. This happened because the browser's native image drag behavior could populate dataTransfer.files, causing the FileHandler extension to intercept the drop before ProseMirror's internal move logic could run.

  • 711c2e3: Fix HTMLAttributes not being applied to the editor DOM when resize is enabled. The addNodeView path was using only the resolved node attributes and skipping the user-configured HTMLAttributes option. Now it merges them consistently with how renderHTML already works.

  • Updated dependencies [711c2e3]

  • Updated dependencies [711c2e3]

  • Updated dependencies [711c2e3]

  • Updated dependencies [711c2e3]

    • @tiptap/core@3.25.0

@tiptap/extension-list

Minor Changes

  • 711c2e3: ListKeymap's Backspace handler now lifts the current list item before merging. At the start of a non-first list item, the item is lifted out of its wrapping list (splitting the list around it) instead of immediately joining its content into the previous item. A second Backspace then hits the existing "paragraph after a list" branch and merges the lifted textblock's content into the previous list's last item. Mirrors the two-step behavior introduced for blockquote in #7891.

Patch Changes

  • 711c2e3: Fix delete at the end of a list item with a branching nested sublist. Nested items are hoisted to the parent list instead of being node-selected and deleted on the next keypress.
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0

@tiptap/extensions

Minor Changes

  • 711c2e3: Allow emptyNodeClass in the Placeholder extension to accept a function that returns a dynamic CSS class name per node

Patch Changes

  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0

@tiptap/static-renderer

Patch Changes

  • 711c2e3: Fix blockquote markdown rendering to add a trailing newline so subsequent content is not incorrectly included in the blockquote
  • 711c2e3: Fix the types of the JSON static renderers (renderJSONContentToReactElement and renderJSONContentToString): you can now pass JSONContent directly and read node fields like node.text in your mappings without type errors or casts.
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0

@tiptap/extension-table

Patch Changes

  • 711c2e3: Fix HTMLAttributes not being applied to the <table> element when resizable is disabled (the default). The TableView node view (introduced in 3.23) bypassed renderHTML and never applied user-configured attributes like class or data-* to the rendered table element.
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0

@tiptap/pm

Patch Changes

  • 711c2e3: Bump prosemirror-tables to ^1.8.0 so findTable is available from @tiptap/pm, and align the related ProseMirror dependencies with the versions required by prosemirror-tables.

@tiptap/extension-unique-id

Patch Changes

  • 711c2e3: Fix memory leak when destroying an editor before the collaboration provider syncs. The synced listener registered in onCreate was only removed once the event fired, so destroying the editor first left the createIds closure (and the whole editor it captures) referenced by the shared provider. The listener is now also detached on destroy, so the editor can be garbage collected.
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0

@tiptap/extension-code

Patch Changes

  • 711c2e3: Fixed a bug where typing a character before an inline code markdown shortcut (e.g. a followed by backtick-delimited code) would delete the preceding character. The preceding character is now preserved.
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0

@tiptap/extension-collaboration-caret

Patch Changes

  • 711c2e3: Fix crash when awareness state value is null or undefined (e.g. after a client disconnects)
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0

@tiptap/extension-collaboration

Patch Changes

  • 711c2e3: Fixed onContentError not being triggered when invalid collaborative content is detected. The filterTransaction hook now allows the transaction through to keep ProseMirror state in sync with Yjs, ensuring the contentError event fires correctly.
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0

@tiptap/markdown

Patch Changes

  • 711c2e3: Fix backslash-escape handling in the Markdown parser and serializer. Parsing a backslash-escaped markdown character (e.g. \*, \_, \\) now correctly produces a literal text node, instead of silently dropping the character. On serialization, characters that have special meaning in markdown inline syntax (*, _, `, [, ], \, ~) are now backslash-escaped in non-code text nodes to prevent them from being misinterpreted as formatting delimiters when the output is parsed again.
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0

@tiptap/vue-3

Patch Changes

  • 711c2e3: Fix VueNodeViewRenderer thrashing the DOM when contentDOM is null for non-leaf nodes. The renderer now always creates a contentDOM element for non-leaf nodes (matching React's behavior), so ProseMirror has a valid element to render children into even when the NodeView component does not include NodeViewContent or renders it conditionally.
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0

@tiptap/vue-2

Patch Changes

  • 711c2e3: Fix VueNodeViewRenderer thrashing the DOM when contentDOM is null for non-leaf nodes. The renderer now always creates a contentDOM element for non-leaf nodes (matching React's behavior), so ProseMirror has a valid element to render children into even when the NodeView component does not include NodeViewContent or renders it conditionally.
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
  • Updated dependencies [711c2e3]
    • @tiptap/core@3.25.0
    • @tiptap/pm@3.25.0
2026-05-28 20:33:27
tiptap

v3.24.0

@tiptap/extension-collaboration-caret

Patch Changes

  • 7bd09b7: Fix memory leak when destroying an editor while the collaboration provider stays alive (e.g. multiple editors sharing one provider). The extension's awareness update listener is now removed on destroy, so the editor can be garbage collected.
  • Updated dependencies [7bd09b7]
    • @tiptap/pm@3.24.0
    • @tiptap/core@3.24.0

@tiptap/extension-collaboration

Patch Changes

  • 7bd09b7: Fix a memory leak where destroying an editor while its Y.Doc/provider stays alive (e.g. multiple editors sharing one provider) left the editor uncollectable. Yjs' UndoManager registered a doc.on('destroy', ...) listener that was never removed, keeping the UndoManager — and through it the whole editor — reachable from the long-lived doc. Fixed upstream in @tiptap/y-tiptap; this bumps the dependency to pull in the fix.
  • Updated dependencies [7bd09b7]
    • @tiptap/pm@3.24.0
    • @tiptap/core@3.24.0

@tiptap/server-ai-toolkit

Patch Changes

  • 7bd09b7: Exclude toText property when serializing the schema into a JSON object, because it is a function and functions are not serializable.

@tiptap/pm

Patch Changes

  • 7bd09b7: Add missing @tiptap/pm/inputrules export

@tiptap/extension-details

Patch Changes

  • 7bd09b7: Fix persisted details toggles when the details node is at the start of the document.
  • Updated dependencies [7bd09b7]
    • @tiptap/pm@3.24.0
    • @tiptap/core@3.24.0
    • @tiptap/extension-text-style@3.24.0

@tiptap/markdown

Patch Changes

  • 7bd09b7: Fix text inside unknown angle-bracket tags being silently swallowed during markdown parsing. HTML-like content such as <enter existing CID here if available> that does not map to any known element is now preserved as literal text instead of disappearing, which also prevents downstream contentMatchAt errors when complex schemas (Mention, Variable, Table) are in use.
  • Updated dependencies [7bd09b7]
    • @tiptap/pm@3.24.0
    • @tiptap/core@3.24.0

@tiptap/static-renderer

Patch Changes

  • 7bd09b7: Honor the textDirection editor option in renderToHTMLString, renderToMarkdown, and renderToReactElement, and omit null/undefined attribute values instead of serializing them as the literal string "null".
  • Updated dependencies [7bd09b7]
    • @tiptap/pm@3.24.0
    • @tiptap/core@3.24.0

@tiptap/extensions

Patch Changes

  • 7bd09b7: Fix placeholder flickering during collaborative editing and reduce scroll-time CPU usage by deferring viewport recomputation to rAF, adding an overscan margin, and throttling scroll updates
  • Updated dependencies [7bd09b7]
    • @tiptap/pm@3.24.0
    • @tiptap/core@3.24.0

@tiptap/extension-table-of-contents

Minor Changes

  • 7bd09b7: Add generateTocIds, a server-side utility that assigns id and data-toc-id attributes to anchor nodes in a Tiptap JSON document without needing an Editor instance.
2026-05-22 03:48:39
tiptap

v3.23.6

@tiptap/extension-drag-handle

Patch Changes

  • 937ff2e: DragHandle: Added dragImageProperties option to limit which CSS properties are cloned for the drag image. By default all ~300+ computed styles are copied; setting this to a subset (e.g. ['color', 'background-color', 'font-size']) reduces the cost when dragging selections with complex nodes.
  • Updated dependencies [937ff2e]
    • @tiptap/core@3.23.6
    • @tiptap/extension-collaboration@3.23.6
    • @tiptap/extension-node-range@3.23.6
    • @tiptap/pm@3.23.6

@tiptap/core

Patch Changes

  • 937ff2e: Fix deleteSelection to properly handle inline nodes with text* content. The selection is now expanded to include the entire inline node boundaries when deleting, preventing incorrect collapse of inline text nodes.
  • @tiptap/pm@3.23.6

@tiptap/extensions

Patch Changes

  • 937ff2e: Placeholder: Replaced full-document doc.descendants() traversal with a cursor-resolved fast path for the default config and viewport-limited scanning for the non-default config, significantly reducing decoration overhead on large documents.
  • Updated dependencies [937ff2e]
    • @tiptap/core@3.23.6
    • @tiptap/pm@3.23.6
2026-05-19 20:46:13
tiptap

v3.23.5

@tiptap/markdown

Patch Changes

  • 7bf0e73: Fix extra mark tokens after inline atom nodes during Markdown serialization
  • 7bf0e73: Fix adjacent marks of the same type with different attributes being merged during Markdown serialization
  • Updated dependencies [7bf0e73]
  • Updated dependencies [7bf0e73]
    • @tiptap/core@3.23.5
    • @tiptap/pm@3.23.5

@tiptap/core

Patch Changes

  • 7bf0e73: Fix $pos() returning correct node for non-text atom nodes instead of doc node
  • 7bf0e73: fix(nodeview): eliminate unnecessary re-renders, add opt-in position tracking NodeViews no longer re-render when decorations or position change without content changes. Added trackNodeViewPosition option — when enabled, the component re-renders on every position shift so calls to getPos() stay current in render output. Removed the internal nodeViewPositionRegistry. Added shallow prop comparison in ReactRenderer.updateProps().
  • @tiptap/pm@3.23.5

@tiptap/react

Patch Changes

  • 7bf0e73: Respect explicit immediatelyRender: true in client-side Next.js. Previously, when running under Next.js (window.next present), the immediatelyRender option was forced to false even when the user explicitly passed true, breaking client-only Next.js apps that rely on the editor existing on the first render. The hook now only forces false when actual SSR is detected (typeof window === 'undefined'), or when running under Next.js with no explicit value.
  • 7bf0e73: fix(nodeview): eliminate unnecessary re-renders, add opt-in position tracking NodeViews no longer re-render when decorations or position change without content changes. Added trackNodeViewPosition option — when enabled, the component re-renders on every position shift so calls to getPos() stay current in render output. Removed the internal nodeViewPositionRegistry. Added shallow prop comparison in ReactRenderer.updateProps().
  • Updated dependencies [7bf0e73]
  • Updated dependencies [7bf0e73]
    • @tiptap/core@3.23.5
    • @tiptap/pm@3.23.5

@tiptap/vue-2

Patch Changes

  • 7bf0e73: fix(nodeview): eliminate unnecessary re-renders, add opt-in position tracking NodeViews no longer re-render when decorations or position change without content changes. Added trackNodeViewPosition option — when enabled, the component re-renders on every position shift so calls to getPos() stay current in render output. Removed the internal nodeViewPositionRegistry. Added shallow prop comparison in ReactRenderer.updateProps().
  • Updated dependencies [7bf0e73]
  • Updated dependencies [7bf0e73]
    • @tiptap/core@3.23.5
    • @tiptap/pm@3.23.5

@tiptap/vue-3

Patch Changes

  • 7bf0e73: fix(nodeview): eliminate unnecessary re-renders, add opt-in position tracking NodeViews no longer re-render when decorations or position change without content changes. Added trackNodeViewPosition option — when enabled, the component re-renders on every position shift so calls to getPos() stay current in render output. Removed the internal nodeViewPositionRegistry. Added shallow prop comparison in ReactRenderer.updateProps().
  • Updated dependencies [7bf0e73]
  • Updated dependencies [7bf0e73]
    • @tiptap/core@3.23.5
    • @tiptap/pm@3.23.5

@tiptap/extension-drag-handle-react

Patch Changes

  • 7bf0e73: Fix missing forwarding of getReferencedVirtualElement in DragHandle React component
  • Updated dependencies [7bf0e73]
  • Updated dependencies [7bf0e73]
    • @tiptap/react@3.23.5
    • @tiptap/extension-drag-handle@3.23.5
    • @tiptap/pm@3.23.5