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_SAFARIbrowser detection - ✅ #8273 Fix merging
TextNodes when__statecontains a different number of default values - ✅ #8266 Replace
$insertNodeswith$insertNodeIntoLeaffor consistentDecoratorNodebehavior insideMarkNode
Code:
- ✅ #8254 Remove usage of
skipTransformsinCodeHighlighterPrismandCodeHighlighterShiki
Extension:
- 🆕 #8286 Add
@lexical/react/useExtensionSignalValuemodule 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
isExactShortcutMatchfor Dvorak keyboard compatibility
Selection:
- ✅ #8261 Make
$getSelectionStyleValueForPropertydirection-independent
Table:
- ✅ #8259 Infer column header state from position during DOM import
Utils:
- ✅ #8276 Fix
$insertNodeIntoLeafedge 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-binto 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
- @Sathvik-Chowdary-Veerapaneni made their first contribution in #8261
- @kzroo made their first contribution in #8267
- @joshjryan made their first contribution in #8265
- @m-brtn made their first contribution in #8271
- @Vedthakar made their first contribution in #8288
Full Changelog: v0.42.0...v0.43.0