Skip to main content
Version: v1.5.0

Timer events

Timer events act on the passage of time: they start processes on a schedule, delay a flow, or bound how long an activity may run. The engine schedules the timers itself — they are persisted with the process state and fire automatically, without any external trigger. Timer events are always catching.

PositionIconBehavior
Timer start eventTimer start eventCreates a process instance at a fixed time or on a recurring schedule.
Timer intermediate catch eventTimer intermediate catch eventPauses the token until the timer fires.
Timer boundary eventTimer boundary event (interrupting)Timer boundary event (non-interrupting)Fires while an activity is active — interrupting or non-interrupting.

Use cases

  • Scheduled processes — run a reporting or cleanup process every night at 2:00 with a cycle timer start event.
  • Delays — wait 24 hours after registration before sending a follow-up.
  • Timeouts — cancel a user task that has not been completed within its SLA and route to an escalation path (interrupting boundary).
  • Reminders — send a reminder every two days while an approval is pending, without disturbing the task itself (non-interrupting boundary with a cycle).

Usage in BPMN

A timer event contains a bpmn:timerEventDefinition with exactly one of three time specifications:

ElementMeaningFormatExample
bpmn:timeDateFire once, at a fixed momentISO 8601 date-time2026-10-01T12:00:00Z
bpmn:timeDurationFire once, a period after the event activatesISO 8601 durationPT15M, P14D
bpmn:timeCycleFire repeatedlyISO 8601 repeating interval, or a cron expressionR5/PT10S, R/P1D, 0 2 * * *

Supported cycle forms:

  • R[n]/<duration> — repeat every duration, starting one period after activation; R without a number repeats indefinitely, e.g. R3/P2D or R/PT1H.
  • R[n]/<start>/<duration>, R[n]/<duration>/<end>, R[n]/<start>/<end> — repeating intervals with an explicit first occurrence or end date.
  • Cron expressions with 5, 6, or 7 fields (optional seconds and year, ? treated as *), e.g. 0 2 * * * for every night at 2:00.

Where each specification applies:

  • Timer start eventtimeDate for a one-shot start, timeCycle for a schedule.
  • Intermediate catch and boundary events — typically timeDuration (relative to when the token arrived or the activity started) or timeDate; a non-interrupting boundary event additionally accepts timeCycle to fire repeatedly.

Timer start event

Schedules process instance creation without any external trigger. A timeDate timer creates one instance at the given moment; a timeCycle timer creates an instance at each occurrence and re-arms itself until the cycle's repetitions or end date are exhausted. The schedule is registered when the process definition is deployed.

A timer start event inside an Event sub process additionally supports timeDuration, measured from when its containing scope becomes active.

Timer intermediate catch event

Pauses the flow: the token waits at the event until the timer fires — after a timeDuration measured from the token's arrival, or at an absolute timeDate — and then continues along the outgoing flow. Together with an Event-based gateway, a timer catch event commonly models a timeout branch racing against a message.

Timer boundary event

Arms a timer when the attached activity starts and cancels it when the activity completes. If the timer fires first:

  • Interrupting (solid border) — the activity is cancelled and the token continues along the boundary event's outgoing flow. Use for timeouts and SLAs.
  • Non-interrupting (dashed border, cancelActivity="false") — the activity keeps running and a parallel token is created on the outgoing flow. With a timeCycle, the timer re-arms after each occurrence for as long as the activity is active — use for repeated reminders.
  • Events overview — shared boundary event behavior: subscription lifecycle, interrupting vs non-interrupting.
  • Event-based gateway — racing a timer against a message to model timeouts.
  • User task — the activity most commonly guarded by timer boundary events.

XML example

A nightly schedule, a 24-hour delay, and a repeated reminder on a user task:

<bpmn:startEvent id="Start_Nightly" name="Every night at 2:00">
<bpmn:outgoing>Flow_1</bpmn:outgoing>
<bpmn:timerEventDefinition>
<bpmn:timeCycle>0 2 * * *</bpmn:timeCycle>
</bpmn:timerEventDefinition>
</bpmn:startEvent>

<bpmn:intermediateCatchEvent id="Wait_OneDay" name="Wait 24 hours">
<bpmn:incoming>Flow_1</bpmn:incoming>
<bpmn:outgoing>Flow_2</bpmn:outgoing>
<bpmn:timerEventDefinition>
<bpmn:timeDuration>P1D</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:intermediateCatchEvent>

<bpmn:boundaryEvent id="Boundary_Reminder" name="Every 2 days"
attachedToRef="Activity_ApproveRequest" cancelActivity="false">
<bpmn:outgoing>Flow_SendReminder</bpmn:outgoing>
<bpmn:timerEventDefinition>
<bpmn:timeCycle>R/P2D</bpmn:timeCycle>
</bpmn:timerEventDefinition>
</bpmn:boundaryEvent>