A headless, framework-agnostic rich text editor built on ProseMirror, extensible through a large set of extensions.
ianstormtaylor/slate
A customizable TypeScript framework for building rich text editors on top of React, with a plugin-first, schema-less core.
- Stars
- 31,743
- Forks
- 3,304
- Open issues
- 6
- Last commit
- 4 hours ago
What is it?
Slate is a framework for building rich text editors in the browser. It is positioned as a pluggable layer over contenteditable, with React used for rendering. Its core makes few assumptions about the shape of the document, so developers can define their own block and inline types, such as comments, embeds, mentions or tables, instead of working around a fixed schema.
Documents are modeled as a nested tree, similar to the DOM, and are changed through high-level commands and operations. The data model is designed so that collaborative editing can be layered on top later. Undo/redo, HTML-style serialization and JSX-based document authoring are provided through separate packages.
The project is split into a monorepo of packages: slate for the core model, slate-react for rendering, slate-history for undo/redo, and slate-hyperscript for writing documents in JSX. The project is currently in beta, and some APIs may still change.
Key features
- 01Plugin-based architecture where editing behavior is customized through plugins.
- 02Schema-less core that lets you define your own block and inline node types.
- 03Nested document tree modeled after the DOM, supporting structures like tables and nested quotes.
- 04React components for rendering editors via slate-react.
- 05Undo/redo history available through the slate-history plugin.
- 06JSX-based document authoring via slate-hyperscript.
Use cases
- Building a Medium- or Google Docs-style editor with custom blocks such as embeds or comments.
- Creating a Markdown-shortcut editor that transforms input as users type.
- Adding @-mentions or inline data nodes to a text editing interface.
- Building a React application that needs a rich text input with a non-flat document model.
Quick start
- 1
Open the Getting Started installation walkthrough in the official docs
Things to know
- Slate is in beta, and some APIs are not finalized and may have breaking changes.
- It is maintained by volunteer contributors rather than a large company, so you may need to contribute fixes yourself.
Topics
FAQ
- What is slate?
- A customizable TypeScript framework for building rich text editors on top of React, with a plugin-first, schema-less core. Slate is a framework for building rich text editors in the browser. It is positioned as a pluggable layer over contenteditable, with React used for rendering. Its core makes few assumptions about the shape of the document, so developers can define their own block and inline types, such as comments, embeds, mentions or tables, instead of working around a fixed schema.
- Is slate free to use? What license does it have?
- slate is open source under the MIT license. Check the license terms before using it in commercial products.
- Is slate still maintained?
- Actively maintained. The last commit to slate was on Oct 21, 2026.
- What can I use slate for?
- Building a Medium- or Google Docs-style editor with custom blocks such as embeds or comments. Creating a Markdown-shortcut editor that transforms input as users type. Adding @-mentions or inline data nodes to a text editing interface. Building a React application that needs a rich text input with a non-flat document model.
- How do I install slate?
- Open the Getting Started installation walkthrough in the official docs
- Where can I get slate?
- The source code and installation instructions are on GitHub: https://github.com/ianstormtaylor/slate
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
A block-style text editor for the web that saves content as clean JSON instead of HTML, extended through plugin tools.
An extensible text editor framework from Meta, with a framework-agnostic core and official React bindings.
A React framework for building full-stack web applications, with Rust-based tooling for fast builds.
A React-based framework for creating videos programmatically, with code as the source of truth for video timelines and animations.
A JavaScript library for predictable, maintainable global state management, usable with React or any other view library.