A Webstarted Toolbox widget · macOS & Windows

A cron expression generator that also tells you what yours really does.

Build the schedule from presets, or paste any 5-field expression and get it explained in plain English with the next 3 runs. It parses steps, ranges and day names, warns you about the day-of-month / weekday OR rule, and refuses non-portable tokens instead of guessing. Fully offline.

Already have Toolbox? Open this widget

Free · No account · 100% offline · Installs from the Toolbox catalog
Try it here

Write a cron and read it in plain English

Change the expression and see what it means and when it fires. It is evaluated in your browser.

Shortcuts:

What it means
Next runs

    100% local · five fields: minute, hour, day of month, month, day of week

    Plain EnglishBoth directions: read and build
    Next 3 runsReal dates, not just a sentence
    OR rule warningThe bug nobody tells you about
    OfflineYour schedules stay yours
    How it works

    Read an expression, or build one without memorizing the order.

    Paste an expression and the widget answers three questions at once: is it valid, what does it mean, and when does it fire next. The explanation is a sentence — “Every 15 minutes, between 09:00 and 17:00, on Monday to Friday” — and under it are the next three real dates, which is what turns an abstract argument about fields into something you can check.

    Going the other way, the Build presets cover the schedules people actually write: every 5 minutes, hourly, daily at 09:00, Monday to Friday at 09:00, Mondays at 08:00, the 1st at midnight. Pick one, adjust it, copy the result into your crontab, CronJob manifest or CI config.

    When something is wrong, the error names the field instead of just saying invalid: how many fields you actually passed, which field is out of range, or which token can’t be parsed.

    • Explanation in plain English + the next 3 runs
    • Presets for the six schedules everyone ends up writing
    • Aliases @daily, @hourly, @weekly… expanded to their 5 fields
    • Errors that name the offending field and token
    • Copy button, and a field legend so you stop counting positions
    The OR trap

    “The 1st, if it’s a Monday” is not what that expression says.

    Here is the rule that quietly breaks schedules: when both the day-of-month and the day-of-week field are restricted, cron runs the job when either one matches. So 0 0 1 * MON does not mean “the 1st of the month, if it falls on a Monday”. It means the 1st of the month, plus every Monday — roughly five times more often than whoever wrote it intended, which is how a monthly billing job ends up running weekly.

    The widget implements that rule properly and, more importantly, says so on screen whenever your expression lands in that case. Most generators show you a pretty sentence that reads like an AND and let you find out in production.

    • OR semantics implemented, not approximated
    • An explicit warning when both day fields are restricted
    • The next 3 runs make the extra firings visible immediately
    • Wrap-around weekday ranges (fri-mon) and Sunday as 0 or 7
    Syntax it accepts

    Standard cron, and an honest “no” to everything else.

    The parser covers what portable cron actually has: the wildcard, lists, ranges, steps in all three shapes (*/15, 9-17/2, 5/15), month names, weekday names, weekday ranges that wrap around the weekend, and Sunday written as either 0 or 7.

    What it deliberately rejects: L, W, # and ?. Those belong to Quartz and Spring, not to crontab, Kubernetes CronJobs or most CI schedulers — so an expression using them is not portable to where you are probably pasting it. A tool that silently accepted them would be telling you a schedule that never happens.

    • Wildcard, lists, ranges and all three step forms
    • Names: JAN-DEC, SUN-SAT, mon-fri
    • Wrap-around ranges like fri-mon; Sunday as 0 or 7
    • Rejects L W # ? and @reboot with a reason
    TokenSupportedExample
    * wildcard* * * * *
    List0 9,17 * * *
    Range0 9-17 * * *
    Step*/15 * * * *
    Names0 8 * JAN mon
    Aliases@daily
    Quartz L W #0 0 L * *
    @rebootnot a time
    Part of Webstarted Toolbox

    Installed from the catalog, in one click.

    Cron Wizard isn’t bundled into the app — it’s a widget in the Webstarted Toolbox catalog. Download Toolbox, open the catalog tab (🧰), press the “+” next to Cron Wizard, and it lands in your Dev tools tab. No reinstall, no app update. Here are a few of its neighbors:

    FAQ

    Questions, answered.

    What does the expression mean, in plain English?

    That is the whole point of the widget: you paste the five fields — minute, hour, day of month, month, day of week — and it writes out what they mean in a sentence, then lists the next 3 times it will actually fire. Seeing “At 09:00, Monday to Friday” next to three real dates is what catches a mistake before you deploy it.

    Why does my cron run on days I didn’t expect?

    Almost always the day-of-month / day-of-week OR rule. When both of those fields are restricted, cron fires when EITHER matches — not when both do. So “0 0 1 * MON” does not mean “the 1st, if it is a Monday”; it means the 1st of the month AND every Monday. The widget flags this explicitly whenever your expression hits that case, which is the one thing most generators leave you to discover in production.

    Which syntax does it support?

    Standard 5-field cron: “*”, lists (1,15), ranges (1-5), steps (*/15, 9-17/2, 5/15), month and day names (JAN, mon-fri), wrap-around weekday ranges (fri-mon) and Sunday as either 0 or 7. Plus the aliases @yearly, @annually, @monthly, @weekly, @daily, @midnight and @hourly, which it expands to the equivalent five fields so you can see what they really are.

    Why does it reject L, W, # and ?

    Because those are extensions, not cron. “L” (last day), “W” (nearest weekday), “#” (nth weekday) and “?” come from Quartz and Spring schedulers; plain crontab, Kubernetes CronJobs and most CI schedulers do not understand them. Rather than pretend to parse them and hand you a wrong answer, the widget tells you the token is not portable. Same with @reboot: it is not a time, so there is nothing to explain or predict.

    Do I need to be online?

    No. Parsing and the next-run calculation happen locally — no request goes out, so the expression you are debugging (and the schedule of your infrastructure it hints at) stays on your machine. Day and month names are built into the widget instead of coming from the system locale, so the same expression always reads the same way.

    Is it free?

    Yes. Webstarted Toolbox is free and needs no account, and Cron Wizard is a free widget in its catalog — you install it in one click from inside the app.

    Get Webstarted Toolbox

    Free to use. Download the app, then add Cron Wizard from the catalog in one click. macOS 12+ and Windows 10+.

    Free beta · macOS · Windows (x64) · Signed & notarized · No account required
    Keep exploring

    One icon, many small tools

    This is just one of the widgets in Webstarted Toolbox. Here are the rest:

    Keep Awake Stop your Mac from sleeping, on your terms. 📊 LLM Quota Pace your Claude / AI usage against the clock. 🍅 Pomodoro 25/5 focus cycles in your menu bar. Countdown Live countdowns to anything that matters. Clipboard history Your recent copies, one keystroke away. {} Dev tools JSON, Base64, JWT, regex, epoch — offline. Quick Note A scratchpad that autosaves as you type. 🌐 My IP Your public IPv4 and IPv6, copyable, with ISP and location. 📈 System Info CPU, memory and GPU in your menu bar. 🐹 Topos A 30-second reflex game in your menu bar. 💣 Minesweeper Classic minesweeper in your menu bar. 🪙 Crypto Prices Live crypto prices with 24h change, in your menu bar. 💱 Currency Converter Convert currencies with real parallel rates (blue, MEP, CCL). 🌍 World Clocks Several cities' time at once — daylight saving handled automatically. 🔳 QR Generator QR codes for text, URLs, WiFi or contacts — offline. 🔑 Password Generator Strong passwords & passphrases, fully offline. 🌤️ Weather Any city, now + the days ahead — no API key. 🔥 Habit Tracker Daily streaks — don't break the chain. 100% local. 🔤 Text Tools Change case, slugify, count, dedupe — offline. 🎲 Random Picker Pick from a list at random, or roll dice. 🎨 Color Picker Pick a color, copy hex / rgb / hsl / hsv — offline. 🌐 Translator 18 languages from the menu bar — no API key needed. 🔀 Text Diff Compare two texts line by line — 100% local. 🗃️ Dummy Data Lorem ipsum and fake rows in JSON, CSV or SQL. 🔊 Focus Sounds White, pink or brown noise — synthesized, no files. 🔁 Subscriptions What your recurring services cost per month and year. 🧾 Rates & Tax Hourly ↔ yearly, and add or extract tax. Network Fees Ethereum gas and Bitcoin fees, right now. 📣 UTM Builder Trackable campaign links, normalized so GA behaves. 🌿 Git Status Which of your repos are dirty, unpushed or behind. 🧮 Calculator Type the calculation, read the result as you go. 🎬 Teleprompter Your script scrolls at the speed you read — in wpm. 📊 Stocks Stocks and ETFs with the day’s change — no API key. 🔥 Fireplace A fireplace generated on the fly — no files, no network. 💼 Job Tracker Your applications, with an OS alarm before each interview. Converter 57 units in 8 categories, converted with zero network. Alarms Clock-time alarms that ring with everything closed. 🗂️ Project Boards Kanban boards with your columns, and a due date that notifies you. 📡 Website Monitor Are your sites up? The code and the latency, from your machine. 📤 Send to another computer Text and images to another computer on your network. 📅 Calendar A month view in your menu bar.