Back to Plate

Slate v2 Package Impact Matrix

docs/slate-issues/package-impact-matrix.md

53.0.611.3 KB
Original Source

Slate v2 Package Impact Matrix

Scope

This is the full package-ownership pass over all 682 open Slate issues already triaged into the ledger.

The 682 count is the frozen 2026-04-02 research snapshot.

Post-snapshot maintainer triage update:

  • Dylan executed Batch A
  • 54/54 queued issues are now closed
  • live repo open-issue count is 628

The point is not to assign every bug to exactly one box and pretend boundaries do not exist. The point is to decide where each major pain class should be owned by default in a v2 architecture, so roadmap work stops smearing across packages.

Inputs

Top-Line Package Pressure

Direct issue ownership across all 682 ledger rows:

Package impactIssues
cross-package267
slate-react136
slate100
docs-only69
ecosystem49
site/examples32
repo-only12
slate-history11
slate-dom4
slate-hyperscript2

Collapsed by ownership lane:

Ownership laneIssues
runtime boundary (cross-package + slate-react + slate-dom)407
core engine (slate + slate-history + slate-hyperscript)113
maintainer noise (docs-only + site/examples + repo-only + ecosystem)162

Strong take:

  • the runtime boundary is the real center of gravity
  • raw direct counts still understate slate-dom, because many DOM bugs are correctly triaged as cross-package
  • the main ownership problem is boundary smear, not lack of packages

Current Package Roles

PackageCurrent responsibilityWhat it should not absorb by default
slatedocument model, operations, normalization, refs, core editor semanticsbrowser quirks, React lifecycle timing, example/docs drift
slate-reactReact runtime, hooks, rendering, event/lifecycle integrationlow-level DOM point translation that should be shared beyond React
slate-domDOM bridge, point/path translation, clipboard DOM formats, browser-facing editor glueReact subscription policy, hook ergonomics, general engine semantics
slate-historyundo/redo semantics over core operationsgeneral selection repair, DOM ownership, render timing
slate-hyperscriptdocument construction helpers and test/document authoring ergonomicsruntime selection/input bugs, general API clutter
docs/examplesonboarding, examples, reference, support load reductionarchitecture decisions that belong in packages

Theme Ownership Matrix

ThemePackage pressurePrimary ownerSecondary ownersDefault v2 targetWhy
Mobile, IME, And Input Semantics124 runtime, 4 maintainer, 1 coreslate-react-v2 + slate-dom-v2slate-v2shared input pipelinecomposition, placeholder, Android/iOS quirks, and selection reconciliation live at the runtime boundary, not in the pure document model
Performance And Scalability7 runtime, 5 core, 1 maintainersharedslate-v2, slate-react-v2, slate-dom-v2benchmark-driven cross-cutperf issues map back to engine cost, subscription breadth, or browser-selection behavior, not to a standalone perf package
React Runtime, Identity, And Subscription Model105 runtime, 5 maintainer, 1 coreslate-react-v2slate-v2React runtime rewritesubscriptions, focus lifecycle, editor instance replacement, and render breadth belong to the React package, backed by better core snapshots
Selection, Focus, And DOM Bridge118 runtime, 35 core, 19 maintainerslate-dom-v2 + slate-react-v2slate-v2shared runtime boundaryDOM translation and selection repair are browser/runtime work first, with core only providing stable identity and commit semantics
Clipboard, Serialization, And External Formats27 runtime, 4 core, 6 maintainerslate-dom-v2 + slate-v2slate-hyperscript-v2import/export seam cleanupDOM clipboard handling and internal fragment semantics need a cleaner boundary than the current implicit coupling
Core Model, Operations, Normalization, And History54 core, 9 runtime, 6 maintainerslate-v2slate-history-v2engine rewritethis is where transactions, operation ownership, normalization debt, and stable identity earn their keep
API, Typing, And Extensibility12 core, 10 runtime, 11 maintainerslate-v2slate-react-v2, slate-hyperscript-v2core contract cleanupthis is mostly about the public model, operation contracts, type guards, and extension seams
Docs, Examples, Support Noise, And Repo Churn110 maintainer, 7 runtime, 1 coredocs/examples/repononenon-v2 lanethis is maintainer-load and onboarding debt, not a reason to distort the architecture

Cross-Cutting Runtime Seam: Decorations, Marks, And Annotations

At least 19 explicitly-tagged issues in the ledger land on this seam. The macro clusters spread them across React runtime, performance, selection, API shape, and collaboration, but ownership is still clear.

Primary owner: slate-react-v2
Secondary owner: slate-v2
Tertiary owner: slate-dom-v2 when the failure crosses into DOM selection or range translation

Why:

  • slate-react-v2 should own decoration subscriptions, render-time mark projection, cross-node decoration behavior, and annotation rendering hooks.
  • slate-v2 should own stable range and mark semantics, overlapping metadata behavior, and anchor identity that survives selection movement and replacement.
  • slate-dom-v2 should only step in when decorated or annotated content interacts with browser range translation, inline boundaries, or selection repair.

Representative issues:

  • #5987
  • #3354
  • #3352
  • #3383
  • #2465
  • #4483
  • #4477

Ownership Rules

Use these before assigning a future issue to the wrong lane:

  1. If the bug is reproducible in pure transform/history tests, start in slate.
  2. If the bug needs DOM point translation, native selection state, clipboard DOM, shadow DOM, or browser hit-testing, start in slate-dom.
  3. If the bug is about rerenders, hook values, focus timing, placeholder lifecycle, editor replacement, or React event timing, start in slate-react.
  4. If the bug is really about undo grouping or transaction boundaries after core fixes, then and only then push it into slate-history.
  5. If the issue is mostly about document construction helpers, testing JSX/hyperscript ergonomics, or adapter sugar, start in slate-hyperscript.
  6. If the issue disappears once the example or docs are corrected, keep it out of the v2 package roadmap.

What This Clarifies For v2

slate-v2

Own:

  • transaction-first execution
  • op-first external model
  • normalization ownership
  • stable node identity that does not pollute the serialized JSON shape
  • history-friendly commit boundaries

Do not own by default:

  • mobile/browser quirks
  • focus repair
  • React hook shape

slate-react-v2

Own:

  • selector-based subscriptions
  • snapshot consumption
  • focus and lifecycle correctness
  • placeholder/render timing
  • editor instance replacement and controlled/external update ergonomics

Do not own by default:

  • generic DOM point/path translation
  • core transform semantics

slate-dom-v2

Own:

  • DOM point/path translation
  • selection bridge
  • clipboard DOM formats
  • shadow DOM and nested-editor ownership rules
  • browser-specific input and hit-testing seams that are not React-specific

Do not own by default:

  • hook APIs
  • history semantics

slate-history-v2

Own:

  • transaction-aware undo units
  • operation grouping policy
  • collaboration-friendly history boundaries

Do not own by default:

  • general selection bugs
  • browser-owned focus or composition failures

slate-hyperscript-v2

Own:

  • fixture/document authoring ergonomics
  • test/document-construction helpers
  • optional adapter-facing sugar

Do not own by default:

  • core runtime pain
  • general typing debt in slate or slate-react

Sharp Conclusions

  1. The runtime roadmap belongs mostly to slate-react-v2 and slate-dom-v2, not to slate-v2 pretending it can own every browser cut.
  2. slate-v2 still matters most architecturally, but for engine semantics, not for every cursor glitch or mobile composition wound.
  3. The low direct slate-dom count is misleading. The DOM bridge is still one of the biggest actual ownership surfaces because cross-package is dominated by runtime-boundary failures.
  4. Docs/examples need a real maintenance lane, or they will keep poisoning the roadmap signal.
  5. slate-history-v2 and slate-hyperscript-v2 are supporting packages, not the center of gravity.

What This Does Not Mean

  • It does not mean slate-v2 should become React-shaped.
  • It does not mean every input-method bug is Slate-owned instead of browser-owned.
  • It does not mean slate-dom-v2 should become a dumping ground for every awkward runtime problem.

Next Artifact

The next useful file is:

That should turn this ownership split into actual v2 requirements instead of leaving it as a taxonomy exercise.