nvoke

Feature

Cron jobs without a server.

Add a schedule to any function and nvoke will call it on time. Same editor, same logs, same API as your HTTP endpoints — just with a cron expression attached.

// schedule: */15 * * * *  (every 15 minutes)
export default async function () {
  const res = await fetch("https://api.example.com/health");
  if (!res.ok) await notifySlack("Upstream is down");
  return { ok: res.ok, status: res.status };
}
Run this every 15 minutes. Set the schedule in the sidebar.

Scheduled runs, unified with HTTP

A scheduled function on nvoke is the same thing as an HTTP endpoint — the only difference is that the platform calls it on a cron expression instead of a client. That means you can test a scheduled function by hitting its URL directly, and you can promote a manual endpoint to a scheduled one without rewriting anything.

The scheduler is implemented on top of a monotonic tick. If you set a schedule of */5 * * * *, nvoke will fire at 00, 05, 10, and so on — not five minutes after deploy. This matters when you are backfilling data or coordinating scheduled jobs across multiple functions.

What scheduled functions are good for

The obvious cases: polling an upstream API for changes, generating daily reports, warming caches, triggering digest emails, rolling encryption keys, reconciling accounting data. The shared property is that you need code to run on time, but you do not want to run a server to host it.

If you are currently using a GitHub Actions schedule trigger as a poor man's cron, a scheduled nvoke function is the right move. Actions schedules are best-effort and often run many minutes late; nvoke fires on the tick.

Schedule your first job.

Paste a function. Pick a cadence. nvoke takes it from there.