---
id: flow--scheduler
title: "Timer"
summary: "Scheduler that periodically calls the components connected to `Continue`, at a fixed interval aligned to a time of day. Use it as the start of polling, batch and heartbeat flows. It keeps the flow running."
audience: user
keywords: "start, continue, interval, syncstarttime, executeonstart"
---
# Timer

Scheduler that periodically calls the components connected to `Continue`, at a fixed interval aligned to a time of day. Use it as the start of polling, batch and heartbeat flows. It keeps the flow running.

## Pins

| Pin | Kind | Types | Description |
|---|---|---|---|
| Start | start | any | Starts the scheduler loop. Leave it unconnected: the system calls it once when the flow starts. |
| Continue | continue | `Viaducta.TypeSystem.Metadata.NoInputData` | Called on every tick with a new, empty record and new metadata. |

## Configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `Interval` | string `DD:HH:MM:SS` | `00:00:01:00` | Required. Time between ticks: days (00-59), hours (00-23), minutes, seconds. `00:00:01:00` = every minute, `01:00:00:00` = every day. Must be greater than 0. |
| `SyncStartTime` | string `HH:MM:SS` | `00:00:00` | Required. Time of day (server local time) the ticks are aligned to. |
| `ExecuteOnStart` | boolean | `false` | `true`: run once immediately when the flow starts, then continue on the schedule. |

## Behaviour

- Tick times are `SyncStartTime` of the current day plus whole multiples of `Interval`; the next tick is the first such time not in the past. Example: `Interval` `00:06:00:00`, `SyncStartTime` `02:00:00` → 02:00, 08:00, 14:00, 20:00. `Interval` `01:00:00:00`, `SyncStartTime` `08:00:00` → daily at 08:00.
- On each tick `Continue` is called and awaited: a tick never overlaps with the previous one. Ticks that fall due while a run is still in progress are skipped; the next tick is computed after the run ends.
- Errors in the `Continue` branch are logged by the system and do not stop the timer.
- The component shows a progress bar with the countdown to the next tick, "Executing" during a run and "Stopped" after cancellation.
- At runtime the component shows a play indicator: clicking it runs the `Continue` branch once immediately (a warning is shown if a run is already in progress).
- The loop ends when the flow stops.

## Notes

- Invalid `Interval` or `SyncStartTime`, or an interval of 0, makes the component fail when it starts.
- The schedule is anchored to the current day at start. For intervals longer than a day (e.g. `07:00:00:00`) the weekday depends on when the flow was (re)started.
- Times use the server local time; daylight-saving changes shift the ticks.
- The loop checks the clock about every 200 ms, so ticks may be up to ~0.2 s late.
- Do not connect `Start` to other components: every record arriving on `Start` starts an additional, independent timer loop.

## Example

```json
{ "Interval": "00:00:15:00", "SyncStartTime": "00:00:00", "ExecuteOnStart": true }
```

**Timer** → Database reader → Http client → ...
