Skip to content
Back to bloccs

THE NOTATION / 12 PRIMITIVES

A small vocabulary.
Whole systems.

One shape, twelve behaviors. Typed ports on the edges. Declared effects on the shell. A visual language you can read before you read the code.

Explore the library
NOTATION / ISOMETRIC STUDY01 — 12
A pure node: an isometric hexagon, center dot, and one port on either side

Node

1 in · 1 out · pure

kind = "transform"

Select a primitive below to inspect its form.

Hexagon the node

Lateral dots typed ports

Top pip + inner edge declared effect

01

The building blocks

Transform a message, reach the outside world, or compose a whole network.

5 primitives
Node in isometric bloccs notation Inspect

Node

1 in · 1 out · pure

A pure transform. One message in, one out — same input, same output, no side effects. Its center dot marks the pure core.

kind = "transform"
Effectful node in isometric bloccs notation Inspect

Effectful node

1 in · 1 out · +effect

A transform that declares a capability. It may reach the outside world — but only what it declares. The top pip and doubled edge mark that capability boundary.

[effects]
Source in isometric bloccs notation Inspect

Source

0 in · 1 out

An entry point. No input — it produces messages into the graph and declares its ingress effect. Its right-hand port is the start of the flow.

kind = "source"
Sink in isometric bloccs notation Inspect

Sink

1 in · 0 out

An exit point. Messages terminate here; it declares the egress effect that writes them out. Its left-hand port is where the flow ends.

kind = "sink"
Subgraph in isometric bloccs notation Inspect

Subgraph

1 in · 1 out

A whole network as one node — a used manifest, flattened into the graph. The nested hexagon represents that composition.

use = "net.bloccs"
02

The flow controls

Route, combine, filter, and pace the messages moving between your nodes.

7 primitives
Split in isometric bloccs notation Inspect

Split

1 in · N out

Conditional fan-out. One message in, routed to one of several outputs by a decision — each output port names a possible route.

kind = "router"
Merge in isometric bloccs notation Inspect

Merge

N in · 1 out

Combines streams. Messages from several inputs share one output, without waiting for a partner.

fan-in edges
Filter in isometric bloccs notation Inspect

Filter

1 in · 1 out

Predicate drop. Messages that don't match are dropped; the rest pass through unchanged. The funnel marks the predicate boundary.

return :drop
Join in isometric bloccs notation Inspect

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 in isometric bloccs notation Inspect

Batch

N messages · 1 batch

Groups messages and emits them as one batch, by size or timeout. The stacked glyph marks the grouped output.

[batch] size = N
Throttle in isometric bloccs notation Inspect

Throttle

1 in · 1 out

Rate limit. Smooths bursts into a steady, even output — the valve marks where the rate is controlled.

[rate]
Delay in isometric bloccs notation Inspect

Delay

1 in · 1 out

Time shift. Holds each message for a set duration, then releases it. The clock marks that timing boundary.

delay_ms = N

A VIEW OF THE PROGRAM

The notation explains it.
The manifest defines it.

These shapes are a view of real bloccs constructs. The .bloccs file remains the source of truth: node kinds, typed connections, and declared capabilities.

See the shapes become a system

Give your next idea a shape.

Declare the graph. Check the contracts. Let the BEAM run it.

Read the docs
{:bloccs, "~> 0.9"}