unstale

npm / @tiptap/react

@tiptap/react

What changed in @tiptap/react 2 to 3, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-22.

5 breaking10 new APIs and options1 performance3 behavior and defaults23 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli on npm

@tiptap/react 336 changes

Breaking changes 2

New APIs and options 7

  • Extensions can declare decorations directly through this hook, avoiding a hand-written ProseMirror plugin for decoration state and transaction mapping.

    3.30.0release notes

  • Renders a React component into a widget decoration inside the existing app context, so providers, context and stores work as usual.

    3.30.0release notes

  • Manually refreshes decorations when they use update: 'manual', such as decorations driven by data outside the editor.

    3.30.0release notes

  • This option makes the component re-render on every position shift so calls to getPos() stay current in render output.

    3.23.5release notes

  • Adds an optional declarative component-first way to initialize and use Tiptap editors in React apps; existing APIs remain supported.

    3.18.0release notes

  • Provides a hook for reading the editor instance from context when using the new component-first API.

    3.18.0release notes

  • FloatingMenu now supports programmatic position updates via setMeta('floatingMenu', 'updatePosition').

    3.16.0release notes

Performance 1

  • NodeViews no longer re-render when decorations or position change without content changes.

    3.23.5release notes

Behavior and default changes 3

  • Core symbols re-exported through @tiptap/react cross the client boundary, so import them directly from @tiptap/core in server code.

    3.27.4release notes

  • When SSR is detected, immediatelyRender is set to false by default; in development, a warning is logged instead of throwing.

    3.23.2release notes

  • The hook provides a guaranteed non-null editor instance as part of the simplified Tiptap component API.

    3.19.0release notesrelease notes

Fixes and other changes 23

  • Fixes a crash when contentComponent is not available.

    3.30.3release notes

  • React node views no longer show the selected state when the selection covers a position the node view has moved away from.

    3.30.0release notes

  • Fixed the caret jumping back to the previous block when pressing Enter inside a React node view.

    3.29.2release notes

  • Fixes caret placement after splitting a block rendered with a React NodeView.

    3.29.1release notes

  • Fixed components not re-rendering when editor.setEditable() changes the editor's editable state.

    3.29.0release notes

  • Notifications in the same microtask are batched to avoid nested update depth warnings when many node views mount together.

    3.28.0release notes

  • The hook binds onMount and onUnmount event handlers when initializing an Editor.

    3.28.0release notes

  • A use client directive lets @tiptap/react be imported from React Server Components without crashing.

    3.27.4release notes

  • An explicit true value is now respected in client-side Next.js; false is forced only during actual SSR or when Next.js is detected and no value was explicitly provided.

    3.23.5release notes

  • Fixed an error where flushSync would run in the EditorContent lifecycle.

    3.22.2release notes

  • NodeView now re-renders when a node's position changes without content or decoration changes, such as when a sibling node moves within the same parent.

    3.22.1release notes

  • React node views no longer crash during deferred selection updates when ProseMirror has already detached the node view position lookup.

    3.22.1release notes

  • HTML props, including className, style, data-* attributes, and event handlers, are forwarded to the positioned menu container.

    3.20.3release notes

  • HTML props, including className, style, data-* attributes, and event handlers, are forwarded to the positioned menu container.

    3.20.3release notes

  • A stable per-instance menu plugin key is generated automatically when pluginKey is omitted, allowing multiple BubbleMenu or FloatingMenu components to be mounted without collisions.

    3.20.3release notes

  • BubbleMenu and FloatingMenu use pluginKey as the transaction meta key, allowing multiple instances to update independently.

    3.20.0release notes

  • Fixes props not updating after initialization.

    3.18.0release notes

  • Fixes extension storage not updating in React and Vue node views.

    3.18.0release notes

  • Fixes props not updating after initialization.

    3.18.0release notes

  • Fixes race conditions that caused destroyed renderers to be re-added in Strict Mode.

    3.15.2release notes

  • All children of the editor's parent node are appended to the element, preventing appended elements such as drag handles from staying detached.

    3.14.0release notes

  • React node views no longer receive invalid positions from this.getPos when ProseMirror and React render cycles get out of sync, preventing errors during updates.

    3.12.0release notes

  • The Bubble Menu plugin no longer reloads every time the BubbleMenu component re-renders.

    3.8.0release notesrelease notes

@tiptap/react 26 changes

Breaking changes 3

  • Floating menus use Floating UI and require this dependency for menu positioning.

    2.0.0upgrade guide

  • NodeViewRendererProps.getPos can return undefined, so handle that case before using the position.

    2.0.0upgrade guide

  • Menu positioning no longer uses tippyOptions; migrate to Floating UI options.

    2.0.0upgrade guide

New APIs and options 3

  • Use ReactMarkViewRenderer to render custom React views for marks.

    2.0.0upgrade guide

  • The Editor configuration option controls rerendering on transactions and is disabled by default; enable it when UI depends on automatic editor state rerenders.

    2.0.0upgrade guide

  • Extract editor state or selected values for UI logic that depends on editor state.

    2.0.0upgrade guide