What Lexical Does
- Rich text — bold, italic, headings, lists, links, code
- Plugins — modular features (markdown, mentions, tables, code blocks)
- Collaboration — Yjs CRDT integration
- Extensible nodes — define custom node types
- Immutable state — predictable updates via EditorState
- A11y — ARIA roles, keyboard navigation
- SSR — server-render initial state
Architecture
Editor maintains an immutable EditorState tree. Updates happen in editor.update() callbacks (transactional). DOM is a projection of state — never edited directly. Plugins register listeners and commands; nodes define their own DOM rendering and JSON serialization.
Self-Hosting
Client library, no server.
Key Features
- ~22KB core (smaller than Draft.js or Slate)
- Immutable EditorState
- Transactional updates
- Plugin architecture
- Yjs collaboration support
- Markdown shortcuts
- Tables, lists, code blocks plugins
- Custom node types
- Accessibility-first
Comparison
| Editor | Backed By | Architecture | Bundle |
|---|---|---|---|
| Lexical | Meta | Immutable tree | ~22KB |
| TipTap | ProseMirror | Node tree | ~50KB |
| Slate | Independent | Immutable tree | ~30KB |
| Quill | Independent | Delta ops | ~40KB |
| Draft.js | Meta (deprecated) | Immutable | ~80KB |
常见问题 FAQ
Q: 取代 Draft.js 吗? A: 是的。Meta 内部已迁移。Draft.js 不再维护,新项目建议直接用 Lexical。
Q: 和 TipTap 比? A: Lexical 更轻、API 更现代、Meta 维护;TipTap 基于 ProseMirror,生态成熟、扩展更丰富。
Q: 支持协作编辑?
A: 支持。@lexical/yjs 集成 Yjs CRDT。
来源与致谢 Sources
- Docs: https://lexical.dev
- GitHub: https://github.com/facebook/lexical
- License: MIT