platejs is the Plate distribution. Its root owns the headless Plate runtime
and the document model. React, static rendering, and
low-level runtime adapters use explicit subpaths.
Install an optional peer only for the import path that names it below. Only the React and static paths need React.
| Import | Use |
|---|
| Optional peer |
|---|
platejs | Headless editor creation, Plate plugins, editor APIs, core types, and utilities. | None |
platejs/react | React editor creation, components, hooks, stores, and React plugins. | React and React DOM |
platejs/react/virtualized | VirtualizedEditorContent, which omits offscreen top-level blocks from the DOM. | @tanstack/react-virtual, React, and React DOM |
platejs/static | EditorStatic, HTML rendering, and static node renderers. | React and React DOM |
platejs/dom, platejs/history, platejs/hyperscript | DOM and clipboard integration, history persistence, and JSX fixtures. | None |
@platejs/test | Node-safe editor fixtures and environment-specific test harnesses. | React and Testing Library for /react; Playwright for /playwright |
platejs/pagination | Pagination geometry and measurement. | @chenglou/pretext |
platejs/pagination/react | PagedEditorContent and the page layout hooks. | @chenglou/pretext, React, and React DOM |
platejs/diff | Document diff helpers. | diff-match-patch-ts |
Use platejs for non-React editor work and shared types.
import { createEditor } from 'platejs';
export const editor = createEditor({
initialValue: [
{
type: 'paragraph',
children: [{ text: 'Headless editor.' }],
},
],
});import { createEditor } from 'platejs';
export const editor = createEditor({
initialValue: [
{
type: 'paragraph',
children: [{ text: 'Headless editor.' }],
},
],
});Use platejs/react for app editors.
import { EditorRoot, EditorContent, useCreateEditor } from 'platejs/react';
export function BasicEditor() {
const editor = useCreateEditor({
initialValue: [
{
type: 'paragraph',
children: [{ text: 'React editor.' }],
},
],
});
return (
<EditorRoot editor={editor}>
<EditorContent />
</EditorRoot>
);
}import { EditorRoot, EditorContent, useCreateEditor } from 'platejs/react';
export function BasicEditor() {
const editor = useCreateEditor({
initialValue: [
{
type: 'paragraph',
children: [{ text: 'React editor.' }],
},
],
});
return (
<EditorRoot editor={editor}>
<EditorContent />
</EditorRoot>
);
}To render or serialize without mounting an editable React editor, create the editor with createEditor and render it with EditorStatic or renderStaticHtml from platejs/static.
import { createEditor } from 'platejs';
export const editor = createEditor({
initialValue: [
{
type: 'paragraph',
children: [{ text: 'Hello from Plate.' }],
},
],
});import { createEditor } from 'platejs';
export const editor = createEditor({
initialValue: [
{
type: 'paragraph',
children: [{ text: 'Hello from Plate.' }],
},
],
});| Page | Covers |
|---|---|
| Plate Core | Editor creation, React runtime, plugins, stores, and render primitives. |
| Plate Utilities | Plate-owned identities and utility plugins. |
| React Utils | React utility hooks and helpers re-exported through platejs/react. |
| Plate Components | EditorRoot, EditorContent, EditorPreview, and component primitives. |
| Plate Editor | Runtime editor type, core APIs, transforms, DOM state, and metadata. |