What is a Pipeline?
A pipeline in IronBullet is the complete configuration that defines how to process data entries (like credentials, URLs, or custom data formats). Each pipeline contains:- Metadata - Name, author, timestamps
- Blocks - Sequential operations to execute
- Data settings - How to parse input data
- Proxy settings - Proxy rotation and health checking
- Browser settings - TLS fingerprinting and user agent emulation
- Runner settings - Concurrency, retry logic, thread management
- Output settings - Where and how to save results
Pipelines are saved as
.rfx files (ReqFlow eXchange format) - JSON files that contain all configuration needed to run a job.Pipeline Structure
Fromsrc/pipeline/mod.rs:28-45 and src/export/format.rs:4-18:
Example Pipeline Configuration
Here’s a complete example fromconfigs/example.rfx:
Metadata Fields
| Field | Type | Description |
|---|---|---|
id | UUID | Unique identifier for the pipeline |
name | String | Display name for the config |
author | String | Creator of the configuration |
created | DateTime | When the config was first created |
modified | DateTime | Last modification timestamp |
Main vs Startup Blocks
Main Blocks
Execute for every data line in your wordlist. This is where your core logic goes (HTTP requests, parsing, checks).
Startup Blocks
Execute once at the beginning before processing any data. Useful for obtaining tokens, setting up sessions, or initializing global variables.
Pipeline Execution Flow
Fromsrc/pipeline/engine/mod.rs:148-228:
- Initialize context - Create execution context with variable store
- Run startup blocks - Execute once before main loop
- Load data entry - Get next line from data pool
- Parse data - Split by separator into named slices
- Execute blocks - Run each block sequentially
- Check status - Evaluate KeyCheck conditions
- Save results - Write hits/fails to output
- Repeat - Continue until data pool is empty
Blocks execute sequentially in the order they appear. If a block sets the bot status (Success, Fail, Ban, etc.), subsequent KeyCheck blocks may terminate execution early.
Configuration Best Practices
Naming Conventions
Naming Conventions
- Use descriptive config names like “Instagram Login” not “config1”
- Label blocks clearly (“Get CSRF Token” not “HTTP Request”)
- Name variables meaningfully (“AUTH_TOKEN” not “var1”)
Organization
Organization
- Group related blocks together
- Use startup blocks for one-time initialization
- Keep parsing logic close to the request that generates the data
Error Handling
Error Handling
- Enable safe mode on blocks that might fail
- Set appropriate retry counts in runner settings
- Use KeyCheck blocks to detect bans vs legitimate fails
Default Values
Fromsrc/pipeline/mod.rs:47-64: