A workflow canvas without multiplayer is a single-player IDE. The moment two engineers need to look at the same DAG, you are back to screenshots in Slack.
AACFlow's canvas is multiplayer by default. Two, ten, or fifty users can edit the same workflow at the same time — drag blocks, rename ports, edit prompt bodies — and everyone sees the same thing within milliseconds. Underneath sit 22 socket files, one big collaborative hook, and a Redis pub/sub fabric that makes it horizontally scalable without sticky sessions.
Rooms Per workflowId, Not Per User
Every workflow becomes its own room. When a client opens /workspace/:wsId/w/:workflowId, the socket joins room:workflow:<workflowId>. All edits are broadcast inside that room and nowhere else.
This sounds obvious but it is the single most load-bearing decision in the design. Permissions are checked once on join — we resolve the workspace membership and edit rights server-side before socket.join() ever fires. Once you are in the room you can emit block:update, edge:create, node:move, port:rename events freely, and the server fan-outs them to every other member of the room.



