Cron Expression Builder
Standard 5-field POSIX cron · MIN HOUR DOM MON DOW
0MIN
9HOUR
*DOM
*MON
1-5DOW
📅At 9:00 AM, Monday through Friday
Visual Builder
Minute0
Hour9
Day (Month)*
Month*
Day (Week)1-5
Fromto
Next Run Times
1
Fri, Aug 14, 2026, 09:00in 10 hours
2
Mon, Aug 17, 2026, 09:00in 3 days
3
Tue, Aug 18, 2026, 09:00in 1 week
4
Wed, Aug 19, 2026, 09:00in 1 week
5
Thu, Aug 20, 2026, 09:00in 1 week
6
Fri, Aug 21, 2026, 09:00in 1 week
Syntax Reference
SymbolMeaning
*Any / every value
*/NEvery N units
A-BRange from A to B
A,B,CList of specific values
A-B/NRange with step N
?No specific value (alias for *)
FieldRange
Minute0 – 59
Hour0 – 23
Day (Month)1 – 31
Month1 – 12
Day (Week)0 – 6 (0 = Sun)

Also accepts: @hourly @daily @weekly @monthly @yearly

Common Presets

Cron Expression Builder — Visual Cron Generator & Scheduler

Updated May 14, 2026
Share & Support

What's included

Features

Visual field builder for all 5 cron fields — Minute, Hour, Day-of-Month, Month, Day-of-Week
Four modes per field: Every (*), Every N (*/N), Range (A-B), Range+Step (A-B/N), Specific (A,B,C)
Named grids for Month (Jan–Dec) and Day of Week (Sun–Sat) in Specific mode
Instant human-readable description — converts expression to plain English as you type; convert fire times to epochs with the timestamp converter
Next 6 run times with full datetime and relative label (e.g. "in 3 hours")
16 common presets covering every-minute to yearly schedules
Supports @hourly, @daily, @weekly, @monthly, @yearly aliases
Editable raw expression input — paste any cron expression to parse and inspect it
Full syntax quick-reference panel: *, */N, A-B, A,B,C, A-B/N with field ranges
100% client-side JavaScript — no server, no sign-up, works offline

About this tool

Build a Cron Expression Visually — See Next Run Times Before Deploying

You need to schedule a job to run every weekday at 9 AM, or every 15 minutes during business hours, or on the 1st and 15th of every month — but cron syntax is easy to get wrong. A misplaced * or an off-by-one in a range can silently cause a job to fire too often, too rarely, or never at all. Use this visual builder to construct the expression by clicking, then verify the next 6 run times before the expression touches production.

The builder breaks each of the five fields (minute hour day-of-month month day-of-week) into a dedicated panel. Instead of remembering whether Monday is 1 or 0, you click "Monday" and the tool writes the correct value. Choose Every to use *, Every N for step notation like */5, Range for a 1-5 span, or Specific to pick individual values from a named grid. The expression at the top updates in real time — power users can also type directly into the expression input and the builder panels will sync.

The human-readable description converts any valid expression to plain English: "Every 15 minutes", "At 9:00 AM, Monday through Friday", "First day of every quarter at midnight". It first checks the expression against a lookup table of common canonical forms for an exact, hand-written phrase, and only falls back to a rule-based sentence builder — one clause per field — for anything less common, which is why the frequent presets read especially naturally while rarer combinations still get a correct, if plainer, description.

The Next Run Times panel doesn't solve for run times mathematically — it walks forward minute by minute from now, checking each candidate against all five parsed fields, but jumps ahead intelligently when a whole unit fails to match: a non-matching month skips straight to the 1st of the next month, a non-matching day jumps to midnight the next day, and so on, rather than stepping one minute at a time through months that can never match. That walk is capped at roughly 700,000 iterations — about a year and a half of minutes — so an expression that only fires on February 29th, or another rare combination, resolves to an explicit warning instead of hanging the browser. When both the day-of-month and day-of-week fields are restricted at the same time, the calculator follows the same OR-logic convention as standard Vixie cron: a day counts as a match if *either* field's condition is satisfied, not only when both are — the same field-7-means-Sunday normalization is applied too, since some cron dialects use 7 as an alternate for Sunday alongside 0. Catches off-by-one errors before they reach production. Supports @hourly, @daily, @weekly, @monthly, and @yearly aliases, plus 16 common presets for instant loading. All calculations run in your browser — no data is sent to any server.

Step by step

How to Use

  1. 1
    Use the visual field builder or start from a presetEach of the five cron fields (Minute, Hour, Day-of-Month, Month, Day-of-Week) has its own panel. Click any preset in the Common Presets grid to load a common schedule instantly, or start building from scratch by clicking the mode buttons in each field panel.
  2. 2
    Set each field modeChoose Every (*) for no restriction, Every N for step notation like */5 (every 5 minutes), Range for A-B spans like 1-5 (Monday to Friday), or Specific to pick individual values from a named grid. For Month and Day-of-Week, values are shown as names (Jan, Feb, Sun, Mon).
  3. 3
    Read the expression and descriptionThe large input at the top shows the current expression. The five colored badges below show each field value. The description box beneath translates the full expression into plain English — for example, "At 9:00 AM, Monday through Friday."
  4. 4
    Paste or type an existing expressionClick into the expression input and paste or type any 5-field cron expression. The Visual Builder panels update immediately. You can also type @daily, @hourly, or any named alias — the tool expands it to the full 5-field notation automatically.
  5. 5
    Verify with next run timesThe Next Run Times panel always shows the next 6 scheduled executions with full timestamps and relative labels like "in 3 hours." Check this before deploying — it catches off-by-one errors and expressions that fire more or less frequently than intended.

Real-world uses

Common Use Cases

Set up a Linux crontab job without memorizing the field order
Build the exact expression for a database backup, log rotation, or cleanup script. Verify the next run times before adding it to crontab — avoids the classic bug of a job that fires every minute instead of once a day.
Write a Kubernetes CronJob schedule field and confirm it fires correctly
Kubernetes CronJobs use standard 5-field cron syntax in the spec.schedule field. Build the schedule, confirm the next 6 fire times match your intent, and paste directly into the manifest. Validate related config with the YAML to JSON converter.
Write a GitHub Actions workflow schedule trigger for nightly or weekly jobs
GitHub Actions schedule triggers accept standard cron. Build a nightly build, weekly report, or stale-issue-closer schedule. Paste the expression into your workflow YAML and verify it before merging — the Git playground covers the workflow side.
Generate a cron expression for AWS EventBridge, GCP, or Azure schedulers
AWS EventBridge, Google Cloud Scheduler, and Azure Logic Apps all support cron-like syntax. Build the expression here, verify the timing, then adapt it to the target platform's specific field format.
Validate a cron expression for node-cron, APScheduler, or Spring @Scheduled
Node.js (node-cron), Python (APScheduler), and Java (Spring @Scheduled) all use cron expressions. Paste an existing expression to see its human description and upcoming fire times before shipping.
Learn what each cron field does without reading the man page
Click through each field mode — Every, Every N, Range, Specific — and watch the expression update in real time. Read the human description to confirm your understanding. Faster than any cron tutorial.

Got questions?

Frequently Asked Questions

A cron expression is a five-field string (minute hour day-of-month month day-of-week) that defines a recurring schedule for automated tasks. It is the standard scheduling syntax on Unix/Linux systems and is used by Kubernetes, GitHub Actions, AWS EventBridge, and most cloud schedulers.

* means "every valid value" for that field. * * * * * means every minute. * * * * 1 means every minute on Mondays only. In the minute field alone, * means at every minute of every hour.

*/5 is step notation meaning "every 5 units." In the minute field, */5 means at minutes 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55. In the hour field, */3 means at hours 0, 3, 6, 9, 12, 15, 18, 21.

Use 0 9 * * 1-5. This means: minute=0, hour=9, any day-of-month, any month, days 1 through 5 (Monday through Friday). The tool's "Weekdays 9 AM" preset loads this expression with one click.

Day-of-month (field 3) specifies a numbered day in the calendar month (1–31). Day-of-week (field 5) specifies a day of the week (0=Sun, 1=Mon … 6=Sat). When both are non-wildcard, standard cron uses OR logic — the job fires if either condition matches.

Yes. This tool accepts @hourly, @daily, @midnight, @weekly, @monthly, @yearly, and @annually as aliases. They are expanded to their 5-field equivalents automatically. @daily = 0 0 * * *, @hourly = 0 * * * *, @weekly = 0 0 * * 0, @monthly = 0 0 1 * *, @yearly = 0 0 1 1 *.

Use a comma in the day-of-month field: 0 0 1,15 * *. This runs at midnight on the 1st and 15th of every month. You can use commas in any field to specify multiple specific values.

No. All parsing, validation, description generation, and next-run calculations happen entirely in your browser using JavaScript. No data is sent anywhere. The tool works offline once the page has loaded.

This tool targets standard 5-field POSIX cron used by Linux crontab, Kubernetes CronJobs, GitHub Actions, and most schedulers. Quartz uses 6–7 fields (with Seconds and optionally Year). AWS EventBridge uses 6 fields (with Year). The visual builder is designed for the universal 5-field format.

The Next Run Times calculator searches up to one full year forward. If no valid run time is found in that window, it shows a warning rather than hanging or returning incorrect results. Expressions that fire very rarely (e.g., Feb 29) will show no upcoming runs if the next occurrence is more than a year away.