NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #4968 most downloaded on npm
This package contains misc utilities for Lexical.
Last release 3 days ago
02 Oct 2026
Ships on a steady schedule
a new release about every 8 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
5 years old
696 releases · first in 2022
One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Upgrade vite version to address vulnerabilities detected by the Open … by @Sahejkm in https://github.com/facebook/lexical/pull/6284
reconcileParagraphFormat respect editor readonly state by @aleksandr-lapushkin in https://github.com/facebook/lexical/pull/6295Full Changelog: https://github.com/facebook/lexical/compare/v0.16.0...v0.16.1
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
BREAKING CHANGE: Deprecated public default exports in https://github.com/facebook/lexical/pull/6088
DecoratorNode for horizontal table navigation. by @serey-roth in https://github.com/facebook/lexical/pull/6129Full Changelog: https://github.com/facebook/lexical/compare/v0.15.0...v0.16.0
Fix #6051 Deprecate keycode to code by @Sahejkm in https://github.com/facebook/lexical/pull/6054
$ method notation.Full Changelog: https://github.com/facebook/lexical/compare/v0.14.5...v0.15.0
v0.14.4 by @acywatson in https://github.com/facebook/lexical/pull/5900
Full Changelog: https://github.com/facebook/lexical/compare/v0.14.4...v0.14.5
Fix failing WWW build by @thegreatercurve in https://github.com/facebook/lexical/pull/5826
Full Changelog: https://github.com/facebook/lexical/compare/v0.14.3...v0.14.4
Fixes for ESM builds for Server-side rendering frameworks
Full Changelog: https://github.com/facebook/lexical/compare/v0.14.2...v0.14.3
Fix order of exports in lexical-react by @birtles in https://github.com/facebook/lexical/pull/5732 (Hotfix for https://github.com/facebook/lexical/iss
Full Changelog: https://github.com/facebook/lexical/compare/v0.14.1...v0.14.2
canExtractContents has been removed from TableNode in https://github.com/facebook/lexical/pull/5628 [BREAKING CHANGE]
v0.14.1 (2024-03-18)
ESM Support in https://github.com/facebook/lexical/pull/5618 (thanks @etrepum).
canExtractContents has been removed from TableNode in https://github.com/facebook/lexical/pull/5628 [BREAKING CHANGE]
@lexical/html to docs by @2wheeh in https://github.com/facebook/lexical/pull/5557Full Changelog: https://github.com/facebook/lexical/compare/v0.13.1...v0.14.1
A wild console.info got into our 0.13 release...
A wild console.info got into our 0.13 release...
Besides that, this small patch addresses some more issues, including Next.js server-side compatibility (thanks @2wheeh!).
Full Changelog: https://github.com/facebook/lexical/compare/v0.13.0...v0.13.1
This version wraps up a major tables refactor, and includes some more bugfixes!
This version wraps up a major tables refactor, and includes some more bugfixes!
This version gets rid of GridSelection and Grid{Cell/Row/Table}Node, you should now (exclusively) use the Table equivalents.
Upgrade instructions (rename these in your codebase):
@lexical/table as opposed to a mix between lexical and @lexical/table.GridSelection -> TableSelection$isGridSelection -> $isTableSelectionLexicalTableSelection -> LexicalTableObserverCell (type) -> TableDOMCellCells (type) -> TableDOMRowsGrid (type) -> TableDOMTableLexicalTableSelection.grid (the property) -> LexicalTableSelection.tablegrid in their name no longer do)Why?
When we started GridSelection, we wanted GridSelection to cater a variety of use cases rather than remain specific to the Tables implementation. Fast forward, 1+ years we still haven't found any additional use case that fits GridSelection (internally or within the community). Hence, we took this opportunity to trim down the Core bundle size by ~1KB by making GridSelection specific to Tables.
Custom selection
But it's not just a cleanup! We leveraged this opportunity to revise the basics of selection to enable anyone create their own custom selection (just like we did for tables). You can now build on top of BaseSelection and construct a selection of any type (i.e. a px based selection).
commandPriority option to LexicalMenu and dependent components by @huw in https://github.com/facebook/lexical/pull/5123isNodePre Method by @nickjmoss in https://github.com/facebook/lexical/pull/5157insertNodes and insertParagraph by @GermanJablo in https://github.com/facebook/lexical/pull/5002[k: string]: any from LexicalNode by @etrepum in https://github.com/facebook/lexical/pull/5223%checks from Flow types by @thegreatercurve in https://github.com/facebook/lexical/pull/5477DecoratorNodes being treated as block elements by @9larsons in https://github.com/facebook/lexical/pull/5371Full Changelog: https://github.com/facebook/lexical/compare/v.0.12.2...v0.13.0
Thank you to the new and old contributors for helping us improve Lexical's reliability!
Fix floating link editor on inline image caption (#5460) wnhlee
Make subscript and superscript text formats mutually exclusive (#5317) Gry Ogam
This release just hotfixes a circular dependency issue in v0.12.3.
This release just hotfixes a circular dependency issue in v0.12.3.
This minor release is not so minor! New stuff and a scroll of bugfixes.
This minor release is not so minor! New stuff and a scroll of bugfixes.
Some months ago we introduced Node Overrides as a way to fully customize your Node. While this feature gives you the most flexibility, we realized (based on Discord's feedback) that most overrides are fairly simple and move around HTML. For this reason, we're bringing this closer to you and without the need to introduce new Nodes.
html: {
export: new Map([[TextNode, () => ({ element: document.createElement('figure') })]]),
import: { 'figure': () => ({ conversion: () => ({ node: $createTextNode('yolo') }), priority: 4 }) }
},
$insertNodes is arguably the most complex function in the Lexical codebase. Or at least it was until @GermanJablo succesfully rewrote it from scratch!
For those of you who haven't had a chance to play with $insertNodes yet, it places one or multiple Nodes at your selection, and is responsible for intelligently determining the end hiearchy (i.e. merged together or moved up to tree).
@GermanJablo's rewrite not only resolves some immediate issues but also the reduced complexity now enables us to perfect this function (and indirectly the clipboard paste behavior), previously blocked by its complexity.
We closed more than 70% of the open tables issues since the last release. Kudos to @icrosil for being the main driver behind this effort!
commandPriority option to LexicalMenu and dependent components by @huw in https://github.com/facebook/lexical/pull/5123isNodePre Method by @nickjmoss in https://github.com/facebook/lexical/pull/5157insertNodes and insertParagraph by @GermanJablo in https://github.com/facebook/lexical/pull/5002Full Changelog: https://github.com/facebook/lexical/compare/v.0.12.2...v0.12.3
Move isHTMLElement into core (#4977) Gerard Rovira
Full Changelog: https://github.com/facebook/lexical/compare/v0.11.3...v.0.12.2
Fix: font colors do not apply to text within table cells (#4934) Tahir Shakir
@lexical/utils (#4923) RajatFull Changelog: https://github.com/facebook/lexical/compare/v0.11.3...v0.12.1
Extract "select all" behavior to new SELECT_ALL_COMMAND (#4818) Chris Montrois
#4818 moves "select all" behavior to the SELECT_ALL command, meaning anyone using setRootElement directly (i.e., not using PlainTextPlugin or RichTextPlugin or their underlying functions) would need to wire up command listeners for SELECT_ALL_COMMAND in order to preserve the default "select all" behavior after this version.
SELECT_ALL_COMMAND (#4818) Chris MontroisFix table imports (#4795) Maksim Horbachevsky
Full Changelog: https://github.com/facebook/lexical/compare/v0.11.2...v0.11.3
Better Error Message for exportJSON type by @howlowck in https://github.com/facebook/lexical/pull/4556
AutocompleteNode.clone() by @msdrigg in https://github.com/facebook/lexical/pull/4592Full Changelog: https://github.com/facebook/lexical/compare/v0.11.1...v0.11.2
AutocompleteNode.clone() (#4592) Scott DriggersFix update-changelog not finishing by @zurfyx in https://github.com/facebook/lexical/pull/4537
Full Changelog: https://github.com/facebook/lexical/compare/v0.11.0...v0.11.1
Arguably no major new features but this version comes with substantial bugfixes! Most notably:
Arguably no major new features but this version comes with substantial bugfixes! Most notably:
createRectsFromDOMRange for Mark-like plugins(you can read more on these on the changelog below)
While we strongly advocate for a11y and features that work across devices, there is significant demand for desktop users to have access to tooling via the right click. UX-wise, they're very familiar with it as it's common within other editors such as the well-known Google Docs, Pages and Microsoft Word and it's also the fastest.
LexicalContextMenu is a WIP and not ready for production but the prototype is already live in the Playground under a feature flag (see the gear on the bottom left to enable it /?shouldUseLexicalContextMenu=true)
MarkNode::clone node arg type to this by @potomak in https://github.com/facebook/lexical/pull/4363Full Changelog: https://github.com/facebook/lexical/compare/v0.10.0...v0.11.0
However, it means that links using less common protocols will now be sanitized (converted to about:blank), which will be a breaking change for any exi…
@lexical/link will now sanitize anchor tag hrefs before rendering them to the DOM. This provides a measure of protection against XSS attacks that rely on inlining javascript in that attribute. However, it means that links using less common protocols will now be sanitized (converted to about:blank), which will be a breaking change for any existing links.
Like most other node-based logic in Lexical, the sanitization logic can be overriden by overriding LinkNode using the Node Overrides API and replacing it with a node that implements the sanitizeUrl method differently.
Fixes CVE-2023-30792
Update codes.json (#4320) Gerard Rovira
aria-label typo (#4229) Hao LuoExplicit E2E_BROWSER on E2E runs (#4179) Gerard Rovira
HorizontalRuleNode (#4097) Chris MontroisaddUpdateListener method in transforms doc (#4094) Kevin Ansfielddeprecate $wrapNodes (#4059) Acy Watson
Clone objects from the CSS cache before mutating them (#3945) Brian Birtles
This release includes some breaking changes, including:
This release includes some breaking changes, including:
- Remove of indentList and outdentList from @lexical/list.
- Refactor of the LexicalContentEditable types from @lexical/react to make them more accurate with HTMLDivElement attributes.
This release adds functionality to apply node transforms to node replacements, it allows users to specify tab indentation sizes, and improved support for tracking the origin of YJS updates for collaborative editing.
Fix bad import into core (https://github.com/facebook/lexical/pull/3861) Dominic Gannaway Add import/export DOM methods to YouTubeNode and improve Equ
Fix bad import into core (https://github.com/facebook/lexical/pull/3861) Dominic Gannaway Add import/export DOM methods to YouTubeNode and improve EquationNode (https://github.com/facebook/lexical/pull/3835) Pervez Ali Fix backspace regression (https://github.com/facebook/lexical/pull/3862) Dominic Gannaway Fix restoreEditorState (https://github.com/facebook/lexical/pull/3856) Dominic Gannaway Add more configuration for heading in INSERT_TABLE_COMMAND (https://github.com/facebook/lexical/pull/3843) Sebastien Ahkrin perf(playground): load prettier and its parsers on demand in code block (https://github.com/facebook/lexical/pull/3637) Shanmughapriyan
Update transforms.md (#3845) Ben
Remove deprecated modules from core code base (#3729) John Flockton
createParentElementNode method on LexicalNode to fix copy/paste issues with clipboard (#3800) John FlocktonFix typo in LexicalAutoLinkPlugin code example (#3685) Lorenzo
selectionChange fix (#3623) Dominic Gannaway
Add missing usages of $applyNodeReplacement (#3592) John Flockton
$applyNodeReplacement (#3592) John FlocktonFix bold italic exportDOM (#3584) Dominic Gannaway
Use the actual node count rather than the dirty node count (#3569) Dominic Gannaway
Contains several small bug fixes from the Lexical 0.7.0 release.
Contains several small bug fixes from the Lexical 0.7.0 release.
Lexical 0.7 includes some breaking changes, including:
Lexical 0.7 includes some breaking changes, including:
$cloneContents from @lexical/selectionPlainTextPlugin and RichTextPlugin with regards to how placeholders are handledRichTextPlugin no longer indents by default, use the LexicalTabIndentationPlugin for this behavior.unstable_convertLegacyJSONEditorState has been removed. This was always meant to be a temporary work-around to allow developers to convert their formats to the new JSON format rather than using the actual editor state internals directly.Lexical 0.7 includes performance and usability improvements. Notably, Lexical has a new internal architecture that allows for much better performance with large documents of content. Lexical also now provides a way to handle selection between blocks of content by providing an emulated cursor (make sure you add a blockCursor theme to your editor config to use it).
Fix mutation listener for when DOM moves occur (#3493) Dominic Gannaway
Fix issue with readonly image resizing (#3448) John Flockton
type="button" to <button /> components (#3447) Scott AgirsApply event propagation between all event types (#3401) Dominic Gannaway
Validate dragon origin (#3385) Dominic Gannaway
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →