Skip to content
Fluxify

logic & data flow Branches are sockets, not guesses.

Every decision, loop and fan-out is a socket you can see. A route follows one path at a time, nothing is inferred from where a block sits, and cycles are rejected when you save.

Read the docs
success failure Entrypoint GET /me If Condition x-api-key valid? Response 200 · profile Response 401 · missing key
Each request follows exactly one socket. The compiler turns this into an if / else of two direct calls.

switch

One of many, first match wins.

Wire several blocks to a Switch's case socket. In value mode it computes one value and compares each case with ===; in condition mode each case has its own check. Order is yours.

Switch value: input.plan = "pro" case · free rate limit 10/min case · pro rate limit 600/min case · team rate limit 6000/min default 403 unknown plan
Every block wired to the case socket is one case. Cases are checked in your order; the first match runs and the rest are skipped.

loops & parallel work

A loop body is a chain on a socket.

Some sockets don't continue the flow — they own a chain. For and For Each repeat theirs; Orchestrator runs several of them at the same time and waits for all.

  • onError: throw — one failed branch fails the Orchestrator.
  • onError: settle — failed branches return their error; the rest carry on.
  • A Response inside a branch ends the whole route with that answer.
for each · one item at a time executor For Each items: [a, b, c] JS Runner once per item Response after the loop orchestrator · all at once Orchestrator onError: settle HTTP · /profile HTTP · /orders HTTP · /recs [profile, orders, recs] outputs, in your order
For / For Each repeat the chain on their executor socket, then continue from source. Orchestrator starts every chain on its orchestrate socket at once and continues with an array of their outputs, in the order you set.

data flow

Data rides the wires.

The value leaving a block is the input of the next. Reshape it with a Transformer, read request values anywhere, and save what you'll need later.

input
the previous block's output
outputs.name
what a block saved for later
route params
path, query, headers, cookies, body — anywhere
App Config
secrets and settings, chosen by name
{ "first_name": "Avery", "last_name": "Stone", "age": 31 } { "fullName": "Avery Stone", "isAdult": true } Get Request Body input Transformer field map / JS Response 200
Each block's output is the next block's input. Reshape with a Transformer field map or a little JavaScript; save anything you need later with “Save output to variable”.

rules the editor enforces

Readable by construction.

  • No cycles

    An edge back to an earlier block is rejected at save. Repetition belongs in a loop block.

  • One wire per plain socket

    Only orchestrate and case may carry more than one wire, so a second wire is never a hidden parallel branch.

  • Position is layout only

    Moving a block never changes behaviour. The edges are the program.

  • Validation before blocks

    Body, query and path params are checked against the route's schemas before the first block runs.

next Workflows & triggers Background work from schedules, queues and routes, with batching.