Features

Scheduled publishing

Publish a draft at a future time from a cron job.


POST /:collection/:id/_schedule-publish with { "publishAt": "2026-11-01T09:00:00Z" } schedules a publish; the time must be in the future and replaces a pending schedule. GET shows the pending schedule and DELETE cancels it. Scheduling needs publish access.

Due schedules run when the host calls engine.processScheduledPublishes(). The reference app does it from a Void cron:

// crons/maintenance.ts
import { defineScheduled } from "void"

export const cron = "*/5 * * * *"

export default defineScheduled(async () => {
  const engine = createSiteCMS().engine
  await engine.processScheduledPublishes()
  await engine.processOutbox(deliverOutboxEvent)
})

Publishing is precise to the cron interval. A schedule that fails (for example, a deleted document) is canceled with its error recorded.