docs/research/sources/editor-architecture/tiptap-extension-command-react-dx.md
Compile the Tiptap evidence that matters to Slate v2's extension ergonomics and React integration.
editor.commands and
editor.chain().CommandManager builds single-command and chained-command APIs around one
transaction.Slate v2 should make feature packaging feel like:
Plate should not have to manually thread unrelated snippets across React providers, editor construction, and command handlers.
Tiptap's command catalog is good DX. Slate v2 should expose discoverable editor
methods and extension methods, but should keep the write lifecycle as
editor.update.
Tiptap's chain API is useful for composing multiple operations into one transaction. Slate v2 can offer optional sugar:
editor.chain().setNodes(props).wrapNodes(wrapper).run()
But chain().run() should be sugar over editor.update, not a second engine.
Tiptap docs correctly identify React rerender pressure around editor transactions. Slate v2 should go further:
EditorCommit dirtinessTiptap's composable React API is good product DX. Slate v2 / Plate should provide:
chain().focus().command().run() for ordinary toolbar
commands.Tiptap is the product-DX benchmark, not the engine benchmark.
Slate v2 should use:
editor.update as lifecycle
primitive methods as power API
extension methods as product API
optional chain as sugar
selector hooks for React UI
This keeps Slate flexibility while giving Plate/Tiptap-level ergonomics.