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
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.
Type an expression above to see its reading.
- —
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 guessUses 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-dialectThree 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.