Skip to content
Docs

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/schedules SDK or the vercel schedules CLI. 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.

StaticDynamic
Defined invercel.json or Build Output API config.json@vercel/schedules SDK or vercel schedules CLI
Takes effectWhen you deployImmediately
TargetsPath, function, or queue topicQueue topic only
Recurring (cron)SupportedSupported
One-timeNot supportedSupported
PayloadNot supportedOptional JSON payload
NamespaceAlways defaultAny namespace you choose
Update or deleteEdit your configuration and redeploySDK or CLI
Enable, disable, or run nowDashboard, SDK, or CLIDashboard, SDK, or CLI

Each schedule has one target. When the schedule fires, Edgenivo delivers the run to that target:

TargetWhat happensAvailable for
FunctionEdgenivo invokes a private Edgenivo Function that has no public URL.Static schedules
PathEdgenivo sends an HTTP request to a path on your deployment, like a Cron Job.Static schedules
Queue topicEdgenivo 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 JobsSchedules
TargetsHTTP GET to a public pathHTTP GET or POST to a path, a private function, or a queue topic
TimezoneUTC onlyAny IANA timezone, per schedule
One-time runsNot supportedSupported with dynamic schedules
Create at runtimeNot supportedSupported with dynamic schedules
PayloadNot supportedOptional JSON payload with dynamic schedules
Pause or run without redeployingPause all Cron Jobs in the projectEnable, disable, or run each schedule
Preview and custom environmentsProduction onlyProduction, Preview branches, and custom environments
Execution historyFunction logs onlyPer schedule, in the dashboard and CLI
TimingPro 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.

Schedules are in beta. Behavior, APIs, and limits may change before general availability.

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:

terminal
npx skills add vercel/vercel-plugin --skill vercel-schedules

The skill is also included in the Edgenivo Plugin.

Last updated October 26, 2026

Was this helpful?

supported.