NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2669 most downloaded on npm
ProseMirror's document model
Last release 13 days ago
21 Sep 2026
Release timing varies
gaps range from 2 weeks to 7 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
10 years old
100 releases · first in 2016
Perform attribute validation in NodeType/MarkType.create to make it easier to ensure it happens for every way nodes and marks are created.
Perform attribute validation in NodeType/MarkType.create to make it easier to ensure it happens for every way nodes and marks are created.
Fix parsing of trailing/leading whitespace when the element given to parseSlice is a body element.
Fix parsing of trailing/leading whitespace when the element given to parseSlice is a body element.
One column per quarter.
Allow non-HTML elements in DOMOutputSpec.
Allow non-HTML elements in DOMOutputSpec.
Fix a bug that caused some types of invalid replace steps to crash, rather than returning a failed StepResult, on apply.
Fix a bug that caused some types of invalid replace steps to crash, rather than returning a failed StepResult, on apply.
Fix bad exception message caused by a shadowed variable.
Fix bad exception message caused by a shadowed variable.
Make sure Fragment.findDiffStart/End doesn't return positions in the middle of UTF16 surrogate pairs.
Fix a regression (since 1.25.5) in the way DOMOutputSpecs are interpreted.
Fix a regression (since 1.25.5) in the way DOMOutputSpecs are interpreted.
Remove an accidentally commited console.log.
Remove an accidentally commited console.log.
Properly reflect the fact that nodes must not serialize to just text nodes in the DOMOutputSpec type.
Properly reflect the fact that nodes must not serialize to just text nodes in the DOMOutputSpec type.
Don't check content constraints in Slice.insertAt when inserting into an open node.
The DOM parser will now, if a line break replacement is defined in the schema, try to use that instead of spaces to replace newlines when preserving w
The DOM parser will now, if a line break replacement is defined in the schema, try to use that instead of spaces to replace newlines when preserving whitespace.
Fix a bug in Slice that made it possible for invalid ReplaceAroundSteps to be applied in some situations.
Fix a bug in Slice that made it possible for invalid ReplaceAroundSteps to be applied in some situations.
Suppress lint warnings about dereferencing methods by making Schema.nodeFromJSON and markFromJSON properties instead of methods.
Suppress lint warnings about dereferencing methods by making Schema.nodeFromJSON and markFromJSON properties instead of methods.
Avoid using setAttribute("style", ...) to stay clear of content security policies.
Make the DOM parser not discard nodes whose document representation cannot be placed inside the represenation of some parent DOM node.
Make the DOM parser not discard nodes whose document representation cannot be placed inside the represenation of some parent DOM node.
Mark specs can now be marked with a code property.
Mark specs can now be marked with a code property.
The parser now automatically preserves whitespace inside or white-space: pre elements.
The parser now automatically preserves whitespace inside <pre> or white-space: pre elements.
Fragment.content and Node.children now expose a node's set of children as an array.
Fragment.content and Node.children now expose a node's set of children as an array.
The new NodeType.isInGroup method can be used to query group membership.
The new NodeType.isInGroup method can be used to query group membership.
Fix some corner cases in the way the DOM parser tracks active marks.
Fix some corner cases in the way the DOM parser tracks active marks.
Make attribute validation messages more informative.
Make attribute validation messages more informative.
Add code to DOMSerializer that rejects DOM output specs when they originate from attribute values, to protect against XSS attacks that use corrupt att
Add code to DOMSerializer that rejects DOM output specs when they originate from attribute values, to protect against XSS attacks that use corrupt attribute input.
Attribute specs now support a validate property that can be used to provide a validation function for the attribute, to guard against corrupt JSON inp
Attribute specs now support a validate property that can be used to provide a validation function for the attribute, to guard against corrupt JSON input.
Fix an issue where parse rules for CSS properties that were shorthands for a number of more detailed properties weren't matching properly.
Fix an issue where parse rules for CSS properties that were shorthands for a number of more detailed properties weren't matching properly.
Make sure resolved positions (and thus the document and schema hanging off them) don't get kept in the cache when their document can be garbage-collec
Make sure resolved positions (and thus the document and schema hanging off them) don't get kept in the cache when their document can be garbage-collected.
Improve performance and accuracy of DOMParser style matching by using the DOM's own style object.
Improve performance and accuracy of DOMParser style matching by using the DOM's own style object.
The new linebreakReplacement property on node specs makes it possible to configure a node type that setBlockType will convert to and from line breaks
The new linebreakReplacement property on node specs makes it possible to configure a node type that setBlockType will convert to and from line breaks when appropriate.
The ParseRule type is now a union of TagParseRule and StyleParseRule, with more specific types being used when appropriate.
The ParseRule type is now a union of TagParseRule and StyleParseRule, with more specific types being used when appropriate.
Make textBetween emit block separators for empty textblocks.
Make textBetween emit block separators for empty textblocks.
Don't apply style parse rules for nodes that are skipped by other parse rules.
Don't apply style parse rules for nodes that are skipped by other parse rules.
Allow parse rules with a clearMark directive to clear marks that have already been applied.
Allow parse rules with a clearMark directive to clear marks that have already been applied.
Fix the types of Fragment.desendants to include the index parameter to the callback. Add release note
Fix the types of Fragment.desendants to include the index parameter to the callback. Add release note
Include CommonJS type declarations in the package to please new TypeScript resolution settings.
Parse rules for styles can now provide a clearMark property to remove pending marks (for example for font-style: normal).
Parse rules for styles can now provide a clearMark property to remove pending marks (for example for font-style: normal).
Copy all properties from the input spec to Schema.spec.
Copy all properties from the input spec to Schema.spec.
Improve DOM parsing of nested block elements mixing block and inline children.
Improve DOM parsing of nested block elements mixing block and inline children.
Upgrade to orderedmap 2.0.0 to avoid around a TypeScript compilation issue.
Upgrade to orderedmap 2.0.0 to avoid around a TypeScript compilation issue.
Node specs for leaf nodes now support a property leafText which, when given, will be used by textContent and textBetween to serialize the node.
Node specs for leaf nodes now support a property leafText which, when given, will be used by textContent and textBetween to serialize the node.
Add optional type parameters to Schema for the node and mark names. Clarify Schema type parameters
Include TypeScript type declarations.
Fix a crash in DOM parsing.
Include TypeScript type declarations.
Nothing published for this version
Nothing published for this version
Fix a bug in the way whitespace-preservation options were handled in DOMParser.
Fix a bug in the way whitespace-preservation options were handled in DOMParser.
A new NodeSpec property, whitespace, allows more control over the way whitespace in the content of the node is parsed.
A new NodeSpec property, whitespace, allows more control over the way whitespace in the content of the node is parsed.
textBetween now allows its leaf text argument to be a function.
textBetween now allows its leaf text argument to be a function.
DOMSerializer.serializeNode will no longer ignore the node's marks.
DOMSerializer.serializeNode will no longer ignore the node's marks.
Be less agressive about dropping whitespace when the context isn't know in DOMParser.parseSlice.
Be less agressive about dropping whitespace when the context isn't know in DOMParser.parseSlice.
DOM parsing with preserveWhitespace: "full" will no longer ignore whitespace-only nodes.
DOM parsing with preserveWhitespace: "full" will no longer ignore whitespace-only nodes.
Node.check will now error if a node has an invalid combination of marks.
Node.check will now error if a node has an invalid combination of marks.
Don't leave carriage return characters in parsed DOM content, since they confuse Chrome's cursor motion.
Fragment.textBetween is now public.
Fix an issue where nested tags that match mark parser rules could cause the parser to apply marks in invalid places.
Fix an issue where nested tags that match mark parser rules could cause the parser to apply marks in invalid places.
MarkType.removeFromSet now removes all instances of the mark, not just the first one.
MarkType.removeFromSet now removes all instances of the mark, not just the first one.
Fix a bug where nested marks of the same type would be applied to the wrong node when parsing from DOM.
Fix a bug where nested marks of the same type would be applied to the wrong node when parsing from DOM.
Parse rules can now have a consuming: false property which allows other rules to match their tag or style even when they apply.
Parse rules can now have a consuming: false property which allows other rules to match their tag or style even when they apply.
The output of toDOM functions can now be a {dom, contentDOM} object specifying the precise parent and content DOM elements.
The output of toDOM functions can now be a {dom, contentDOM} object specifying the precise parent and content DOM elements.
Fix issue where 1.11.1 uses an array method not available on Internet Explorer.
Fix issue where 1.11.1 uses an array method not available on Internet Explorer.
Fix an issue where an inner node's mark information could reset the same mark provided by an outer node in the DOM parser.
Fix an issue where an inner node's mark information could reset the same mark provided by an outer node in the DOM parser.
Resolved positions have a new convenience method, posAtIndex, which can resolve a depth and index to a position.
Resolved positions have a new convenience method, posAtIndex, which can resolve a depth and index to a position.
Fix a bug that prevented non-canonical list structure from being normalized.
Fix a bug that prevented non-canonical list structure from being normalized.
Avoid fixing directly nested list nodes during DOM parsing when it looks like the schema allows those.
Avoid fixing directly nested list nodes during DOM parsing when it looks like the schema allows those.
DOM parser rules can now specify closeParent: true to have the effect of closing their parent node when matched.
Marks found in the DOM at the wrong level (for example, a bold style on a block node) are now properly moved to the node content.
Marks found in the DOM at the wrong level (for example, a bold style on a block node) are now properly moved to the node content.
The NodeType method `hasRequiredAttrs` is now public.
The NodeType method hasRequiredAttrs is now public.
Element and attribute names in DOMOutputSpec structures can now contain namespaces.
Rename ES module files to use a .js extension, since Webpack gets confused by .mjs
Rename ES module files to use a .js extension, since Webpack gets confused by .mjs
The file referred to in the package's module field now is compiled down to ES5.
The file referred to in the package's module field now is compiled down to ES5.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
Add a module field to package json file.
ContentMatch.edge now throws, as it is supposed to, when you try to access the edge past the last one.
ContentMatch.edge now throws, as it is supposed to, when you try to access the edge past the last one.
Your coding agent can read these notes before it upgrades. Set up the MCP server →