# What changed in @tiptap/react

> 42 changes in @tiptap/react 2 to 3 from its official release notes, upgrade guides and advisories: 5 breaking, 10 new APIs and options. Each one cited. Sources checked 2026-10-22. HTML: https://unstale.sh/npm/@tiptap/react/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @tiptap/react 3

### Breaking changes

- The prop types now require either the editor or instance field, so callers must provide one of them. (3.27.2) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3272)
- Import BubbleMenu and FloatingMenu from the /menus subpath instead of @tiptap/react. (2.0.0, 3.19.0) — [upgrade guide](https://tiptap.dev/docs/guides/upgrade-tiptap-v2), [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3200), [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3190)

### New APIs and options

- Extensions can declare decorations directly through this hook, avoiding a hand-written ProseMirror plugin for decoration state and transaction mapping. (3.30.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3300)
- Renders a React component into a widget decoration inside the existing app context, so providers, context and stores work as usual. (3.30.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3300)
- Manually refreshes decorations when they use `update: 'manual'`, such as decorations driven by data outside the editor. (3.30.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3300)
- This option makes the component re-render on every position shift so calls to `getPos()` stay current in render output. (3.23.5) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3235)
- Adds an optional declarative component-first way to initialize and use Tiptap editors in React apps; existing APIs remain supported. (3.18.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3180)
- Provides a hook for reading the editor instance from context when using the new component-first API. (3.18.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3180)
- FloatingMenu now supports programmatic position updates via setMeta('floatingMenu', 'updatePosition'). (3.16.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3160)

### Performance

- NodeViews no longer re-render when decorations or position change without content changes. (3.23.5) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3235)

### Behavior and default changes

- Core symbols re-exported through `@tiptap/react` cross the client boundary, so import them directly from `@tiptap/core` in server code. (3.27.4) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3274)
- When SSR is detected, immediatelyRender is set to false by default; in development, a warning is logged instead of throwing. (3.23.2) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3232)
- The hook provides a guaranteed non-null editor instance as part of the simplified Tiptap component API. (3.19.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3200), [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3190)

### Fixes and other changes

- Fixes a crash when contentComponent is not available. (3.30.3) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3303)
- React node views no longer show the selected state when the selection covers a position the node view has moved away from. (3.30.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3300)
- Fixed the caret jumping back to the previous block when pressing Enter inside a React node view. (3.29.2) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3292)
- Fixes caret placement after splitting a block rendered with a React NodeView. (3.29.1) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3291)
- Fixed components not re-rendering when editor.setEditable() changes the editor's editable state. (3.29.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3290)
- Notifications in the same microtask are batched to avoid nested update depth warnings when many node views mount together. (3.28.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3280)
- The hook binds onMount and onUnmount event handlers when initializing an Editor. (3.28.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3280)
- A `use client` directive lets `@tiptap/react` be imported from React Server Components without crashing. (3.27.4) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3274)
- 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.5) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3235)
- Fixed an error where flushSync would run in the EditorContent lifecycle. (3.22.2) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3222)
- 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.1) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3221)
- React node views no longer crash during deferred selection updates when ProseMirror has already detached the node view position lookup. (3.22.1) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3221)
- HTML props, including className, style, data-* attributes, and event handlers, are forwarded to the positioned menu container. (3.20.3) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3203)
- HTML props, including className, style, data-* attributes, and event handlers, are forwarded to the positioned menu container. (3.20.3) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3203)
- 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.3) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3203)
- BubbleMenu and FloatingMenu use pluginKey as the transaction meta key, allowing multiple instances to update independently. (3.20.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3200)
- Fixes props not updating after initialization. (3.18.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3180)
- Fixes extension storage not updating in React and Vue node views. (3.18.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3180)
- Fixes props not updating after initialization. (3.18.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3180)
- Fixes race conditions that caused destroyed renderers to be re-added in Strict Mode. (3.15.2) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3152)
- 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.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3140)
- 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.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#3120)
- The Bubble Menu plugin no longer reloads every time the BubbleMenu component re-renders. (3.8.0) — [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#390), [release notes](https://github.com/ueberdosis/tiptap/blob/db790a7c5a6009b0a94382e12e1a5e9c642e1660/packages/react/CHANGELOG.md#380)

## @tiptap/react 2

### Breaking changes

- Floating menus use Floating UI and require this dependency for menu positioning. (2.0.0) — [upgrade guide](https://tiptap.dev/docs/guides/upgrade-tiptap-v2)
- NodeViewRendererProps.getPos can return undefined, so handle that case before using the position. (2.0.0) — [upgrade guide](https://tiptap.dev/docs/guides/upgrade-tiptap-v2)
- Menu positioning no longer uses tippyOptions; migrate to Floating UI options. (2.0.0) — [upgrade guide](https://tiptap.dev/docs/guides/upgrade-tiptap-v2)

### New APIs and options

- Use ReactMarkViewRenderer to render custom React views for marks. (2.0.0) — [upgrade guide](https://tiptap.dev/docs/guides/upgrade-tiptap-v2)
- 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.0) — [upgrade guide](https://tiptap.dev/docs/guides/upgrade-tiptap-v2)
- Extract editor state or selected values for UI logic that depends on editor state. (2.0.0) — [upgrade guide](https://tiptap.dev/docs/guides/upgrade-tiptap-v2)
