Polyatic cron-dialect
All tools

cron⁠-⁠dialect

Read, translate & preview cron across Unix, Quartz & AWS EventBridge — entirely in your browser.

1 · Read a cron expression

plain-English + next 5 runs update as you type
Dialect

Runs entirely in your browser — nothing you type is ever sent anywhere. The page does load one cookieless pageview counter from stats.dankdev.com; it records the URL, never your expression.

In plain English

Type an expression above to see its reading.

Next 5 runs Timezone
  1. —

Times are computed against wall-clock in the selected zone. Spring-forward gaps are skipped; fall-back overlaps fire once.

2 · Translate to another dialect

every lossy or gotcha-prone conversion is flagged — never silently dropped

3 · Plain English → cron

a small, documented grammar — unparseable phrases error honestly, never guess

Uses the dialect selected in step 1. Try: every 15 minutes, weekly at noon, on mon, wed and fri, on day 1 of the month.

Accepted English forms

    Use it in your own code

    Everything this page computes — the parse, the plain-English reading, the next fire times and the dialect translation — is a published Node module, so the same check can run in CI instead of in a tab.

    npm install @verifyhash/cron-dialect

    Three lines — the Unix 1 that means Monday, re-emitted for Quartz, which numbers it 2

    const { translate, explain } = require('@verifyhash/cron-dialect');
    const t = translate('30 4 * * 1', 'unix5', 'quartz6');
    console.log(`${t.expr}\n${explain(t.expr, 'quartz6')}\n${t.warnings.map(w => w.code).join(', ')}`);

    prints

    0 30 4 ? * 2
    At 04:30:00, on Monday.  [quartz6]
    seconds-injected, question-injected, dow-numbering-shift

    What the package does not include: this page — the three panes, the next-5-runs timezone preview and the permalink. The published 0.1.0 exports parseCron, translate, explain, nextRuns, fromEnglish and ACCEPTED_FORMS, and it is an earlier build of the parser above in two measured places (2026-09-22): 0.1.0 accepts an oversized step such as */70 in a minutes field and reads it as “Minute 0”, and answers an impossible date such as 0 0 30 2 * with a generic “exceeded search horizon” — this page raises a typed CronParseError for both.

    @verifyhash/cron-dialect on npm · version 0.1.0 · MIT · also listed with our other libraries on Polyatic libs.

    Why a dialect translator — and what it refuses to guess

    What it does. The popular cron explainers understand only classic Unix 5-field cron and will silently mis-read a 6- or 7-field Quartz or AWS EventBridge expression — the fields shift, and day-of-week is numbered differently, so "every Monday" quietly becomes "every Sunday". This tool parses each dialect on its own terms: … 1 in the day-of-week field means Monday in Unix cron but Sunday in Quartz and AWS, and the ? token Quartz/AWS require on one of day-of-month/day-of-week is a hard error in Unix cron rather than a silently ignored character.

    When you'd use it. Porting a schedule between schedulers — crontab to a Quartz job, a Spring config to EventBridge — or debugging why a migrated job "runs on the wrong day" (it is almost always the 1=Sunday vs 0/7=Sunday mismatch this page makes explicit). Every lossy or gotcha-prone conversion is flagged as a warning: injected seconds, an injected ?, the day-of-week renumbering, a dropped year field — never silently dropped.

    Honest limits. The Quartz L (last), W (nearest weekday) and # (nth weekday-of-month) tokens are not yet supported and raise a parse error rather than being mis-parsed. Reverse ranges (5-1) are rejected rather than interpreted as wrap-around. The English→cron grammar is small and fixed — a phrase outside it errors honestly with the nearest accepted form, never a guessed expression. And the next-runs preview follows one pinned DST rule: a fire time that falls in a spring-forward gap is omitted (not shifted), and a fall-back overlap fires once, at the earlier occurrence.