bloccs

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.

typed port declared effect message in result out

Nodes & effects

The unit of work, and the boundary to the outside world.

Node: animated bloccs notation

Node

1 in · 1 out · pure

A 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: animated bloccs notation

Effectful node

1 in · 1 out · +effect

A 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: animated bloccs notation

Source

0 in · 1 out

An entry point. No input — it produces messages into the graph and declares its ingress effect. Messages appear and flow out.

kind = "source"
Sink: animated bloccs notation

Sink

1 in · 0 out

An exit point. Messages terminate here; it declares the egress effect that writes them out. Arrivals are absorbed.

kind = "sink"
Subgraph: animated bloccs notation

Subgraph

1 in · 1 out

A 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: animated bloccs notation

Split

1 in · N out

Conditional 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: animated bloccs notation

Merge

N in · 1 out

Combines streams. Messages from several inputs flow out one output — a blue and a red arrive, a single green leaves.

fan-in edges
Filter: animated bloccs notation

Filter

1 in · 1 out

Predicate 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: animated bloccs notation

Join

N in · 1 out

Correlates 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: animated bloccs notation

Batch

N in · 1 out

Groups 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: animated bloccs notation

Throttle

1 in · 1 out

Rate limit. Smooths bursts into a steady, even output — a quick burst arrives and queues, then releases at an even cadence.

[rate]
Delay: animated bloccs notation

Delay

1 in · 1 out

Time 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.