Blueprint
The visual programming layer — what a blueprint is, where one lives, and what it is allowed to do.
A blueprint is a visual program: nodes joined by edges, executed by the game runtime. Blueprints are how a project gets behaviour without code — a button that opens a screen, a menu that lists saves, a title screen that knows whether there is anything to continue.
A blueprint is not the only way to fill a slot. A slot holds a list of layers, and a layer can be a script instead — a TypeScript file the project owns, edited outside Studio. Every layer runs, so a script can sit beside a graph in the same slot. Scripts covers where those files live and how one is entered.

Every blueprint answers three questions before you place a single node: who owns it, what kind of graph it is, and therefore which nodes the palette will offer you.
Owners
The owner is where a blueprint lives. It decides the blueprint's lifetime and what it can reach.
| Owner | Belongs to | Lives as long as |
|---|---|---|
globalMain | the project | the application |
surfaceMain | one Surface | that Surface's instance |
widgetMain | one widget instance | that widget instance |
widgetValue | one property of one widget | the binding that owns it |
componentWidgetMain | a reusable component widget | each instance of the component |
sharedAsset | a shared blueprint asset | whatever imports it |
storyAction | one story blueprint, in action, value or condition mode | the row that calls it |
A widgetMain blueprint acts on its own widget through Self nodes, which take no Element input. To act on a different widget you wire an Element reference into an Element node. That split runs through the whole node catalog, and it is the first thing to understand about the palette.
Graph kinds
Each graph declares a graph kind, and the kind is a rule set, not a label.
| Kind | Effectful nodes | Entry node | Bindable from widget UI |
|---|---|---|---|
event | allowed | an event head (Init, On Click, …); not mandatory | yes |
function | not allowed | Function Entry, required | no |
macro | allowed | none required | no |
Latent nodes — anything that suspends the graph, such as Delay or a save write — cannot appear in a function graph. A function returns synchronously to whoever called it and has nowhere to hand a pending result.
Blueprint Value
A Blueprint Value is a widgetValue blueprint bound to one property, so the property is computed instead of authored. The current targets are nl.text → props.text, nl.button → props.label, nl.frame → props.params, and nl.slider → props.value.
Its palette is deliberately narrow: event heads, non-latent flow, pure Data and Math, local variable access, Element literals, and pure reads. No mutations, no navigation, no persistent variables, no latent nodes. A value provider that could change the world would re-enter itself the moment the world changed.
The editor canvas is a layout tool. It resolves enough of a blueprint to preview a value binding, but it runs no game — nodes that need a running playthrough have nothing to talk to there. Verify blueprint behaviour in Dev Mode.
Where to go next
Variables
Scopes, lifetimes, and what survives a save.
Surfaces
Screens, the navigation stack, and the game stage.
Nodes
Every node, by category, with its signature.
To ship your own nodes instead of using the built-in ones, see blueprintNodes in the plugin API.