docs/research/sources/editor-architecture/node-text-mark-render-dx-corpus-ledger.md
Record the full-mode corpus closure for editor node, text, mark, and render DX across ProseMirror, Lexical, and Tiptap.
This pass answers a narrower question than the read/update runtime pass:
What should the public authoring API look like when Slate closeness is not a
constraint, React/shadcn flexibility is mandatory, and runtime performance must
not regress?
docs/research/sources/editor-architecture/prosemirror-transaction-view-dom-runtime.mddocs/research/sources/editor-architecture/prosemirror-mapped-overlays-and-bookmarks.mddocs/research/entities/prosemirror.md../raw/prosemirror/README.md../raw/prosemirror/packages/model/src../raw/prosemirror/packages/schema-basic/src../raw/prosemirror/packages/view/src../raw/prosemirror/packages/model/src/schema.ts../raw/prosemirror/packages/schema-basic/src/schema-basic.ts../raw/prosemirror/packages/view/src/viewdesc.ts../raw/prosemirror/packages/view/src/index.ts../raw/prosemirror/packages/view/src/decoration.tshttps://github.com/ProseMirror/prosemirror.githttps://code.haverbeke.berlin/prosemirror/../raw/prosemirror/README.mdNodeSpec and MarkSpec are strong declarative schema contracts:
content expressions, mark allow-lists, groups, inline/atom/selectable/
draggable/code/defining/isolating flags, parse rules, and DOM serializers.NodeView exposes dom, optional contentDOM, update, selection
hooks, event stopping, mutation ignoring, and destruction. It is powerful,
but it gives app code direct responsibility for browser-editing boundaries.EditorProps.nodeViews and markViews are the view escape hatches.
Mark views are simpler and less dynamic than node views.DecorationSet is a persistent, mapped view-data structure with widget,
inline, and node decorations.evidenceddocs/research/sources/editor-architecture/lexical-read-update-extension-runtime.mddocs/research/sources/editor-architecture/lexical-mark-store-and-decorator-split.mddocs/research/entities/lexical.md../raw/lexical/README.md../raw/lexical/repo/packages/lexical-website/docs../raw/lexical/repo/packages/lexical/src../raw/lexical/repo/packages/lexical-website/docs/intro.md../raw/lexical/repo/packages/lexical-website/docs/concepts/nodes.mdx../raw/lexical/repo/packages/lexical-website/docs/concepts/node-state.md../raw/lexical/repo/packages/lexical-website/docs/concepts/node-replacement.md../raw/lexical/repo/packages/lexical-website/docs/concepts/serialization.md../raw/lexical/repo/packages/lexical-website/docs/react/faq.md../raw/lexical/repo/packages/lexical/src/LexicalNode.ts../raw/lexical/repo/packages/lexical/src/nodes/LexicalTextNode.ts../raw/lexical/repo/packages/lexical/src/LexicalUpdates.tshttps://github.com/facebook/lexical.git../raw/lexical/README.mdTextNode has built-in format bits, style, detail bits, and modes:
normal, token, and segmented. Token and segmented behavior is worth
adapting as declarative text behavior.DecoratorNode can render framework output through a decorate() return
value, but authors still implement node classes, DOM creation, and DOM
update methods.NodeState is the best Lexical authoring improvement: ad-hoc typed state
can be attached to any node, copied copy-on-write, serialized, and synced
through Yjs. The docs also state it can remove many subclassing use cases.LexicalNode subclasses can need full refresh during fast refresh.evidenceddocs/research/sources/editor-architecture/tiptap-extension-command-react-dx.mddocs/research/sources/editor-architecture/tiptap-comments-suggestions-and-node-range.mddocs/research/entities/tiptap.md../raw/tiptap/README.md../raw/tiptap/repo/packages/core/src../raw/tiptap/repo/packages/react/src../raw/tiptap/docs/src/content../raw/tiptap/repo/packages/core/src/Node.ts../raw/tiptap/repo/packages/core/src/Mark.ts../raw/tiptap/repo/packages/core/src/Extendable.ts../raw/tiptap/repo/packages/core/src/CommandManager.ts../raw/tiptap/repo/packages/core/src/NodeView.ts../raw/tiptap/repo/packages/react/src/useEditorState.ts../raw/tiptap/repo/packages/react/src/EditorContent.tsx../raw/tiptap/docs/src/content/editor/core-concepts/extensions.mdx../raw/tiptap/docs/src/content/editor/extensions/custom-extensions/node-views/index.mdx../raw/tiptap/docs/src/content/editor/extensions/custom-extensions/node-views/react.mdx../raw/tiptap/docs/src/content/guides/performance.mdx../raw/tiptap/docs/src/content/guides/faq.mdx../raw/tiptap/docs/src/content/guides/react-composable-api.mdxhttps://github.com/ueberdosis/tiptap.githttps://github.com/ueberdosis/tiptap-docs.git../raw/tiptap/README.mdCommandManager exposes single commands, chained commands, and can()
around one transaction.ReactNodeViewRenderer, NodeViewWrapper,
NodeViewContent, updateAttributes, deleteNode, selection props, and
drag handles.useSyncExternalStoreWithSelector,
useEditorState, selector equality, shouldRerenderOnTransaction, and
portal rendering for node views.evidencedNo raw gap remains for this scoped pass.
No corpus provides the full target alone:
The best architecture is a spec-first extension API with runtime-owned DOM shells and app-owned visible React renderers.