Cron
Schedule the invocation of an Edge Function on a cron expression. Each deadline puts a job in the same queue as the asynchronous invocations, consumed by the pool of workers — without retrying in case of failure.
One more trigger for your functions
The aura-functions service can invoke an Edge Function on a schedule, in addition to synchronous HTTP invocations and manually queued asynchronous jobs — see /docs/functions. There is no separate “cron” function: any deployed function can be targeted by a schedule.
Cron does not replace an SQL scheduler. For purely database tasks (refreshing a materialized view, purging a table), the Postgres extension pg_cron — which can be activated from the Studio, see /docs/database — avoids the HTTP round trip to a function.
The cron threads, it does not execute
A cron deadline does not launch the function directly: it creates a job in the queue (the same tables and the same worker pool as POST /v1/functions/:projectId/jobs), with a payload frozen at the time of cron creation. The job is then consumed by a worker like any other job.
When the service is restarted, all active crons of all provisioned projects are reloaded from the base and rescheduled — the task list is not persisted in memory alone.
What the scheduler provides
In-process scheduler
tokio-cron-scheduler + the cron crate in aura-functions: no external service, in-memory scheduling rescheduled on startup.
§ scheduler
Each deadline = a job
The cron does not execute anything itself: it threads a job (like functions.invoke in asynchronous mode), consumed by the same pool of workers.
§ pipeline
Without retry
A job created by the cron has max_attempts=1: a failure switches it directly to DLQ (dead), unlike classic asynchronous jobs (3 attempts by default).
§ failure
Last_run/next_run tracking
Each trigger timestamps last_run and pre-calculates next_run from the stored expression — visible via listCronJobs().
§ observability
Create, list, delete
The name of a cron is unique per project and serves as an identifier for deletion (DELETE /v1/functions/:projectId/cron/:nom) — there is no UUID to remember on the client side.
What cron doesn't do (yet)
Unlike function secrets (aura secrets), there is no aura functions cron command today: management of scheduled tasks goes through the SDK or the REST API, not through the CLI.
A job from the cron fails directly in dead (DLQ) on the first attempt — max_attempts is worth 1, compared to 3 by default for a classic asynchronous job. A cron-invoked function must therefore handle its own replays if the underlying operation is to be guaranteed, or you must monitor the DLQ (GET /v1/functions/:projectId/jobs/dlq) and replay manually.