Free cron expression generator and decoder. Build a cron schedule visually, or paste in any expression and get a plain-English explanation of when it runs. Helps with crontab syntax, Vercel Cron schedules, GitHub Actions workflows, and Kubernetes CronJobs.
A standard cron expression is five fields separated by spaces: minute hour day-of-month month day-of-week. Each field takes a number, a list (1,15), a range (9-17), a step (*/5 for every five units), or * for every value. So 0 9 * * 1 means minute 0 of hour 9 on any day of the month, in any month, but only on day-of-week 1 (Monday): it runs at 09:00 every Monday. This tool builds that expression from dropdowns and, given any expression, explains in plain English exactly when it fires.
The classic trap is the interaction between day-of-month and day-of-week. In most cron implementations, when both fields are restricted (neither is *), the job runs when either condition matches, not both. A schedule like 0 0 1 * 1 therefore runs on the 1st of the month and every Monday, which is rarely what people expect from reading it left to right.
The five-field format is nearly universal, but the surrounding rules are not. Vercel Cron and most cloud schedulers interpret times in UTC, so a schedule that should run at local 9am has to be offset by your timezone, and that offset shifts with daylight saving. Some systems also add a sixth field for seconds at the front, or support non-standard shorthands like @daily and @hourly.
Platform limits matter too. GitHub Actions uses five-field cron but does not guarantee the exact minute under load and disables schedules on inactive repositories, while Kubernetes CronJobs add concurrency and missed-run policies on top of the same syntax. When a job does not fire when you expect, the expression is usually correct and the cause is timezone or a platform-specific rule, which is why seeing the schedule spelled out in plain English first saves debugging time.
In order they are minute (0-59), hour (0-23), day of month (1-31), month (1-12), and day of week (0-6, where 0 is Sunday). Each field accepts a value, a list, a range, a step, or an asterisk for every value.
A step value. In the minute field, */5 means every 5 minutes starting at 0, so at minute 0, 5, 10, and so on. The same */n syntax works in any field to run at fixed intervals.
It depends on the platform. Traditional Unix cron uses the server's local time, while many cloud schedulers such as Vercel Cron run in UTC. Always check which one applies, and remember that daylight saving can shift a fixed UTC time relative to local time.
Usually because both the day-of-month and day-of-week fields are set. Most cron implementations treat that as an OR, running when either condition matches, so the job fires on more days than a strict AND reading would suggest.