Typed, supervised dataflow on the BEAM.
You describe a graph of processing stages as a TOML file. bloccs type-checks the wiring, enforces what each stage is allowed to do, and compiles it to a Broadway/GenStage supervision tree. The flow is data, not code — git-diffable, reviewable, and authorable by humans or agents.
It's flow-based programming for Elixir, built the BEAM way: every stage is a supervised process, edges carry versioned schemas, and effects (DB, HTTP, time, randomness) are declared capabilities the compiler enforces — undeclared side effects fail to compile. Technically, a bloccs network is an agentic computation graph (ACG): a typed, declarative IR for streaming and request/response dataflow.
# events.bloccs — a webhook processor, as a file
[nodes]
ingest = { use = "nodes/ingest.bloccs" }
validate = { use = "nodes/validate.bloccs" }
route = { use = "nodes/route.bloccs" }
# Fan-out: a known event is both persisted and notified.
[[edges]]
from = "route.known"
to = ["persist.event", "notify.event"]# persist.bloccs — a node declares its ports, schemas, and the one effect it may use
[ports.in]
event = { schema = "EnrichedEvent@1" }
[effects]
db = { allow = ["events:insert"] } # anything else → compile error
[contract]
pure_core = "Events.Nodes.Persist.transform/2" # decides
effect_shell = "Events.Nodes.Persist.execute/2" # acts| Repo | What it is | Status |
|---|---|---|
| bloccs | The library: TOML manifest parser → schema/effect validator → Broadway supervision-tree compiler, with a mix bloccs.* CLI and structural coverage. Hex · Docs |
Apache-2.0, pre-1.0 |
| bloccs_web | An observe-only Phoenix LiveView dashboard for running bloccs networks — live topology, per-node throughput/latency/error rate, message-flow feed, and coverage. Mounts with one router macro. Hex · Docs | Apache-2.0, pre-1.0 |
Experimental — early and moving fast. The public API and the manifest format may change between releases, and bloccs isn't durable: put Oban or a broker at the edges for work that must survive restarts. Great for exploring and prototyping — pin a version and read the CHANGELOG before upgrading.
bloccs runs typed, supervised, back-pressured dataflow inside a process; it is not a durable workflow/orchestration engine and does not try to be.
The work happens in public — demos, build-in-public, and feature walkthroughs:
- 🎥 YouTube — https://www.youtube.com/@AllanMacGregor
- 𝕏 X / Twitter — https://x.com/allanmacgregor
- ✍️ Blog — https://allanmacgregor.com/posts
- 💬 ElixirForum — https://elixirforum.com/u/amacgregor
- 💼 LinkedIn — https://www.linkedin.com/in/allanmacgregor/
Apache-2.0. Built on Elixir, Broadway, and GenStage.