{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "installation-rsc-docs",
  "title": "RSC",
  "description": "Install and configure Plate for React Server Components.",
  "files": [
    {
      "path": "../../content/docs/installation/rsc.mdx",
      "content": "---\ntitle: RSC\ndescription: Install and configure Plate for React Server Components.\n---\n\nUse Plate in React Server Components when you need to render read-only editor content or generate HTML on the server. Interactive editors still belong in client components with `platejs/react`. This guide shows the server-safe static editor path, HTML serialization, and the boundary with Node-only processing.\n\n## RSC Setup\n\n<Callout type=\"warning\" title=\"Use static imports\">\n  Do not import `platejs/react` or `@platejs/*/react` from a Server Component.\n  Use `platejs/static`, `platejs`, and base `@platejs/*` entrypoints.\n</Callout>\n\n<Steps>\n\n### Install the Base Kit\n\nInstall the copied base editor kit when you want Plate UI static components and\nthe default serializer plugins.\n\n```bash\nnpx shadcn@latest add @plate/editor-base-kit\n```\n\nThe `editor-base-kit` item installs `BaseEditorKit`, static node components, and\nthe `editor-static` UI component used by server rendering.\n\n### Render Static Content\n\nCreate a static editor in the Server Component and render it with\n`<PlateStatic>`.\n\n```tsx title=\"app/documents/page.tsx\" showLineNumbers\nimport type { Value } from 'platejs';\nimport { createStaticEditor, PlateStatic } from 'platejs/static';\n\nimport { BaseEditorKit } from '@/components/editor/editor-base-kit';\n\nconst value: Value = [\n  {\n    children: [{ text: 'Server-rendered document' }],\n    type: 'h1',\n  },\n  {\n    children: [{ text: 'This content is rendered without editor state.' }],\n    type: 'p',\n  },\n];\n\nexport default function DocumentsPage() {\n  const editor = createStaticEditor({\n    plugins: BaseEditorKit,\n    value,\n  });\n\n  return <PlateStatic editor={editor} />;\n}\n```\n\n### Serialize HTML\n\nUse `serializeHtml` when a route needs an HTML string instead of React output.\n\n```tsx title=\"app/api/document-html/route.ts\" showLineNumbers\nimport type { Value } from 'platejs';\nimport { createStaticEditor, serializeHtml } from 'platejs/static';\n\nimport { BaseEditorKit } from '@/components/editor/editor-base-kit';\nimport { EditorStatic } from '@/components/ui/editor-static';\n\nconst value: Value = [\n  {\n    children: [{ text: 'Exported document' }],\n    type: 'h1',\n  },\n  {\n    children: [{ text: 'This HTML is generated on the server.' }],\n    type: 'p',\n  },\n];\n\nexport async function GET() {\n  const editor = createStaticEditor({\n    plugins: BaseEditorKit,\n    value,\n  });\n\n  const html = await serializeHtml(editor, {\n    editorComponent: EditorStatic,\n  });\n\n  return new Response(html, {\n    headers: { 'content-type': 'text/html; charset=utf-8' },\n  });\n}\n```\n\n### Use Base Packages Without Plate UI\n\nIf you only need data transforms or Markdown IO, use the Node.js path instead\nof static React rendering.\n\n```bash\nnpm install platejs @platejs/basic-nodes @platejs/markdown\n```\n\nThat path uses `createSlateEditor` from `platejs` and does not need copied UI\ncomponents.\n\n</Steps>\n\n## Runtime Boundaries\n\n| Runtime | Import from | Use for |\n| --- | --- | --- |\n| Server Component | `platejs/static` | Read-only React output with `<PlateStatic>`. |\n| Route handler | `platejs/static` | HTML export with `serializeHtml`. |\n| Node script | `platejs`, `@platejs/*` | Validation, migration, Markdown IO. |\n| Client editor | `platejs/react`, `@platejs/*/react` | Editable UI, hooks, toolbar interactions. |\n\n<Callout type=\"info\">\n  `createStaticEditor` includes the static `ViewPlugin` before your plugins.\n  Use it for rendered output. Use `createSlateEditor` when the script only\n  reads or transforms a value.\n</Callout>\n\n## Next Steps\n\n| Task | Guide |\n| --- | --- |\n| Learn the static renderer. | [Static Rendering](/docs/static) |\n| Generate HTML. | [HTML](/docs/html) |\n| Read or write Markdown. | [Markdown](/docs/markdown) |\n| Transform content without React. | [Node.js](/docs/installation/node) |\n\nDone. Your Server Component can render Plate content without shipping the\ninteractive editor runtime.\n",
      "type": "registry:file",
      "target": "content/docs/plate/installation/rsc.mdx"
    }
  ],
  "type": "registry:file"
}