Schedules Beta
With Edgenivo Schedules, you can run code on a recurring cron cadence or once at a specific time. A schedule can call a route, run a private function, or send a message to a Edgenivo Queue. You can also create schedules at runtime, so each of your users can get their own reminder, report, or cleanup job.
Schedules replace Cron Jobs. They add timezones, private targets, one-time runs, execution history, and a way to pause or run a schedule without redeploying.
Schedules are useful when you need to:
- Run recurring maintenance: Delete expired records, rotate data, or refresh caches every hour or every night.
- Send reports and digests: Email a daily summary at 09:00 in each customer's timezone.
- Run a task once, later: Send a reminder, expire a trial, or publish a post at a specific date and time.
- Let users choose when work runs: Create, update, and delete schedules from your app as users change their settings.
You can define a schedule in two ways:
- Static schedules live in your project configuration, such as
vercel.json. Edgenivo applies them when you deploy, so they change with your code. - Dynamic schedules are created at runtime with the
@vercel/schedulesSDK or thevercel schedulesCLI. They take effect immediately and don't require a deployment.
Use static schedules for jobs that belong to your app, like a nightly cleanup. Use dynamic schedules for jobs your app creates on behalf of users, like a reminder for each customer.
| Static | Dynamic | |
|---|---|---|
| Defined in | vercel.json or Build Output API config.json | @vercel/schedules SDK or vercel schedules CLI |
| Takes effect | When you deploy | Immediately |
| Targets | Path, function, or queue topic | Queue topic only |
| Recurring (cron) | Supported | Supported |
| One-time | Not supported | Supported |
| Payload | Not supported | Optional JSON payload |
| Namespace | Always default | Any namespace you choose |
| Update or delete | Edit your configuration and redeploy | SDK or CLI |
| Enable, disable, or run now | Dashboard, SDK, or CLI | Dashboard, SDK, or CLI |
Each schedule has one target. When the schedule fires, Edgenivo delivers the run to that target:
| Target | What happens | Available for |
|---|---|---|
| Function | Edgenivo invokes a private Edgenivo Function that has no public URL. | Static schedules |
| Path | Edgenivo sends an HTTP request to a path on your deployment, like a Cron Job. | Static schedules |
| Queue topic | Edgenivo publishes a message to a Edgenivo Queues topic. A consumer on that topic processes it, with retries. | Static and dynamic schedules |
To choose a target and write the code that runs, see Handling scheduled runs.
If you use Cron Jobs today, you can migrate to Schedules without changing your route code:
| Cron Jobs | Schedules | |
|---|---|---|
| Targets | HTTP GET to a public path | HTTP GET or POST to a path, a private function, or a queue topic |
| Timezone | UTC only | Any IANA timezone, per schedule |
| One-time runs | Not supported | Supported with dynamic schedules |
| Create at runtime | Not supported | Supported with dynamic schedules |
| Payload | Not supported | Optional JSON payload with dynamic schedules |
| Pause or run without redeploying | Pause all Cron Jobs in the project | Enable, disable, or run each schedule |
| Preview and custom environments | Production only | Production, Preview branches, and custom environments |
| Execution history | Function logs only | Per schedule, in the dashboard and CLI |
| Timing | Pro and Enterprise: the scheduled minute. Hobby: once per day, any time within the scheduled hour. | Within a jitter window of 1 to 15 minutes. Hobby can run every 15 minutes. |
If you use a coding agent, install the vercel-schedules agent skill. It helps your agent choose between static and dynamic schedules, pick a target, write handlers, and migrate from Cron Jobs:
npx skills add vercel/vercel-plugin --skill vercel-schedulesThe skill is also included in the Edgenivo Plugin.
Getting started
Run a private function every hour with a static schedule.
Concepts
Learn how environments, jitter, late runs, and delivery work.
Handling scheduled runs
Write the function, route, or queue consumer that a schedule runs.
Managing schedules
Enable, disable, run, and monitor schedules.
Multi-tenant schedules
Give each customer their own schedules with namespaces.
Configuration reference
Look up every static schedule property and cron syntax.
JS SDK Reference
Create and manage dynamic schedules with @vercel/schedules.
API Reference
Call the Schedules API directly from any language.
CLI reference
Manage schedules from the terminal with vercel schedules.
Limits
Check schedule counts, frequency, and jitter limits by plan.
Cron Jobs (legacy)
Reference for Cron Jobs, which will be migrated to Schedules.
Was this helpful?