Upgrading @tiptap/extension-placeholder 2 to 3
Breaking2.27.3 → 3.32.2Breaking18Security11Platform2New111Changed309Fixed322Other42
Fetching 151 releases from GitHub…149 / 151
BreakingUpgrade verdict
13 breaking changes and 2 platform requirement changes and 11 security fixes.
In plain terms
- The package no longer ships a browser-global build; you must bundle it yourself if you relied on that.
- Custom configuration keys now need to be declared in TypeScript before use.
- Setting or clearing content now triggers update events, which may affect listeners.
- Menus now use a different positioning library, so menu configuration and dependencies must be updated.
Must act Top 5 of 26 that need code or config changes
What you must change
Breaking13
Switches to tsup for bundling, so UMD builds are no longer supported.
tsupNode, Mark, and Extension configs no longer allow arbitrary keys unless their TypeScript interfaces are extended.
NodeMarkExtensionclearContent and setContent now emit updates by default.
clearContentsetContentReplaces Tippy.js with Floating UI across menu-related extensions, removing
tippyOptions in favor of an options prop.FloatingMenuBubbleMenuMentionSuggestiontippyOptionsoptions@floating-ui/domRenames the History extension to UndoRedo.
HistoryUndoRedoRenames the CollaborationCursor extension to CollaborationCaret.
CollaborationCursorCollaborationCaretRenames @tiptap/extension-utils to @tiptap/extensions.
@tiptap/extension-utils@tiptap/extensionsRemoves tippy.js and replaces it with Floating UI.
tippy.jsFloating UIChanges prop types of the Tiptap component so that either the
editor or the instance field is required.TiptapeditorinstanceMoves BubbleMenu and FloatingMenu to a separate
@tiptap/react/menus entrypoint to keep floating-ui optional.BubbleMenuFloatingMenu@tiptap/react/menusgetPos now returns number | undefined to reflect runtime reality.
getPoseditor.storage becomes per-editor instance and strongly typed.
editor.storageVueNodeViewRenderer returns null for contentDOM when the node is not a leaf and no NodeViewContent is rendered.
VueNodeViewRenderercontentDOMNodeViewContentSecurity11
Prevents extra CSS declarations from being rendered from editor content.
Prevents extra CSS declarations from being rendered from editor content.
Ignores potentially unsafe color values received from other collaboration users.
Bumps prosemirror-view to ^1.42.3, fixing an XSS vulnerability where pasting crafted HTML could run arbitrary JavaScript.
prosemirror-viewFixes a denial-of-service risk where crafted block or inline Markdown attributes could consume excessive CPU and block the event loop.
Prevents untrusted HTML attributes from changing an object's prototype when merged with mergeAttributes.
mergeAttributesEscapes HTML string renderer text content and attribute values to prevent injected markup from untrusted content.
Fixes CVE-2025-62410 by updating happy-dom to ^20.0.2.
happy-domBumps happy-dom from ^18.0.1 to ^20.0.0 in @tiptap/html to fix CVE-2025-61927.
happy-dom@tiptap/htmlBumps linkifyjs to the latest version to address a recently discovered prototype pollution vulnerability.
linkifyjsFixes the Link extension's commands not respecting XSS prevention via unallowed protocols.
Platform2
Adds @tiptap/pm as a peer dependency so bundlers resolve ProseMirror packages from the app instead of duplicating prosemirror-model.
@tiptap/pmprosemirror-model@tiptap/extension-blockquoteUpdates the @tiptap/pm dependency to 3.22.4.
@tiptap/pm