Skip to content
EditorStackPlayground

Lexical review: Meta's editor framework, and what it asks of you

Lexical is Meta's MIT-licensed extensible text editor framework, published to npm as version 0.1.0 in January 2022 and built around an immutable editor state with a plugin architecture rather than a supplied interface.

Last verified · MIT · Free (open source) · Official site · Repository

TL;DR

  • Lexical is Meta's MIT-licensed editor framework, built around an immutable, transactional editor state, with plugins rather than a supplied interface.
  • We measured @lexical/react 0.50.0 with the core at 104.9 kB gzip; in our time-to-editor benchmark (0.49.0) it reached a rendered editor in 25 lines of application code and a median of 159 ms.
  • The npm package name carries a 2014 creation date from an unrelated earlier package; Meta's Lexical begins at version 0.1.0 in January 2022, which is the date we record.

Lexical quick facts

Quick facts about Lexical
TypeLibrary
LicenceMIT
First release2022-01
LanguageTypeScript
FrameworksAny (framework-agnostic)
SSR supportpartial
Bundle size (min+gzip)104.9 kB gzip
PricingFree (open source)
Self-hostedYes
White labelYes
npm weekly downloads4,577,452
GitHub stars23,866
Latest version0.51.0
Last verified2026-08-20

What Lexical is, and who it is for

Lexical is a text editor framework built by Meta for the editing surfaces inside its own products, and its design shows exactly that origin: an immutable editor state, transactional updates, a strict reconciliation model, and no opinion whatsoever about what an editor should look like.

It suits teams whose editor is a serious, long-lived part of their product and who care about behaviour on very large documents. It does not suit a team that needs a rich-text field working this sprint, because it asks for more assembly than anything else in this dataset before an editor exists on screen.

Like Tiptap, Plate and Editor.js, it is a document editor. It has no canvas, no layout model and no styling for end users, so it is not an alternative to GrapesJS or Puck regardless of how the category is described.

A note on its first release date

Our dataset records Lexical's first release as January 2022, not the 2014 date the npm registry reports as the package's creation. The name lexical was used by an unrelated package that published 0.0.1 in June 2014 and 0.0.2 three days later; Meta's Lexical begins at 0.1.0 on 10 January 2022, which matches the first publish of @lexical/react.

We mention it because it is a clean illustration of our methodology: reading a registry field is verification only if you also read what the field means. A comparison site that scraped time.created would tell you Lexical is a decade older than it is.

Architecture: state first, everything else after

The editor state is immutable and every change is a transaction. Updates run inside editor.update(), node transforms normalise the document, and listeners observe changes. Nothing mutates in place, which is what makes the model predictable under collaboration and undo.

Plugins are React components that register commands, listeners and nodes against the composer. That is why the minimal application is longer than Tiptap's: a usable editor needs the composer, a rich text plugin, a content-editable element, an error boundary and a history plugin, all wired explicitly. Nothing is bundled for you, and nothing is hidden from you.

The trade is stated honestly by the project itself: it is a framework for building editors, not an editor.

Getting started

From our benchmark, unedited. Twenty-five lines — the most of the eight applications we measured, and every line is doing something the other frameworks decided for you.

import { createRoot } from 'react-dom/client';
import { LexicalComposer } from '@lexical/react/LexicalComposer';
import { RichTextPlugin } from '@lexical/react/LexicalRichTextPlugin';
import { ContentEditable } from '@lexical/react/LexicalContentEditable';
import { LexicalErrorBoundary } from '@lexical/react/LexicalErrorBoundary';
import { HistoryPlugin } from '@lexical/react/LexicalHistoryPlugin';

const config = {
  namespace: 'benchmark',
  onError(error) {
    throw error;
  },
};

function App() {
  return (
    <LexicalComposer initialConfig={config}>
      <RichTextPlugin
        contentEditable={<ContentEditable style={{ padding: 16, minHeight: 200 }} />}
        placeholder={<div>Hello editor</div>}
        ErrorBoundary={LexicalErrorBoundary}
      />
      <HistoryPlugin />
    </LexicalComposer>
  );
}

createRoot(document.getElementById('app')).render(<App />);
The Lexical benchmark application showing a bare editable surface with placeholder text and no toolbar

Lexical 0.49.0 from the code above. Twenty-five lines of setup produce an editing surface and nothing else — which is the honest picture of what this framework hands you.

Median 159 ms to a rendered editor, marginally faster than Tiptap at 171 ms. Within this group those numbers are noise; the twenty-five lines against eleven are not.

Strengths

A genuinely well-designed state model. Immutable, transactional, and easy to reason about. Teams who have fought a mutable editor model will recognise immediately why this matters.

Small core, strong performance. 104.9 kB gzip with the rich-text and history plugins, and the architecture is built for large documents rather than demos.

Production credibility. Meta runs it at a scale nobody else in this category can claim, which is a meaningful signal for a dependency you intend to keep for years.

MIT, with no commercial tier. Nothing is gated behind a paid plan — a real difference from Tiptap, where collaboration and AI are products.

Deliberately unopinionated. If your editing surface is unusual — not a document, not a page — this is the framework least likely to fight you.

Limitations

The most assembly required in this dataset. Twenty-five lines for an editor with no toolbar. Everything visible is yours to build, and the gap between "it renders" and "a person would use this" is wide.

Pre-1.0 API. Version 0.50.0 at the time of writing. The project is stable in practice and the version line still signals that public API changes are permitted.

Documentation has a middle gap. Concepts are explained well and the playground is a real reference implementation, but recipes for the features every product needs — mentions, uploads, toolbars — usually mean reading playground source rather than a guide.

Smaller third-party ecosystem than Tiptap's, and packages break more often against a moving pre-1.0 core.

Not a page builder, and not a rich-text drop-in either: budget for the interface work before comparing it with anything that ships one.

Pricing

Free under MIT, no paid tier, no hosted service. The cost is entirely engineering time, and for this framework that cost is higher than for its neighbours — which is the trade you are making for the state model and the performance.

See Tiptap vs Lexical for the direct comparison, and Editor.js vs Lexical if the requirement is structured blocks rather than free-form rich text.

Who Lexical fits, and who it does not

Good fit

  • Text editing at scale where predictable performance on very large documents is the deciding requirement
  • Teams that want a framework maintained by the company running it in production at the largest scale in the industry
  • Products willing to build the entire editor interface in exchange for a small, fast core

Poor fit

  • Page building of any kind, since there is no canvas, no layout and no styling model
  • Teams that need an editor working this week, because every visible control is code you write
  • Products that need a stable public API today, given the pre-1.0 version line

Our scores for Lexical

Scored 0–10 by the EditorStack team against the rubric on the methodology page. Each score is argued below it; a score with no argument fails the build.

Developer experience7.5/10

The editor state model is genuinely well designed — immutable, transactional, and easy to reason about once it clicks. Getting there takes longer than with Tiptap, because the concepts are lower level and the React composer requires assembling several plugins before anything appears on screen.

Extensibility9/10

Nodes, commands, transforms and listeners compose cleanly, and the architecture is deliberately unopinionated about rendering. Anything can be replaced, which is why teams building unusual editing surfaces choose it over frameworks that assume a document shape.

Documentation7/10

Concepts are documented carefully and the playground is a genuine reference implementation. What is thinner is the middle ground: recipes for the features every product needs — mentions, uploads, toolbars — usually mean reading the playground source rather than a guide.

Ecosystem7/10

Meta's production use gives it credibility and a steady release cadence, and the plugin set covers the common node types. Third-party supply is smaller than Tiptap's, and the pre-1.0 version line means community packages break more often than in a settled ecosystem.

Time to production6.5/10

The framework asks for the most assembly of any text editor in this dataset before you have something a user would recognise as an editor. That is a deliberate trade for control and performance, and it is the wrong trade for a team whose editor is a feature rather than a differentiator.

Lexical against its nearest neighbours

The closest products in the dataset by category, with the facts most people open three tabs to compare. Bundle sizes marked in kilobytes are our own measurements.

Lexical compared with the nearest products in the dataset
ProductLicenceBundlePrice fromSelf-hosted
LexicalMIT104.9 kB gzipFree (open source)Yes
BlockNoteMPL-2.0386.1 kB gzipfrom $195/moYes
PlateMIT150.8 kB gzipFree (open source)Yes
TiptapMIT123.3 kB gzipFree tier, paid plans undisclosedYes

Alternatives to Lexical

Each comparison below is a full write-up, not a feature grid: where each tool wins, and what moving between them costs.

Frequently asked questions

Is Lexical free?
Yes. Lexical is MIT licensed with no commercial tier and no hosted service, which distinguishes it from Tiptap, whose collaboration and AI features are paid products.
When was Lexical first released?
Meta's Lexical was first published to npm as 0.1.0 on 10 January 2022. The npm package's creation date reads 2014 because an unrelated package occupied the name first — a good example of why a registry field should be read rather than trusted at face value.
Lexical or Tiptap?
Lexical has the smaller core and a stricter state model; Tiptap is faster to something usable and has a larger extension catalogue. In our benchmark Tiptap needed 11 lines against Lexical's 25 for an equivalent editor.
Is Lexical production-ready?
Meta runs it in production at very large scale, which is the strongest possible signal for the core. The version line is still pre-1.0, so treat the public API as one that can move between releases.
Does Lexical work outside React?
The core is framework-agnostic and the React binding is first-party; other framework bindings are community-maintained, so in practice most Lexical work happens in React.

Sources and verification

Last verified: . Facts on this page were checked against the sources below on the date shown next to each one.

  1. npm registry metadata for lexical (MIT licence, version timeline showing 0.1.0 in January 2022) — accessed 2026-08-20
  2. npm registry metadata for @lexical/react (first publish date, latest version) — accessed 2026-08-20
  3. Lexical documentation — accessed 2026-08-20