Cron Expression Builder
Build standard 5-field or Quartz 6-field cron expressions visually, see the next 5 execution times, and read what they actually mean in plain English before deploying.
In your browser—your files never leave your device.
Learn more- today
2026-05-18 19:59:00in 51 seconds - today
2026-05-18 20:00:00in 1 minute - today
2026-05-18 20:01:00in 2 minutes - today
2026-05-18 20:02:00in 3 minutes - today
2026-05-18 20:03:00in 4 minutes
Presets (25)⌘Enter validate
About this tool
Cron has used the same five-field syntax since 1975 — minute, hour, day-of-month, month, day-of-week — and people still get it wrong because the rules are subtle. Day-of-week starts on Sunday (0) in most implementations but Monday (1) in some. Both day-of-month and day-of-week active means OR not AND, which trips everyone the first time they hit it. * means every; */5 means every fifth value starting at zero; specific values like 0 9 mean minute 0 of hour 9 (i.e. 9 AM exactly). This builder lets you pick from common presets or set each field via dropdown. As you change anything, the cron string and a plain-English description update together — so before you commit "0 9 * * 1" to a crontab, you read "At 09:00, only on Monday" and confirm that is what you wanted.
How to cron expression builder
-
Pick a preset or start fresh
Common schedules are one click away — every minute, hourly, daily midnight, Monday 9 AM, monthly. Or set each field manually if your schedule is unusual. The defaults are all "every" (*) which means the job runs every minute, which is rarely what you actually want but is a clean starting point.
-
Adjust the fields
Minute, hour, day-of-month, month, day-of-week. Each has a dropdown of sensible options plus the option to type a value directly. Common values: minute can be 0 (top of the hour), */5 (every 5 minutes), or specific minute. Hour can be a specific 0-23 value or */N for "every N hours". Day-of-week supports ranges (1-5 for Mon-Fri) and lists (0,6 for weekends).
-
Read the description
Plain English explains when the job runs. "At 09:00 on Monday through Friday" is much harder to misread than 0 9 * * 1-5. If the description does not match your intent, fix the fields before you commit.
-
Copy the expression
One-click copy. Paste into crontab, .github/workflows/*.yml under "schedule.cron", a Kubernetes CronJob spec's spec.schedule, an AWS EventBridge rule expression, or your scheduler of choice. The expression is the same everywhere.
Why use this tool
GitHub Actions schedules are written in cron and run in UTC. The first time you set up "every weekday at 9am London time" you realize that depends on whether the UK is on BST or GMT, so the description in this tool reads "At 09:00, on Monday, Tuesday, Wednesday, Thursday, Friday" and you set the UTC offset yourself based on when you actually want the job to run. The second case is fixing a misfiring cron in a production server. You SSH in, crontab -l, see "30 2 * * 0" and a vague memory tells you that runs Sunday at 2:30 AM but the alert came in on Wednesday. Pasting the expression into a builder confirms the schedule and exposes the off-by-one. The third case is Kubernetes CronJobs, AWS EventBridge schedule rules, GCP Cloud Scheduler, Cloudflare Workers cron triggers, Vercel cron jobs — all use the same 5-field syntax with minor variations. This builder works for every one of them. The fourth is teaching cron to a new team member: showing them visually what 0 0 1 * * means (midnight on the 1st of every month) is much faster than walking through the field-by-field syntax.
Features
Visual field-by-field editing
Dropdowns for minute, hour, day-of-month, month, and day-of-week. Each dropdown shows human-readable options ("Every 15 min", "Mon-Fri", "January") next to the cron syntax they generate. The 5-field expression updates as you change any field, and the dropdowns update if you type the expression directly — so you can work from either end.
Plain-English description
Below the cron expression, a sentence describes when the job will run: "At 09:00, on Monday." This catches the off-by-one mistakes that cause a job to run 6 hours late, or run every day instead of weekly, before they become a 3 AM PagerDuty alert. The description is generated from the expression, not from the dropdowns, so it correctly describes anything you paste in — including expressions someone else wrote.
Next 5 run times computed live
Below the description, the tool computes the next 5 execution times in your local timezone using cron-parser — the same library most Node.js cron schedulers use. Each row shows the absolute datetime ("2026-05-19 09:00:00"), a relative hint ("in 18 hours", "tomorrow", "in 3 days"), and a small chip marking whether the run is today, this week, or further out. The list updates instantly as you edit the expression. Toggle "Show 10" if 5 is not enough to confirm a long cadence. This is the fastest way to catch an expression that looks right but actually fires every day instead of every Monday — you see the dates with your own eyes before deploying.
Preset shortcuts
One-click presets for the schedules everyone actually uses: every minute, every hour, daily at midnight, Monday 9 AM, monthly on the 1st. Clicking a preset fills both the expression and all the field dropdowns so you can fine-tune from there. These five cover maybe 70% of all cron expressions in the wild; the rest are slight variations on these.
Two-way editing
Type the cron expression directly into the text input and the dropdowns update to match; click dropdowns and the expression updates. Useful when you have an expression from somewhere else and want to verify it (paste, read the description), or when you want to make a small tweak (change "every Monday" to "every Monday and Thursday") without retyping the whole thing.
Privacy & security
This tool runs entirely in your browser. Your files are never uploaded to a server — every step of the process (reading, transforming, downloading) happens on your device using JavaScript and the Web APIs. You can verify this in your browser's network tab: clicking the tool's main action triggers zero requests to our servers. The page itself is served over HTTPS, but once it loads, your data stays put. No accounts, no tracking of file contents, no scanning your inputs.