NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2590 most downloaded on npm
ProseMirror's view component
Last release 3 days ago
18 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
308 releases · first in 2016
The dispatchTransaction prop is now called with this bound to the editor view.
The dispatchTransaction prop is now called with this bound to the editor view.
Fix an issue where Chrome Android would move the cursor forward by one after backspace-joining two paragraphs.
Fix an issue where Chrome Android would move the cursor forward by one after backspace-joining two paragraphs.
One column per quarter.
Fix a crash when scrolling things into view when the editor isn't a child of document.body.
Fix a crash when scrolling things into view when the editor isn't a child of document.body.
Make sure Safari version detection for clipboard support also works in iOS webview.
Make sure Safari version detection for clipboard support also works in iOS webview.
Use shared implementation of `dropPoint` to handle finding a drop position.
Use shared implementation of dropPoint to handle finding a drop position.
Enable use of browser clipboard API on Mobile Safari version 11 and up, which makes cut work on that platform and should generally improve clipboard h
Enable use of browser clipboard API on Mobile Safari version 11 and up, which makes cut work on that platform and should generally improve clipboard handling.
Fix arrow-left cursor motion from cursor wrapper (for example after a link).
Fix arrow-left cursor motion from cursor wrapper (for example after a link).
Fix selection glitches when shift-selecting around widget decorations.
Fix issue where a parsing a code block from the editor DOM might drop newlines in the code.
`handleKeyDown` will now get notified of key events happening directly after a composition ends.
handleKeyDown will now get notified of key events happening directly after a composition ends.
The package can now be loaded in a web worker context (where navigator is defined but document isn't) without crashing.
The package can now be loaded in a web worker context (where navigator is defined but document isn't) without crashing.
Dropping something like a list item into a textblock will no longer split the textblock.
Fix mouse-selecting (in IE and Edge) from the end of links and other positions that cause a cursor wrapper.
Fix mouse-selecting (in IE and Edge) from the end of links and other positions that cause a cursor wrapper.
Widget decorations with the same key are now considered equivalent, even if their other spec fields differ.
The new EditorView.posAtDOM method can be used to find the document position corresponding to a given DOM position.
The new EditorView.nodeDOM method gives you the DOM node that is used to represent a specific node in the document.
Decoration.widget now accepts a function as second argument, which can be used to delay rendering of the widget until the document is drawn (at which point a reference to the view is available).
The getPos function passed to a node view constructor can now be called immediately (it used to return undefined until rendering had finished).
The function used to render a widget is now passed a getPos method that event handlers can use to figure out where in the DOM the widget is.
Fix a problem where updating the state of a non-editable view would not set the selection, causing problems when the DOM was updated in a way that dis
Fix a problem where updating the state of a non-editable view would not set the selection, causing problems when the DOM was updated in a way that disrupted the DOM selection.
Fix an issue where, on IE and Chrome, starting a drag selection in a position that required a cursor wrapper (on a mark boundary) would sometimes fail to work.
Fix crash in key handling when the editor is focused but there is no DOM selection.
Fixes a bug that prevented decorations inside node views with a contentDOM property from being drawn.
Fixes an issue where, on Firefox, depending on a race condition, the skipping over insignificant DOM nodes done at keypress was canceled again before the keypress took effect.
Fixes an issue where an :after pseudo-element on a non-inclusive mark could block the cursor, making it impossible to arrow past it.
The DOM structure for marks is no longer constrained to a single node. Mark views can have a contentDOM property, and mark spec toDOM methods can return structures with holes.
Widget decorations are now wrapped in the marks of the node after them when their side option is >= 0.
Widget decorations may now specify a marks option to set the precise set of marks they should be wrapped in.
### Bug fixes Fixes typo that broke paste.
Fixes typo that broke paste.
Fixes issue where dragging a draggable node directly below a selected node would move the old selection rather than the target node.
Fixes issue where dragging a draggable node directly below a selected node would move the old selection rather than the target node.
A drop that can't fit the dropped content will no longer dispatch an empty transaction.
Transactions generated for drop now have a "uiEvent" metadata field holding "drop". Paste and cut transactions get that field set to "paste" or "cut".
Fix issue where the cursor was visible when a node was selected on recent Chrome versions.
Fix issue where the cursor was visible when a node was selected on recent Chrome versions.
Improve preservation of open and closed nodes in slices taken from the clipboard.
Improve preservation of open and closed nodes in slices taken from the clipboard.
Work around a Chrome cursor motion bug by making sure nodes don't get a contenteditable=false attribute.
Work around a Chrome cursor motion bug by making sure <br> nodes don't get a contenteditable=false attribute.
Fix issue where `Decoration.map` would in some situations with nested nodes incorrectly map decoration positions.
Fix issue where Decoration.map would in some situations with nested nodes incorrectly map decoration positions.
Pasting from an external source no longer opens isolating nodes like table cells.
Pasting from an external source no longer opens isolating nodes like table cells.
`DecorationSet.remove` now uses a proper deep compare to determine if widgets are the same (it used to compare by identity).
DecorationSet.remove now uses a proper deep compare to determine if widgets are the same (it used to compare by identity).
Fix an issue where deeply nested decorations were mapped incorrectly in corner cases.
Fix an issue where deeply nested decorations were mapped incorrectly in corner cases.
Fix a corner-case crash during drop.
Fix a corner-case crash during drop.
Pressing backspace between two identical characters will no longer generate a transaction that deletes the second one.
Pressing backspace between two identical characters will no longer generate a transaction that deletes the second one.
Fix test for whether a node can be selected when arrowing onto it from the right.
Fix test for whether a node can be selected when arrowing onto it from the right.
Calling posAtCoords while a read from the DOM is pending will no longer return a malformed result.
Deleting the last character in a list item no longer results in a spurious hard_break node on Safari.
Deleting the last character in a list item no longer results in a spurious hard_break node on Safari.
Fixes a crash on IE11 when starting to drag.
Dragging nodes with a node view that handles its own mouse events should work better now.
Dragging nodes with a node view that handles its own mouse events should work better now.
List item DOM nodes are no longer assigned pointer-events: none in the default style. Ctrl-clicking list markers now properly selects the list item again.
Arrow-down through an empty textblock no longer causes the browser to forget the cursor's horizontal position.
Copy-dragging on OS X is now done by holding option, rather than control, following the convention on that system.
Fixes a crash related to decoration management.
Fixes a problem where using cut on IE11 wouldn't actually remove the selected text.
Copy/paste on Edge 15 and up now uses the clipboard API, fixing a problem that made them fail entirely.
The dragging property of a view, which contains information about editor content being dragged, is now part of the public interface.
The `clipboardTextParser` prop is now passed a context position.
The clipboardTextParser prop is now passed a context position.
The onFocus, onBlur, and handleContextMenu props are no longer supported. You can achieve their effect with the `handleDOMEvents` prop.
The onFocus, onBlur, and handleContextMenu props are no longer supported. You can achieve their effect with the handleDOMEvents prop.
Fixes occasional crash when reading the selection in Firefox.
Putting a table cell on the clipboard now properly wraps it in a table.
The view will no longer scroll into view when receiving a state that isn't derived from its previous state.
Transactions caused by a paste now have their "paste" meta property set to true.
Adds a new view prop, handleScrollToSelection to override the behavior of scrolling the selection into view.
The new editor prop clipboardTextSerializer allows you to override the way a piece of document is converted to clipboard text.
Adds the editor prop clipboardTextParser, which can be used to define your own parsing strategy for clipboard text content.
DecorationSet.find now supports passing a predicate to filter decorations by spec.
Invisible selections that don't cover any content (i.e., a cursor) are now properly hidden.
Invisible selections that don't cover any content (i.e., a cursor) are now properly hidden.
Initializing the editor view non-editable no longer causes a crash.
Fix an issue where moving the cursor through a text widget causes the editor to lose the selection in Chrome.
Fix an issue where moving the cursor through a text widget causes the editor to lose the selection in Chrome.
Fixes an issue where down-arrow in front of a widget would sometimes not cause any cursor motion on Chrome.
Destroying a mounted editor view no longer leaks event handlers.
Display updates for regular, non-composition input are now synchronous, which should reduce flickering when, for example, updating decorations in response to typing.
The editor can now be initialized in a document other than the global document (say, an iframe).
Editor views now have a domAtPos method, which gives you the DOM position corresponding to a given document position.
Nothing published for this version
Copying and pasting table cells on Edge no longer strips the table structure.
Copying and pasting table cells on Edge no longer strips the table structure.
The associative option to widget decorations is no longer supported. To make a widget left-associative, set its side option to a negative number. asso
The associative option to widget decorations is no longer supported. To make a widget left-associative, set its side option to a negative number. associative will continue to work with a warning until the next release.
Widget decorations now support a side option that controls which side of them the cursor is drawn, where they move when content is inserted at their position, and the order in which they appear relative to other widgets at the same position.
Fixes an issue where the DOM selection could be shown on the wrong side of hard break or image nodes.
Fixes an issue where the DOM selection could be shown on the wrong side of hard break or image nodes.
Fix a bug that prevented the DOM selection from being updated when the new position was near the old one in some circumstances.
Fix a bug that prevented the DOM selection from being updated when the new position was near the old one in some circumstances.
Stop interfering with alt-d keypresses on OS X.
Fix issue where reading a DOM change in a previously empty node could crash.
Fixes crash when reading a change that removed a decorated text node from the DOM.
Shift-pasting and pasting into a code block now does the right thing on IE and Edge.
Shift-pasting and pasting into a code block now does the right thing on IE and Edge.
Fixes a bug that broke dragging from the editor.
Fixes a bug that broke dragging from the editor.
Typing in code blocks no longer replaces newlines with spaces.
Typing in code blocks no longer replaces newlines with spaces.
Copy and paste on Internet Explorer, Edge, and mobile Safari should now behave more like it does on other browsers. Handlers are called, and the changes to the document are made by ProseMirror's code, not the browser.
Fixes a problem where triple-clicking the editor would sometimes cause the scroll position to inexplicably jump around on IE11.
The inclusiveLeft and inclusiveRight options to inline decorations were renamed to `inclusiveStart` and `inclusiveEnd` so that they also make sense in
The inclusiveLeft and inclusiveRight options to inline decorations were renamed to inclusiveStart and inclusiveEnd so that they also make sense in right-to-left text. The old names work with a warning until the next release.
The default styling for lists and blockquotes was removed from prosemirror.css. (They were moved to the example-setup module.)
Fixes reading of selection in Chrome in a shadow DOM.
Registering DOM event handlers that the editor doesn't listen to by default with the handleDOMEvents prop should work again.
Backspacing after turning off a mark now works again in Firefox.
The new props handlePaste and handleDrop can be used to override drop and paste behavior.
Fixes a number of issues with characters being duplicated or disappearing when typing on mark boundaries.
Fixes a number of issues with characters being duplicated or disappearing when typing on mark boundaries.
`endOfTextblock` no longer always returns false for horizontal motion on non-cursor selections, but checks the position of the selection head instead.
endOfTextblock no longer always returns false for horizontal motion on non-cursor selections, but checks the position of the selection head instead.
Typing after adding/removing a mark no longer briefly shows the new text with the wrong marks.
posAtCoords is now more reliable on modern browsers by using browser APIs.
Fix a bug where the view would in some circumstances leave superfluous DOM nodes around inside marks.
You can now override the selection the editor creates for a given DOM selection with the createSelectionBetween prop.
Decoration objects now store their definition object under `spec`, not options. The old property name still works, with a warning, until the next rele
Decoration objects now store their definition object under spec, not options. The old property name still works, with a warning, until the next release.
Fix bug where calling focus when there was a text selection would sometimes result in state.selection receiving an incorrect value.
EditorView.props now has its state property updated when you call updateState.
Putting decorations on or inside a node view with an update method now works.
Plugin view update methods are now passed the view's previous state as second argument.
The place agument to the EditorView constructor can now be an object with a mount property to directly provide the node that should be made editable.
The new EditorView.setProps method makes it easier to update individual props.
Fixes crash in the code that maintains the scroll position when the document is empty or hidden.
Fixes crash in the code that maintains the scroll position when the document is empty or hidden.
Transactions that shouldn't scroll the selection into view now no longer do so.
Transactions that shouldn't scroll the selection into view now no longer do so.
Nothing published for this version
Fixes bug where widget decorations would sometimes get parsed as content when editing near them.
Fixes bug where widget decorations would sometimes get parsed as content when editing near them.
The editor now prevents the behavior of Ctrl-d and Ctrl-h on textblock boundaries on OS X, as intended.
Make sure long words don't cause a horizontal scrollbar in Firefox
Various behavior fixes for IE11.
DOM changes deleting a node's inner wrapping DOM element (for example the tag in a schema-basic code block) no longer break the editor.
DOM changes deleting a node's inner wrapping DOM element (for example the <code> tag in a schema-basic code block) no longer break the editor.
Call custom click handlers before applying select-node behavior for a ctrl/cmd-click.
Call custom click handlers before applying select-node behavior for a ctrl/cmd-click.
Fix failure to apply DOM changes that start at document position 0.
Fix issue where a document update that left the selection in the same place sometimes led to an incorrect DOM selection.
Fix issue where a document update that left the selection in the same place sometimes led to an incorrect DOM selection.
Make sure EditorView.focus doesn't cause the browser to scroll the top of the editor into view.
The handleDOMEvent prop has been dropped in favor of the `handleDOMEvents` (plural) prop.
The handleDOMEvent prop has been dropped in favor of the handleDOMEvents (plural) prop.
The onChange prop has been replaced by a dispatchTransaction prop (which takes a transaction instead of an action).
Added support for a handleDOMEvents prop, which allows you to provide handler functions per DOM event, and works even for events that the editor doesn't normally add a handler for.
Add view method dispatch, which provides a convenient way to dispatch transactions.
The dispatchTransaction (used to be onAction) prop is now optional, and will default to simply applying the transaction to the current view state.
Widget decorations now accept an option associative which can be used to configure on which side of content inserted at their position they end up.
Typing immediately after deleting text now preserves the marks of the deleted text.
Transactions that update the selection because of mouse or touch input now get a metadata property pointer with the value true.
Nothing published for this version
Nothing published for this version
The spellcheck, label, and class props are now replaced by an `attributes` prop.
The spellcheck, label, and class props are now replaced by an attributes prop.
Solve problem where setting a node selection would trigger a DOM read, leading to the selection being reset.
Ignoring/aborting an action should no longer lead to the DOM being stuck in an outdated state.
Typing at the end of a textblock which ends in a non-text node now actually works.
DOM nodes for leaf document nodes are now set as non-editable to prevent various issues such as stray cursors inside of them and Firefox adding image resize controls.
Inserting a node no longer causes nodes of the same type after it to be neednessly redrawn.
Add a new editor prop editable which controls whether the editor's contentEditable behavior is enabled.
Plugins and props can now set any DOM attribute on the outer editor node using the attributes prop.
Node view constructors and update methods now have access to the node's wrapping decorations, which can be used to pass information to a node view without encoding it in the document.
Attributes added or removed by node and inline decorations no longer cause the nodes inside of them to be fully redrawn, making node views more stable and allowing CSS transitions to be used.
The native selection is now appropriately hidden when there is a node selection.
The native selection is now appropriately hidden when there is a node selection.
Fix DOM parsing for decorated text nodes.
Fix DOM parsing for decorated text nodes.
The editor view no longer wraps its editable DOM element in a wrapper element. The ProseMirror CSS class now applies directly to the editable element.
The editor view no longer wraps its editable DOM element in a wrapper element. The ProseMirror CSS class now applies directly to the editable element. The ProseMirror-content CSS class is still present for ease of upgrading but will be dropped in the next release.
The editor view no longer draws a drop cursor when dragging content over the editor. The new prosemirror-dropcursor module implements this as a plugin.
Simple typing and backspacing now gets handled by the browser without ProseMirror redrawing the touched nodes, making spell-checking and various platform-specific input tricks (long-press on OS X, double space on iOS) work in the editor.
Improve tracking of DOM nodes that have been touched by user changes, so that updateState can reliably fix them.
Changes to the document that happen while dragging editor content no longer break moving of the content.
Adding or removing a mark directly in the DOM (for example with the bold/italic buttons in iOS' context menu) now produces mark steps, rather than replace steps.
Pressing backspace at the start of a paragraph on Android now allows key handlers for backspace to fire.
Toggling a mark when there is no selection now works better on mobile platforms.
Introduces an endOfTextblock method on views, which can be used to find out in a bidi- and layout-aware way whether the selection is on the edge of a textblock.
Fix issue where node decorations would stick around in the DOM after the decoration was removed.
Fix issue where node decorations would stick around in the DOM after the decoration was removed.
Setting or removing a node selection in an unfocused editor now properly updates the DOM to show that selection.
Nothing published for this version
FIX: Avoid unneeded selection resets which sometimes confused browsers.
FIX: Avoid unneeded selection resets which sometimes confused browsers.
Restores previously broken kludge that allows the cursor to appear after non-text content at the end of a line.
Restores previously broken kludge that allows the cursor to appear after non-text content at the end of a line.
Wrapping decorations are now created using the `nodeName` property. The wrapper property is no longer supported.
Wrapping decorations are now created using the nodeName property. The wrapper property is no longer supported.
The onUnmountDOM prop is no longer supported (use a node view with a destroy method instead).
The domSerializer prop is no longer supported. Use node views to configure editor-specific node representations.
Widget decorations can now be given a key property to prevent unneccesary redraws.
The EditorView class now has a destroy method for cleaning up.
The handleClickOn prop and friends now receive a direct boolean argument that indicates whether the node was clicked directly.
Widget decorations now support a stopEvent option that can be used to control which DOM events that pass through them should be ignored by the editor view.
You can now specify custom node views for an editor view, which give you control over the way node of a given type are represented in the DOM. See the related RFC.
Your coding agent can read these notes before it upgrades. Set up the MCP server →