The Complete Cron Expression Toolkit
Build a schedule, check it, and get output for the platform you deploy to: Linux, Kubernetes, GitHub Actions, AWS EventBridge, Vercel or Quartz.
- Runs in your browser
- No account
- Next runs in your time zone
Shortcuts: Alt+G Generator, Alt+P Parser, Alt+A Assistant
Six tools, one engine
Each tool has its own page. They share one cron engine, so a schedule reads the same everywhere.
Output that follows each platform's rules
Cron is not one syntax. CronWave knows where these six differ and writes your schedule accordingly.
? is required in one day field. Rules run in UTC.spec.schedule with optional spec.timeZone.schedule.cron in workflow YAML. UTC by default, five-minute minimum.vercel.json. UTC, no day names, one day field at a time.? L W #.Cron basics, in plain language
Start with what a cron expression is, then the syntax and the special characters. Each guide has a live example.
The schedules people look up most
Every 5 minutes, hourly, daily, weekdays and monthly, with variants, platform limits and the mistakes to avoid. More are in the cron examples.
Details that save a debugging session
- Plain-English outputEvery expression comes with a sentence you can paste into a review.
- Next runs in your time zonePick the zone; UTC platforms are converted and DST changes are flagged.
- Weekly heatmapA 7 × 24 grid of when a schedule fires, in the Parser.
- Platform checksSee which of six platforms accept an expression and why the others do not.
- Runs in your browserParsing, validation and the Assistant run locally. Nothing you type is sent to CronWave.
- Keyboard friendlyAlt+G, Alt+P and others jump between tools. Alt+A opens the Assistant.
Standard cron: five fields
The common core used by Linux and other Unix cron daemons. Order: minute, hour, day of month, month, day of week.
| Field | Allowed values | Special characters | Example |
|---|---|---|---|
| Minute | 0-59 | * , - / | */15 every 15 minutes |
| Hour | 0-23 | * , - / | 9-17 9:00 to 17:59 |
| Day of month | 1-31 | * , - / | 1,15 the 1st and 15th |
| Month | 1-12 or JAN-DEC | * , - / | 1,4,7,10 each quarter |
| Day of week | 0-6 (0 = Sunday; 7 also Sunday on many systems) or SUN-SAT | * , - / | 1-5 Monday to Friday |
These five fields are the common core, as used by Linux and other Unix cron daemons. Names and some details depend on the implementation.
Where platforms differ
Other schedulers add fields or symbols, or restrict what is allowed. These are extensions of the standard form, not part of it.
| Platform | Fields | Weekdays | Extra symbols | Time zone |
|---|---|---|---|---|
| Linux / Unix | 5 | 0-7 or names | none (plus @daily-style macros) | The system's |
| Kubernetes CronJob | 5 | 0-6 or names | ? accepted like *; macros | Controller's, or spec.timeZone |
| GitHub Actions | 5 | 0-6 or names | none | UTC by default (optional timezone key); shortest interval 5 minutes |
| Vercel | 5 | 0-6, no names | none; cannot restrict day-of-month and day-of-week together | UTC |
| AWS EventBridge | 6, ending with a year | 1-7 (1 = Sunday) or names | ? required in one day field; L W # | UTC for rules |
| Quartz | 6 or 7, starting with seconds | 1-7 (1 = Sunday) or names | ? required in one day field; L W # | The scheduler's, or per trigger |
The question mark and the L, W and # symbols are extensions, not part of standard five-field cron. Details can differ between versions, so check the documentation of the platform you deploy to.
Questions
#, which browsers do not send to servers. As with any website, the host may keep ordinary access logs of which pages were requested. See the privacy page for details.? to mean "no specific value" and require it in either the day-of-month or the day-of-week field. Kubernetes accepts it as another way of writing *.