Schedules
Run a resource on a cron — dispatched through the same durable path as a manual sync.
A schedule runs one resource of one connection on a cron cadence. Scheduled runs take the exact same durable path as manual ones, so they deliver to destinations and journal call logs identically.
schedule (cron, UTC) → scheduler tick → Restate ingress → durable runDefining a schedule
Each schedule has a connection, a resource key, a 5-field cron expression, a
timezone (default UTC), and an enabled flag. There's one schedule per
(connection, resource).
The scheduler
The scheduler is a separate long-lived process (packages/worker/src/scheduler.ts),
distinct from the Restate worker. Every 60 seconds it:
- reads all enabled schedules,
- selects the ones due now (cron match, evaluated in UTC),
- fire-and-forgets each to the Restate ingress as a
schedule-triggered run.
The scheduler must be running
Without the scheduler process, enabled schedules never fire — the UI will show
them as enabled but no runs appear. It needs DATABASE_URL and
SIPHON_RESTATE_INGRESS.
Cursors and steady state
For an incremental resource, each scheduled run carries the watermark forward, so a frequent schedule keeps each window small. For a client-hash resource, a schedule is what makes change detection pay off — most runs skip everything and cost only a few list calls (see Sync & change filtering).
You can reset a connection's cursor from the connection detail page to force the
next run to full-reload from initialWatermark.