Cron Expression Builder & Decoder

Paste, build, and decode cron expressions for Unix, Quartz, AWS EventBridge, and Cloudflare Workers.

100% in your browser. Nothing uploaded.

Cron expression

Try:

Field builder

Pick fields to update the expression. Anything outside these presets stays free-form in the input above.

Next 10 fire times

    Cron syntax cheatsheet

    What is a cron expression?

    A cron expression is a compact way to describe a repeating schedule — when a script should run, when a backup should kick off, when a weekly report should land in your inbox. The original Unix cron uses five fields (minute, hour, day-of-month, month, day-of-week); schedulers built on top of it (Quartz, AWS EventBridge, Cloudflare Workers) extend the grammar with seconds, years, and shorthand for things like "the last day of the month" or "the third Tuesday".

    The unfortunate part is that those extensions are not consistent across flavors. EventBridge requires you to put ? in exactly one of day-of-month and day-of-week; Cloudflare rejects the @yearly alias; Quartz uses a different day-of-week numbering than classic Unix. Pasting a five-field expression into the wrong runner is a great way to wake up on Saturday to discover your nightly backup never ran.

    This page is the round-trip workshop for that: paste an expression and the page shows what it means in plain English plus the next ten fire times in the timezone you pick. Tweak the field-builder controls and the expression updates live, so you can land on a schedule that actually does what you want before you ship it.

    FAQ

    What flavors of cron does this builder understand?

    Four: classic Unix (5 fields), Quartz (6–7 fields with seconds and an optional year), AWS EventBridge (6 fields with a required year and a ? in either day-of-month or day-of-week), and Cloudflare Workers cron (5 fields, no @yearly aliases). Each flavor has subtly different rules — picking the wrong one is the most common reason a schedule misfires in production.

    Are the next run times computed locally?

    Yes. The schedule iterator runs entirely in this tab against the timezone you pick. Nothing about your expression, your timezone, or what you are scheduling is sent to a server. The page can be saved and used on an air-gapped machine after the first load.

    Why does AWS EventBridge complain about my expression?

    EventBridge does not let you specify both day-of-month and day-of-week — one of them must be ?. It also requires a year field and rejects @reboot / @yearly aliases. The flavor selector enforces these rules and shows the exact reason an expression is rejected before you ship it.

    What does the timezone selector change?

    It changes the wall clock the schedule is interpreted against. A cron expression like 0 9 * * 1-5 means 9am in whatever timezone the cron runner is configured to use. Unix cron typically runs in the host's local time; Quartz, EventBridge, and Cloudflare Workers all default to UTC. Match the selector to your runner.

    Can I share a generated expression with a teammate?

    Yes. The Share button copies a URL that encodes the current expression, flavor, and timezone. Open the link and the page loads the same state — handy for filing an incident ticket or pasting into a PR description.

    Why does the page warn that an expression is valid in one flavor but not another?

    Because the same five-field string can mean different things. Step values, ranges, L (last), W (weekday), and # (nth weekday) are accepted by Quartz and EventBridge but rejected by Unix and Cloudflare. The builder validates against the selected flavor and lists the exact field that does not parse.