Install the optional Markdown peers only when the process converts Markdown:
Install the optional HTML server DOM peer only when the process parses HTML:
platejs/html/server is ESM. parse5 is a direct Plate dependency;
linkedom remains server-only and does not enter browser bundles.
import { BaseBoldPlugin, BaseHeadingPlugin, createEditor } from 'platejs';
const editor = createEditor({
plugins: [BaseHeadingPlugin, BaseBoldPlugin],
initialValue: {
children: [
{ type: 'heading', level: 1, children: [{ text: 'Document title' }] },
{ type: 'paragraph', children: [{ text: 'Body' }] },
],
},
});
const document = editor.read.value();import { BaseBoldPlugin, BaseHeadingPlugin, createEditor } from 'platejs';
const editor = createEditor({
plugins: [BaseHeadingPlugin, BaseBoldPlugin],
initialValue: {
children: [
{ type: 'heading', level: 1, children: [{ text: 'Document title' }] },
{ type: 'paragraph', children: [{ text: 'Body' }] },
],
},
});
const document = editor.read.value();editor.read.value() returns the complete document, including named roots and
persistent metadata. Use editor.update(...) for atomic transformations.
Use direct functions when an editor lifecycle adds no value:
import { BaseBoldPlugin, BaseHeadingPlugin } from 'platejs';
import { parseMarkdown, serializeMarkdown } from 'platejs/markdown';
const plugins = [BaseHeadingPlugin, BaseBoldPlugin] as const;
const parsed = parseMarkdown('# Title\n\n**Body**', { plugins });
if (!parsed.ok) throw new Error(parsed.diagnostics[0].message);
const output = serializeMarkdown(parsed.document, {
plugins,
projection: 'accepted',
});
if (output.ok) console.info(output.data);import { BaseBoldPlugin, BaseHeadingPlugin } from 'platejs';
import { parseMarkdown, serializeMarkdown } from 'platejs/markdown';
const plugins = [BaseHeadingPlugin, BaseBoldPlugin] as const;
const parsed = parseMarkdown('# Title\n\n**Body**', { plugins });
if (!parsed.ok) throw new Error(parsed.diagnostics[0].message);
const output = serializeMarkdown(parsed.document, {
plugins,
projection: 'accepted',
});
if (output.ok) console.info(output.data);Install MarkdownPlugin when several operations should reuse one editor's
compiled target:
import { MarkdownPlugin } from 'platejs/markdown';
const editor = createEditor({
plugins: [BaseHeadingPlugin, BaseBoldPlugin, MarkdownPlugin],
});
const parsed = editor.api.markdown.parse(source);
const output = editor.api.markdown.serialize({ projection: 'proposed' });import { MarkdownPlugin } from 'platejs/markdown';
const editor = createEditor({
plugins: [BaseHeadingPlugin, BaseBoldPlugin, MarkdownPlugin],
});
const parsed = editor.api.markdown.parse(source);
const output = editor.api.markdown.serialize({ projection: 'proposed' });import { BaseBoldPlugin, BaseHeadingPlugin } from 'platejs';
import { parseHtml } from 'platejs/html/server';
const result = parseHtml(source, {
plugins: [BaseHeadingPlugin, BaseBoldPlugin],
});
if (!result.ok) throw new Error(result.diagnostics[0].message);import { BaseBoldPlugin, BaseHeadingPlugin } from 'platejs';
import { parseHtml } from 'platejs/html/server';
const result = parseHtml(source, {
plugins: [BaseHeadingPlugin, BaseBoldPlugin],
});
if (!result.ok) throw new Error(result.diagnostics[0].message);The server parser and browser parser share one parse5 tree and safety policy. The server adapter does not install ambient DOM globals, execute scripts, or load resources.
DOCX import is detached and browser/client-only. Supply the complete plugin
target in options; do not pass an editor.
import { importDocx } from 'platejs/docx/import';
const result = await importDocx(file, {
plugins: EditorKit,
signal,
});import { importDocx } from 'platejs/docx/import';
const result = await importDocx(file, {
plugins: EditorKit,
signal,
});Use a browser or client worker for that operation. Server-side DOCX conversion is not implied by the headless editor runtime.
| Runtime | Import | Use |
|---|---|---|
| Node editor | platejs | Read, validate, and transform documents. |
| Node Markdown | platejs/markdown | Parse and serialize Markdown. |
| Node HTML parse | platejs/html/server | Parse complete HTML documents or slices. |
| Semantic HTML serialize | platejs/html | Serialize a detached Plate document. |
| Static rendering | platejs/static | Render server-safe static components. |
| React editor | platejs/react, feature /react paths | Mounted editing UI and hooks. |