Files
meadows/docs/adr/0002-vue-flow-substrate.md
2026-06-20 02:09:09 +02:00

1.2 KiB
Raw Blame History

Vue Flow is the editor substrate; the domain Model is the source of truth

The editor is built on Vue Flow (@vue-flow/core) for pan/zoom, node dragging, handles, edge-drawing, and selection, with Stocks/Flows/Converters/ Clouds as custom Vue node components. We rejected hand-rolling an SVG editor (too slow to the friction goals F1F3) and heavier kits (AntV X6, mxGraph — not Vue-3-native).

The constraint that makes this safe: the domain Model is the single source of truth; the Vue Flow graph is a derived projection of it, never the reverse. All writes go through store actions that mutate the Model; the Vue Flow view is re-derived. The future simulator reads the Model and has no knowledge of Vue Flow.

Consequences

  • A projection layer (Model → Vue Flow nodes/edges, and Vue Flow events → store actions) must be built and kept thin. This is the price of the dependency.
  • Swapping the rendering substrate later means rewriting only the projection + node/edge components, not the domain model or the simulator.
  • A reader wondering "why is there a sync/projection layer instead of editing Vue Flow state directly?" should look here: it protects the simulate-later constraint.