Components & ports

Components are the building blocks you place on the canvas. Ports are the labeled connection points on each component — they decide what can plug into what.

The component library

The Components panel groups building blocks by what they do. Most components are executable — they take part when you run a scenario. The two canvas helpers are visual only — they organize the picture and never affect behavior.

Sources & triggers

Actor / clientThe person or system that starts things off. It sends a request and waits for the response.
Scheduler / triggerStarts work on a schedule instead of on demand — a bounded number of ticks at a fixed interval, like a cron job or nightly batch.

Routing & compute

Gateway / routerChecks incoming requests and routes each one to the right place using ordered rules.
Service / functionDoes a piece of work. It can call other components, wait for their answers, and publish events.
TransformReshapes or validates data as it passes through, without any custom code.

Data & state

Cache / key-value storeRemembers values for fast lookup. Entries can expire after a time you set (TTL).
DatabaseStores records that your scenario can read, insert, update, and delete.
Object storageRepresents files, images, or exports that can be stored, found, or deleted. A run passes a reference to the object rather than the file itself.

Messaging

QueueHolds messages until a consumer picks them up — with retries and a dead-letter path for messages that keep failing.
Topic / event busBroadcasts one published event to every subscriber. Each subscription receives its own copy, so many parts of the system can react to the same event.

Control & orchestration

Timer / delayWaits for an amount of time, then continues. Useful for modeling delays.
Join / aggregatorWaits until enough related branches have arrived — all of them, any one, or a number you choose — then continues once.
Workflow / sagaRuns a sequence of steps in order — one step per outgoing connection — and answers its caller once every step has completed.

Integration & boundaries

External dependency / terminalStands in for anything outside your diagram — a payment provider, a third-party API. After its configured latency, it replies with success or raises the named failure.
Diagram link / boundaryPoints to another diagram in the workspace. You can open the linked diagram and return; during a run, the link behaves as a boundary rather than running the second diagram.

Canvas helpers (visual only)

Group / boundaryA labeled box for organizing the picture: teams, regions, trust zones. It never executes.
Note / legendPlain-text notes on the canvas. Great for explaining a diagram to teammates.
Tip

Every component is covered in depth — ports, settings, and a worked use case with a diagram — in the Component reference.

What ports are

Every executable component has ports: small squares on its edges. Input ports sit on the left and receive things; output ports sit on the right and send things. Connections always run from an output port to an input port — that is how requests, responses, and messages know which way to flow.

Order ServiceService / functionrequest inreturnresponsecallhollow = input · filled = output
A Service component. Inputs on the left receive requests and results; outputs on the right send responses and downstream calls.

Each port has a clear purpose. It knows what kind of thing it sends or receives, and the editor only lets you connect ports that match. Hover any port to see its details, or open the Ports tab in the Inspector for the full list on the selected component.

How ports know what can connect

Each port has a direction — input or output — and says what kind of information it carries. Both ends of a connection must agree. The port's purpose also decides the connection type you see on the arrow.

Message kindWhat travels through
requestA question on its way to whoever will answer it.
responseThe answer coming back to the component that asked.
commandAn instruction to do something with state — write to a database, put an object, look up a cache key.
recordData being handed over: a database result, a cache hit, the payload flowing through a transform.
eventA fire-and-forget notification: something happened, and whoever cares can react.
controlA signal that steers behavior rather than carrying business data — like starting a timer.
objectRefA reference to a stored object — its key and metadata, never the raw bytes.

Roles come in natural pairs. Request ports talk to request ports and response ports answer them — that’s a synchronous call. Read, write, ack, and nack ports form data-access conversations with stores. Enqueue and consume ports pass fire-and-forget messages through queues. Publish and subscribe ports fan an event out through a topic. Join ports collect branches at a barrier. Control ports carry steering signals, and terminal ports end a story — an error route or a dead-letter path.

A few ports worth knowing

You don’t need to memorize every port — hovering tells you what each one does. But a few come up all the time:

ComponentPorts you’ll use
Actor / clientrequest out to start a journey, response in to receive the answer, event out for fire-and-forget messages.
Service / functionrequest in and response for the work it serves; call and return for calling other components; publish event for fire-and-forget messages.
Cachelookup in, then hit or miss out — so cache hits and misses can take different paths in your diagram.
Queueenqueue in, dispatch out to one consumer, ACK/NACK in for the consumer’s verdict, and DLQ out for dead letters.
Topic / event buspublish in receives the event; deliver out fans it to subscribers — every connection from that one port is a separate subscription.
Join / aggregatorbranch in collects arrivals from parallel paths; joined out continues once the join policy is satisfied.
Tip

Some ports have limits. A queue’s dispatch port accepts one connection, because the queue models a single consumer slot — while a topic’s deliver port accepts many, one per subscription. The editor tells you when a port is full.