Skip to content

fix(deps): update tiptap to v3.30.0 (main) - #9038

Merged
mejo- merged 1 commit into
mainfrom
renovate/main-tiptap
Aug 12, 2026
Merged

fix(deps): update tiptap to v3.30.0 (main)#9038
mejo- merged 1 commit into
mainfrom
renovate/main-tiptap

Conversation

@renovate

@renovate renovate Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
@tiptap/core (source) 3.29.23.30.0 age confidence
@tiptap/extension-blockquote (source) 3.29.23.30.0 age confidence
@tiptap/extension-bold (source) 3.29.23.30.0 age confidence
@tiptap/extension-code (source) 3.29.23.30.0 age confidence
@tiptap/extension-code-block (source) 3.29.23.30.0 age confidence
@tiptap/extension-code-block-lowlight (source) 3.29.23.30.0 age confidence
@tiptap/extension-collaboration (source) 3.29.23.30.0 age confidence
@tiptap/extension-collaboration-caret (source) 3.29.23.30.0 age confidence
@tiptap/extension-document (source) 3.29.23.30.0 age confidence
@tiptap/extension-drag-handle (source) 3.29.23.30.0 age confidence
@tiptap/extension-drag-handle-vue-3 (source) ^3.29.2^3.30.0 age confidence
@tiptap/extension-hard-break (source) 3.29.23.30.0 age confidence
@tiptap/extension-heading (source) 3.29.23.30.0 age confidence
@tiptap/extension-highlight (source) 3.29.23.30.0 age confidence
@tiptap/extension-horizontal-rule (source) 3.29.23.30.0 age confidence
@tiptap/extension-image (source) 3.29.23.30.0 age confidence
@tiptap/extension-italic (source) 3.29.23.30.0 age confidence
@tiptap/extension-link (source) 3.29.23.30.0 age confidence
@tiptap/extension-list (source) 3.29.23.30.0 age confidence
@tiptap/extension-mathematics (source) 3.29.23.30.0 age confidence
@tiptap/extension-mention (source) 3.29.23.30.0 age confidence
@tiptap/extension-paragraph (source) 3.29.23.30.0 age confidence
@tiptap/extension-placeholder (source) 3.29.23.30.0 age confidence
@tiptap/extension-strike (source) 3.29.23.30.0 age confidence
@tiptap/extension-table (source) 3.29.23.30.0 age confidence
@tiptap/extension-text (source) 3.29.23.30.0 age confidence
@tiptap/extension-typography (source) 3.29.23.30.0 age confidence
@tiptap/extension-underline (source) 3.29.23.30.0 age confidence
@tiptap/extensions (source) 3.29.23.30.0 age confidence
@tiptap/pm (source) 3.29.23.30.0 age confidence
@tiptap/suggestion (source) 3.29.23.30.0 age confidence
@tiptap/vue-3 (source) ^3.29.2^3.30.0 age confidence

Release Notes

ueberdosis/tiptap (@​tiptap/core)

v3.30.0

Compare Source

Minor Changes
  • 0247d39: ListKeymap now registers a Tab shortcut that sinks a top-level textblock into the previous list's last item. Pressing Tab at the start of a paragraph right after a bullet/ordered/task list moves the paragraph inside the last list item. The handler does nothing when the cursor is already inside a list item (sinkListItem keeps working), when there is no list before the paragraph, when the caret is mid-textblock, or when the selection is not a text selection (for example a gap cursor).

    @tiptap/core also exposes a new getPreviousBlockSibling($pos) helper that returns the block-level sibling before the cursor's textblock, or null at the first child of the block parent.

  • 3099eef: New Decorations API

    Finally the decorations API is here! Even though Decorations itself are nothing new in ProseMirror, the new API makes it much easier to use them in Tiptap without leaving your extensions.

    Decorations change how the document looks without changing the document itself. Highlighting search results, marking spelling mistakes, showing collaborator cursors, putting a drag handle next to every block.

    Until now you had to write a ProseMirror plugin by hand for this, keep the decoration set in plugin state, and map it forward on every transaction. Extensions can now declare decorations directly with a new addDecorations() hook.

    addDecorations() {
      return {
        create: ({ state }) =>
          // findMatches can be any function that returns an array of { from, to } ranges
          findMatches(state.doc).map(match =>
            Decoration.Inline(match.from, match.to, { class: 'highlight' }),
          ),
      }
    }

    There are three kinds. Decoration.Inline() styles a range of text. Decoration.Node() puts attributes on a block's DOM element. Decoration.Widget() renders your own element at a single position.

    Every extension that declares decorations is collected into one plugin, so several extensions can decorate the same document without fighting over it.

    Doing less work on every keystroke

    By default decorations are rebuilt whenever the document changes. That is fine for small documents and wasteful for large ones, so there are two ways to narrow it down.

    shouldUpdate() skips transactions you do not care about. If your decorations only depend on headings, ignore everything else.

    update: 'changedRanges' together with createInRange() only rescans the blocks that actually changed. On a long document this is the difference between scanning the whole thing on every keystroke and scanning one paragraph.

    For decorations driven by data outside the editor, like comments loaded from a server, use update: 'manual' and refresh them yourself with editor.commands.updateDecorations().

    React and Vue components as widgets

    ReactWidgetRenderer and VueWidgetRenderer render a real component into a widget decoration, inside your existing app context. Providers, context and stores work as usual.

    Widgets take a key. Reuse the same key and the component instance stays mounted while the document changes around it, so local state such as an open menu, a counter or a half-typed input survives editing. Use a stable id from your own data, not a position or a list index, otherwise the component remounts and loses that state.

    Widgets also accept the ProseMirror options side, relaxedSide, stopEvent and ignoreSelection.

    Documentation

Patch Changes
  • 51909d3: Fixed insertContent, insertContentAt and setContent failing when prosemirror-model is loaded more than once.
  • Updated dependencies [58a8953]
ueberdosis/tiptap (@​tiptap/extension-blockquote)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-bold)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-code)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-code-block)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-code-block-lowlight)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-collaboration)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-collaboration-caret)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-document)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-drag-handle)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-drag-handle-vue-3)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-hard-break)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-heading)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-highlight)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-horizontal-rule)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-image)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-italic)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-link)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-list)

v3.30.0

Compare Source

Minor Changes
  • 0247d39: ListKeymap now registers a Tab shortcut that sinks a top-level textblock into the previous list's last item. Pressing Tab at the start of a paragraph right after a bullet/ordered/task list moves the paragraph inside the last list item. The handler does nothing when the cursor is already inside a list item (sinkListItem keeps working), when there is no list before the paragraph, when the caret is mid-textblock, or when the selection is not a text selection (for example a gap cursor).

    @tiptap/core also exposes a new getPreviousBlockSibling($pos) helper that returns the block-level sibling before the cursor's textblock, or null at the first child of the block parent.

Patch Changes
  • c296281: Parse block math that follows an ordered list item without a blank line, both after the list and indented inside the item, instead of pulling it into the item's text.
  • ceb0dac: TaskItem: the checkbox label now also fills the wrapping label element, so accessibility audits no longer flag it as empty.
  • Updated dependencies [0247d39]
  • Updated dependencies [58a8953]
  • Updated dependencies [51909d3]
  • Updated dependencies [3099eef]
ueberdosis/tiptap (@​tiptap/extension-mathematics)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-mention)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-paragraph)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-placeholder)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-strike)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-table)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-text)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-typography)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-underline)

v3.30.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extensions)

v3.30.0

Compare Source

@​tiptap/vue-2
Minor Changes
  • ceb0dac: New Decorations API

    Finally the decorations API is here! Even though Decorations itself are nothing new in ProseMirror, the new API makes it much easier to use them in Tiptap without leaving your extensions.

    Decorations change how the document looks without changing the document itself. Highlighting search results, marking spelling mistakes, showing collaborator cursors, putting a drag handle next to every block.

    Until now you had to write a ProseMirror plugin by hand for this, keep the decoration set in plugin state, and map it forward on every transaction. Extensions can now declare decorations directly with a new addDecorations() hook.

    addDecorations() {
      return {
        create: ({ state }) =>
          // findMatches can be any function that returns an array of { from, to } ranges
          findMatches(state.doc).map(match =>
            Decoration.Inline(match.from, match.to, { class: 'highlight' }),
          ),
      }
    }

    There are three kinds. Decoration.Inline() styles a range of text. Decoration.Node() puts attributes on a block's DOM element. Decoration.Widget() renders your own element at a single position.

    Every extension that declares decorations is collected into one plugin, so several extensions can decorate the same document without fighting over it.

    Doing less work on every keystroke

    By default decorations are rebuilt whenever the document changes. That is fine for small documents and wasteful for large ones, so there are two ways to narrow it down.

    shouldUpdate() skips transactions you do not care about. If your decorations only depend on headings, ignore everything else.

    update: 'changedRanges' together with createInRange() only rescans the blocks that actually changed. On a long document this is the difference between scanning the whole thing on every keystroke and scanning one paragraph.

    For decorations driven by data outside the editor, like comments loaded from a server, use update: 'manual' and refresh them yourself with editor.commands.updateDecorations().

    React and Vue components as widgets

    ReactWidgetRenderer and VueWidgetRenderer render a real component into a widget decoration, inside your existing app context. Providers, context and stores work as usual.

    Widgets take a key. Reuse the same key and the component instance stays mounted while the document changes around it, so local state such as an open menu, a counter or a half-typed input survives editing. Use a stable id from your own data, not a position or a list index, otherwise the component remounts and loses that state.

    Widgets also accept the ProseMirror options side, relaxedSide, stopEvent and ignoreSelection.

    Documentation

Patch Changes
@​tiptap/extension-list
Minor Changes
  • ceb0dac: ListKeymap now registers a Tab shortcut that sinks a top-level textblock into the previous list's last item. Pressing Tab at the start of a paragraph right after a bullet/ordered/task list moves the paragraph inside the last list item. The handler does nothing when the cursor is already inside a list item (sinkListItem keeps working), when there is no list before the paragraph, when the caret is mid-textblock, or when the selection is not a text selection (for example a gap cursor).

    @tiptap/core also exposes a new getPreviousBlockSibling($pos) helper that returns the block-level sibling before the cursor's textblock, or null at the first child of the block parent.

Patch Changes
  • ceb0dac: Parse block math that follows an ordered list item without a blank line, both after the list and indented inside the item, instead of pulling it into the item's text.
  • ceb0dac: TaskItem: the checkbox label now also fills the wrapping label element, so accessibility audits no longer flag it as empty.
  • Updated dependencies [ceb0dac]
  • Updated dependencies [ceb0dac]
  • Updated dependencies [ceb0dac]
  • Updated dependencies [ceb0dac]
@​tiptap/core
Minor Changes
  • ceb0dac: ListKeymap now registers a Tab shortcut that sinks a top-level textblock into the previous list's last item. Pressing Tab at the start of a paragraph right after a bullet/ordered/task list moves the paragraph inside the last list item. The handler does nothing when the cursor is already inside a list item (sinkListItem keeps working), when there is no list before the paragraph, when the caret is mid-textblock, or when the selection is not a text selection (for example a gap cursor).

    @tiptap/core also exposes a new getPreviousBlockSibling($pos) helper that returns the block-level sibling before the cursor's textblock, or null at the first child of the block parent.

  • ceb0dac: New Decorations API

    Finally the decorations API is here! Even though Decorations itself are nothing new in ProseMirror, the new API makes it much easier to use them in Tiptap without leaving your extensions.

    Decorations change how the document looks without changing the document itself. Highlighting search results, marking spelling mistakes, showing collaborator cursors, putting a drag handle next to every block.

    Until now you had to write a ProseMirror plugin by hand for this, keep the decoration set in plugin state, and map it forward on every transaction. Extensions can now declare decorations directly with a new addDecorations() hook.

    addDecorations() {
      return {
        create: ({ state }) =>
          // findMatches can be any function that returns an array of { from, to } ranges
          findMatches(state.doc).map(match =>
            Decoration.Inline(match.from, match.to, { class: 'highlight' }),
          ),
      }
    }

    There are three kinds. Decoration.Inline() styles a range of text. Decoration.Node() puts attributes on a block's DOM element. Decoration.Widget() renders your own element at a single position.

    Every extension that declares decorations is collected into one plugin, so several extensions can decorate the same document without fighting over it.

    Doing less work on every keystroke

    By default decorations are rebuilt whenever the document changes. That is fine for small documents and wasteful for large ones, so there are two ways to narrow it down.

    shouldUpdate() skips transactions you do not care about. If your decorations only depend on headings, ignore everything else.

    update: 'changedRanges' together with createInRange() only rescans the blocks that actually changed. On a long document this is the difference between scanning the whole thing on every keystroke and scanning one paragraph.

    For decorations driven by data outside the editor, like comments loaded from a server, use update: 'manual' and refresh them yourself with editor.commands.updateDecorations().

    React and Vue components as widgets

    ReactWidgetRenderer and VueWidgetRenderer render a real component into a widget decoration, inside your existing app context. Providers, context and stores work as usual.

    Widgets take a key. Reuse the same key and the component instance stays mounted while the document changes around it, so local state such as an open menu, a counter or a half-typed input survives editing. Use a stable id from your own data, not a position or a list index, otherwise the component remounts and loses that state.

    Widgets also accept the ProseMirror options side, relaxedSide, stopEvent and ignoreSelection.

    Documentation

Patch Changes
  • ceb0dac: Fixed insertContent, insertContentAt and setContent failing when prosemirror-model is loaded more than once.
  • Updated dependencies [ceb0dac]
@​tiptap/starter-kit
Patch Changes

Note

PR body was truncated to here.


Configuration

📅 Schedule: (in timezone Europe/Berlin)

  • Branch creation
    • "every weekend"
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the dependencies Pull requests that update a dependency file label Aug 12, 2026
@renovate

renovate Bot commented Aug 12, 2026

Copy link
Copy Markdown
Contributor Author

ℹ️ Artifact update notice

File name: package-lock.json

npm --before could not be enforced because existing locked packages were published after the minimumReleaseAge cutoff. This will resolve after the next lock file maintenance run.

@github-actions
github-actions Bot enabled auto-merge August 12, 2026 08:15
@mejo-
mejo- disabled auto-merge August 12, 2026 08:48
@mejo-
mejo- merged commit b172eb9 into main Aug 12, 2026
63 of 65 checks passed
@mejo-
mejo- deleted the renovate/main-tiptap branch August 12, 2026 08:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant