Skip to content

Repository files navigation

CronScope

VersionLicensePlatformJavaScriptStatusDependencies

Full-year cron expression simulator with calendar heatmap visualization, multi-schedule conflict detection, and detailed execution analytics — 100% client-side, zero install.

https://sysadmindoc.github.io/CronScope/

Why CronScope?

Every cron tool out there shows you the next 5 runs in a plain text list. That's useless when you're managing production schedules, debugging job overlaps, or trying to understand execution density across an entire year. CronScope gives you the full operational picture at a glance.

Quick Start

  1. Download cronscope.html
  2. Open in any browser
  3. Start typing cron expressions

For development, run npm test for parser, import, timezone, worker, and extension checks, then npm run build to create the dist/ bundle. The VS Code hover extension lives in vscode-extension/; run npm run build:extension before packaging it with VS Code extension tooling.

The reusable CLI accepts one expression or a complete crontab. It can read stdin, /etc/cron.d-style username fields, or a file, and can emit a terminal dashboard, JSON, or a standalone browser artifact:

node bin/cronscope.js "0 9 * * 1-5" --year=2026 --pivot=2026-06-05T09:00:00
cat crontab.txt | node bin/cronscope.js --stdin --format=json
node bin/cronscope.js --file=crontab.txt --output=cron-report.html

Use --tui for a terminal validation view and --pivot=ISO to show the previous and next occurrence around an arbitrary timestamp.

No server. No install. No dependencies. Just a single HTML file.

git clone https://github.com/SysAdminDoc/CronScope.git
cd CronScope
# Open cronscope.html in your browser

Features

FeatureDescription
Full-Year HeatmapGitHub-style calendar showing execution density across every day of the year
Multi-Expression SupportAdd unlimited cron expressions with color-coded labels, layered on the same calendar
Conflict DetectionAutomatically flags overlapping execution times between expressions with overlap counts
Day Drill-DownClick any heatmap cell to see exact fire times for that day, broken down by expression
Hourly DistributionStacked bar chart showing when jobs cluster across the 24-hour cycle
Stats PanelTotal runs/year, active days, max/day, avg/active day, peak hour, peak day per expression
Next 15 RunsReal-time upcoming execution list across all expressions with color-coded source
Plain English TranslationConverts cron syntax to human-readable descriptions inline
Presets Library12 common scheduling patterns — one click to apply to any expression
Year NavigationBrowse any year's schedule with arrow navigation
Dark/Light ThemeToggle between dark and light themes, persisted to localStorage
Named Values & AliasesSupports MON-FRI, JAN-DEC, @daily, @hourly, etc.
Shareable PermalinksURL encodes current expressions/year for sharing
Schedule SetsSave/load expression collections to localStorage
Crontab ImportPaste a raw crontab file, each line becomes an expression
Export ReportCopy a full Markdown analysis report to clipboard
Copy as MarkdownOne-click copy of plain-English translations
DST CompatibilityChoose wall-clock, exact IANA, or Debian cron skip/repeat behavior
Background ComputeUses a bounded Web Worker for local-time fire-time generation, with a synchronous fallback
CLI PipelineRead crontabs from stdin/files and emit terminal, JSON, or shareable HTML output
VS Code Hover ExtensionPreview a cron description and year heatmap while hovering a cron expression
Zero ConfigNo build step, no dependencies, no server — one HTML file

Usage

Basic

Type a standard 5-field cron expression:

┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-7, 0 and 7 = Sunday)
│ │ │ │ │
* * * * *

Supported Syntax

SyntaxExampleMeaning
** * * * *Every unit
,1,15 * * * *List — minute 1 and 15
-0 9-17 * * *Range — hours 9 through 17
/*/5 * * * *Step — every 5 minutes
Combined*/15 9-17 * * 1-5Every 15 min, 9 AM–5 PM, weekdays

Comparing Schedules

  1. Click + Add Expression to add another cron line
  2. Give each expression a descriptive label
  3. The heatmap layers colors — dominant expression wins cell color
  4. If schedules overlap, the Conflict Detector panel appears automatically with exact overlap counts

Presets

Click the grid icon next to any expression to open the presets panel:

PresetExpression
Every minute* * * * *
Every 5 minutes*/5 * * * *
Every hour0 * * * *
Every 6 hours0 */6 * * *
Daily at midnight0 0 * * *
Daily at 9 AM0 9 * * *
Weekdays at 9 AM0 9 * * 1-5
Weekly Sunday midnight0 0 * * 0
1st of month at noon0 12 1 * *
Every 15 min, work hours*/15 9-17 * * 1-5
Quarterly0 0 1 1,4,7,10 *
Yearly Jan 1 midnight0 0 1 1 *

How It Works

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Cron Parser │────>│ Fire Time Gen │────>│ Visualizations │
│ │ │ │ │ │
│ Tokenizes each │ │ Iterates year │ │ Heatmap, stats, │
│ field, validates │ │ generating all │ │ hourly dist, │
│ ranges/steps │ │ matching dates │ │ conflict detect │
└─────────────────┘ └─────────────────┘ └─────────────────┘

All computation happens client-side in the browser. No data leaves your machine. The parser handles all standard cron features: wildcards, ranges, steps, lists, and combinations. Fire times are generated by iterating through every valid month/day/hour/minute combination for the selected year.

Prerequisites

  • Any modern browser (Chrome, Firefox, Edge, Safari)
  • That's it

What It Does and Doesn't Do

Does:

  • Parse and visualize standard 5-field cron expressions
  • Show full-year execution heatmaps with day-level drill-down
  • Detect scheduling conflicts between multiple expressions
  • Provide execution statistics and hourly distribution analysis
  • Work entirely offline after loading

Doesn't:

  • Execute or schedule actual jobs
  • Send any data anywhere — fully client-side

FAQ / Troubleshooting

Q: The heatmap looks empty A: Make sure your cron expression is valid — the input border turns red on invalid syntax. Check the "Plain English" sidebar to verify the expression matches your intent.

Q: Can I use named days/months like MON or JAN? A: Yes. Use MON-FRI for weekdays, JAN-DEC for months, and aliases like @daily, @hourly, @weekly, @monthly, @yearly.

Q: The "Next 15 Runs" panel is empty A: This panel shows upcoming runs from the current date/time forward. If all your expressions are set to past dates or the current year has no remaining runs, it'll be empty.

Q: How many expressions can I add? A: No hard limit. Performance stays smooth up to ~6 expressions. Beyond that, the conflict detection computation may slow down slightly on complex schedules.

Contributing

Issues and PRs welcome. If you find a cron edge case that parses incorrectly, open an issue with the expression and expected behavior.

License

MIT License — see LICENSE for details.

About

Full-year cron expression simulator with calendar heatmap visualization, multi-schedule conflict detection, and detailed execution analytics — 100% client-side, zero install.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages