Goodbye, cron-only Worker! Schedule Workflows straight from the binding
Hey there, it's Shiichan! Today I found a nice little update that removes the tedious "spin up a whole Worker just to run something on a schedule" chore, so let me walk you through it.
Cloudflare ChangelogWhat was announced?
From Cloudflare's Changelog, it's a new way to use Workflows. Until now, if you wanted a Workflow to run on an interval, you had to set up a separate Workers scheduled handler (a cron trigger) and kick off the Workflow from there.
Now you can write cron schedules directly on the Workflow binding in wrangler.jsonc. When the time comes, a new Workflow instance is created and runs automatically.
The story so far
Even if all you wanted was a periodic run, you needed:
- a dedicated scheduling Worker, and
- glue code inside its scheduled handler to invoke the Workflow.
That "bridge" part was extra plumbing for what was really just "run this every hour."
What changes
Now you just add schedules to the binding. And you can list multiple cron patterns on the same Workflow. In the example I saw, one binding had these three:
0 * * * *... every hour, on the hour*/15 * * * *... every 15 minutes0 9 * * MON-FRI... 9am on weekdays
So periodic jobs like database backups, invoice generation, report aggregation, and cleanup tasks can run while keeping everything Workflows is good at: built-in retries, durable multi-step execution, and configurable timeouts.
Dive Deep
The setup in wrangler.jsonc is just this:
{
"workflows": [
{
"name": "my-scheduled-workflow",
"binding": "MY_WORKFLOW",
"class_name": "MyScheduledWorkflow",
"schedules": ["0 * * * *", "*/15 * * * *", "0 9 * * MON-FRI"]
}
]
}
Then you write a class extending WorkflowEntrypoint with a run() method, and it gets called automatically on each schedule. Inside, you use step.do() to configure per-step retries (limit, delay, backoff) and timeout. If a step fails, only that step is retried per your config, so it stays robust.
For the full details on triggering, check the Trigger Workflows developer guide.
Wrap-up
- You can put cron schedules directly on a Workflow binding via
schedules - No more separate scheduling Worker (scheduled handler)
- One Workflow can carry multiple cron patterns
- Each schedule automatically spins up a new Workflow instance
If you build periodic batch jobs on Cloudflare, or want to, this one lands nicely. Looks like you can try it Monday with just a small edit to wrangler.jsonc!