docs/slate-issues/requirements-from-issues.md
This file turns all 682 fully triaged open Slate issues into actual v2 requirements.
The 682 count is the frozen 2026-04-02 research snapshot.
Post-snapshot maintainer triage update:
54/54 queued issues are now closed628It is not a feature wishlist.
It is not a migration plan.
It is the constraint set a Slate v2 proposal should satisfy if it wants to solve the real recurring pain instead of just sounding cleaner on paper.
The full-corpus rescore says:
Mobile, IME, And Input Semantics: 129 issues, highest priority scoreSelection, Focus, And DOM Bridge: 172 issues, biggest raw clusterReact Runtime, Identity, And Subscription Model: 111 issuesPerformance And Scalability: only 13 issues, but second-highest priority score because the leverage is real19 explicitly-tagged issues plus adjacent selection and perf falloutThe package split says:
407113162That is the hard constraint. The issue corpus still does not say “replace Slate’s JSON model.” It says “stop leaking runtime, DOM, and input-method debt into normal editing.”
It also says slate-react has a specific render-time projection gap around decorations, marks, and annotation anchors. That seam was easy to bury inside broader runtime themes, but it keeps recurring and it needs a first-class answer.
Slate v2 should be:
That is the straightest reading of the full corpus.
The corpus does not justify making the core React-shaped.
The corpus absolutely does justify making the runtime stop fighting React, the browser, and input methods.
slate-react and slate-dom as first-class runtime packages, not adapters that mop up core timing debt.Owner: slate-v2
The core document should still look like a sane JSON document a user could store directly.
What this means:
What this does not ban:
Why this is required:
Owner: slate-v2
Transactions should change how Slate executes edits, not what the public primitive is.
What this means:
Why this is required:
69 issuesRepresentative evidence:
#5977#5771#5533#4750Owner: slate-v2
The core should execute edits in transactions and publish immutable committed snapshots.
What this means:
Why this is required:
slate-reactRepresentative evidence:
#6038#5709#5131#5274Owner: slate-v2
Slate needs stable runtime identity for nodes, selections, and subscriptions.
What this means:
What this does not mean:
Why this is required:
Representative evidence:
#5697#5709#5117#4842slate-react-v2 and slate-dom-v2Owner: shared
The runtime must stop acting like one blurry package boundary.
What this means:
slate-dom-v2 owns DOM point/path translation, clipboard DOM formats, selection bridge mechanics, shadow DOM ownership, nested editor DOM boundary rulesslate-react-v2 owns subscriptions, lifecycle, focus timing, placeholder/render timing, editor replacement semantics, React-facing event/lifecycle integration, and render-time decoration or annotation projectionslate-v2 owns the stable range and mark semantics those runtime projection layers depend onWhy this is required:
407, dwarfing core-engine ownership at 11319 explicitly-tagged issues sit on the decorations or marks or annotations seam aloneslate would just recreate the same design debtRepresentative evidence:
#5947#5938#5749#5152#5004#5987#3354#3383#2465#4477Owner: slate-dom-v2 + slate-react-v2
Selection should no longer be incidental glue spread across render timing, event handlers, and fallback repairs.
What this means:
Why this is required:
172118 of those issues land in runtime-boundary ownershipRepresentative evidence:
#6034#4789#4839#4881#5826Owner: slate-react-v2 + slate-dom-v2
IME and mobile input cannot keep living as “we’ll special-case browsers forever.”
What this means:
Why this is required:
124 of its 129 issues land in runtime-boundary ownershipRepresentative evidence:
#6022#5989#5984#5931#5175#4962slate-react-v2 Snapshot-Driven And Selector-FirstOwner: slate-react-v2
slate-react should consume committed snapshots through narrow subscriptions.
What this means:
Why this is required:
111 issues105 of those land in runtime-boundary ownershipRepresentative evidence:
#5131#5709#5568#5213#4961Owner: slate-history-v2 + slate-v2
Undo and redo should align with transaction boundaries and operation grouping policy, not incidental render timing or browser side effects.
What this means:
Why this is required:
Representative evidence:
#5533#5587#5250#5364Owner: slate-dom-v2 + slate-v2
Clipboard behavior and external document formats need a cleaner boundary than “whatever the current fragment format happens to be.”
What this means:
Why this is required:
37 issues, but 27 of those are runtime-boundary pressureRepresentative evidence:
#5233#5328#5630#4802#4906Owner: slate-v2, then slate-react-v2, then slate-hyperscript-v2
The API should be easier to reason about, not just more powerful.
What this means:
Why this is required:
Representative evidence:
#5287#5246#6013#4759#5599Owner: docs/examples/repo
This is a real maintenance lane. It is not a v2 engine requirement.
What this means:
Why this is required:
162 issuesRepresentative evidence:
#6007#4956#5212#4882Owner: shared
Performance requirements should stay attached to explicit workloads.
What this means:
Why this is required:
Representative evidence:
#6038#5992#5945#5216#5131slate-v2Must deliver:
Must not drift into:
slate-react-v2Must deliver:
Must not drift into:
slate-dom-v2Must deliver:
Must not drift into:
slate-history-v2Must deliver:
slate-hyperscript-v2Must deliver:
These are not justified by the current corpus:
slate-v2slate-react-v2 and slate-dom-v2 need to stop being cleanup crews for core timing debt.The next useful file is:
That should turn these requirements into a staged build order instead of leaving them as architecture doctrine.