Cron Expression Builder

Build cron expressions visually for Unix, Quartz, AWS EventBridge, and GitHub Actions. Preview upcoming run times instantly in your browser.

🔒 Zero network requests. Schedules are generated in your browser.
Generated expression · Unix Copied!
0 9 * * *

Preview uses your current browser timezone.

Next runs

Next runs

You just tested your Cron Expression Builder — Try Structured Data Converter next →

What Is a Cron Expression Builder?

Cron started as a Unix daemon in Version 7 Unix (1979) and the modern Vixie cron (used in Linux distros, BSD, macOS) standardised the five-field grammar: minute, hour, day-of-month, month, day-of-week. Quartz Scheduler (Java ecosystem) added a seconds field at the front (six total) and a year field at the back (seven max), changed day-of-week to 1-7 instead of 0-6, and added L (last), W (weekday), # (nth weekday) modifiers absent from Unix cron. AWS EventBridge uses a six-field schedule (similar to Quartz but the day-of-week and day-of-month must be ? if the other is set), and GitHub Actions uses POSIX five-field. The builder lets you pick the target dialect and translates between them. Common syntax: * (any value), 5 (literal), 1-5 (range), 1,3,5 (list), */15 (step from base), 0,15,30,45 (explicit list equivalent). The classic gotcha is 0 */6 * * * — readers assume every 6 hours starting now but it means at minute 0 of hours divisible by 6 i.e. 00:00, 06:00, 12:00, 18:00 in the current calendar day. Restart your service at 03:00 and the next run is 06:00, not 09:00.

How to Use the Cron Expression Builder

Pick the target dialect (Unix crontab, Quartz, AWS EventBridge, GitHub Actions). The builder shows the five (or six / seven) fields with Every or Specific toggles. Toggle Every minute / hour / day for * semantics or pick a value for literal. Use the step input for */N (e.g., every 15 minutes = */15 * * * *). Day-of-month vs day-of-week are mutually exclusive in some dialects — selecting both is OR in Unix cron but invalid in Quartz / EventBridge (one must be ?). The live preview shows the next 5 scheduled runs computed in your browser timezone (cron itself runs in the server's timezone; mismatched timezones are a top failure mode — your local 9 AM might be 3 AM UTC where the server runs). Copy the expression and paste into your crontab, .github/workflows/*.yml, EventBridge rule, or Quartz JobDetail. The expression is also linkable — the URL hash captures the full configuration.

Why Correct Cron Scheduling Matters

0 */6 * * * does not mean every 6 hours. */6 in the hour field means every hour whose number is divisible by 6 — that's 00, 06, 12, 18, exactly 4 runs per calendar day. A reboot at 03:00 does not shift the schedule; the next run is 06:00. To actually run every 6 hours from now, use a stateful scheduler (Quartz cron triggers, systemd timers with OnUnitActiveSec=6h, or your CI's own interval syntax) — cron itself is purely calendar-based and stateless. The other classic miss is February 30 — 30 14 30 * * runs only in months with day 30, silently skipping February (and giving 11 runs per year instead of 12). Tools that auto-correct or pre-compute the next 5-10 runs catch both gotchas before they ship. AWS recommends EventBridge's rate expressions (rate(6 hours)) for stateful interval scheduling rather than cron.

Frequently Asked Questions

What formats does this support?

This builder outputs Unix 5-field cron plus Quartz, AWS EventBridge, and GitHub Actions variants for the same schedule.

Are preview times generated locally?

Yes. TeaFun calculates the upcoming run times in your browser using the options you selected.

Can I use this for GitHub Actions workflows?

Yes. Switch the format to GitHub Actions and copy the generated expression into your workflow schedule.