github facebook/lexical v0.43.0

latest release: v0.43.1-nightly.20260410.0
18 hours ago

v0.43.0 is a monthly release with a minor breaking change, new features, and a number of bug fixes across selection, tables, markdown, and extensions. Notable highlights include a new useExtensionSignalValue hook, and CSS theme options for Yjs collaboration cursors.

Outside of the release artifact, we've refreshed the lexical.dev website thanks to @m-santanna (and inspired by design mockups from @ixahmedxi). Importantly this refresh includes a set of modern examples (examples/website-* and examples/agent-example) that are embedded on the front page and showcase current best practices.

Breaking Changes

Asynchronous parent editor delegation #8308

@lexical/react nested editors now use asynchronous parent editor delegation when needed to match pre-0.42.0 legacy behavior.

New APIs

@lexical/react - useExtensionSignalValue #8286

A new @lexical/react/useExtensionSignalValue module is available for reading signal values from extension output within React components

Highlights

Core:

  • ⚠️ #8308 Use asynchronous parent editor delegation when needed in nested editors
  • #8267 Exclude Android WebView from IS_SAFARI browser detection
  • #8273 Fix merging TextNodes when __state contains a different number of default values
  • #8266 Replace $insertNodes with $insertNodeIntoLeaf for consistent DecoratorNode behavior inside MarkNode

Code:

  • #8254 Remove usage of skipTransforms in CodeHighlighterPrism and CodeHighlighterShiki

Extension:

  • 🆕 #8286 Add @lexical/react/useExtensionSignalValue module for reading signals from React

Examples:

  • 🆕 #8281 Add a new agent example using a local LLM (Transformers.js / in-browser)
  • 🆕 #8258 Add additional website examples

Headless:

  • #8274 Use window.happyDOM.close() to ensure proper cleanup

Link:

  • #8309 Preserve cursor position when merging adjacent identical links

Markdown:

  • #8265 Preserve hard line breaks during import when newlines are preserved

Playground:

  • #8260 Use isExactShortcutMatch for Dvorak keyboard compatibility

Selection:

  • #8261 Make $getSelectionStyleValueForProperty direction-independent

Table:

  • #8259 Infer column header state from position during DOM import

Utils:

  • #8276 Fix $insertNodeIntoLeaf edge case; update @preact/signals-core, hermes, and flow dependencies

Yjs:

  • 🆕 #8271 Add CSS classes to collaboration cursor elements

Infrastructure:

  • 🧹 #8287 Upgrade ESLint 8 → ESLint 10 with flat configuration
  • 🧹 #8307 Upgrade Vite to ^7.3.2
  • 🧹 #8248 Update GitHub CI workflows and run with Node 24
  • 🧹 #8253 Update flow-bin to 0.306.0 and add incompatible-variance workaround
  • 🧹 #8277 #8315 Bump Flow and replace legacy Flow syntax with modern equivalents
  • 🧹 #8243 Update unit tests with extensions to use explicit resource management (using)

What's Changed

  • v0.42.0 by @etrepum in #8245
  • build(deps): bump next from 15.5.11 to 15.5.14 in /scripts/tests/integration/fixtures/lexical-esm-nextjs by @dependabot[bot] in #8242
  • [examples] Chore: Update examples for v0.42.0 by @etrepum in #8246
  • [*] Chore: Update unit tests with extensions to use explicit resource management (using) by @etrepum in #8243
  • [*] Chore: Github CI workflows action updates and run with node 24 by @etrepum in #8248
  • [*] Chore: Update flow-bin to 0.306.0 and add incompatible-variance workaround by @etrepum in #8253
  • [lexical-code-prism][lexical-code-shiki] Bug Fix: Remove usage of skipTransforms in CodeHighlighterPrism and CodeHighlighterShiki by @etrepum in #8254
  • build(deps): bump astro from 5.18.0 to 5.18.1 in /scripts/tests/integration/fixtures/lexical-esm-astro-react by @dependabot[bot] in #8262
  • [lexical-selection] Bug Fix: Make $getSelectionStyleValueForProperty direction-independent by @Sathvik-Chowdary-Veerapaneni in #8261
  • [lexical-table] Bug Fix: Infer column header state from position during DOM import by @Sathvik-Chowdary-Veerapaneni in #8259
  • build(deps): bump happy-dom from 20.0.11 to 20.8.8 by @dependabot[bot] in #8264
  • [lexical-playground] Bug Fix: Use isExactShortcutMatch for Dvorak keyboard compatibility by @Sathvik-Chowdary-Veerapaneni in #8260
  • [lexical] Fix: exclude Android WebView from IS_SAFARI browser detection by @kzroo in #8267
  • [examples] Feature: Added examples (for the website) by @m-santanna in #8258
  • [lexical] Fix : Replaced the function $insertNodes with $insertNodeIntoLeaf for consistent behavior of Decorator Node within MarkNode by @Jynx2004 in #8266
  • build(deps): bump happy-dom from 20.8.8 to 20.8.9 by @dependabot[bot] in #8269
  • [lexical-website] Feature: ui improvement in the homepage of lexical.dev by @m-santanna in #8216
  • [lexical] Fix: merge TextNodes when __state contains different number of default values by @james-atticus in #8273
  • [lexical-headless] Bug Fix: Use window.happyDOM.close() to ensure proper cleanup by @etrepum in #8274
  • Bump flow and replace legacy flow syntax with modern ones by @SamChou19815 in #8277
  • [lexical-markdown] Bug Fix: Preserve markdown hard line breaks during import when newlines are preserved by @joshjryan in #8265
  • [lexical-website] Chore: community page updates by @etrepum in #8270
  • [lexical-utils][lexical-extension][*] Bug Fix: Fix $insertNodeIntoLeaf edge case and update @preact/signals-core, hermes, and flow related dependencies by @etrepum in #8276
  • build(deps): bump lodash-es from 4.17.22 to 4.18.1 by @dependabot[bot] in #8279
  • [lexical-yjs] Feature: Add CSS classes to collaboration cursor elements by @m-brtn in #8271
  • [example] Feature: Add a new agent-example using a local LLM by @etrepum in #8281
  • [lexical-react] Feature: Add @lexical/react/useExtensionSignalValue module for reading signals by @etrepum in #8286
  • [lexical-website] Documentation Update: clarify Yjs custom node property syncing by @Vedthakar in #8288
  • [lexical] Chore: Upgrade ESLint 8 to ESLint 10 with flat configuration by @etrepum in #8287
  • [*] Chore: Upgrade vite to ^7.3.2 by @etrepum in #8307
  • [Breaking Change][lexical] Bug Fix: Use asynchronous parent editor delegation when needed by @etrepum in #8308
  • [lexical-link] Bug Fix: Preserve cursor position when merging adjacent identical links by @Sathvik-Chowdary-Veerapaneni in #8309
  • [*] Fix: Replace legacy Flow syntax with modern equivalents in .flow … by @potatowagon in #8315

New Contributors

Full Changelog: v0.42.0...v0.43.0

Don't miss a new lexical release

NewReleases is sending notifications on new releases.