Skip to main content
A schedule belongs to a server: schedule() declares one on a nika serve --bind, and the server fires it, stores its state under its --state-root and survives restarts. A local client refuses schedule() and scheduleStatus(), because a short-lived process cannot honestly own a schedule.

Declare, read, pause

Against the server of the server quickstart:
schedule.mts
Captured on 24 October 2026: the first slot is Monday 26 October at 09:00 in Paris, 08:00 UTC. A status carries the next eight slots (requestedCivil, scheduledFor, shift), the server’s lastDecision, and due, which reads { kind: 'paused', pauseUntil, reason } once paused.

Rules the server enforces

  • Revisions. A create is sent with If-None-Match: *; an update needs the exact current revision (If-Match). Revisions are the engine’s opaque sha256:<64 hex> values: never make one up. A stale one fails with schedule_conflict (HTTP 412), and error.currentRevision names the current one.
  • Time zone. A cron cadence names its zone: TZ=<IANA zone> <cron>. A cadence without one is refused (schedule_refused, 422).
  • Budget. A schedule’s maxCostUsd must be positive: 0 is refused, where a local run() accepts it.
  • Served workflows only. The workflow is a served name under the server’s --workflows directory, named from the project root. Anything else is refused with schedule.workflow_outside_registry.
  • Pausing. active: false needs a pauseReason and a pauseUntil calendar date (YYYY-MM-DD).
  • Overlap. afterSkip needs overlap: 'skip', the default, so leaving overlap out works too. Hash jitter is refused.
  • Catch-up. After the server was down, a catch-up-once run’s receipt.origin names the silence it answers for: missed_first, the first slot that passed unfired, and missed_count.

schedule() or arm:

Both run the same workflows under the same engine. Choose by who should own the cadence: your product, or your repository. Arm registry covers the project-file lane.

Server quickstart

The server this page talks to.

Arm registry

Cadences reviewed in the project file.