Docs / Strand / advanced/concurrency

Max Workflow Concurrency

Strand limits how many workflow runs your account can have going at the same time, to manage resource usage and keep allocation fair between accounts.

The limit counts runs, not workflows. One workflow triggered three times is three runs — so a single busy webhook flow can reach your limit on its own.

Overview#

The concurrency limit is set by your plan tier; it is not configurable. When a run is about to start, Strand counts the workflows your account already has running and compares that against your plan's ceiling.

Plan Runs at a time
Free 2
Starter 3
Standard 5
Pro 8

See tendrl.com/pricing for current plan details. Your ceiling is shown read-only on your profile page alongside your other limits.

Reaching the limit delays a run; it never cancels one#

When you are at your ceiling, the run goes back on the queue and starts as soon as a slot frees up. Nothing is lost and nothing needs re-triggering.

  1. Currently running workflows for your account are counted
  2. Compared against your plan's ceiling
  3. The run returns to the queue if you are at the limit, and starts when a slot opens
  4. It fails only if no slot becomes available within 5 minutes

Once a delayed run starts, its detail view shows what the wait cost:

code

Waited 45s for a free slot — your plan allows 2 runs at a time.
Starter allows 3.

The plan named is always the cheapest one that would have avoided the wait, not the largest — so the suggested upgrade is the smallest one that solves your problem. On Pro the line simply states your ceiling, since there is nothing above it.

In the rare case where nothing frees up for five minutes, the run fails with a message naming the limit and the fix:

code

Waited 300s for a free slot. Your plan allows 2 runs at a time, and all
of them were busy. Upgrade to run more at once, or stagger your triggers.

Nested workflows do not count twice#

A workflow started by a flow.call node executes inside its parent's slot. A parent and its children together consume one slot, however many steps each contains and however deeply they nest.

code

Parent Workflow -> Child Workflow -> Grandchild Workflow = 1 concurrent run

Only workflows you trigger independently — manually, on a schedule, from a webhook, or from a Contact device event — consume a slot of their own.

What to watch#

Troubleshooting#

Runs are starting later than expected#

Symptoms:

This is the limit doing its job — the work is not lost, only delayed. To reduce the wait:

  1. Stagger triggers rather than firing them together
  2. Reduce parallel branches within a workflow
  3. Upgrade your plan for a higher ceiling

A run failed after waiting#

Symptoms:

Your account stayed at its ceiling for a full five minutes, which usually means triggers are arriving faster than runs complete. Spread the triggers out, shorten the workflows, or upgrade.