Sourced from lexical's releases.
v0.47.0 is a monthly release with a lot of bug fixes, particularly related to IME and composition, and is 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
@mayrangwho has been plowing through IME, accessibility, and other input related issues as well as the really cool new Find and Replace and Ruby Annotations playground features.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
- Prevent text duplication on iOS Safari when formatting during composition (#8755)
- Skip ZWSP insertion for format mismatch on Android Chrome (#8769); deduplicate speech-to-text insertion on Android Chrome (#8759)
- Event module globals moved into per-editor
InputState(#8809); refactored IME composition test infrastructure with browser-level coverage (#8793)Selection & navigation
- ArrowUp/Down no longer skip block decorators (#8775);
deleteLineno longer removes adjacent block decorators (#8744)- Keep selection inside single-child inline elements (#8772); fix navigation across unmergeable TextNode boundaries in inline-grid containers (#8797)
$setBlocksTypeproperly handles block-end focus in backward selections (#8753);insertNodesre-resolves a detached firstBlock (#8764)- Place the block cursor between decorators and shadow roots (#8758); clean up the trailing shadow root after select-all delete (#8751)
deleteCharacterno longer overwrites the X11 PRIMARY selection viaSelection.modify(#8774)- Defer
onUpdatecallbacks during nested commits (#8672)Markdown, code & tables
- Fence-like lines inside a code block stay content (#8734); prevent formatting on
TabNodeinside code blocks (#8752)- Pasted TSV text spreads across table cells (#8780)
Playground & website
... (truncated)
Sourced from lexical's changelog.
v0.47.0 (2026-07-10)
- lexicallexical-rich-text Bug Fix Fix formatText toggle direction and add SETTEXTFORMATCOMMAND (#8807) mayrang
- scripts Bug Fix Let npm prompt for OTP when publishing bootstrap stubs (#8820) Bob Ippolito
- lexical-playground Bug Fix Clear inline font-size when converting to heading (#8800) mayrang
- lexical-tablelexical-playground Feature setTableRowIsHeader and setTableColumnIsHeader utilities (#8815) mayrang
- lexical-website Documentation Update Rewrite testing guide (#8811) mayrang
- lexical-mdastlexical-rich-text Feature lexicalmdast, a micromarkmdast-based alternative to lexicalmarkdown (#8794) Bob Ippolito
- Make dependency-check resilient to transient registry errors (#8818) Gerard Rovira
- lexical Refactor Move event module globals into per-editor InputState (#8809) mayrang
- lexical Bug Fix getDocument() should fall back to the global document when there is no active editor (#8813) Sherry
- lexical-playground Bug Fix Keep cell background color modal open on first click (#8806) sahir
- lexical-playground Bug Fix Use consistent default maxWidth for markdown-imported images (#8810) mayrang
- lexical-devtoolslexical-playground Chore Update flow, hermes, and babel packages to latest (#8795) Bob Ippolito
- Add a 7-day pnpm minimumReleaseAge to match the Dependabot cooldown (#8808) Gerard Rovira
- lexical Chore Fix tmp package dependency vulnerability (#8802) vijay ojha
- lexical Chore Add missing Flow type declarations (#8799) mayrang
- lexical-markdown Feature Add generateNodesFromMarkdownString (#8789) mayrang
- lexicallexical-playground Chore Refactor IME composition test infrastructure and add browser-level coverage (#8793) mayrang
- lexical-playground Bug Fix Use viewBox dimensions for unsized Excalidraw output (#8798) mayrang
- lexical-table Bug Fix Export insertTableRowAtNode and insertTableColumnAtNode (#8791)
- lexical-playgroundlexical-website Feature Add Vercel Analytics and Speed Insights (#8796) Gerard Rovira
- lexicallexical-eslint-plugin Feature Add getDocument() API and Shadow DOM lint enforcement (#8788) mayrang
- scripts Bug Fix strip misplaced pure annotations from prod builds (#8786) Bob Ippolito
- lexical Bug Fix deleteCharacter overwrites X11 PRIMARY selection via Selection.modify (#8774) Bob Ippolito
- lexical-playground Bug Fix Support Unicode URLs in autolink matcher (#8787) mayrang
- lexical-table Feature Spread pasted TSV text across table cells (#8780) mayrang
- Breaking Changelexical Bug Fix Preserve DOM element when composing on segmented TextNode middle (#8784) mayrang
- Breaking Changelexical-reactlexical-devtools-core Chore Drop React 17 support, baseline is now React 18 (#8782) Bob Ippolito
- lexical-playgroundlexical Feature Ruby annotation node with floating editor (#8741) mayrang
- lexical-playground Feature Find and Replace (#8779) mayrang
- lexical-playground Bug Fix restore RTL checkbox position in checklist (#8783) Aldo Ryanda
- lexical-rich-text Bug Fix Stop ArrowUpDown from skipping block decorators (#8775) mayrang
- lexical-playground Bug Fix Convert remaining icon glyphs to mask-image for forced-colors support (#8781) mayrang
- fix(lexical) use extends for type parameter bound in registerEventListeners flow type (#8778) Sherry
- lexical Bug Fix Keep selection inside single-child inline elements (#8772) mayrang
- lexical Feature registerEventListener registerEventListeners DOM helpers (#8767) Bob Ippolito
- lexical-playground Bug Fix Restore floating toolbar comment icon after mask-image conversion (#8773) mayrang
- lexical Bug Fix Skip ZWSP insertion for format mismatch on Android Chrome (#8769) mayrang
- lexical-a11ylexical-reactlexical-playgroundlexical-website Feature lexicala11y framework-agnostic accessibility helpers WCAG AA reference adoption (#8591) mayrang
- Add missing copyright headers to 4 source files (#8768) xiezhenjia-meta
- lexical-website Bug Fix Remove horizontal scroll on homepage hero (#8760) Bakhtiyar
- lexical-selection Bug Fix re-resolve detached firstBlock in insert (#8764) Olivier Chevallier
- lexical Modernize InlineFormattableNode Flow stub syntax rejected by fb-www flow strict (#8763) Sherry
- lexical-utils Bug Fix positionNodeOnRange leaking orphan rect nodes when rects shrink (#8762) Durvesh Pilankar
- docs fix duplicated words in comments and docs (#8761) Durvesh Pilankar
- lexical-selection Bug Fix Properly handle block end focus in backward selections during setBlocksType (#8753) Olivier Chevallier
- lexicallexical-extension Bug Fix Align DecoratorTextNode format with TextNode in mixed selections (#8737) sahir
- lexical Bug Fix Clean up trailing shadow root after select-all delete (#8751) mayrang
- lexicallexical-rich-text Bug Fix Place block cursor between decorators and shadow roots (#8758) mayrang
... (truncated)
77ccc19
v0.47.018a0abf
[lexical][lexical-rich-text][lexical-selection] Bug Fix: Fix navigation
acros...02d2562
[lexical][lexical-rich-text] Bug Fix: Fix formatText toggle direction
and add...932aa67
[lexical] Refactor: Move event module globals into per-editor InputState
(#8809)b00510c
[lexical] Bug Fix: $getDocument() should fall back to the global
document whe...a7666ab
[*][lexical-devtools][lexical-playground] Chore: Update flow, hermes,
and bab...c07e832
[lexical] Chore: Add missing Flow type declarations (#8799)38051a7
[lexical][lexical-playground] Chore: Refactor IME composition test
infrastruc...e649ab2
[lexical][lexical-eslint-plugin] Feature: Add $getDocument() API and
Shadow D...69abb09
[lexical] Bug Fix: deleteCharacter overwrites X11 PRIMARY selection via
Selec...