Download Latest Version v0.44.0 source code.tar.gz (5.4 MB)
Email in envelope

Get an email when there's a new version of Lexical

Home / v0.44.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-04-27 20.8 kB
v0.44.0 source code.tar.gz 2026-04-27 5.4 MB
v0.44.0 source code.zip 2026-04-27 6.3 MB
Totals: 3 Items   11.7 MB 1

v0.44.0 is a monthly release with a few minor breaking changes (deprecations), a notable new experimental DOMRenderExtension API for overriding DOM create/update/export, easier to use priority levels for registering commands, a pagination demonstration and convenient html import/export in the playground, better drag and drop support, automatic inline of CSS for HTML import, consistent CSP-safe style updates, and a wide range of bug fixes and other new features.

Breaking Changes

Deprecation of @lexical/offset OffsetView (#8350)

OffsetView / $createOffsetView never worked correctly, has no documentation, no tests, and no usage in the monorepo. It has been deprecated. The only function still in use, $createChildrenArray, is now exported from lexical itself — import it from lexical rather than @lexical/offset going forward.

Code block escape logic moved to CodeExtension (#8360)

The "press Enter three times to exit a CodeNode" logic has moved from CodeNode.insertNewAfter to a KEY_ENTER_COMMAND listener registered by CodeExtension. This fixes paste-with-blank-lines incorrectly escaping the code block. Using CodeNode without CodeExtension is now deprecated — a backwards-compatible shim with a dev-mode warning is in place, but the node is expected to stop working without CodeExtension in a future version.

New APIs

lexical / @lexical/html — Extensible DOM rendering and export (experimental) (#8353, [#8368])

A new DOMRenderExtension (in @lexical/html) and EditorDOMRenderConfig (in lexical) parameterize $createDOM, $updateDOM, $exportDOM, $getDOMSlot, $shouldInclude, and $shouldExclude so that node rendering and export can be overridden via composable middleware. Use domOverride(nodes, config) to target one or more node classes, predicates, or '*' (wildcard), and call $next() from inside an override to delegate to the underlying implementation.

A new $decorateDOM(nextNode, prevNode, dom, editor) hook runs after a node is created/updated and after its children have been reconciled, intended for in-place attribute or DOM tweaks. Override ordering is a well-defined topological sort: wildcards highest, then predicates, then class hierarchy (subclass before superclass), with extension dependency order and registration order as tiebreakers.

Render-context APIs are also exposed: $withRenderContext, $getRenderContextValue, contextValue, contextUpdater, RenderContextRoot, RenderContextExport. New traversal helpers $generateDOMFromNodes and $generateDOMFromRoot populate a container using the configured render config. CreateEditorArgs.dom accepts a Partial<EditorDOMRenderConfig> to override rendering at editor creation. $isLexicalNode is also exported from lexical.

lexicalCOMMAND_PRIORITY_BEFORE_* priorities (#8375)

Five new command priorities — COMMAND_PRIORITY_BEFORE_EDITOR, _BEFORE_LOW, _BEFORE_NORMAL, _BEFORE_HIGH, _BEFORE_CRITICAL — register listeners that run most-recently-registered first, in front of the existing first-registered-first listeners at the same priority. Ordering is: highest priority first, then all BEFORE_* listeners (LIFO), then legacy listeners (FIFO). The new priorities are almost always what you want for new code; legacy priorities are unchanged so this is purely additive. See the new "Priorities and ordering" docs.

@lexical/code-prismCodePrismExtension & @lexical/code-shikiCodeShikiExtension (#8346)

Both packages now export proper extensions (CodePrismExtension, CodeShikiExtension) with {disabled, tokenizer} signal-based configuration that can be toggled and hot-swapped at runtime. The legacy CodeHighlighterShikiExtension is kept as a deprecated backwards-compatible shim.

AutoLinkExtension, registerAutoLink, and LexicalAutoLinkPlugin now accept an optional punctuation setting to override the default boundary characters (e.g. to allow colon-delimited matches without breaking URLs that contain colons).

@lexical/utilsremoveEmptyDestination for split-at-caret (#8384)

SplitAtPointCaretNextOptions (used by $insertNodeToNearestRootAtCaret and $splitAtPointCaretNext) gains a removeEmptyDestination option for finer control over whether an empty destination is replaced entirely.

@lexical/clipboard — Shared drop handlers (#8373)

New $handleRichTextDrop and $handlePlainTextDrop helpers implement Lexical-aware text drag-and-drop, including same-block drags, cross-TextNode and cross-block drops, DecoratorNode preservation, and cross-editor drags. registerRichText and registerPlainText now wire these by default.

Stable APIs (no longer @experimental) (#8354)

@lexical/extension (since v0.36.1, Sep 2025) and the NodeState API in lexical (since v0.26.0, Feb 2025) are now formally stable.

Deprecations

  • @lexical/offset OffsetView / $createOffsetView (use $createChildrenArray from lexical) (#8350)
  • @lexical/text $findTextIntersectionFromCharacters — broken, untested, undocumented (#8364)
  • CodeHighlighterShikiExtension / CodeHighlighterShikiConfig (use CodeShikiExtension) (#8346)
  • Using CodeNode without CodeExtension (#8360)

Highlights

Core:

  • ⚠️ [#8350] Deprecate OffsetView; export $createChildrenArray from lexical
  • 🆕 [#8353] [#8368] EditorDOMRenderConfig, DOMRenderExtension, domOverride, $decorateDOM, render context, $generateDOMFromNodes, $generateDOMFromRoot, $isLexicalNode, CreateEditorArgs.dom
  • 🆕 [#8375] COMMAND_PRIORITY_BEFORE_* priorities for last-registered-called-first ordering
  • 🧹 [#8354] Remove @experimental from Extension and NodeState APIs
  • ✅ [#8356] Workaround for synchronous Firefox focus edge case where deferred callbacks were silently discarded
  • ✅ [#8349] Resolve Firefox arrow-key navigation skipping over collapsible content
  • ✅ [#8361] Fall back to non-shifted key matching for Option+number shortcuts on macOS

Clipboard / Rich Text / Plain Text:

  • ✅ [#8373] Drag-and-drop within the same block now correctly moves the dragged text; DecoratorNodes and formatting are preserved across drops; cross-editor drags work even with two Lexical versions on the same page

Code:

  • ⚠️ [#8360] Move three-Enter code-block escape logic to a KEY_ENTER_COMMAND listener in CodeExtension; fixes blank-line paste escaping the code block
  • 🆕 [#8346] Add CodePrismExtension (@lexical/code-prism) and CodeShikiExtension (@lexical/code-shiki)
  • 🧹 [#8330] Upgrade shiki to ^4.0.2

Extension:

  • ✅ [#8328] Remove JSX/react type dependency from DecoratorTextNode
  • ✅ [#8377] LexicalExtensionEditorComposer no longer disposes the editor on unmount; lifetime is the caller's responsibility (fixes nested/caption editors after remount)

HTML / Table:

  • 🆕 [#8326] Inline CSS from <style> tags during HTML import (fixes paste from Excel, Outlook, etc.)
  • ✅ [#8313] Merge nested lists into the parent <li> during HTML export, eliminating duplicate ordered-list numbering

Link:

  • 🆕 [#8378] Allow custom punctuation for AutoLink boundaries

List:

  • ✅ [#8382] Ensure ListItemNode always has a ListNode parent (orphans are merged or floated to root)
  • ✅ [#8390] Toggle checklist items on mobile tap (iOS Safari / Android Chrome) via pointerup
  • ✅ [#8313] Merge nested lists into parent <li> on HTML export

Markdown:

  • ✅ [#8332] Replace negative lookbehind assertions for Safari < 16.4 compatibility
  • ✅ [#8365] Add an undo history entry for markdown shortcut transforms so undo no longer also undoes the triggering keystroke
  • ✅ [#8311] Escape ordered-list pattern (\d+\.) inside bullet/check list item exports to fix double-escape on round-trip
  • ✅ [#8381] Code spans take precedence over inline formatting in shortcut transforms (CommonMark behavior)

Playground:

  • 🆕 [#8322] New PagesExtension with PageNode, PageContentNode, PageSetupNode for paginated documents and print-friendly output
  • 🆕 [#8323] Animations for collapsible section expand/collapse and arrow rotation
  • 🆕 [#8379] [#8386] "Convert to HTML" toolbar button (round-trips through $generateHtmlFromNodes / $generateNodesFromDOM); HTML view formatted with prettier
  • 🆕 [#8346] Migrate eight playground plugins to extensions (PageBreak, Twitter, YouTube, Figma, TabFocus, Collapsible, SpecialText, code-highlight) and remove the dead LinkPlugin and StickyPlugin files
  • ✅ [#8385] NodeContextMenuPlugin falls back to the root node when the click target has no Lexical node, instead of showing an empty menu
  • ✅ [#8388] Use @floating-ui/react for FloatingLinkEditorPlugin positioning; correctly handles all viewport boundaries and Firefox focusNode.parentElement quirks
  • ✅ [#8392] Show floating link editor for single-character links (right-bias adjacent-link lookup)

React:

  • ✅ [#8329] Prevent error when editorRef is null in LexicalEditorRefPlugin
  • ✅ [#8366] Add yjs as an optional peer dependency for Yarn PnP compatibility
  • ✅ [#8377] Don't auto-dispose editor from LexicalExtensionEditorComposer
  • ✅ [#8385] Root-node fallback in NodeContextMenuPlugin

Text:

  • 🧹 [#8364] Add deprecation notice to $findTextIntersectionFromCharacters

Utils:

  • ✅ [#8384] Clean up and test $insertNodeToNearestRootAtCaret edge cases; add removeEmptyDestination to SplitAtPointCaretNextOptions

Refactor (CSP-safe styles):

  • 🧹 [#8372] Replace runtime cssText / setAttribute('style', …) writes with property-based style updates across lexical, @lexical/code-core, @lexical/list, @lexical/table, @lexical/yjs, and the playground

Website:

  • 🆕 [#8316] Add more examples to the demos gallery and statically capture screenshots with Playwright (replaces the third-party screenshot service)
  • ✅ [#8369] Fix tailwindcss docusaurus config regression (sync, not async)
  • ✅ [#8371] Add a dedicated tsconfig.json for lexical-website so type errors are actually surfaced in CI

Infrastructure:

  • 🧹 [#8341] Encourage agents to use extensions and $config in AGENTS.md (github.com)
  • 🧹 [#8355] Refactor CommonJS scripts to ESM modules
  • 🧹 [#8357] Cache build + Playwright before running e2e tests
  • 🧹 [#8324] Override yaml to >=1.10.3 to fix CVE-2026-33532
  • 🧹 [#8358] Address simple-git dependency vulnerability
  • 🧹 [#8380] Address follow-redirects dependency vulnerability
  • 🧹 [#8334] Remove example/fixture lockfiles from git to reduce Dependabot noise
  • 🧹 [#8336] [#8347] Update stale dev dependencies to resolve Dependabot alerts

What's Changed

New Contributors

Full Changelog: https://github.com/facebook/lexical/compare/v0.43.0...v0.44.0

Source: README.md, updated 2026-04-27