About CronViewer
CronViewer is a static web app. Your expressions are parsed, explained, simulated and converted by JavaScript running in your browser; nothing you type is uploaded. Time-zone rules come from the IANA database built into your browser (the Intl API), so results can differ slightly between browsers that ship older tz data.
How the simulator works
The parser produces a dialect-specific syntax tree and compiles it to sets of allowed seconds, minutes, hours, days and months plus the day-of-month/day-of-week rule. The simulator walks calendar days in the chosen zone, resolves each matching wall-clock time to real instants, and applies the selected DST policy where a wall time is missing (spring forward) or repeated (fall back). The engine is checked in the test suite against a brute-force minute-by-minute scan across DST changes in several zones, including 30-minute shifts.
Dialect support
- Unix cron (Vixie / cronie) — exact (NATIVE). Five fields: minute hour day-of-month month day-of-week. Runs in the cron daemon’s local time (or CRON_TZ= on cronie).
- Quartz Scheduler (6/7-field) — exact (NATIVE). Seconds minutes hours day-of-month month day-of-week [year]. Day-of-week is 1–7 with SUN=1. Exactly one of the two day fields must be "?".
- Spring @Scheduled (6-field) — qualified (APPROX). Spring Framework 5.3+ CronExpression: second minute hour day-of-month month day-of-week. Sunday is 0 or 7; L, W, # supported.
- AWS EventBridge cron() — qualified (APPROX). cron(minutes hours day-of-month month day-of-week year). Six required fields, no seconds, SUN=1, "?" required in one day field.
- Kubernetes CronJob — qualified (APPROX). Five-field schedule parsed by robfig/cron v3. Time zone comes from spec.timeZone (GA in Kubernetes 1.27), otherwise the kube-controller-manager’s zone.
- GitHub Actions schedule — qualified (APPROX). POSIX five-field cron in on.schedule[].cron, always evaluated in UTC.
- Jenkins (with H) — informational (EXPLAIN). Jenkins build-trigger syntax: five fields plus H (hash) for load spreading, optional TZ= line. Macros like @daily are hashed too.
- systemd OnCalendar — qualified (APPROX). systemd.time calendar events: [weekdays] [year-month-day] [hour:minute[:second]] [zone]. Not cron syntax — parsed by a separate adapter (common subset).
Labels: NATIVE = computed exactly by CronViewer; APPROX = best effort with documented limits; EXPLAIN = informational only (for example Jenkins H without a job name, @reboot, @every); UNSUPPORTED = cannot be done in a browser-only tool.
Feature status
| ID | Feature | Status | Label | Notes |
|---|---|---|---|---|
| CRON-01-001 | 5-field cron lexer and AST | Done | NATIVE | Own parser with positioned tokens and per-item AST. |
| CRON-01-002 | 6-field seconds parser | Done | NATIVE | Quartz and Spring. |
| CRON-01-003 | 7-field year parser | Done | NATIVE | Quartz optional year (1970–2099), AWS required year (1970–2199). |
| CRON-01-004 | Dialect auto-detect with confidence | Done | APPROX | Heuristic ranking with reasons and alternatives; always overridable. |
| CRON-01-005 | Manual dialect override | Done | NATIVE | |
| CRON-01-006 | Numeric ranges, lists and steps | Done | NATIVE | Incl. wrap-around ranges where the dialect allows them. |
| CRON-01-007 | Named month and weekday tokens | Done | NATIVE | |
| CRON-01-008 | Sunday 0/7 conventions | Done | NATIVE | Per dialect: 0–7, 0–6 or 1–7 (SUN=1). |
| CRON-01-009 | DOM/DOW OR versus AND semantics | Done | NATIVE | Vixie star-prefix rule, robfig star rule, AND dialects. |
| CRON-01-010 | Quartz ? L W # support | Done | NATIVE | L, L-n, LW, nW, nL, n#m. |
| CRON-01-011 | Macro aliases @daily @hourly @reboot | Done | NATIVE | @reboot and @every are explained, not simulated (EXPLAIN). |
| CRON-01-012 | Strict syntax and out-of-range diagnostics | Done | NATIVE | Stable codes, column positions, suggested fixes. |
| CRON-01-013 | Inline syntax highlight and token hover | Partial | NATIVE | Field strip under the input with hover/focus meanings and error marking; no colouring inside the text box itself. |
| CRON-01-014 | Natural-language explanation with qualifiers | Done | NATIVE | English only. |
| CRON-02-001 | Visual minute/hour/day/month/week editor | Done | NATIVE | |
| CRON-02-002 | Calendar-based schedule builder | Partial | NATIVE | Rule builder (daily/weekly/monthly/yearly) plus a clickable 12-month heatmap; no drag-to-select on a calendar. |
| CRON-02-003 | Every N minutes and weekdays presets | Done | NATIVE | |
| CRON-02-004 | Business hours and month-end recipes | Done | NATIVE | With dialect-specific workarounds. |
| CRON-02-005 | Expression formatting and normalization | Done | NATIVE | Refuses if the normalised form would change meaning. |
| CRON-02-006 | Copy per-target generated expression | Done | NATIVE | |
| CRON-02-007 | Cron to Quartz and reverse conversion | Done | NATIVE | Verified by simulation. |
| CRON-02-008 | Spring/Kubernetes/GitHub adapters | Done | APPROX | Plus AWS, Jenkins, systemd; config snippets. |
| CRON-02-009 | Migration semantic-diff report | Done | NATIVE | 400-day / 4,000-run simulated diff. |
| CRON-02-010 | Multiple schedule side-by-side comparison | Done | NATIVE | Up to 6 schedules. |
| CRON-02-011 | Human expression to cron via rule builder | Done | NATIVE | Structured rule builder; free-text English parsing is not offered. |
| CRON-02-012 | Shareable URL preserving expression and dialect | Done | NATIVE | State in the # fragment only. |
| CRON-02-013 | Local named presets and favorites | Done | NATIVE | IndexedDB. |
| CRON-03-001 | Next 10/100/1000 fire times | Done | NATIVE | Web Worker with time budget. |
| CRON-03-002 | Previous fire times and reference instant | Done | NATIVE | |
| CRON-03-003 | Calendar heatmap daily/weekly/monthly | Done | NATIVE | 12-month calendar, week×hour grid, day timeline. |
| CRON-03-004 | Timeline view with occurrence density | Done | NATIVE | |
| CRON-03-005 | Timezone comparison mode | Done | NATIVE | Up to 3 extra display zones; UTC translations for UTC-only targets. |
| CRON-03-006 | DST spring gap and fall overlap handling | Done | APPROX | Per-platform policies with confidence labels. |
| CRON-03-007 | Leap day and end-of-month edge cases | Done | NATIVE | |
| CRON-03-008 | Daylight-saving impact report | Done | NATIVE | 2-year horizon, all policies compared. |
| CRON-03-009 | Frequency estimates over bounded intervals | Done | NATIVE | Exact daily counts for 12 months. |
| CRON-03-010 | Schedule collision and overlap detector | Done | NATIVE | |
| CRON-03-011 | Blackout date and holiday overlays from imported local file | Done | NATIVE | .ics / .csv / .txt read locally. |
| CRON-03-012 | Synthetic execution duration overlap preview | Done | APPROX | User-estimated durations. |
| CRON-03-013 | IANA timezone identifier validation | Done | NATIVE | Uses the browser tz database; suggestions for typos/abbreviations. |
| CRON-03-014 | Export occurrences CSV/JSON/ICS | Done | NATIVE | |
| CRON-04-001 | Cron test vector editor | Done | NATIVE | |
| CRON-04-002 | Property-based parser test cases | Partial | NATIVE | In the repository test suite (oracle + round-trip + fuzz); not exposed in the UI. |
| CRON-04-003 | Explain why a date does not match | Done | NATIVE | |
| CRON-04-004 | Ambiguity warnings per target platform | Done | NATIVE | |
| CRON-04-005 | Offline quick reference and examples | Partial | NATIVE | Service worker caches pages after first visit; cheat sheet is a page, not a dedicated offline panel. |
| CRON-04-006 | Accessible keyboard navigation | Done | NATIVE | “/” focuses the expression; arrow-key tabs; skip link. Not audited with every screen reader. |
| CRON-04-007 | URL restore and back-forward state | Done | NATIVE | |
| CRON-04-008 | Local persistence and reset | Done | NATIVE | Autosave, backup export/import, delete all. |
| CRON-04-009 | Copy diagnostics and reproducible bug fixture | Done | NATIVE | |
| CRON-04-010 | Printable schedule summary | Done | NATIVE | Print stylesheet. |
Not done (roadmap)
- Free-text English to cron (“every second Tuesday at noon”). The structured rule builder covers the same ground for now.
- Executing schedules or monitoring real jobs — out of scope by design.
- Translated interface; the explanation is English only.