Notation
Every node, and what it does.
Each primitive is a hexagon: the inner glyph is its behaviour, the dots are typed ports, and a badge on the top vertex marks a declared effect. Watch each one act out what it does — coloured messages flow through so the behaviour reads at a glance.
Nodes & effects
The unit of work, and the boundary to the outside world.
Node
1 in · 1 out · pureA pure transform. One message in, one out — same input, same output, no side effects. A blue message goes in and a transformed green one comes out.
kind = "transform"
Effectful node
1 in · 1 out · +effectA transform that declares a capability. It may reach the outside world — but only what it declares. Here it calls out to a store mid-flow, then continues.
[effects]
Source
0 in · 1 outAn entry point. No input — it produces messages into the graph and declares its ingress effect. Messages appear and flow out.
kind = "source"
Sink
1 in · 0 outAn exit point. Messages terminate here; it declares the egress effect that writes them out. Arrivals are absorbed.
kind = "sink"
Subgraph
1 in · 1 outA whole network as one node — a used manifest, flattened into the graph. A message threads through the inner nodes and out.
use = "net.bloccs"
Flow primitives
How messages are routed, combined, held, and shaped between nodes.
Split
1 in · N outConditional fan-out. One message in, routed to one of several outputs by a decision — the blue one goes up, the red one goes down.
kind = "router"
Merge
N in · 1 outCombines streams. Messages from several inputs flow out one output — a blue and a red arrive, a single green leaves.
fan-in edges
Filter
1 in · 1 outPredicate drop. Messages that don't match are dropped; the rest pass through unchanged. The green one passes, the red one falls away.
return :drop
Join
N in · 1 outCorrelates by key. The first keyed message waits at the node until its partner arrives on the other input, then one combined result leaves.
[join]
Batch
N in · 1 outGroups messages and emits them as one batch, by size or timeout. Several arrive and stack, then leave together as a single bundle.
[batch] size = N
Throttle
1 in · 1 outRate limit. Smooths bursts into a steady, even output — a quick burst arrives and queues, then releases at an even cadence.
[rate]
Delay
1 in · 1 outTime shift. Holds each message for a set duration, then releases it. The message arrives, waits a beat, then continues.
delay_ms = N
See them wired into a real pipeline.
Each use case is these primitives composed into a network you can read, compile, and run.