Pipelines
A pipeline is the core orchestration unit in Monad. It defines how data is ingested, processed, and delivered by connecting components together into a directed graph. Every pipeline starts with a single input, flows through optional transforms and enrichments, and terminates at one or more outputs. Data routing controls how records move between components using conditional edges.
Pipeline Structure
Pipelines are composed of two primitives: nodes and edges.
- Nodes are instances of components (inputs, transforms, enrichments, or outputs).
- Edges are the connections between nodes that define data flow and can include conditional routing logic.
Together they form a directed acyclic graph (DAG) — a tree-like structure where data always flows forward, never in circles.
┌──────────┐
│ Input │
└────┬─────┘
│
┌────▼──────┐
│Transform │
└──┬──────┬─┘
│ │
┌────▼───┐ ┌▼────────┐
│Output A│ │Output B │
└────────┘ └─────────┘
Component Roles
Each node in a pipeline must follow these rules based on its position in the graph:
| Position | Allowed Types | Description |
|---|---|---|
| Root (no incoming edges) | Input | Every pipeline must have exactly one root node, and it must be an input |
| Middle (incoming and outgoing edges) | Transform, Enrichment | Intermediate processing nodes that receive data and pass it along |
| Leaf (no outgoing edges) | Output | Every branch must terminate at an output node |
Pipeline Rules
Monad validates every pipeline against the following rules before it can be deployed. Understanding these constraints will help you build valid pipelines on the first try.
Single Root Input
Every pipeline must have exactly one root node, and it must be an input. The root node is the entry point where data enters the pipeline.
No Circular Paths
Pipelines must be acyclic. Data always flows forward through the graph — no edges may create loops back to previously visited nodes. This ensures predictable processing and prevents infinite loops.
All Branches Must Terminate at an Output
Every path through the pipeline must end at an output node. If you add a transform or enrichment, it must eventually connect to an output downstream.
Single Incoming Edge Per Node
Each node can receive data from only one upstream source. However, a node can fan out to multiple downstream nodes through multiple outgoing edges. This creates a tree structure that makes data lineage easy to trace.
No Outgoing Edges From Outputs
Output nodes are always terminal. They cannot have outgoing edges.
Node Limit
A single pipeline supports up to 50 nodes. For workloads that require more processing steps, consider splitting the work across multiple pipelines.
Pipeline Configuration
A pipeline configuration consists of metadata, a set of nodes, and a set of edges that connect them.
Nodes
Each node references a component and defines its role in the pipeline:
| Field | Description |
|---|---|
| Slug | Unique identifier for the node within the pipeline |
| Component Type | One of: input, transform, enrichment, output |
| Component ID | Reference to the configured component |
| Enabled | Whether this individual node is active |
Edges
Edges connect nodes and optionally define routing conditions:
| Field | Description |
|---|---|
| From Node | The source node slug or ID |
| To Node | The destination node slug or ID |
| Conditions | Optional conditional routing rules that filter which records pass through |
For detailed documentation on configuring edge conditions, see Data Routing.
Building a Pipeline
Basic Pipeline
The simplest pipeline connects an input directly to an output:
- Add an input node to ingest data from a source
- Add an output node for the destination
- Create an edge connecting the input to the output
Adding Processing
To transform or enrich data before delivery:
- Add a transform or enrichment node between the input and output
- Create an edge from the input to the processing node
- Create an edge from the processing node to the output
Fan-Out to Multiple Destinations
To send data to multiple outputs (optionally with different filters):
- Start with an input node
- Create multiple outgoing edges to different output nodes
- Configure conditions on each edge to control which records go where
For example, you could route high-severity alerts to a SIEM while archiving all records to cloud storage.
Pipeline Lifecycle
Status Indicators
Pipelines and their individual nodes report health and operational status. For a complete guide to pipeline statuses, see Status Indicators.
Enabling and Disabling
Pipelines can be enabled or disabled at two levels:
- Pipeline level: Disabling a pipeline stops all data processing across all nodes
- Node level: Individual nodes can be disabled while the rest of the pipeline continues to operate. this will lead to data building up in your pipelines stream and can cause your pipeline to throttle
- Edge level: Individual edges can be disabled to stop data flow between specific nodes without affecting the rest of the pipeline
Related Documentation
- Inputs - Data ingestion components
- Transforms - Data processing and manipulation
- Enrichments - Contextual data enhancement
- Outputs - Data delivery destinations
- Data Routing - Conditional edge configuration
- Conditionals - Condition types and operators
- Status Indicators - Pipeline health monitoring