Step Types¶
This page lists all workflow step types currently supported by the orchestrator.
Source of truth: the WorkflowStep discriminated union in engine/services/orchestrator/app/workflow_runner.py.
How To Read This Page¶
- Every step has
idandtype. - Most steps support
whenfor conditional execution. - Many steps support
run_afterandcompensatethrough shared mixins.
Transformation Steps¶
xslt¶
Apply an XSLT transform to XML input.
- Typical fields:
input_from,xsltorxslt_file. - Notes:
xslt_fileis resolved from workflow artifacts when inlinexsltis not provided.
xml2json¶
Convert XML input to JSON output.
- Typical fields:
input_from.
json2xml¶
Convert JSON input to XML output.
- Typical fields:
input_from.
liquid¶
Apply a Liquid template to a JSON input.
- Typical fields:
input_from,templateortemplate_file. - Notes:
template_fileis resolved from workflow artifacts when inlinetemplateis not provided.
javascript¶
Run inline JavaScript for custom transformation logic.
- Typical fields:
input_from,code. - Notes: execution is controlled by inline JavaScript security settings in orchestrator environment variables.
json_set¶
Set or replace a value in a JSON payload using a JSON pointer path.
- Typical fields:
input_from,json_path,value_from,mirror_to_context.
xml_set_text¶
Set text or an attribute value on an XML node selected by XPath.
- Typical fields:
input_from,xpath,value_from,attribute,mirror_to_context.
Integration Steps¶
http¶
Call an HTTP endpoint through the egress HTTP service.
- Typical fields:
http.method,http.urlorhttp.path,http.body_from,http.headers,http.timeout_seconds. - Optional features:
connection,retry_policy,circuit_breaker,async_wait.
ftp¶
Read from or write to an FTP endpoint through the egress FTP service.
- Typical fields:
ftp.action,ftp.remote_path,ftp.body_from,ftp.body_encoding,connection.
ssh¶
Execute a command over SSH through the egress SSH service.
- Typical fields:
ssh.command,ssh.timeout_seconds, optional private key fields,connection.
sftp¶
Read from or write to an SFTP endpoint through the egress SSH/SFTP service.
- Typical fields:
sftp.action,sftp.remote_path,sftp.body_from,sftp.body_encoding,connection. - For change polling with
sftp.action: list, use:sftp.since_epoch(static cursor)sftp.since_epoch_from(dynamic cursor from context/step)sftp.limit(max list results)
imap_peek¶
Inspect an IMAP mailbox through the egress IMAP service.
- Typical fields:
connection,action,mailbox,filter. actionvalues:peek: legacy summary (emailsCount+lastSubject)list: list message headers usinglimitread: load one message (message_idormessage_id_from) with optional body/attachments
- Useful options for
read:include_body,include_attachments,attachment_max_bytes,mark_seen.
smtp_send¶
Send an email through the egress SMTP service.
- Typical fields:
connection,to,subject,body_from,is_html,from_override. - Additional fields:
- recipients:
cc,bcc,reply_to - dual body:
text_body_from,html_body_from - attachments:
attachments(static list) orattachments_from(JSON list from previous/context)
- recipients:
rabbitmq_publish¶
Publish a message to RabbitMQ through the egress RabbitMQ service.
- Typical fields:
rabbitmq.message_from,rabbitmq.exchange,rabbitmq.routing_key,rabbitmq.properties,rabbitmq.headers,connection.
Storage Steps¶
storage_read¶
Read a value from the runtime storage service.
- Typical fields:
storage_read.bucket,storage_read.key,storage_read.output_field,storage_read.write_context_key.
storage_write¶
Write a value to the runtime storage service.
- Typical fields:
storage_write.bucket,storage_write.key,storage_write.value_from,storage_write.content_type,storage_write.write_context_key.
Context Steps¶
context_set¶
Set a context key from a literal value or a resolved reference.
- Typical fields:
context_key,valueorvalue_from.
context_bind¶
Parse JSON, XML, or YAML once under a document alias; later steps query fields via path refs (request:json:/field). See Bound documents.
- Typical fields:
alias,input_from,format(auto|json|xml|yaml).
context_extract_json¶
Extract a value from JSON using a JSON pointer and store it in context.
- Typical fields:
input_from,json_path,context_key.
context_extract_xml¶
Extract a value from XML using XPath and store it in context.
- Typical fields:
input_from,xpath,context_key.
Control-Flow Steps¶
if¶
Branch execution based on a condition.
- Typical fields:
condition,then_steps,else_steps. condition.context_keyreads the run context (string compare). Usecontext_extract_json/context_extract_xmlwithinput_from: <step_id>to branch onservice_callor trigger payload fields — see Conditions & Path Expressions.
try¶
Run nested steps and optionally handle failures with catch substeps.
- Typical fields:
steps,catch(orcatch_steps),rethrow(defaultfalse),error_context_key. - On failure the error message is stored in context before catch substeps run.
- When
rethrowisfalse, the try step succeeds after catch and the workflow continues.
for_each¶
Iterate over array items and run nested steps for each item.
- Typical fields:
input_from,items_path,as_key,index_as,steps,max_iterations.
repeat_until¶
Repeat nested steps until a condition matches or max iterations is reached.
- Typical fields:
steps,until,max_iterations.
parallel¶
Run nested steps concurrently and merge selected outputs.
- Typical fields:
steps,max_concurrency,fail_fast,outputs_map.
collect¶
Merge outputs from previous steps into one JSON object or array.
- Typical fields:
from_steps,merge_mode,try_parse_json.
wait¶
Pause execution for a fixed duration in seconds.
- Typical fields:
seconds.
workflow_call¶
Invoke another workflow as a nested child run.
- Typical fields:
target,payload,output_key,timeout_seconds. - Runtime behavior:
- Inherits call-chain context for cycle detection.
- Inherits parent timeout budget (optionally capped by
timeout_seconds). - Emits parent/child trace linkage metadata.
Operational Steps¶
log¶
Write a structured log message and optionally store the rendered message in context.
- Typical fields:
level,message,values,tags,into.
terminate¶
Stop workflow execution intentionally with a declared run status.
- Typical fields:
status,reason,http_status.
Quick Cheat Sheet¶
| Step Type | Category | Typical Input | Typical Output | Side Effects |
|---|---|---|---|---|
xslt |
Transformation | XML (input_from) |
XML/text | No external side effect |
xml2json |
Transformation | XML | JSON string | No external side effect |
json2xml |
Transformation | JSON string | XML string | No external side effect |
liquid |
Transformation | JSON string + template | Rendered text | No external side effect |
javascript |
Transformation | Any string input + context | String result | No external side effect |
json_set |
Transformation | JSON + value reference | Updated JSON string | Optional context write |
xml_set_text |
Transformation | XML + value reference | Updated XML string | Optional context write |
http |
Integration | Request body reference | Response body string | Outbound HTTP call |
ftp |
Integration | Optional payload data | JSON result string | FTP read/write |
ssh |
Integration | Command + optional key/password | JSON result string | Remote command execution |
sftp |
Integration | Optional payload data | JSON result string | SFTP read/write |
imap_peek |
Integration | Mailbox/filter config | IMAP response payload | Mailbox query |
smtp_send |
Integration | Recipients + body reference | Sent body/result | Email send |
rabbitmq_publish |
Integration | Message reference + routing metadata | Publish result payload | RabbitMQ publish |
storage_read |
Storage | Bucket/key | Selected value | Runtime storage read |
storage_write |
Storage | Bucket/key + value reference | Write response payload | Runtime storage write |
context_set |
Context | Literal value or reference | Pass-through previous | Context mutation |
context_bind |
Context | Document text | Pass-through raw text | In-memory parsed document registry |
context_extract_json |
Context | JSON + json pointer | Extracted value | Context mutation |
context_extract_xml |
Context | XML + xpath | Extracted value | Context mutation |
if |
Control Flow | Condition + nested steps | Branch result | Branching only |
try |
Control Flow | Nested try/catch steps | Last substep output | Optional error recovery |
for_each |
Control Flow | Array source + nested steps | JSON array of iteration outputs | Context + scoped output mutation |
repeat_until |
Control Flow | Until condition + nested steps | Last iteration result | Repeated execution until match |
parallel |
Control Flow | Nested steps | Merged JSON object | Concurrent execution |
collect |
Control Flow | References to prior outputs | Merged JSON object/array | Aggregation only |
wait |
Control Flow | Seconds | Pass-through previous | Time delay |
workflow_call |
Control Flow | Target workflow + optional payload | Child workflow final output | Nested run invocation + trace linkage |
log |
Operational | Message template + values | Rendered message | Audit/application log write |
terminate |
Operational | Status metadata | Terminates run | Stops workflow immediately |
Related References¶
- Workflow YAML schema and core structure: Workflow YAML (Forgejo mirror: Workflow YAML)
- Context and variable resolution: Context & Variables (Forgejo mirror: Context & Variables)