Part I · Principles
2 Principles
The ten principles every rule in the specification follows from, which every profile has to keep.
NormativeDraft 0.11 requirement · Roswaal meets 0
2.1 The ten principles
Every rule in this specification follows from one of these.
A profile MUST keep all ten. Where a language seems to need an exception, the exception is a proposal to change this page (§14.2), not a choice a profile makes quietly.
Roswaal's two Luau profiles do not yet keep principle 9 on the canvas (§8.4), and a graph with more than one script start runs them by position (§7.1), which principle 1 rules out.
1. Order is visible
What runs, and in what order, is read from the flow wires: along the headers, one wire per step. No step runs that a flow wire does not reach.
2. Values have no order
A value node is worked out where it is used and only there. It has no flow pins and no place in time, so it can be read on its own.
3. A pin says what it is without colour
Its name, its family's shape, and its type in words where the name does not already say it. Colour adds to that and never carries it alone.
4. A node at rest shows only what it says
Controls appear when they are reached for: on hover, on selection, from the keyboard. A graph read at a glance is a graph of names and wires.
5. A problem is said where it is, and seen first
An error or warning is written in words beside the node it belongs to, and drawn above everything in the graph. Only the panels around the canvas may cover it.
6. One set of numbers
Where things are is computed from fixed numbers, never measured from text, so a graph is drawn the same by every implementation, in every font and at every zoom.
7. Familiar, never surprising
Someone who knows another node graph editor reads a graph without being taught: wires, pins by type, steps in a chain, values feeding them. Where this design differs, it differs on purpose and says why.
8. What you see is what compiles
A graph file is plain data, and every node compiles from what is on it, its settings and the project's settings file. Nothing else changes the program.
9. Every hand, every screen
A mouse, a keyboard, a finger and a screen reader can each do everything; a phone and a projector can each show the graph.
10. The output is the language's own
What a graph compiles to reads as code a person in that language would write: named after the graph, laid out by the language's own tools, needing nothing of the implementation's to run.
2.2 Where they come from
Info
Principles 1, 2 and 7 are the node graph editors people already use: the line they all draw between steps and values, and the shapes they draw them in. Principles 3, 4 and 5 were settled in Roswaal 0.161, when the node was redrawn to be read rather than recognised: shapes and words beside colour, controls that wait to be reached for, and problems that cannot be covered. Principle 6 is older: one table of numbers, shared by the canvas and the documentation's pictures, so neither can drift from the other. Principles 8 and 10 are how Roswaal has worked from the start: a node pack is data that is read and never run, and the Luau it writes is meant to be read and kept by people who never open the graph. Principle 9 is the one Roswaal keeps least so far.
2.3 Familiar from other editors
Info
Coming from Blueprints maps one widely used editor's terms onto these, one by one. In short: flow pins are what node graph editors call execution or flow pins, and are drawn as a flow socket usually is; a value node is what they call pure; a reroute knot is everyone's reroute; and the type colours keep to the usual ones where the types line up, so a boolean is red and a number green.