Crate: dioxus-flow 0.1.2 · repo · same author as dioxus-workbench, which we already depend on. ~8.3k lines, deps: dioxus, serde (optional), web-time; no JS.

What it offers (from README + source, 2026-09-17)

Pannable/zoomable canvas, draggable nodes, connectable handles (drag to create an edge, snapping), bezier/straight/smooth-step edges with labels, arrowheads, animated edges, layered auto-layout in four directions with animation, “seat anchoring” for crossing-free endpoints, minimap/controls/background, custom node and edge rendering with any Dioxus component, keyboard/ARIA, dark mode via CSS variables, 60 fps at ~1000 nodes. Roadmap: box selection, edge reconnection, sub-flows/grouping, viewport culling.

Fit for Moonkale

need (Flow Editor)dioxus-flowverdict
drag-and-drop blocks wired by typed portshandles + connections + custom node views✅ direct hit
validation (port types, cycles)not built in; we validate on the connect event and reject/colour the edge✅ our layer
storage as ordinary nodes/edges (Block, flow.wire)nodes/edges are plain signals we own✅ maps 1:1 onto core
layered layout for DAGs (ML models, MTK)built-in, animated✅ replaces our own hierarchical for flows
very large flowsDOM-based, ~1000 nodes⚠️ fine for flows; the wgpu graph view stays for the knowledge graph
Rust-only, no JSyes✅ no interop boundary needed
maturity0.1.x, one author, CI⚠️ same risk profile as dioxus-workbench, which worked out

Recommendation

Adopt dioxus-flow as the canvas of the Flow Editor (Phase 5, R-24): it removes the SVG canvas, wiring, snapping and layout work from packages/editors/flow and leaves us the parts that are actually ours — block libraries as extension contributions, port-type validation, and codegen (Lux.jl / ModelingToolkit.jl). Keep the graph view (wgpu) separate; the two crates address different scales and interaction models. One design implication for now: editors/flow should model blocks/ports so they convert to dioxus_flow::{Node, Edge} without a second representation.

Not adopted yet — nothing in Milestone 2 needs it. Recorded in Flow Editor.