@platejs/plite is the framework-free editor runtime. It owns document values,
roots, canonical document changes, schema extensions, state fields, read APIs, transaction
groups, and pure node/location helper namespaces.
Use @platejs/plite in package code that should not import React or Plate core.
Framework packages such as @platejs/plite-react and @platejs/core/react
mount this runtime instead of replacing it.
import { createEditor } from "@platejs/plite";
const editor = createEditor({
initialValue: [{ children: [{ text: "Hello" }], type: "paragraph" }],
maxLength: 1000,
});
editor.update((tx) => {
tx.text.insert(" world");
});
const text = editor.read((state) => state.text.string([]));import { createEditor } from "@platejs/plite";
const editor = createEditor({
initialValue: [{ children: [{ text: "Hello" }], type: "paragraph" }],
maxLength: 1000,
});
editor.update((tx) => {
tx.text.insert(" world");
});
const text = editor.read((state) => state.text.string([]));createEditor returns an editor with explicit read(...) and update(...)
boundaries. Reads observe committed state. Writes run inside transaction groups.
maxLength caps user-facing insertions without changing imported document
changes.
| Surface | Export | Use |
|---|---|---|
| Editor factory | createEditor | Creates a framework-free Plite editor. |
| Runtime views | createEditor, createEditorView | Create one committed editor and optional root-scoped views. |
| Editor types | Editor, BaseEditor, Value, InitialValue, Selection, ValueOf | Type editor instances, document values, and selection state. |
| Read API | EditorStateView, EditorStateValueApi, EditorStateSelectionApi, EditorStateTextApi | Read committed state inside editor.read(...). |
| Transaction API | EditorUpdateTransaction, EditorTransactionValueApi, EditorTransactionNodesApi, EditorTransactionSelectionApi | Mutate editor state inside editor.update(...). |
| Interfaces | ElementApi, NodeApi, TextApi, PathApi, PointApi, RangeApi | Typed helpers for Plite data structures. |
| Anchors | Anchor, editor.anchor, tx.anchor | Keep paths, points, and ranges mapped through document changes. |
| Extensions | defineExtension, defineEditorSchema, defineStateField, property, schema | Register schema facts, owner-local reads and updates, corrections, commands, read middleware, and lifecycle hooks. |
| Dependency references | EditorExtensionDependencyReference | Describe one shallow extension identity with name and optional enabled; capability/provider compiler types stay under @platejs/plite/internal. |
| Value codecs | defineValueCodec, valueCodecs, encodeEditorEffect, decodeEditorEffect | Version persisted fields and keyed shared effects. |
An Editor exposes committed state through explicit read and update entrypoints.
| Field | Type | Use |
|---|---|---|
api | Readonly<EditorCoreApiGroups & EditorInstalledApiGroups> | Access installed runtime services. |
id | string | Identify the logical editor instance. |
extend | (extension) => () => void | Install an extension and return its cleanup function. |
extension | (descriptor) => EditorExtensionPortal | Read one installed descriptor's typed runtime API. |
read | EditorRead<Value, TExtensions> | Run direct or grouped committed-state reads. |
subscribe | (listener) => () => void | Observe snapshots and optional commits. |
subscribeCommit | (listener) => () => void | Observe committed changes. |
update | EditorUpdate<Value, TExtensions> | Run direct, configured direct, or atomic model writes. |
| Page | Covers |
|---|---|
| Editor API | Read methods on editor.read(...) state groups. |
| Editor Transforms | Transaction methods on editor.update(...) tx groups. |
| Node | Node, descendant, ancestor, and node-entry helpers. |
| Element | Element types, element props, and element guards. |
| Text | Text node types, mark objects, and text guards. |
| Path | Path comparison, movement, ancestry, and transform helpers. |
| Point | Point comparison, edge checks, and point transforms. |
| Range | Range checks, edge helpers, intersection, inclusion, and transforms. |
| Location | Path, Point, Range, and Span location unions. |
| Anchor | Root-aware live paths, points, and ranges. |
| Document changes | Serialize and apply canonical DocumentChange values. |
editor.update({ history: "new-batch" }, (tx) => {
tx.text.insert("Title");
tx.break.insert();
});
editor.update({ history: "skip" }).selection.set([]);editor.update({ history: "new-batch" }, (tx) => {
tx.text.insert("Title");
tx.break.insert();
});
editor.update({ history: "skip" }).selection.set([]);History is a Plite extension. It stores undo and redo batches, exposes history state through its read group, and exposes undo/redo plus batching helpers through its update group.
Extensions register schema facts, owner-local read and update groups, corrections, commands, read middleware, lifecycle listeners, and runtime APIs.
Use an api factory for mounted host/runtime services, even when it needs no
context. It receives one { editor, root, getContributions } object. Use
update for feature commands that change Plite model state.
import {
defineExtension,
defineEditorSchema,
defineStateField,
property,
schema,
} from "@platejs/plite";import {
defineExtension,
defineEditorSchema,
defineStateField,
property,
schema,
} from "@platejs/plite";Pure data helpers live on ElementApi, LocationApi, NodeApi, PathApi,
PointApi, RangeApi, SelectionApi, SpanApi, and TextApi. ChangeSet
and DocumentChange own canonical change algebra.
Inside editor.read(...) and editor.update(...), prefer grouped state.*
and tx.* APIs. Use helper namespaces when library code needs pure operations
on Plite data outside an editor transaction.
@platejs/plite is re-exported from the
platejs umbrella package.