PackageTrack

npm · #3668

@tiptap/extension-placeholder

3.30.5ueberdosis/tiptap

placeholder extension for tiptap

Release timeline

352 releases since 2021
202120222023202420252026

Releases

  1. 3.10.130 Oct 2025
    Release notes

    v3.10.1

    @tiptap/core

    Patch Changes

    • Use correct ResizableNodeView class name
    Open source →
    Release notes

    @tiptap/core

    Patch Changes

    • Use correct ResizableNodeView class name
    Open source →
  2. 3.10.030 Oct 2025
    Release notes

    Releases

    v3.10.0

    @tiptap/core

    Minor Changes

    • Add a new ResizableNodeview NodeView to core that wraps elements (images, videos, iframes) with configurable resize handles. It provides live onResize/onCommit callbacks, min/max constraints, aspect-ratio support, and styling hooks (class names + data attributes) to improve UX when resizing media inside the editor.

    • the addNodeView function can now return null to dynamically disable rendering of a node view

      While this should not directly cause any issues, it's noteworthy as it still could affect some behavior in some edge cases.

    @tiptap/extension-image

    Minor Changes

    • Added a new resize option that allows images to be resized. The option adds resize handlers to images allowing users to manually resize images via drag and drop or touch
    Open source →
    Release notes

    @tiptap/core

    Minor Changes

    • Add a new ResizableNodeview NodeView to core that wraps elements (images, videos, iframes) with configurable resize handles. It provides live onResize/onCommit callbacks, min/max constraints, aspect-ratio support, and styling hooks (class names + data attributes) to improve UX when resizing media inside the editor.

    • the addNodeView function can now return null to dynamically disable rendering of a node view

      While this should not directly cause any issues, it's noteworthy as it still could affect some behavior in some edge cases.

    @tiptap/extension-image

    Minor Changes

    • Added a new resize option that allows images to be resized. The option adds resize handlers to images allowing users to manually resize images via drag and drop or touch
    Open source →
  3. 3.9.129 Oct 2025
    Release notes

    Releases

    v3.9.1

    @tiptap/extension-table

    Patch Changes

    • Add a renderWrapper option to the Table extension so consumers can customize whether the table wrapper for the resizable node view should be rendered in non-editable mode as well.
    Open source →
    Release notes

    @tiptap/extension-table

    Patch Changes

    • Add a renderWrapper option to the Table extension so consumers can customize whether the table wrapper for the resizable node view should be rendered in non-editable mode as well.
    Open source →
  4. 3.9.028 Oct 2025
    Release notes

    Releases

    v3.9.0

    @tiptap/vue-3

    Patch Changes

    • Fix attribute forwarding for BubbleMenu and FloatingMenu Vue 3 components to allow setting z-index and other HTML attributes

    @tiptap/extension-hard-break

    Patch Changes

    • Ensure that markdown hard breaks (two spaces followed by a newline) are parsed so they render as line breaks (<br>) in the editor when using contentType: 'markdown'.

      Fixes #7107

    @tiptap/extension-unique-id

    Minor Changes

    • Add updateDocument option to disable document updates caused by the Unique ID extension.

    @tiptap/core

    Patch Changes

    • Only remove injected CSS on unmount if no other editors are in the document (fixes #6836)

    @tiptap/extension-drag-handle

    Patch Changes

    • Replace DOM traversal with browser's native elementsFromPoint for better performance.

      • Use elementsFromPoint instead of querySelectorAll
      • Add clampToContent helper for coordinate boundary validation
      • Add findClosestTopLevelBlock helper for efficient block lookup
      • Future-proof for root-level mousemove listeners

    @tiptap/react

    Patch Changes

    • Prevent Bubble Menu plugin from re-loading every time the BubbleMenu component re-renders. Reverts a regression introduced in v3.6.3, in PR #7028.
    Open source →
    Release notes

    @tiptap/vue-3

    Patch Changes

    • Fix attribute forwarding for BubbleMenu and FloatingMenu Vue 3 components to allow setting z-index and other HTML attributes

    @tiptap/extension-hard-break

    Patch Changes

    • Ensure that markdown hard breaks (two spaces followed by a newline) are parsed so they render as line breaks (<br>) in the editor when using contentType: 'markdown'.

      Fixes #7107

    @tiptap/extension-unique-id

    Minor Changes

    • Add updateDocument option to disable document updates caused by the Unique ID extension.

    @tiptap/core

    Patch Changes

    • Only remove injected CSS on unmount if no other editors are in the document (fixes #6836)

    @tiptap/extension-drag-handle

    Patch Changes

    • Replace DOM traversal with browser's native elementsFromPoint for better performance.

      • Use elementsFromPoint instead of querySelectorAll
      • Add clampToContent helper for coordinate boundary validation
      • Add findClosestTopLevelBlock helper for efficient block lookup
      • Future-proof for root-level mousemove listeners

    @tiptap/react

    Patch Changes

    • Prevent Bubble Menu plugin from re-loading every time the BubbleMenu component re-renders. Reverts a regression introduced in v3.6.3, in PR #7028.
    Open source →
  5. 3.8.024 Oct 2025
    Release notes

    Releases

    v3.8.0

    @tiptap/[email protected]

    Minor Changes

    • 23e516e: Add updateDocument option to disable document updates caused by the Unique ID extension.

    @tiptap/[email protected]

    Patch Changes

    • f3770af: Prevent Bubble Menu plugin from re-loading every time the BubbleMenu component re-renders. Reverts a regression introduced in v3.6.3, in PR #7028.
    Open source →
    Release notes

    @tiptap/extension-unique-id

    Minor Changes

    • Add updateDocument option to disable document updates caused by the Unique ID extension.

    @tiptap/react

    Patch Changes

    • Prevent Bubble Menu plugin from re-loading every time the BubbleMenu component re-renders. Reverts a regression introduced in v3.6.3, in PR #7028.
    Open source →
  6. 3.7.216 Oct 2025
    Release notes

    Releases

    v3.7.2

    @tiptap/html

    Patch Changes

    Open source →
    Release notes

    @tiptap/html

    Patch Changes

    Open source →
  7. 3.7.115 Oct 2025
    Release notes

    Releases

    v3.7.1

    @tiptap/markdown

    Patch Changes

    • Editors will not throw an error anymore when content is an empty string and contentType is markdown
    • Remove invalid server configuration from package.json
    Open source →
    Release notes

    @tiptap/markdown

    Patch Changes

    • Editors will not throw an error anymore when content is an empty string and contentType is markdown
    • Remove invalid server configuration from package.json
    Open source →
  8. 3.7.014 Oct 2025
    Release notes

    Releases

    v3.7.0

    @tiptap/core

    Minor Changes

    • All commands and their corresponding TypeScript types are now exported from @tiptap/core so they can be imported and referenced directly by consumers. This makes it easier to build typed helpers, extensions, and tests that depend on the command signatures.

      Why:

      • Previously some command option types were only available as internal types or scattered across files, which made it awkward for downstream users to import and reuse them.
      import { commands } from '@tiptap/core'
      

      Notes:

      • This is a non-breaking, additive change. It improves ergonomics for TypeScript consumers.
      • If you rely on previously private/internal types, prefer the exported types from @tiptap/core going forward.
    • Add comprehensive bidirectional markdown support to Tiptap through a new @tiptap/markdown package and Markdown utilities in @tiptap/core.

      New Package: @tiptap/markdown - A new official extension that provides full Markdown parsing and serialization capabilities using MarkedJS as the underlying Markdown parser.

      Core Features:

      Extension API

      • Markdown Extension: Main extension that adds Markdown support to your editor
      • MarkdownManager: Core engine for parsing and serializing Markdown
        • Parse Markdown strings to Tiptap JSON: editor.markdown.parse(markdown)
        • Serialize Tiptap JSON to Markdown: editor.markdown.serialize(json)
        • Access to underlying marked.js instance: editor.markdown.instance

      Editor Methods

      • editor.getMarkdown(): Serialize current editor content to Markdown string
      • editor.markdown: Access to MarkdownManager instance for advanced operations

      Editor Options:

      • contentType: Control the type of content that is inserted into the editor. Can be json, html or markdown - defaults to json and will automatically detect invalid content types (like JSON when it is actually Markdown).
        new Editor({
          content: '# Hello World',
          contentType: 'markdown'
        })
        

      Command Options: All content commands now support an contentType option:

      • setContent(markdown, { contentType: 'markdown' }): Replace editor content with markdown
      • insertContent(markdown, { contentType: 'markdown' }): Insert markdown at cursor position
      • insertContentAt(position, markdown, { contentType: 'markdown' }): Insert Markdown at specific position

      For more, check the documentation.

    Patch Changes

    • The extension manager now provides a new property baseExtensions that contains an unflattened array of extensions

    @tiptap/markdown

    Minor Changes

    • Add comprehensive bidirectional markdown support to Tiptap through a new @tiptap/markdown package and Markdown utilities in @tiptap/core.

      New Package: @tiptap/markdown - A new official extension that provides full Markdown parsing and serialization capabilities using MarkedJS as the underlying Markdown parser.

      Core Features:

      Extension API

      • Markdown Extension: Main extension that adds Markdown support to your editor
      • MarkdownManager: Core engine for parsing and serializing Markdown
        • Parse Markdown strings to Tiptap JSON: editor.markdown.parse(markdown)
        • Serialize Tiptap JSON to Markdown: editor.markdown.serialize(json)
        • Access to underlying marked.js instance: editor.markdown.instance

      Editor Methods

      • editor.getMarkdown(): Serialize current editor content to Markdown string
      • editor.markdown: Access to MarkdownManager instance for advanced operations

      Editor Options:

      • contentType: Control the type of content that is inserted into the editor. Can be json, html or markdown - defaults to json and will automatically detect invalid content types (like JSON when it is actually Markdown).
        new Editor({
          content: '# Hello World',
          contentType: 'markdown'
        })
        

      Command Options: All content commands now support an contentType option:

      • setContent(markdown, { contentType: 'markdown' }): Replace editor content with markdown
      • insertContent(markdown, { contentType: 'markdown' }): Insert markdown at cursor position
      • insertContentAt(position, markdown, { contentType: 'markdown' }): Insert Markdown at specific position

      For more, check the documentation.

    @tiptap/extension-link

    Patch Changes

    • Paste Handlers and onPaste plugin now respect shouldAutoLink/validate options

    @tiptap/extensions

    Patch Changes

    • Make the TrailingNode extension's node option optional and derive the default node type from the editor schema when available.

      Previously the extension used a hard-coded 'paragraph' default and the node option was required in the TypeScript definitions. This change:

      • makes node optional in the options type,
      • prefers the editor schema's top node default type when resolving the trailing node, and
      • falls back to the configured option or 'paragraph' as a last resort.

      This fixes cases where projects use a different top-level default node and prevents the extension from inserting an incorrect trailing node type.

    Open source →
    Release notes

    @tiptap/core

    Minor Changes

    • All commands and their corresponding TypeScript types are now exported from @tiptap/core so they can be imported and referenced directly by consumers. This makes it easier to build typed helpers, extensions, and tests that depend on the command signatures.

      Why:

      • Previously some command option types were only available as internal types or scattered across files, which made it awkward for downstream users to import and reuse them.
      import { commands } from '@tiptap/core'
      

      Notes:

      • This is a non-breaking, additive change. It improves ergonomics for TypeScript consumers.
      • If you rely on previously private/internal types, prefer the exported types from @tiptap/core going forward.
    • Add comprehensive bidirectional markdown support to Tiptap through a new @tiptap/markdown package and Markdown utilities in @tiptap/core.

      New Package: @tiptap/markdown - A new official extension that provides full Markdown parsing and serialization capabilities using MarkedJS as the underlying Markdown parser.

      Core Features:

      Extension API

      • Markdown Extension: Main extension that adds Markdown support to your editor
      • MarkdownManager: Core engine for parsing and serializing Markdown
        • Parse Markdown strings to Tiptap JSON: editor.markdown.parse(markdown)
        • Serialize Tiptap JSON to Markdown: editor.markdown.serialize(json)
        • Access to underlying marked.js instance: editor.markdown.instance

      Editor Methods

      • editor.getMarkdown(): Serialize current editor content to Markdown string
      • editor.markdown: Access to MarkdownManager instance for advanced operations

      Editor Options:

      • contentType: Control the type of content that is inserted into the editor. Can be json, html or markdown - defaults to json and will automatically detect invalid content types (like JSON when it is actually Markdown).
        new Editor({
          content: '# Hello World',
          contentType: 'markdown',
        })
        

      Command Options: All content commands now support an contentType option:

      • setContent(markdown, { contentType: 'markdown' }): Replace editor content with markdown
      • insertContent(markdown, { contentType: 'markdown' }): Insert markdown at cursor position
      • insertContentAt(position, markdown, { contentType: 'markdown' }): Insert Markdown at specific position

      For more, check the documentation.

    Patch Changes

    • The extension manager now provides a new property baseExtensions that contains an unflattened array of extensions

    @tiptap/markdown

    Minor Changes

    • Add comprehensive bidirectional markdown support to Tiptap through a new @tiptap/markdown package and Markdown utilities in @tiptap/core.

      New Package: @tiptap/markdown - A new official extension that provides full Markdown parsing and serialization capabilities using MarkedJS as the underlying Markdown parser.

      Core Features:

      Extension API

      • Markdown Extension: Main extension that adds Markdown support to your editor
      • MarkdownManager: Core engine for parsing and serializing Markdown
        • Parse Markdown strings to Tiptap JSON: editor.markdown.parse(markdown)
        • Serialize Tiptap JSON to Markdown: editor.markdown.serialize(json)
        • Access to underlying marked.js instance: editor.markdown.instance

      Editor Methods

      • editor.getMarkdown(): Serialize current editor content to Markdown string
      • editor.markdown: Access to MarkdownManager instance for advanced operations

      Editor Options:

      • contentType: Control the type of content that is inserted into the editor. Can be json, html or markdown - defaults to json and will automatically detect invalid content types (like JSON when it is actually Markdown).
        new Editor({
          content: '# Hello World',
          contentType: 'markdown',
        })
        

      Command Options: All content commands now support an contentType option:

      • setContent(markdown, { contentType: 'markdown' }): Replace editor content with markdown
      • insertContent(markdown, { contentType: 'markdown' }): Insert markdown at cursor position
      • insertContentAt(position, markdown, { contentType: 'markdown' }): Insert Markdown at specific position

      For more, check the documentation.

    @tiptap/extension-link

    Patch Changes

    • Paste Handlers and onPaste plugin now respect shouldAutoLink/validate options

    @tiptap/extensions

    Patch Changes

    • Make the TrailingNode extension's node option optional and derive the default node type from the editor schema when available.

      Previously the extension used a hard-coded 'paragraph' default and the node option was required in the TypeScript definitions. This change:

      • makes node optional in the options type,
      • prefers the editor schema's top node default type when resolving the trailing node, and
      • falls back to the configured option or 'paragraph' as a last resort.

      This fixes cases where projects use a different top-level default node and prevents the extension from inserting an incorrect trailing node type.

    Open source →
  9. 3.6.714 Oct 2025
    Release notes

    Releases

    v3.6.7

    @tiptap/html

    Patch Changes

    • Fix CVE-2025-61927 by bumping happy-dom to 20.0.0

      Bumps the transitive/dev dependency happy-dom from ^18.0.1 → ^20.0.0 in @tiptap/html to address CVE-2025-61927. This is a dependency/security-only change and does not modify any public APIs.

      Why:

      • happy-dom released a security fix for CVE-2025-61927; updating prevents the vulnerability being pulled into consumers that depend on @tiptap/html.
    Open source →
    Release notes

    @tiptap/html

    Patch Changes

    • Fix CVE-2025-61927 by bumping happy-dom to 20.0.0

      Bumps the transitive/dev dependency happy-dom from ^18.0.1 → ^20.0.0 in @tiptap/html to address CVE-2025-61927. This is a dependency/security-only change and does not modify any public APIs.

      Why:

      • happy-dom released a security fix for CVE-2025-61927; updating prevents the vulnerability being pulled into consumers that depend on @tiptap/html.
    Open source →
  10. 3.6.69 Oct 2025
    Release notes

    Releases

    v3.6.6

    @tiptap/extension-floating-menu

    Patch Changes

    • Fixed a problem where the position of a menu is not updated on creation when shouldShow is true

    @tiptap/extension-bubble-menu

    Patch Changes

    • Fixed a problem where the position of a menu is not updated on creation when shouldShow is true

    @tiptap/vue-3

    Patch Changes

    • Fixed a bug that caused conditionally rendered bubble menus not to be attached to the DOM correctly
    Open source →
    Release notes

    @tiptap/extension-floating-menu

    Patch Changes

    • Fixed a problem where the position of a menu is not updated on creation when shouldShow is true

    @tiptap/extension-bubble-menu

    Patch Changes

    • Fixed a problem where the position of a menu is not updated on creation when shouldShow is true

    @tiptap/vue-3

    Patch Changes

    • Fixed a bug that caused conditionally rendered bubble menus not to be attached to the DOM correctly
    Open source →
  11. 3.6.53 Oct 2025
    Release notes

    Releases

    v3.6.5

    @tiptap/extension-horizontal-rule

    Patch Changes

    • Added nextNodeType option to horizontal-rule extension, allowing users to specify which node type should be inserted after a horizontal rule

    @tiptap/core

    Patch Changes

    • Editors can now emit transaction and update events before being mounted. This means smoother state handling and instant feedback from editors, even when they're not in the DOM.
    Open source →
    Release notes

    @tiptap/extension-horizontal-rule

    Patch Changes

    • Added nextNodeType option to horizontal-rule extension, allowing users to specify which node type should be inserted after a horizontal rule

    @tiptap/html

    Patch Changes

    • Fix: Clean up happy-dom window instance fixing a memory leak caused by unclosed happy-dom windows

    @tiptap/core

    Patch Changes

    • Editors can now emit transaction and update events before being mounted. This means smoother state handling and instant feedback from editors, even when they're not in the DOM.
    Open source →
  12. 3.6.43 Oct 2025
    Release notes

    Releases

    v3.6.4

    @tiptap/html

    Patch Changes

    • Fix: Clean up happy-dom window instance fixing a memory leak caused by unclosed happy-dom windows
    Open source →
    Release notes

    @tiptap/html

    Patch Changes

    • Fix: Clean up happy-dom window instance fixing a memory leak caused by unclosed happy-dom windows
    Open source →
  13. 3.6.32 Oct 2025
    Release notes

    Releases

    v3.6.3

    @tiptap/react

    Patch Changes

    • Updated the React FloatingMenu plugin hook dependencies to match the BubbleMenu behavior. The FloatingMenu will now respond to changes in appendTo, pluginKey, shouldShow, and options.
    • Resolved an issue where the React BubbleMenu did not update when FloatingUI option props changed after initial mount. The BubbleMenu now correctly responds to updated option props.
    • Improved the BubbleMenu's usability by ensuring the appendTo prop passed to the React BubbleMenu component is now correctly forwarded to the underlying bubble menu plugin. This fix allows developers to customize where the BubbleMenu is attached in the DOM, helping resolve issues with positioning and portal setups in React apps.

    @tiptap/extensions

    Patch Changes

    • The Selection extension now uses the correct SelectionOptions type, providing accurate typings for its options.

    @tiptap/extension-code-block

    Patch Changes

    • Configuration options for the CodeBlock extension now support null and undefined values. This makes custom setups more flexible and avoids unnecessary type errors when omitting optional overrides. All existing default values and fallback logic remain in place - no breaking changes for existing code.

    @tiptap/core

    Patch Changes

    • Refined the JSONContent.attrs definition to exactly mirror the structure returned by editor.getJSON(). This ensures strict type safety and consistency between the editor output and the expected type, eliminating errors caused by mismatched attribute signatures.

    @tiptap/extension-table-of-contents

    Patch Changes

    • Improve typings by inferring the storage type for the Table of Contents extension

    @tiptap/extension-floating-menu

    Patch Changes

    • You can now pass a callback to the appendTo option in the floating and bubble menu extensions. The callback must return an element synchronously, so menus can be appended to elements that are created dynamically.

    @tiptap/extension-bubble-menu

    Patch Changes

    • You can now pass a callback to the appendTo option in the floating and bubble menu extensions. The callback must return an element synchronously, so menus can be appended to elements that are created dynamically.
    Open source →
    Release notes

    @tiptap/react

    Patch Changes

    • Updated the React FloatingMenu plugin hook dependencies to match the BubbleMenu behavior. The FloatingMenu will now respond to changes in appendTo, pluginKey, shouldShow, and options.
    • Resolved an issue where the React BubbleMenu did not update when FloatingUI option props changed after initial mount. The BubbleMenu now correctly responds to updated option props.
    • Improved the BubbleMenu's usability by ensuring the appendTo prop passed to the React BubbleMenu component is now correctly forwarded to the underlying bubble menu plugin. This fix allows developers to customize where the BubbleMenu is attached in the DOM, helping resolve issues with positioning and portal setups in React apps.

    @tiptap/extensions

    Patch Changes

    • The Selection extension now uses the correct SelectionOptions type, providing accurate typings for its options.

    @tiptap/extension-code-block

    Patch Changes

    • Configuration options for the CodeBlock extension now support null and undefined values. This makes custom setups more flexible and avoids unnecessary type errors when omitting optional overrides. All existing default values and fallback logic remain in place - no breaking changes for existing code.

    @tiptap/core

    Patch Changes

    • Refined the JSONContent.attrs definition to exactly mirror the structure returned by editor.getJSON(). This ensures strict type safety and consistency between the editor output and the expected type, eliminating errors caused by mismatched attribute signatures.

    @tiptap/extension-table-of-contents

    Patch Changes

    • Improve typings by inferring the storage type for the Table of Contents extension

    @tiptap/extension-floating-menu

    Patch Changes

    • You can now pass a callback to the appendTo option in the floating and bubble menu extensions. The callback must return an element synchronously, so menus can be appended to elements that are created dynamically.

    @tiptap/extension-bubble-menu

    Patch Changes

    • You can now pass a callback to the appendTo option in the floating and bubble menu extensions. The callback must return an element synchronously, so menus can be appended to elements that are created dynamically.
    Open source →
  14. 3.6.229 Sept 2025
    Release notes

    Releases

    v3.6.2

    @tiptap/extension-bubble-menu

    Patch Changes

    • Fix a bug where the bubble menu could throw an error if the editor was destroyed while the plugin was cleaning up.
    Open source →
    Release notes

    @tiptap/extension-bubble-menu

    Patch Changes

    • Fix a bug where the bubble menu could throw an error if the editor was destroyed while the plugin was cleaning up.
    Open source →
  15. 3.6.125 Sept 2025
    Release notes

    Releases

    v3.6.1

    @tiptap/react

    Patch Changes

    • Hotfix: Fix a crash in the React package that could occur during mounting/unmounting when the editor wasn't fully initialized. This prevents a runtime error and improves stability.
    Open source →
    Release notes

    @tiptap/react

    Patch Changes

    • Hotfix: Fix a crash in the React package that could occur during mounting/unmounting when the editor wasn't fully initialized. This prevents a runtime error and improves stability.
    Open source →
  16. 3.6.025 Sept 2025
    Release notes

    Releases

    v3.6.0

    @tiptap/core

    Patch Changes

    • Improve typing and docs for EditorOptions.element to reflect all supported mounting modes and align behavior across adapters.

      • element now accepts:
        • Element: the editor is appended inside the given element.
        • { mount: HTMLElement }: the editor is mounted directly to mount (no extra wrapper).
        • (editorEl: HTMLElement) => void: a function that receives the editor element so you can place it anywhere in the DOM.
        • null: no automatic mounting.

    @tiptap/extension-table

    Patch Changes

    • Parse cell colwidth from nearest <colgroup> when missing on the cell

      When importing HTML, table column widths are often declared on a surrounding <colgroup> rather than on each <td>. Previously, tableCell only read the colwidth attribute from the cell itself and would lose width information in that case. The implementation now falls back to reading the corresponding <col>'s width from the table's <colgroup> using the cell's index.

      This is a non-breaking bugfix that preserves layout information when HTML uses <colgroup>. Consider adding a small demo or unit test to assert colwidth is preserved for cells when only the <colgroup> contains width attributes.

    • Fixes table wrapper replacement and lost selections when resizable: true.

      TableView.ignoreMutation now ignores attribute/childList/characterData mutations that occur inside the table wrapper but outside the editable contentDOM, preventing wrapper re-creation during resize interactions so selections (e.g. mergeCells()) are preserved.

      No API or breaking changes.

    @tiptap/extension-bubble-menu

    Patch Changes

    • Remove recently added updateBubbleMenuPosition method because it would not work in the React and Vue versions of the BubbleMenu, only in the vanilla extension. And that would confuse developers.

      Write the transactionHandler method as an arrow function because arrow functions have no this, so the this remains the instance of the BubbleMenuView class.

    @tiptap/extension-unique-id

    Minor Changes

    • Create a utility to add unique IDs to a document in the server

      The utility is called generateUniqueIds and is exported from the @tiptap/extension-unique-id package.

      It has the same functionality as the UniqueID extension, but without the need to create an Editor instance. This lets you add unique IDs to the document in the server.

      It takes the following parameters:

      • doc: The Tiptap JSON document to add unique IDs to.
      • extensions: The extensions to use. Must include the UniqueID extension.

      It returns the updated Tiptap JSON document, with the unique IDs added to the nodes.

    @tiptap/vue-3

    Minor Changes

    • Pass attrs through Vue 3 menus
    Open source →
    Release notes

    @tiptap/core

    Patch Changes

    • Improve typing and docs for EditorOptions.element to reflect all supported mounting modes and align behavior across adapters.

      • element now accepts:
        • Element: the editor is appended inside the given element.
        • { mount: HTMLElement }: the editor is mounted directly to mount (no extra wrapper).
        • (editorEl: HTMLElement) => void: a function that receives the editor element so you can place it anywhere in the DOM.
        • null: no automatic mounting.

    @tiptap/extension-table

    Patch Changes

    • Parse cell colwidth from nearest <colgroup> when missing on the cell

      When importing HTML, table column widths are often declared on a surrounding <colgroup> rather than on each <td>. Previously, tableCell only read the colwidth attribute from the cell itself and would lose width information in that case. The implementation now falls back to reading the corresponding <col>'s width from the table's <colgroup> using the cell's index.

      This is a non-breaking bugfix that preserves layout information when HTML uses <colgroup>. Consider adding a small demo or unit test to assert colwidth is preserved for cells when only the <colgroup> contains width attributes.

    • Fixes table wrapper replacement and lost selections when resizable: true.

      TableView.ignoreMutation now ignores attribute/childList/characterData mutations that occur inside the table wrapper but outside the editable contentDOM, preventing wrapper re-creation during resize interactions so selections (e.g. mergeCells()) are preserved.

      No API or breaking changes.

    @tiptap/extension-bubble-menu

    Patch Changes

    • Remove recently added updateBubbleMenuPosition method because it would not work in the React and Vue versions of the BubbleMenu, only in the vanilla extension. And that would confuse developers.

      Write the transactionHandler method as an arrow function because arrow functions have no this, so the this remains the instance of the BubbleMenuView class.

    @tiptap/extension-unique-id

    Minor Changes

    • Create a utility to add unique IDs to a document in the server

      The utility is called generateUniqueIds and is exported from the @tiptap/extension-unique-id package.

      It has the same functionality as the UniqueID extension, but without the need to create an Editor instance. This lets you add unique IDs to the document in the server.

      It takes the following parameters:

      • doc: The Tiptap JSON document to add unique IDs to.
      • extensions: The extensions to use. Must include the UniqueID extension.

      It returns the updated Tiptap JSON document, with the unique IDs added to the nodes.

    @tiptap/vue-3

    Minor Changes

    • Pass attrs through Vue 3 menus
    Open source →
  17. 3.5.325 Sept 2025
    Release notes

    Releases

    v3.5.3

    @tiptap/extension-text-style

    Patch Changes

    • Merge nested span styles only for immediate child spans and guard style values.

      • Replace non-standard/fragile selector approach and avoid re-processing nested <span> elements.
      • Read parent style once, merge with child style only when present, and remove empty style attributes.
      • Improves parsing performance and robustness in browsers, Node/JSDOM and tests.

      This change fixes a bug that could cause exponential work when parsing deeply nested <span> elements - in extreme cases that could make the tab unresponsive or crash the renderer. It is a bugfix / performance improvement with no public API changes.

    Open source →
    Release notes

    @tiptap/extension-text-style

    Patch Changes

    • Merge nested span styles only for immediate child spans and guard style values.

      • Replace non-standard/fragile selector approach and avoid re-processing nested <span> elements.
      • Read parent style once, merge with child style only when present, and remove empty style attributes.
      • Improves parsing performance and robustness in browsers, Node/JSDOM and tests.

      This change fixes a bug that could cause exponential work when parsing deeply nested <span> elements - in extreme cases that could make the tab unresponsive or crash the renderer. It is a bugfix / performance improvement with no public API changes.

    Open source →
  18. 3.5.224 Sept 2025
    Release notes

    Releases

    v3.5.2

    @tiptap/react

    Patch Changes

    • Tiptap will now correctly insert a React MarkViews' content into the correct element within MarkViewContent component
    Open source →
    Release notes

    @tiptap/react

    Patch Changes

    • Tiptap will now correctly insert a React MarkViews' content into the correct element within MarkViewContent component
    Open source →
  19. 3.5.123 Sept 2025
    Release notes

    @tiptap/extension-floating-menu

    Patch Changes

    • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

    @tiptap/react

    Patch Changes

    • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

    @tiptap/vue-2

    Patch Changes

    • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

    @tiptap/vue-3

    Patch Changes

    • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.
    Open source →
    Release notes

    @tiptap/extension-floating-menu

    Patch Changes

    • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

    @tiptap/react

    Patch Changes

    • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

    @tiptap/vue-2

    Patch Changes

    • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

    @tiptap/vue-3

    Patch Changes

    • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

    2.4.0 (2024-05-14)

    Bug Fixes

    • core: configure should use the parent of the current instance, to avoid duplication (#5147) (4db463c)
    • fix ts error for BubbleMenu and FloatingMenu in @tiptap/react (#5126) (baff4af)

    Features

    Open source →
  20. 3.5.023 Sept 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Minor Changes

    • 8fa5955: Add updateBubbleMenuPosition command to update position of bubble menu. This command lets developers programmatically update the position of the bubble menu in response to certain events (for example, when the bubble menu is resized).

    @tiptap/[email protected]

    Minor Changes

    • daa51c4: Add getReferencedVirtualElement option to the drag handle extension to customize the position of the drag handle.

    Patch Changes

    • 3eb5360: Fixed findElementNextToCoords returning incorrect nodes when the position is at a node boundary. The function now correctly identifies leaf nodes (like images, horizontal rules) by checking $pos.nodeAfter before falling back to the parent node lookup.

    @tiptap/[email protected]

    Patch Changes

    • d56c9dd: Fix Vue2 menus visibility bug.
    Open source →
  21. 3.4.622 Sept 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 968016f: Added support for the undoable option in InputRules (matching ProseMirror’s implementation).

      • When false, the change will not be tracked as undoable.
      • Default remains true for backward compatibility.

      This brings Tiptap’s InputRules behavior in line with ProseMirror and gives developers finer control over undo functionality.

    Open source →
  22. 3.4.522 Sept 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 0226d42: Fix an issue where injected CSS was not mounted correctly when the editor instance was mounted. The fix ensures CSS injected by the editor is attached to the document when the editor mounts, preventing missing styles in some mount/unmount scenarios.
    • 37af83b: refactor: replace map(...).flat() with flatMap for simpler, more efficient array flattening
    • f598ac7: Fix bug in insertContentAt command where extra content would get deleted when the selection was at the beginning of the document and a node was inserted

    @tiptap/[email protected]

    Patch Changes

    • 13fb996: refactor: replace map(...).flat() with flatMap for simpler, more efficient array flattening

    @tiptap/[email protected]

    Patch Changes

    • 82121b8: refactor: replace map(...).flat() with flatMap for simpler, more efficient array flattening

    @tiptap/[email protected]

    Patch Changes

    • f472c5b: Use a named import for Suggestion from @tiptap/suggestion to avoid bundler ESM/CJS interop wrapping (__toESM) that caused Jest/CJS consumers to receive a module object instead of the callable plugin factory.

      This is a non-breaking internal fix. It keeps runtime module shape stable for CommonJS (Jest) and prevents the TypeError thrown when the extension attempted to call a non-function.

    @tiptap/[email protected]

    Patch Changes

    • bfcd958: refactor: replace map(...).flat() with flatMap for simpler, more efficient array flattening
    Open source →
  23. 3.4.417 Sept 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 00cf1d7: Fix bug in insertContentAt command where extra content would get deleted when the selection was at the beginning of the document and a node was inserted
    Open source →
  24. 3.4.315 Sept 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 1ea8906: When the editor view is created, it now will also include nodeViews and markViews properties instead of setting them afterward. This avoids serialization of the editor state to HTML which will be replaced by node views anyway.

    @tiptap/[email protected]

    Patch Changes

    • 915ed65: Add custom positioning support to the BubbleMenu.

      This change adds an opt-in API that allows consumers to fully control how the BubbleMenu is positioned. Instead of relying solely on the internal placement logic, you can now provide a function (for example getPosition) that receives the relevant context (editor instance and menu DOM element) and returns the desired coordinates or positioning style.

    @tiptap/[email protected]

    Patch Changes

    • 915ed65: Add custom positioning support to the BubbleMenu.

      This change adds an opt-in API that allows consumers to fully control how the BubbleMenu is positioned. Instead of relying solely on the internal placement logic, you can now provide a function (for example getPosition) that receives the relevant context (editor instance and menu DOM element) and returns the desired coordinates or positioning style.

    @tiptap/[email protected]

    Patch Changes

    • 915ed65: Add custom positioning support to the BubbleMenu.

      This change adds an opt-in API that allows consumers to fully control how the BubbleMenu is positioned. Instead of relying solely on the internal placement logic, you can now provide a function (for example getPosition) that receives the relevant context (editor instance and menu DOM element) and returns the desired coordinates or positioning style.

    @tiptap/[email protected]

    Patch Changes

    • 915ed65: Add custom positioning support to the BubbleMenu.

      This change adds an opt-in API that allows consumers to fully control how the BubbleMenu is positioned. Instead of relying solely on the internal placement logic, you can now provide a function (for example getPosition) that receives the relevant context (editor instance and menu DOM element) and returns the desired coordinates or positioning style.

    Open source →
  25. 3.4.29 Sept 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 24445c4: Listen to a custom scroll target when positioning the BubbleMenu and ensure the scroll listener is cleaned up on destroy.

      The BubbleMenu now accepts an optional scrollTarget option which will be used instead of window when listening for scroll events that affect the menu positioning. The plugin also removes the scroll listener during cleanup.

      No user-facing API changes other than the new optional scrollTarget setting.

    Open source →
  26. 3.4.14 Sept 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 46fa8b8: Prefer the raw inline style attribute when parsing color and background-color so the original format (hex, rgba/hsla, etc.) is preserved instead of falling back to the computed element.style.* value (which often resolves to rgb(...)).

      This fixes mismatches where consumers (for example, demo toolbars and color pickers) expected the original hex values when initializing the editor from HTML.

      • The color and background-color parsers now look for a style attribute first and extract the declared value. If no raw style is present, they still fall back to element.style.color / element.style.backgroundColor.

      MIGRATION NOTES

      • This is a patch-level change. It corrects parsing behavior and is the least-disruptive fix for the issue.
      • If your code relied on the parser returning computed rgb(...) strings, you may see different string values (for example #958DF1 instead of rgb(149, 141, 241)) when HTML contained hex values.
      • If you need a stable, normalized format for comparisons, normalize the attribute (for example with a color utility like tinycolor2) before comparing or use the editor APIs in a way that doesn't depend on the exact string representation.
      • @tiptap/[email protected]

    @tiptap/[email protected]

    Patch Changes

    • 4dd8d58: fix: @types/react version mismatch

    @tiptap/[email protected]

    Patch Changes

    • 59fb86f: Previously, clientRect was only obtained through decorationNode. If decorationNode could not be obtained, clientRect was set to null, which caused the suggestion not to render in some IME scenarios (notably Chinese IME).

      This change adds a fallback method to compute clientRect from the editor's cursor position when decorationNode is not available. It generates a DOMRect based on the cursor coordinates so the suggestion can render even when the decoration node is missing.

    Open source →
  27. 3.4.04 Sept 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Minor Changes

    • ad51daa: Add mount and unmount events to the Editor instance for tracking mounts and unmounts

    Patch Changes

    • 895c73f: Fix can().toggleMark() returning incorrect result when cursor is inside nodes that disallow marks

      Fixed an issue where can().toggleMark('bold') incorrectly returned true when the cursor was positioned inside a code block (with no selection), even though marks are not allowed in code blocks. The method now correctly returns false in this scenario by checking if the parent node allows the mark type when the selection is a cursor.

    @tiptap/[email protected]

    Patch Changes

    • ef909f1: Updated DropcursorOptions.color types to use types defined in prosemirror-dropcursor

    @tiptap/[email protected]

    Patch Changes

    • 11c8085: Added indentation support for code blocks via Tab. Is deactivated by default.

      New Extension Options:

      • enableTabIndentation: boolean - controls if tab completion should be enabled
      • tabSize: number - controls how many spaces are inserted for a tab

    @tiptap/[email protected]

    Patch Changes

    • 11c8085: Added indentation support for code blocks via Tab. Is deactivated by default.

      New Extension Options:

      • enableTabIndentation: boolean - controls if tab completion should be enabled
      • tabSize: number - controls how many spaces are inserted for a tab

    @tiptap/[email protected]

    Patch Changes

    • d3773c7: Fixed an issue where the input method editor (IME) failed to handle Chinese text correctly when entering the first word. Users can now input multiple words as expected.

    @tiptap/[email protected]

    Patch Changes

    • 2cb08d3: Use factory function for object default value as required by vue 2.
    • 2cb08d3: Fixed a bug that would cause Vue 2 to throw errors in console because Vue 2 expects factory functions for prop defaults

    @tiptap/[email protected]

    Patch Changes

    • 3733bb9: Allow consumers to handle the Escape key via render().onKeyDown before the suggestion plugin auto-exits.

      Previously the suggestion plugin intercepted Escape internally and immediately called onExit, preventing render().onKeyDown from receiving the event and stopping propagation. Now render().onKeyDown is invoked first for Escape; if it returns true the plugin assumes the consumer handled the event (so they can call event.preventDefault() / event.stopPropagation() and optionally call exitSuggestion(view) themselves). If it returns false (or is absent), the plugin will continue to call onExit and close the suggestion as before.

      This change enables scenarios where the editor is inside a modal/drawer and the consumer needs to prevent the outer UI from reacting to Escape while still controlling the suggestion's lifecycle.

    • 90cbed5: Remove the global document mousedown handler that closed suggestion popups when clicking outside.

      Previously the suggestion plugin listened for document mousedown events and closed suggestion UIs when the user clicked outside the editor or suggestion portal. That behavior has been removed to avoid framework-specific coupling (for example reliance on .react-renderer) and related compatibility issues.

      Now suggestions are closed via other signals:

      • pressing Escape (unchanged)
      • selection/cursor changes
      • renderer.onExit (renderers can call this)
      • programmatic calls to exitSuggestion(view)
    Open source →
  28. 3.3.12 Sept 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 9e02c12: Prevent incorrect insertion of code marks when a space immediately follows backticks.

    @tiptap/[email protected]

    Patch Changes

    • 02eae08: Fixed outdated warning message to reference @tiptap/extension-undo-redo instead of @tiptap/extension-history.

    @tiptap/[email protected]

    Patch Changes

    • 8eff69a: Improve drag handle node lookup by scanning element bounding rects inside the editor instead of performing per-pixel elementsFromPoint loops, and throttle mouse handling to a single update per animation frame to reduce CPU usage and improve stability.

      This should make drag handle positioning and node detection significantly faster and more robust.

    @tiptap/[email protected]

    Patch Changes

    • 03bf0ea: Preserve prefixes when replacing emoji shortcodes to avoid unintended conversions.

      Previously, shortcodes such as :x: could be converted into emoji nodes even when part of a larger string (e.g., in URLs or other text). The paste handler now preserves prefixes, which helps prevent unwanted conversions in such cases, but does not specifically target URLs.

    Patch Changes

    • 96a34a0: Fix collaboration extension selection to use the extension with a provider instead of the first registered extension
    Open source →
  29. 3.3.023 Aug 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Minor Changes

    • 5423726: Make input rules and paste rules respect extension priority by registering them per-extension instead of aggregating them into a single global plugin.

      Why

      Previously all addInputRules() and addPasteRules() were gathered into one global plugin which ran before the other plugins. That caused conflicts where some extensions (for example mention/suggestion with #) could not preempt the built-in heading input rule.

      What changed

      • Input and paste rules are now created and registered at the position of the owning extension. This makes their execution order follow the extension sorting/priority mechanism.
      • Behavior is more predictable: extensions with higher priority can now take precedence over lower priority extensions' input/paste rules.

      Migration & compatibility

      • This is a behavioral change. If you relied on the old global ordering (input rules always running before other plugins), you may observe different outcomes. In most cases this is desirable and fixes conflicts (like the # mention vs. heading shortcut), but be aware of the change.
      • If you need to force the previous behavior for a specific rule, you can:
        • Register the rule as a ProseMirror plugin via addProseMirrorPlugins() on the extension and place it where you want it to run.
        • Adjust the extension priority value so the extension sits earlier or later in the ordering.

      If you have any questions or see regressions after upgrading, please open an issue with a small repro and we'll help triage.

    Patch Changes

    • 5423726: Fix paste rule handling for node views and defensively guard empty ranges.

      This patch ensures paste rules can correctly inspect node content when node-specific size metadata (nodeSize) is present, falling back to node.content.size when needed. It also skips empty or invalid node ranges before calling textBetween, preventing runtime errors originating from internal Fragment/Node traversals (for example: "Cannot read properties of undefined (reading 'nodeSize')").

    @tiptap/[email protected]

    Patch Changes

    • 5423726: Change the generateID option to accept a context object: { node, pos }.

      This lets ID generators access both the ProseMirror node and its pos within the document when creating IDs, enabling logic that depends on node content, type, or position.

      The change is backwards-compatible: existing generateID functions that ignore the new context will continue to work. Example usage:

      editor.use(UniqueID, {
        generateID: ({ node, pos }) => `${node.type.name}-${pos}-${uuidv4()}`,
      })
      

    @tiptap/[email protected]

    Patch Changes

    • 5423726: Ensure ReactRenderer.destroy() removes the renderer DOM element when present.

      • When consumers append a ReactRenderer's .element to the DOM (for example many demos append it to document.body), previously calling destroy() removed the portal renderer but left the DOM node in place which could lead to accumulating .react-renderer elements.
      • destroy() now also removes the element from its parent node if present, preventing leaked DOM nodes / React roots.

    @tiptap/[email protected]

    Patch Changes

    • 5423726: Add a safe API to exit suggestions and remove decorations.

      • Dispatching a metadata-only transaction with { exit: true } will now reliably deactivate the suggestion plugin and remove inline decorations.
      • Pressing Escape now triggers renderer.onExit and dispatches the exit meta, so suggestions close immediately without needing document edits.
      • Clicking outside the editor will also close active suggestions.
      • Exported exitSuggestion(view, pluginKey?) helper to programmatically close suggestions safely.
    Open source →
  30. 3.2.222 Aug 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 1cab7ff: Change the generateID option to accept a context object: { node, pos }.

      This lets ID generators access both the ProseMirror node and its pos within the document when creating IDs, enabling logic that depends on node content, type, or position.

    Open source →
  31. 3.2.121 Aug 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 6a2873f: Ensure drag previews for node views work correctly in Safari by attaching an offscreen clone of the node to the DOM while calling setDragImage, and by preserving the original element's pixel width/height so the preview matches the original. This prevents Safari from immediately cancelling the drag when a detached element is used as the drag image.
    Open source →
  32. 3.2.014 Aug 2025

    Nothing published for this version

  33. 3.1.010 Aug 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Minor Changes

    • 978c548: Expose onDragStart and onDragEnd callbacks to improve custom drag behavior. This allows better UI control compared to relying on editor.view.dragging, especially when using absolute-positioned drag handles.

    @tiptap/[email protected]

    Minor Changes

    • 978c548: Expose onDragStart and onDragEnd callbacks to improve custom drag behavior. This allows better UI control compared to relying on editor.view.dragging, especially when using absolute-positioned drag handles.

    @tiptap/[email protected]

    Patch Changes

    • 2718eea: Fixed bubble menus having invalid positions on node selections

    @tiptap/[email protected]

    Patch Changes

    • 43747ce: Fixed a problem where the emoji extension would interfer with editor's in composing mode (for example in IME conversion)

    @tiptap/[email protected]

    Patch Changes

    • c868252: Fixed an issue with the mathematics regex using modern negative lookups causing crashes in older Safari versions.

    @tiptap/[email protected]

    Patch Changes

    • c0d33fd: Fixed a bug causing invalid number of columns being created while converting tables to Markdown
    • 0943a52: Fixed an issue preventing overriding the default options of the static renderer's renderToMarkdown function.
    Open source →
  34. 3.0.91 Aug 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 072b110: Fixed the Vue 3 Drag Handle so it only appears when the user starts interacting with the text editor.

    @tiptap/[email protected]

    Patch Changes

    • 22fcc31: Update TaskItem aria-label when node changes

    @tiptap/[email protected]

    Patch Changes

    • 22d6050: fix renderToMarkdown rendering a link href's as undefined
    Open source →
  35. 3.0.81 Aug 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    Open source →
  36. 3.0.716 Jul 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 6b42853: Fix: Fix a problem with the inline option and virtual elements missing getClientRects

    @tiptap/[email protected]

    Patch Changes

    • 6b42853: Fix: Fix a problem with the inline option and virtual elements missing getClientRects
    Open source →
  37. 3.0.615 Jul 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 2e71d05: Fix: broken types for function chaining when calling extend
    Open source →
  38. 3.0.515 Jul 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • f8a4e3e: Refactor: Make shouldShow optional on bubbleMenu and floatingMenu options

    @tiptap/[email protected]

    Patch Changes

    • f8a4e3e: Refactor: Make shouldShow optional on bubbleMenu and floatingMenu options
    Open source →
  39. 3.0.415 Jul 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 7ed03fa: Fix: Add correct overload for extension extend types
    Open source →
  40. 3.0.315 Jul 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 75cabde: Fix: Avoid the JSX Runtime to globally overwrite React's Element types when /** @jsxImportSource @tiptap/core */ is not used

    @tiptap/[email protected]

    Patch Changes

    • 75cabde: Chore: Removed type overwrites for renderHTML

    @tiptap/[email protected]

    Patch Changes

    • 75cabde: Chore: Removed type overwrites for renderHTML
    Open source →
  41. 3.0.215 Jul 2025
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    • 601b1f6: Fix: Correctly pass through the bubble menu floating options
    • 601b1f6: Improvement: Added better JSDocs for the options object

    @tiptap/[email protected]

    Patch Changes

    • 601b1f6: Improvement: Added better JSDocs for the options object
    Open source →
  42. 3.0.2-beta.015 Jul 2025pre-release

    Nothing published for this version

  43. 3.0.112 Jul 2025
    Release notes

    Tiptap 3.0.0 Stable

    This is the stable release for 3.0.0. Since we accidentially released our 3.0.0 last year and had to deprecate it, we're moving forward with 3.0.1 as our initial release for this major cycle.

    Since our auto-generated changelog was to big for Github to handle we have to write this manually. Yikes!

    @tiptap/core

    Major Changes

    • Switched to tsup for bundling — UMD builds are no longer supported. If you rely on UMD, you'll need to re-bundle manually.
    • Stronger typings for getPos — Now returns number | undefined to reflect runtime reality.
    • Stricter typing for extension configs — Node, Mark, and Extension configs no longer allow arbitrary keys unless you extend their TypeScript interfaces.
    • editor.storage is now per-editor instance and strongly typed — No more weird cross-editor bugs.
    • clearContent and setContent now emit updates by default — More predictable reactivity.
    • insertContent avoids empty paragraphs when inserting at the start of a node.

    New Features & Improvements

    • editor.unmount() — New lifecycle method to detach the editor without destroying it (great for preserving state).
    • MarkViews — You can now build custom views for marks (similar to NodeViews), including full support for React and Vue 3 components.
    • delete event — Detect and react to deleted content from the editor.
    • Attribute validation — Use ProseMirror’s validate function on attributes for more reliable schemas.
    • SSR mode for editor — You can now use the editor instance on the server without a DOM.
      • Only works with certain APIs; DOM-dependent stuff like focus() and getHTML() won't work on the server.
    • You can now create extensions using functions, not just plain objects — more flexibility for complex setups.

    Fixes & Enhancements

    • canInsertNode utility — Check programmatically if a node is allowed at a certain position.
    • Drag preview fixes — Proper image previews when dragging.
    • MarkViews can now update attributes live (updateAttributes added).
    • Improved performance — Transactions that don’t change state no longer trigger updates or events.
    • Better validation when inserting or accessing positions in the document.
    • Various bugfixes, including:
      • Multiple plugin unregistration
      • Image overwrite when placing one after another
      • Cut command RangeException fix
      • Content deletion protection for non-editable source editors

    @tiptap/react

    Major Changes

    • Switched to tsup for bundling — UMD builds are no longer supported. If you rely on UMD, you'll need to re-bundle manually.
    • Replaced Tippy.js with Floating UI — Affects all menu-related extensions (FloatingMenu, BubbleMenu, Mention, Suggestion, etc.).
      • This is a breaking change and requires a manual migration.
      • tippyOptions has been removed and replaced with a new options prop.
      • You must install @floating-ui/dom@^1.6.0 as a peer dependency.
      • Refer to the docs for updated usage:

    New Features & Improvements

    • MarkViews — You can now build custom views for marks (similar to NodeViews), including full support for React and Vue 3 components.
    • Error thrown in development mode if immediatelyRender is missing in SSR mode — Helps catch SSR issues early.
    • Added support for React 19 ref behavior — Improves compatibility with upcoming React features.
    • Reintroduced flushSync — Ensures updates between React and ProseMirror stay in sync.

    Fixes & Enhancements

    • BubbleMenu positioning fixes — BubbleMenu now correctly tracks table cell selections.
    • Ref cleanup — Fixed memory leaks and behavior issues by properly cleaning up ref props and event listeners.
    • Allow custom tags for MarkViewContent via as prop.
    • Fixed DOM attachment issues in NodeView and MarkView.
    • Improved MarkView support for live attribute updates (updateAttributes now supported).
    • Various bugfixes, including:
      • Global resize handler not unregistered on destroy
      • Invalid ref props passed to unsupported components
      • Table-related selection bugs
      • Rendering issues in SSR mode

    @tiptap/vue-3

    Major Changes

    • Switched to tsup for bundling — UMD builds are no longer supported. If you rely on UMD, you'll need to re-bundle manually.
    • Replaced Tippy.js with Floating UI — Affects all menu-related extensions (FloatingMenu, BubbleMenu, Mention, Suggestion, etc.).
      • This is a breaking change and requires a manual migration.
      • tippyOptions has been removed and replaced with a new options prop.
      • You must install @floating-ui/dom@^1.6.0 as a peer dependency.
      • Refer to the docs for updated usage:

    New Features & Improvements

    • MarkViews — You can now build custom views for marks (similar to NodeViews), including full support for Vue 3 and React components.
    • Added support for updateAttributes in MarkView components — Enables live updates to mark attributes.
    • Added support for onShow, onUpdate, onHide, and onDestroy props in menu components.

    Fixes & Enhancements

    • BubbleMenu now correctly tracks table cell selections.
    • Global resize handler for BubbleMenu is now properly unregistered on destroy.
    • Fixed incorrect behavior of ref and event options in menus.
    • Various dependency updates and syncing with latest core and stable features.

    @tiptap/vue-2

    Major Changes

    • Switched to tsup for bundling — UMD builds are no longer supported. If you rely on UMD, you'll need to re-bundle manually.
    • Replaced Tippy.js with Floating UI — Affects all menu-related extensions (FloatingMenu, BubbleMenu, Mention, Suggestion, etc.).
      • This is a breaking change and requires a manual migration.
      • tippyOptions has been removed and replaced with a new options prop.
      • You must install @floating-ui/dom@^1.6.0 as a peer dependency.
      • Refer to the docs for updated usage:
    • VueNodeViewRenderer now returns null for contentDOM if the node is not a leaf and no NodeViewContent is rendered — Prevents unintended content projection issues.

    Fixes & Enhancements

    • BubbleMenu now correctly tracks table cell selections.
    • Global resize handler for BubbleMenu is now properly unregistered on destroy.
    • Fixed incorrect behavior of ref and event options in menus.
    • Added support for onShow, onUpdate, onHide, and onDestroy props in menu components.
    • Various dependency updates and syncing with latest core and stable features.

    @tiptap/extensions

    Major Changes

    • Added the new @tiptap/extensions meta package — This package bundles multiple commonly used utility extensions into a single entry point:

      • CharacterCount
      • DropCursor
      • GapCursor
      • UndoRedo
      • Placeholder
      • TrailingNode
      • Focus
      • Selection

      You can now import them like this:

      import { Placeholder, UndoRedo, Focus } from '@tiptap/extensions'
      

      Migration examples:

      - import Placeholder from '@tiptap/extension-placeholder'
      + import { Placeholder } from '@tiptap/extensions'
      
      - import History from '@tiptap/extension-history'
      + import { UndoRedo } from '@tiptap/extensions'
      

      This change simplifies extension management and encourages lighter bundle sizes by centralizing core utility extensions in one place.

    • Removed selection decorations during drag mode — Prevents visual artifacts when dragging content.

    New Features & Improvements

    • Skipped rendering node and selection decorations in non-editable editors — Improves performance and avoids unwanted visuals in read-only modes.

    Fixes & Enhancements

    • Internal updates for better monorepo version pinning and stability.
    • Synced with the latest changes and fixes from core and related packages.

    Other changes

    Since listing all changes here manually would be again to big for Github's editor we would like you to take a look into the package's CHANGELOG.md where you can find ALL changes made on each version including all pre-releases prior to the official stable release.

    Also take a look at our upgrade guide where you can find out what changed on all meta packages, how to upgrade to V3, etc.

    • The StarterKit extension now includes more extensions by deafult
    • The Table, Details and List extensions now include all their sub-packages. The Table and List extensions also export new Kit extensions to quickly register all of them in one go.

    What now?

    We'll continue working on this release, quickly hotfix the bugs encountered by the community and make 3.0.0 even better. We'll also look into new features like Markdown Support, Migrations and the Decoration API for our upcoming minor releases.

    4.0.0 will not be far away - if we do breaking changes in the following weeks you'll see it in the coming weeks/months.

    Contribute

    Feel free to contribute to Tiptap in form of reporting issues, answering questions, helping with the CI, with tests or taking on Issues on your own. We're super happy for every contribution you make 💕.

    Open source →
  44. 3.0.014 Jul 2024withdrawn: There are no breaking changes in this packages, we meant to release 2.5.0

    Nothing published for this version

  45. 3.0.0-next.831 Mar 2025pre-release
    Release notes

    Releases

    @tiptap/[email protected]

    Patch Changes

    @tiptap/[email protected]

    Patch Changes

    • 1e91f9b: Fix prosemirror history build

    @tiptap/[email protected]

    Patch Changes


    • Fix broken prosemirror-module build missing history package by @bdbch in https://github.com/ueberdosis/tiptap/pull/6221
    • Publish a new pre-release version (next) by @github-actions in https://github.com/ueberdosis/tiptap/pull/6222

    Full Changelog: https://github.com/ueberdosis/tiptap/compare/v3.0.0-next.7...v3.0.0-next.8

    Open source →
  46. 3.0.0-next.728 Mar 2025pre-release
    Release notes

    What's Changed

    • upgrade prosemirror-tables to 1.6.3 by @bdbch in https://github.com/ueberdosis/tiptap/pull/6073
    • Publish a new stable version by @github-actions in https://github.com/ueberdosis/tiptap/pull/6075
    • Remove redundant optional chaining in starter kit extension by @arnaugomez in https://github.com/ueberdosis/tiptap/pull/6090
    • upgrade prosemirror-tables to 1.6.4 (fixes #6074) by @mr1name in https://github.com/ueberdosis/tiptap/pull/6088
    • Fix/enforce-type-imports-so-that-bundler-ignores-types by @arnaugomez in https://github.com/ueberdosis/tiptap/pull/6132
    • Rename History extension to UndoRedo by @bdbch in https://github.com/ueberdosis/tiptap/pull/6172
    • Rename CollaborationCursor extension to CollaborationCaret by @bdbch in https://github.com/ueberdosis/tiptap/pull/6173
    • fix: use null in ordered list's default type value by @embiem in https://github.com/ueberdosis/tiptap/pull/6213
    • refactor: export focusEvents plugin key by @jomifepe in https://github.com/ueberdosis/tiptap/pull/6204
    • starter kit: add missing dependency by @mimecuvalo in https://github.com/ueberdosis/tiptap/pull/6189
    • build(deps): bump cypress-io/github-action from 6.7.8 to 6.7.16 by @dependabot in https://github.com/ueberdosis/tiptap/pull/6183
    • build(deps-dev): bump vite from 5.4.11 to 5.4.15 by @dependabot in https://github.com/ueberdosis/tiptap/pull/6208
    • build(deps): bump actions/cache from 4.2.0 to 4.2.3 by @dependabot in https://github.com/ueberdosis/tiptap/pull/6201
    • build(deps): bump actions/upload-artifact from 4.5.0 to 4.6.2 by @dependabot in https://github.com/ueberdosis/tiptap/pull/6200
    • build(deps-dev): bump esbuild from 0.21.5 to 0.25.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/6095
    • Add option to set rel on youtube embed link by @teamclouday in https://github.com/ueberdosis/tiptap/pull/6083
    • fix(core): add even more strict types for Nodes, Marks, and Extensions by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6182
    • feat(youtube): enhance embed URL generation to support video lists by @Simon-He95 in https://github.com/ueberdosis/tiptap/pull/6096
    • Publish a new stable version by @github-actions in https://github.com/ueberdosis/tiptap/pull/6217
    • Publish a new pre-release version (next) by @github-actions in https://github.com/ueberdosis/tiptap/pull/6156

    New Contributors

    • @mr1name made their first contribution in https://github.com/ueberdosis/tiptap/pull/6088
    • @embiem made their first contribution in https://github.com/ueberdosis/tiptap/pull/6213
    • @jomifepe made their first contribution in https://github.com/ueberdosis/tiptap/pull/6204
    • @mimecuvalo made their first contribution in https://github.com/ueberdosis/tiptap/pull/6189
    • @teamclouday made their first contribution in https://github.com/ueberdosis/tiptap/pull/6083

    Full Changelog: https://github.com/ueberdosis/tiptap/compare/v3.0.0-next.6...v3.0.0-next.7


    Releases

    @tiptap/[email protected]

    Major Changes

    • d8a3d93: Pointed old extension-history extension as a fallback extension to the new @tiptap/extensions package where the old history extension is now exported from as UndoRedo to clarify what kind of history this extension is implementing.

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Major Changes

    • 25ec82e: Renamed @tiptap/extension-collaboration-cursor to @tiptap/extension-collaboration-caret to clarify what kind of cursor this extension is implementing.

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Minor Changes

    • 8de8e13: 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.

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory
    • Updated dependencies [89bd9c7]

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    @tiptap/[email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    [email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

    [email protected]

    Patch Changes

    • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory
    Open source →
  47. 3.0.0-next.630 Jan 2025pre-release
    Release notes

    What's Changed

    • Modify the TextAlign extension documentation so that the default value of the defaultAlignment option matches the code by @arnaugomez in https://github.com/ueberdosis/tiptap/pull/6061
    • feat: add a codemod for transforming imports by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6067
    • fix(extension-link): update regex to allow numbers in URI by @timoisik in https://github.com/ueberdosis/tiptap/pull/6068
    • Publish a new stable version by @github-actions in https://github.com/ueberdosis/tiptap/pull/6070
    • Publish a new pre-release version (next) by @github-actions in https://github.com/ueberdosis/tiptap/pull/6071

    New Contributors

    • @arnaugomez made their first contribution in https://github.com/ueberdosis/tiptap/pull/6061
    • @timoisik made their first contribution in https://github.com/ueberdosis/tiptap/pull/6068

    Full Changelog: https://github.com/ueberdosis/tiptap/compare/v3.0.0-next.5...v3.0.0-next.6

    Open source →
  48. 3.0.0-next.528 Jan 2025pre-release
    Release notes

    What's Changed

    • Merge develop by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5873
    • Publish a new stable version by @github-actions in https://github.com/ueberdosis/tiptap/pull/5874
    • replaced youtube regex with regex found on https://regexr.com/3dj5t, … by @janthurau in https://github.com/ueberdosis/tiptap/pull/4645
    • fix(extension-code): support safari versions 16.4 and older by @lino-levan in https://github.com/ueberdosis/tiptap/pull/5916
    • Fix/remove empty text style extension by @alexvcasillas in https://github.com/ueberdosis/tiptap/pull/5909
    • Fixed Link extension's commands not respecting XSS prevention via unallowed protocols by @bdbch in https://github.com/ueberdosis/tiptap/pull/5945
    • Publish a new stable version by @github-actions in https://github.com/ueberdosis/tiptap/pull/5947
    • build(deps): bump actions/upload-artifact from 4.4.3 to 4.5.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/5958
    • build(deps): bump nanoid from 3.3.7 to 3.3.8 by @dependabot in https://github.com/ueberdosis/tiptap/pull/5935
    • build(deps): bump cypress-io/github-action from 6.7.7 to 6.7.8 by @dependabot in https://github.com/ueberdosis/tiptap/pull/5938
    • build(deps): bump actions/cache from 4.1.2 to 4.2.0 by @dependabot in https://github.com/ueberdosis/tiptap/pull/5922
    • fix: update linkifyjs to support object-replacement characters by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5968
    • fix(task-item): fix updating checked status by @nicksellen in https://github.com/ueberdosis/tiptap/pull/5953
    • feat(core): add rewriteUnknownContent utility for cleaning JSON by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5915
    • Publish a new pre-release version by @github-actions in https://github.com/ueberdosis/tiptap/pull/5836
    • [ISSUE-5815] Add font size extension by @kart-c in https://github.com/ueberdosis/tiptap/pull/5894
    • perf(core): if a transaction is a no-op do not attempt to re-apply it #4535 by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5449
    • Update LICENSE.md, fix copyright license year by @JasonnnW3000 in https://github.com/ueberdosis/tiptap/pull/5975
    • feat: make text-style non-consuming by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5979
    • fix: handleSelectionUpdate callback is triggered before the renderer is initialized. by @rushillshah in https://github.com/ueberdosis/tiptap/pull/5982
    • feat(extension-utils): add a new package, extension-utils by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5970
    • feat(table): make all table packages be in one package, add a new TableKit extension to configure them by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5469
    • build: migrate to pnpm by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5978
    • build: move cypress cache by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5989
    • feat(static-renderer): add @tiptap/static-renderer to enable static rendering of content by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5528
    • feat(text-style): merge all packages into text-style by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6001
    • refactor(table): re-export the sub-paths, reuse them in old pkgs by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6002
    • feat(html): switch from zeed-dom to happy-dom-without-node by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5984
    • feat: migrate @tiptap/extension-utils -> @tiptap/extensions by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6003
    • fix: add missing node view props to props type object by @GYHHAHA in https://github.com/ueberdosis/tiptap/pull/6006
    • Support validate options in node and mark attribute definitions. by @bobthecow in https://github.com/ueberdosis/tiptap/pull/5991
    • fix(extension-link): Fix the issue where a link cannot be pasted when… by @guanriyue in https://github.com/ueberdosis/tiptap/pull/6010
    • fix(core): convert class attribute to string by @AndreyChelnokov in https://github.com/ueberdosis/tiptap/pull/6011
    • Publish a new pre-release version (next) by @github-actions in https://github.com/ueberdosis/tiptap/pull/5969
    • Publish a new pre-release version by @github-actions in https://github.com/ueberdosis/tiptap/pull/5983
    • Publish a new pre-release version by @github-actions in https://github.com/ueberdosis/tiptap/pull/6013
    • docs: add a custom shortcuts example by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5981
    • test: add tests specifically for React static rendering by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6029
    • perf(react): do some light diffing to not reset options on every render #6024 by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6031
    • fix: Text Formatting Effects Reset After Input Confirmation with Japanese IME on Mobile Browsers (Safari & Chrome) by @agata in https://github.com/ueberdosis/tiptap/pull/6033
    • feat(jsx): add @tiptap/jsx for more convenient rendering of Tiptap content by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5558
    • feat(on-delete): add a new extension OnDelete which can detect node deletions by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6022
    • feat(core): add support for markviews by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5759
    • fix(core): fix focus issue introduced in v2.11.0 by @cpgruber in https://github.com/ueberdosis/tiptap/pull/6043
    • Publish a new pre-release version by @github-actions in https://github.com/ueberdosis/tiptap/pull/6035
    • build: move to latest cypress by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6041
    • refactor: extract bubble-menu & floating-menu to own export by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5993
    • refactor(core): update setContent command signature for better defaults by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6051
    • feat(core): introduce new mounting system for SSR by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6050
    • feat(core): the delete event can now detect mark deletions too by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6047
    • feat: update changesets and move more extensions into @tiptap/extensions by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6056
    • feat(list): add new extension-list package which packages all the list packages into a single package by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6048
    • feat: move the character-count extension into @tiptap/extensions by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6059
    • use @tiptap/y-tiptap instead of y-prosemirror by @bdbch in https://github.com/ueberdosis/tiptap/pull/6064
    • feat(core): editor.storage strong typing and separate instances by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6060
    • test: update examples for trailing-node and selection extension by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/6065
    • Publish a new pre-release version (next) by @github-actions in https://github.com/ueberdosis/tiptap/pull/6012

    New Contributors

    • @lino-levan made their first contribution in https://github.com/ueberdosis/tiptap/pull/5916
    • @nicksellen made their first contribution in https://github.com/ueberdosis/tiptap/pull/5953
    • @JasonnnW3000 made their first contribution in https://github.com/ueberdosis/tiptap/pull/5975
    • @rushillshah made their first contribution in https://github.com/ueberdosis/tiptap/pull/5982
    • @GYHHAHA made their first contribution in https://github.com/ueberdosis/tiptap/pull/6006
    • @bobthecow made their first contribution in https://github.com/ueberdosis/tiptap/pull/5991
    • @guanriyue made their first contribution in https://github.com/ueberdosis/tiptap/pull/6010
    • @agata made their first contribution in https://github.com/ueberdosis/tiptap/pull/6033
    • @cpgruber made their first contribution in https://github.com/ueberdosis/tiptap/pull/6043

    Full Changelog: https://github.com/ueberdosis/tiptap/compare/@tiptap/[email protected]

    Open source →
  49. 3.0.0-next.410 Jan 2025pre-release

    Nothing published for this version

  50. 3.0.0-next.316 Dec 2024pre-release

    Nothing published for this version

  51. 3.0.0-next.216 Dec 2024pre-release

    Nothing published for this version

  52. 3.0.0-next.114 Aug 2024pre-release
    Release notes

    What's Changed

    • build: use tsup for compilation by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5455
    • feat(starter-kit): enable more extensions in the starter-kit for easier onboarding by @nperez0111 in https://github.com/ueberdosis/tiptap/pull/5466
    • Removed tippy.js and replaced it with Floating UI - a newer, more lightweight and customizable floating element library. by @bdbch in https://github.com/ueberdosis/tiptap/pull/5398

    Full Changelog: https://github.com/ueberdosis/tiptap/compare/@tiptap/[email protected]

    Open source →
  53. 3.0.0-next.06 Aug 2024pre-release

    Nothing published for this version

  54. 3.0.0-beta.3011 Jul 2025pre-release

    Nothing published for this version

  55. 3.0.0-beta.2911 Jul 2025pre-release

    Nothing published for this version

  56. 3.0.0-beta.2810 Jul 2025pre-release

    Nothing published for this version

  57. 3.0.0-beta.2710 Jul 2025pre-release

    Nothing published for this version

  58. 3.0.0-beta.269 Jul 2025pre-release

    Nothing published for this version

  59. 3.0.0-beta.258 Jul 2025pre-release

    Nothing published for this version

  60. 3.0.0-beta.246 Jul 2025pre-release
    Release notes

    Releases

    @tiptap/[email protected]

    Minor Changes

    • cce6497: Reintroduce flushSync to sync rendering of React and ProseMirror

    Patch Changes

    Open source →