
Description
Schedule periodic / recurring work in Encore.ts using `CronJob` from `encore.dev/cron`. Covers `every: "1h"` interval syntax and `schedule: "0 9 * * 1"` cron expressions.
SKILL.md
Encore Cron Jobs
Instructions
A CronJob declaration in Encore.ts ties a schedule to an existing api(...) endpoint. The endpoint runs at the chosen cadence. Declare the CronJob at package level — not inside a function.
import { CronJob } from "encore.dev/cron";
import { api } from "encore.dev/api";
// 1. The endpoint to call (typically internal: expose: false)
export const aggregateDailyOrders = api(
{ expose: false },
async (): Promise<void> => {
// Aggregation logic
}
);
// 2. Package-level cron declaration
const _ = new CronJob("aggregate-daily-orders", {
title: "Aggregate orders for the previous day",
schedule: "0 2 * * *", // 02:00 UTC every day
endpoint: aggregateDailyOrders,
});
Schedule Formats
| Field | Example | Description |
|---|---|---|
every | "1h", "30m", "6h" | Simple interval. Must divide 24h evenly — "7h" is invalid. |
schedule | "0 9 * * 1" | Standard cron expression (5 fields, UTC). |
Common cron expressions
| Cron | Meaning |
|---|---|
"0 * * * *" | Every hour, on the hour |
"0 2 * * *" | Daily at 02:00 UTC |
"0 0 * * 0" | Weekly on Sunday at midnight UTC |
"0 4 15 * *" | 04:00 UTC on the 15th of each month |
Important behaviour
- Cron jobs do not execute when running locally with
encore run. Only deployed environments fire crons. - The cron endpoint should be
expose: falseso it can't be triggered externally — only the cron scheduler should call it. - All times in
scheduleare UTC. Convert from local time when designing the schedule. - The endpoint must already exist at module load — declare it before the
CronJob.
Guidelines
- Use
everyfor "run on a regular interval" (must divide 24h). - Use
schedulefor specific times of day or days of week. - Keep endpoint logic idempotent: a cron may fire late or be retried in a redeploy window.
- For event-driven background work (not time-driven), use the
encore-pubsubskill instead.
More skills from the skills repository
View all 28 skillsencore-api
build type-safe APIs with Encore
Apr 6API DevelopmentEncoreTypeScriptencore-auth
implement Encore.ts authentication
Apr 6AuthEncoreTypeScriptencore-bucket
store files in Encore.ts buckets
May 16BackendEncoreFile StorageFile Uploads +1encore-cache
cache data in Redis with Encore.ts
May 16BackendCachingEncoreRedis +1encore-code-review
review Encore.ts code
Apr 6Code ReviewEncoreTypeScriptencore-database
build Encore databases
Apr 6DatabaseEncoreORMTypeScript
More from Encore
View publisherencore-frontend
connect frontend to Encore backend
skills
Apr 6EncoreFrontendNext.jsReactencore-getting-started
build and run applications with Encore.ts
skills
Apr 6API DevelopmentBackendEncoreLocal Development +2encore-go-api
build APIs with Encore Go
skills
Apr 6API DevelopmentEncoreGoencore-go-auth
implement authentication with Encore Go
skills
Apr 6AuthBackendEncoreGoencore-go-bucket
store files in Encore Go buckets
skills
May 16BackendEncoreFile StorageGo +1