mrkeyoor.com_
Wed 02 Sept 07:11 UTC
Webevaluationupdated 02 Sept 2026

lexical review

Lexical is a toolkit for building text editors in web applications. It owns editor state, selection, undo, serialization, and browser reconciliation, then lets product teams add tables, Markdown, collaboration, custom nodes, and interface controls as separate pieces.

Verdict

Our Lexical checkout installed 2,572 packages and used 1,707 MB, then built in 36 seconds, so the contributor cost is much larger than the two-package React quick start suggests. Use it when editor behavior is part of your product and your team wants explicit state, nodes, commands, and plugins. Skip it when you need a finished toolbar immediately or cannot budget browser-level editing tests and pre-1.0 migration work.

We ran it

Lab card: what happened when we ran lexicalScreenshot of lexical (lexical.dev)
Install✓ · 55s2572 packages · 1707 MB
Build✓ · 36s
Testsn/ano test script
Repo2279 files~405,299 lines of source · 20 MB · 13 CI workflows

Answers from our run

Does lexical build from source?

Dependencies installed in 55 seconds (2572 packages), and the build succeeded in 36 seconds. We cloned commit aca1216 into a clean Debian container with 3 CPUs and no project-specific setup.

Does lexical have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Who should not use lexical?

Teams seeking a ready-made toolbar and document experience: the quick start composes a contenteditable area and plugins, leaving product UI and behavior to the implementer.

What are the alternatives to lexical?

Tiptap, Slate, CKEditor 5. Our Lexical checkout installed 2,572 packages and used 1,707 MB, then built in 36 seconds, so the contributor cost is much larger than the two-package React quick start suggests.

Setup3/5Quick start is small; contributor install occupied 1,707 MB
Docs5/5Concepts, API pages, examples, playground, and agent guide are specific
Community5/523,823 stars with same-day pushes and active issue handling
Maturity4/5Broad editor features, but v0.49.0 still carries breaking changes

Who it’s for

React teams building a product-specific rich-text editor instead of embedding a finished word processor.
Developers who want editor content represented as typed, serializable state rather than arbitrary HTML.
Products that need custom nodes, commands, history, import and export, or Yjs collaboration.
Teams prepared to test selection, clipboard, input methods, and custom plugins in every supported browser.

Who it’s NOT for

Teams seeking a ready-made toolbar and document experience: the quick start composes a contenteditable area and plugins, leaving product UI and behavior to the implementer.
Non-React teams that require official bindings for their UI framework: the core is framework agnostic, while the README names React as the official binding.
Products that must support browsers older than Chrome 86, Edge 86, Firefox 115, or Safari 15: those are the documented minimums.
Applications that cannot absorb pre-1.0 API changes: v0.49.0 removed static methods from built-in nodes and changed command typing.
Occasional contributors with tight disk limits: our pnpm install pulled 2,572 packages and occupied 1,707 MB.

Setup reality

Our sandbox installed 2,572 pnpm packages in 55 seconds and used 1,707 MB. The build then succeeded in 36 seconds. The harness found no generic test script or target, so tests were skipped. The commit aca1216 checkout had 2,279 files, about 405,299 source lines, and a 20 MB source tree.

A basic React editor installs lexical and @lexical/react; it needs no account or API key. Rich text behavior comes from plugins and feature packages. Collaborative editing adds Yjs plus a provider that must connect clients and handle awareness or offline storage.

The documented browser floor is Chrome and Edge 86+, Firefox 115+, and Safari 15+. Contributor setup uses a pnpm workspace with separate unit, browser, and end-to-end commands; end-to-end runs need the playground server. Our scan found 13 CI workflow files, no Dockerfile, no tests directory, and monorepo workspaces.

Lexical 0.49.0 uses immutable state instead of HTML as truth

Lexical 0.49.0 treats the DOM as a rendered view of editor state. That state contains a node tree and selection, serializes to JSON, and becomes immutable after an update commits. During updates, Lexical clones the current state, mutates a pending copy, batches synchronous work, and reconciles the result to the DOM. Application code gets one controlled document model even when equivalent rich text has many possible HTML shapes.

The model comes with rules. Dollar-prefixed helpers run inside an editor read or update context, and nodes use writable clones during mutation. Initial React configuration is read once. Collaboration can leave the root empty for Yjs, while ordinary initialization seeds a paragraph. The discipline costs more than setting innerHTML, but undo, persistence, transforms, and browser normalization share one state system.

The 2-package React start leaves the product editor to you

The README's React start installs 2 packages: lexical and @lexical/react. Its example composes an editor, a contenteditable surface, plain-text behavior, history, and an error boundary. Rich text, tables, lists, links, code blocks, Markdown, HTML conversion, and collaboration live in other packages or plugins. The team chooses and wires the behavior users will see.

Lexical has five base node types, and developers extend element, text, or decorator nodes for product content. Node properties must remain JSON serializable, setters use writable state, and collaboration needs predictable property initialization. Version 0.49.0 completed a $config() migration for built-in nodes. Custom content models need serialization fixtures and upgrade tests as well as an attractive toolbar.

What happened when we ran it

Our sandbox installed 2,572 pnpm packages in 55 seconds and consumed 1,707 MB on disk. The build passed in 36 seconds. We ran commit aca1216 in a fresh unprivileged Debian container with 3 CPUs and 8 GB of RAM. The repository itself was 20 MB, with 2,279 files and about 405,299 source lines. Dependency storage dominated the measured contributor setup.

The harness found no generic test script or target and skipped tests. Lexical still documents unit, browser, and Chromium end-to-end commands, so our run simply produced no test result. The scan found 13 CI workflow files, no Dockerfile, no tests directory, and a workspace monorepo. We did not measure editor speed, bundle size, or browser correctness.

The 1,707 MB install measures contributor tooling

The 1,707 MB pnpm tree covers core packages, React bindings, feature packages, the playground, documentation, build tooling, and several test systems. A product installing two published packages should expect a different dependency shape. A contributor changing Lexical needs TypeScript and Flow checks plus unit, browser, and end-to-end runs. The last path starts a playground and collaboration server before driving Chromium, Firefox, or WebKit.

Basic editor use needs no credential or hosted service. Yjs collaboration adds a provider to connect peers and handle awareness, with offline storage left to the chosen setup. JSON preserves Lexical state, while Markdown and HTML may not represent every custom concept. Teams should choose one canonical stored form and keep migration fixtures before customers create durable content.

Version 0.49.0 makes upgrades part of editor ownership

Release v0.49.0 shipped on July 30, 2026 with documented breaking changes. Built-in nodes moved to $config(), several static methods disappeared from those classes, and command payload typing became invariant. The release also fixed synthesized clone behavior, node-type collisions, and a stack overflow in compiled builds. Pin versions and read release notes before upgrading a production editor.

The same release fixed selection, tables, Markdown, HTML, code highlighting, and playground behavior. These categories expose the difficulty of rich-text software: correctness crosses document state, browser selection, clipboard formats, layout, and custom UI. Lexical cannot know whether a product's mentions, embeds, pasted office content, or mobile controls behave as users expect. Product-specific regression cases remain necessary.

Chrome 86 is supported, while older browser contracts are yours

Lexical documents Chrome and Edge 86+, Firefox 115+, and Safari 15+ as its browser floor. Enterprise applications with older managed browsers need another editor or their own compatibility work. Real browser tests matter because jsdom cannot reproduce every selection and geometry API. The project separates unit tests from Playwright-backed browser tests for that reason.

Accessibility still needs application-level testing. The README claims built-in accessibility and WCAG compliance, but a composed editor includes the product's toolbar, dialogs, labels, shortcuts, and custom nodes. Test keyboard editing, screen-reader announcements, focus recovery, high zoom, and decorators in the configuration you plan to ship.

289 issues and pull requests move with same-day commits

GitHub listed 23,823 stars and 289 combined issues and pull requests when fetched. The repository was pushed on September 2, 2026. Recently updated work included extension hot reload, shared-history fixes, block-cursor behavior, Markdown list structure, selection deletion, and a mobile image-click report. Several items closed on September 1 while new reports opened. The combined count includes pull requests.

Lexical fits a team that wants an editor framework and accepts responsibility for the finished experience. The 36-second build succeeded, while the test step was skipped and contributor dependencies occupied 1,707 MB. Compare Tiptap, Slate, and CKEditor 5 with the same custom nodes, paste samples, collaboration needs, and browser matrix. Lexical wins only when you want to own that testing and migration work.

Alternatives

ProjectWhat it isPick it when
Tiptap gh↗A headless editor framework built on ProseMirror with extensions and several UI integrations.pick this instead when ProseMirror compatibility and Tiptap's extension catalog suit the product better.
SlateA React-first framework for deeply customized rich-text editing models.pick this instead when your team prefers Slate's document model and transform APIs for a React editor.
CKEditor 5A feature-rich editor platform with a more assembled editing experience and plugin system.pick this instead when a fuller document editor matters more than building the interface from primitives.

What people are saying

  1. [velocity-scout] facebook/lexical

Sources

  1. Lexical repository and README
  2. Lexical editor state documentation
  3. Lexical nodes documentation
  4. Lexical collaboration documentation
  5. Lexical 0.49.0 release
  6. Lexical issue activity

More web reviews

spring-framework · livewire · axios · super-productivity · Graphite · fastify · the whole board →