Skip to main content
Schedule signals fire on a cron expression, running jobs periodically without any external dependency. Friday evaluates the expression internally — no tunnel, no webhook, no credentials.

Config

Example

workspace.yml

Cron syntax

Standard 5-field cron: minute hour day-of-month month day-of-week. Ranges (1-5), lists (1,3,5), steps (*/15), and wildcards (*) are all supported via the cron-parser library.
Use any online cron evaluator (e.g. crontab.guru) to sanity-check your expression before committing. Invalid expressions fail space validation at load time with a clear error.

Timezone

If timezone is omitted, the schedule runs in UTC. Set it to the IANA name of the zone you care about (e.g. Europe/Warsaw, Asia/Tokyo) — Friday handles DST transitions automatically.
Don’t use abbreviations like PST or CET — use full IANA zones like America/Los_Angeles or Europe/Warsaw. Abbreviations are ambiguous and some libraries reject them.

Payload

Schedule signals fire with an empty payload by default. If you want to pass data into the job, add a schema block describing the shape — but remember Friday itself doesn’t populate anything, so the job has to read constants or space state.
workspace.yml

Troubleshooting

Check Friday logs on startup for invalid cron expression. If the expression passes parsing but the job still doesn’t run, verify the timezone — a schedule of 0 9 * * * with UTC timezone will fire at 9 AM UTC, which might be the middle of the night locally.
IANA zones handle DST correctly, but if your space was running during the transition moment, some cron expressions (e.g. 30 2 * * * in a zone that springs forward past 2:30 AM) can skip or duplicate. Choose a time that doesn’t fall in the DST window, or use UTC for timing-sensitive jobs.