Plate
PlateEditorsTemplates
GitHub16kGitHub
DiscordDiscord
    • Overview
    • Why This Fork
    • Examples
    • Installing Plite
    • Adding Event Handlers
    • Defining Custom Elements
    • Applying Custom Formatting
    • Executing Commands
    • Saving to a Database
    • Canonical Change Substrate
    • Improving Performance
    • Interfaces
    • Nodes
    • Locations
    • Transforms
    • Document Changes
    • Commands
    • Editor
    • Plugins
    • Rendering
    • Serializing
    • Normalizing
    • Using TypeScript
    • Roots
    • Document State
    • Editing Behavior
    • Selection And DOM
    • Clipboard And Paste
    • Decorations, annotations, and widgets
    • Schema
    • Anchor API
    • Location API
    • Path API
    • PointEntry API
    • Point API
    • Range API
    • Selection API
    • Location Types APIs
    • Span API
    • Editor
    • Element API
    • NodeEntry API
    • Node API
    • Node Types APIs
    • Text API
    • Debug Value Scrubbing
    • Transforms API
    • Plite DOM
    • History Editor API
    • History Plugin Setup
    • History
    • Plite History
    • Plite Hyperscript
    • Plite PaginationExperimental
    • Annotations
    • DOM Coverage Boundaries
    • Editable Component
    • External Text Views
    • Plite React Event Handling
    • Virtualized Rendering
    • Plite React Hooks
    • React Editor Setup
    • React Editor
    • Plite React
    • Plite Component
    • Plite Yjs
    • Plite
    • Migration
    • Contributing
    • FAQ
    • Resources

FAQ

PreviousNext

Common questions about paste behavior, browser support, package scope, and proof expectations.

These answers describe the Plite package set.

Why is pasted content plain text?

Plite does not know your product schema. It cannot safely turn arbitrary HTML into your nodes without an app-owned policy.

Paste first tries an internal Plite fragment, then registered DataTransfer formats, and finally plain text. Intercept domCommands.insertData through plugin commands when the app wants to consume DataTransfer HTML, files, or custom MIME data. Return a transaction spec when the interceptor owns the paste, or next() to continue the default import path.

Use Plite DOM, Event Handling, and the Paste HTML example as the starting points.

What browsers and devices does Plite support?

Desktop browser behavior is claimed only where tests and browser proof cover it.

The main local lanes target current Chromium, Firefox, Safari/WebKit, and mobile viewport rows through Playwright. Raw mobile-device behavior is a separate proof lane and should not be inferred from a desktop browser run.

If a behavior depends on native selection, IME, clipboard, drag/drop, hidden DOM, or huge documents, verify it through browser proof before treating it as supported.

Is this the official Slate release?

No. This is the Plite package set. It keeps a plain JSON document model, but its canonical change engine, runtime, package names, proof harness, and public API are maintained in the Plate repository.

Read Why This Fork for the maintenance philosophy and boundaries.

Should apps use @platejs/test?

Use @platejs/test for tests and proof harnesses. Do not build product editor features on it.

Apps should build editors with plitejs, plitejs/dom, plitejs/react, and the plugins they need.

Where should I start?

Start with Installing Plite. Then read Why This Fork if you need the project boundary, or Migration if you are moving from upstream Slate 0.x.

ContributingResources

On This Page

Why is pasted content plain text?What browsers and devices does Plite support?Is this the official Slate release?Should apps use @platejs/test?Where should I start?
Build your editor
Production-ready AI template and reusable components.
Get all-access