cron · normalise · 5/6/7 fields · live

Normalise cron expressions

Aligns the five (or six, or seven) cron fields into evenly spaced columns and expands @daily / @hourly aliases. Runs locally.

Cron Formatter
Input
19 B
1 lines
Output
39 B
1 lines
Status
ready
live
Ratio
2.05×
out/in
input · cron
output · normalised cron
*/5      9-17     *        *        1-5
Quick Start

How to normalise cron

Cron fields are separated by whitespace but the spacing is wildly inconsistent across editors. This tool pads each field to a fixed width so the columns line up.

  1. 01

    Paste an expression

    Standard (5 fields), Quartz (6/7 with seconds and year), or an @alias like @daily.

    Parsing runs through Prettier’s standalone bundle (or the language-specific equivalent) loaded lazily — no parser ships until the tool is opened.

    cronPrettierASTstandalonelazy
    input · sourceraw · AST
    */5 9-17 * * 1-5
    loaded · parsedAST · ready
  2. 02

    Alias expansion

    @yearly, @monthly, @weekly, @daily, @hourly all expand to their classic five-field form.

    Indent width, tab style, and print-width re-format through a memoised pass — switching 2 → 4 spaces never re-parses, only re-prints.

    aliasindentprint-widthmemoisedlive
    @ · optionsexpand · live
    @daily → 0 0 * * *
    options applied · livelive
  3. 03

    Field padding

    Each field pads to 8 chars so a column of expressions reads like a table.

    The formatter is deterministic and idempotent: running it twice produces byte-identical output, which keeps diffs and git noise to a minimum.

    alignidempotentdeterministicdiff-cleanstable
    pad · formatted8ch · ready
    */5      9-17     *
    formatted · liveidempotent
  4. 04

    Copy or save

    Drop into your crontab, GitHub Actions schedule, or systemd timer config.

    Download writes a Blob with the language-appropriate extension; copy uses navigator.clipboard.writeText so the output preserves all whitespace exactly.

    exportclipboardbloblanguage MIMEclient-side
    ok · copiedready · done
    ✓ Copied
    shipped · ready to shipsuccess
Pro tips

Formatting tips that keep diffs sane

Pick one config and pin it

Inconsistent formatting causes diff churn. Commit .prettierrc / .editorconfig and enforce in CI.

Format on save

Editor integration is faster feedback than a pre-commit hook. Use both for belt-and-braces.

Idempotency matters

Running the formatter twice should produce identical output. Test this on a representative file.

Match the language community

Default to community conventions: 2 spaces for JS/CSS, 4 for Python, tabs for Go. Fights over indent are a productivity tax.

Print-width drives wrapping

80, 100, and 120 are the common targets. Wider lines parse fast but review slower side-by-side.

Don’t mix formatters and linters

Prettier handles whitespace; ESLint handles correctness. Disable overlapping rules to avoid fight-club configs.

Use Cases

When to normalise cron

Crontab files, CI schedules, code reviews.

Crontab readability

Make /etc/crontab readable when many jobs sit side by side. Idempotent: running the formatter twice produces byte-identical output, which is the foundation of a clean CI gate. Pair with a pre-commit hook so PRs arrive already formatted, focusing review on logic.

idempotent

CI schedules

Tidy schedule: cron entries in GitHub / GitLab YAML files. Pairs with EditorConfig + .prettierrc for end-to-end consistency. Whitespace-only changes vanish so reviewers see real diffs, and git blame stays honest about who wrote what.

CI-ready

Code review

Spot field-shifts faster when columns line up. Output respects your indent width, tab style, and print-width — settings carry over for repeat runs. Switching 2-space to 4-space costs nothing in CPU but standardises an entire codebase.

diff-clean

Alias docs

Document what @daily really means alongside the alias. Format-on-save is the fastest feedback loop; CI is the safety net. Together they make inconsistent indentation a thing of the past and free up review cycles for genuine concerns.

PR-friendly

Migrating jobs

Compare old and new schedules with aligned columns. Whitespace-only changes don't trigger downstream content-hash invalidations, so CDN cache keys and CI cache layers stay warm. Real changes get all the rebuild budget.

review-ready

Runbooks

Standardise scheduled-job tables in incident docs. Pairs with linters (ESLint, Stylelint, pylint) that catch what formatting alone can't — bugs, unused imports, dead code. Each tool stays in its lane, and the codebase stays clean.

deterministic
FAQ

Frequently asked questions

Only field count. Use cron-to-human or cron-next-runs to verify the semantics.
Supported — Quartz adds seconds (front) and year (back). Field count must be 5, 6, or 7.
Yes, lowercase as in vixie cron: @daily not @Daily.
No — feed it expressions one at a time. Lines starting with # would be treated as malformed.
No — normalisation runs locally in your browser tab.
Suggest a tool

Something missing?

Tell us what you need. We ship the top requests every two weeks.

Sent straight to the maintainers · no account needed
47 in queue·8 shipped this month
Request queued. Thanks!