v0.47.0#8821
Merged
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
zurfyx
approved these changes
Jul 9, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
v0.47.0 (2026-07-10)
v0.47.0 is a monthly release headlined by two new experimental packages:
@lexical/mdast(#8794) — a micromark/mdast-based alternative to@lexical/markdown. Parsing, serialization, and markdown shortcuts all go through the same parser used byremark, so CommonMark + GFM compliance comes for free and there is no second grammar to keep in sync. The original syntax of each construct is preserved on the nodes, so re-serializing produces minimally different Markdown.@lexical/markdownremains the supported default for production apps. See the new Markdown with@lexical/mdastguide.@lexical/a11y(#8591) — framework-agnostic accessibility helpers (ARIA live regions, focus management, roving tab index, focus trap) usable from React, Svelte, Vue, Solid, or vanilla DOM, with React wrappers shipping from@lexical/react. The playground adopts them as part of a WCAG AA reference pass, and the keyboard contracts Lexical follows are documented in the new Keyboard Accessibility guide.Beyond the headliners: React 18 is now the baseline (see Breaking Changes), the playground gains Find and Replace and a Ruby annotation node with a floating editor, tables learn to spread pasted TSV across cells and get row/column header utilities, and there is a long list of IME/composition, selection, and navigation fixes.
Special recognition once again goes to @mayrang, who authored roughly half of the changes in this release — including the
@lexical/a11yframework, Find and Replace, Ruby annotations, and most of the composition and selection fixes 👏Breaking Changes
@lexical/react/@lexical/devtools-core— React 17 support dropped (#8782)React 18 is now the minimum supported version; the
react/react-dompeerDependencies require>=18, and React 17 compatibility code paths were removed. If you are already on React 18 or 19, no changes are required.lexical— DOM element preserved when composing on a segmented TextNode (#8784)Starting IME composition in the middle of a segmented
TextNode(e.g. a mention) previously replaced the node — destroying its DOM element and breaking the browser's composition tracking (caret flashing and styling bleed on Chrome). The node now temporarily switches tonormalmode for the duration of composition, keeping the same node key and DOM element, and is cleaned up when composition ends. Subclass transforms or method overrides that assume a segmented node is always in segmented mode must account for this transient state — see the updatedTextNode.setMode()documentation.New APIs
lexical—$getDocument()returns the owner document of the active editor (correct inside a Shadow DOM or iframe), falling back to the global document when there is no active editor; a new@lexical/eslint-pluginrule enforces its use over thedocumentglobal (#8788, #8813)lexical—registerEventListener/registerEventListeners, type-safeaddEventListenerhelpers that return cleanup functions, now used throughout the codebase — see the updated Working with DOM Events guide (#8767)lexical—SET_TEXT_FORMAT_COMMANDsets (rather than toggles) the selection's text format (see Commands); the same PR fixesformatTexttoggle direction (#8807)@lexical/markdown—$generateNodesFromMarkdownStringparses a markdown string into Lexical nodes without inserting them into the document or modifying the selection (#8789)@lexical/table—$setTableRowIsHeaderand$setTableColumnIsHeaderutilities (#8815);$insertTableRowAtNodeand$insertTableColumnAtNodeare now exported (#8791)Notable Fixes
IME, composition & mobile
InputState(#8809); refactored IME composition test infrastructure with browser-level coverage (#8793)Selection & navigation
deleteLineno longer removes adjacent block decorators (#8744)$setBlocksTypeproperly handles block-end focus in backward selections (#8753);insertNodesre-resolves a detached firstBlock (#8764)deleteCharacterno longer overwrites the X11 PRIMARY selection viaSelection.modify(#8774)onUpdatecallbacks during nested commits (#8672)Markdown, code & tables
TabNodeinside code blocks (#8752)Playground & website
What's Changed
extendsfor type parameter bound in registerEventListeners flow type (#8778) by @potatowagonNew Contributors
Full Changelog: https://lexical.dev is the project site; compare view: v0.46.0...v0.47.0