Schedules

A schedule fires on a pattern you set. Every firing records an event and runs each deployment bound to it.

Recurring or once

A schedule is one or the other, never both:

Time zones

A cron pattern is interpreted in the schedule's IANA time zone (Europe/London, America/New_York). Set it, and daylight-saving transitions are handled for you: 0 9 * * * stays 09:00 local across the change.

An at schedule has no time zone question — an absolute instant is already unambiguous.

What the flow receives

A schedule generates its own payload, so this.payload on a scheduled run is the timing itself:

{
  firedAt: "2026-08-16T04:00:00.000Z",
  timezone: "Europe/London",
  localTime: "2026-08-16 05:00:00",
  cron: "0 4 * * *",
  at: null,
  nextRunAt: "2026-08-17T04:00:00.000Z",  // null for a one-time schedule
  runNumber: 42,
  quota: 100,
  runsRemaining: 58,                       // null when the quota is unlimited
  manual: false                            // true when a person pressed Run now
}

Skips and quotas

Two controls shape the firing sequence itself:

Quota counts firings, not runs. A firing that reached no deployment still spends one, because quota answers "how many times may this schedule fire", not "how many runs may it cause".

Run now

The manual Run now action fires the schedule immediately. It is free and deliberately outside the accounting:

It is refused while the schedule is switched off — like the other triggers, a test that produced something a real firing no longer would would be misleading.

A schedule with no targets keeps firing

Unbinding the last deployment does not stop a schedule. It keeps firing, keeps recording events, and keeps spending quota — it simply starts nothing.

That is on purpose: an active schedule with no targets is now a visible misconfiguration. Its next run time is populated and its statistics show firings with no runs. Switch it off or delete it to actually stop it.

When the next run is

The schedule page shows the next firing time, computed from the pattern and the time zone alone. It deliberately ignores skips and an exhausted quota — it answers "when does this pattern next come round", not "will anything happen then".

The two switches

SwitchOff means
The schedule's ownThe scheduler itself stops. No firing, no event, nothing
The binding'sThis deployment is unwired; the schedule still fires and still records

Next