Workflow structure

<woml>

<woml> is required and accepts no attributes. It contains optional <imports> followed by exactly one runnable workflow or reusable definition.

<workflow>

AttributeRequiredMeaning
idYesStable lowercase kebab-case workflow identity.
nameNoHuman-readable name used by the terminal.
descriptionNoHuman-readable summary used by tools and output.
versionNoAuthor-owned workflow version; it does not select the WOML grammar.

It contains exactly one <steps> plus optional singleton <config>, <lifecycle>, and <triggers>. Those four children may appear in any source order; WOML recognizes them by name. Omit <triggers> for a call-only workflow. An empty <triggers /> is invalid.

tags, workflow-level timeout, and workflow-level concurrency attributes are not accepted. Runtime policy belongs in <config>.

<config>

<config> is optional, self-closing, may occur once, and must contain at least one attribute.

AttributeTypeMeaning
concurrencyPositive integer, maximum 1,000,000Maximum actively executing runs for this workflow ID across processes sharing the state store.
rate-limitcount/durationStrict rolling-window limit on first execution starts.
timeout1ms through 365dTotal run deadline after first execution starts; durable waits and lifecycle time count.
queueLowercase dot/underscore/kebab name, max 128 charactersDurable FIFO scheduling lane. It is not a messaging queue.
WOML
<config concurrency="4" rate-limit="100/1m" timeout="10m" queue="orders" />

Queue time is excluded from the workflow deadline. Retry delays, approval waits, synchronous child waits, and lifecycle finalization after execution starts are included. Waiting releases concurrency capacity and reacquires it when work becomes ready.