n8n/packages/@n8n/scheduler
Emilia 3286414ac0
Some checks are pending
Build: Benchmark Image / build (push) Waiting to run
CI: Master (Build, Test, Lint) / Build for Github Cache (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (22.22.3) (push) Waiting to run
CI: Master (Build, Test, Lint) / Unit tests (24.16.0) (push) Waiting to run
CI: Master (Build, Test, Lint) / Lint (push) Waiting to run
CI: Master (Build, Test, Lint) / Performance (push) Waiting to run
CI: Master (Build, Test, Lint) / Notify Slack on failure (push) Blocked by required conditions
Util: Sync API Docs / sync-public-api (push) Waiting to run
feat(core): Add durable scheduler storage adapter (no-changelog) (#33394)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-02 13:16:26 +00:00
..
src feat(core): Add durable scheduler storage adapter (no-changelog) (#33394) 2026-07-02 13:16:26 +00:00
eslint.config.mjs feat(core): Add durable scheduler storage adapter (no-changelog) (#33394) 2026-07-02 13:16:26 +00:00
package.json feat(core): Add durable scheduler storage adapter (no-changelog) (#33394) 2026-07-02 13:16:26 +00:00
README.md feat(core): Add durable scheduler storage adapter (no-changelog) (#33394) 2026-07-02 13:16:26 +00:00
tsconfig.build.json feat: Add @n8n/scheduler package scaffold for Durable Scheduler (no-changelog) (#33294) 2026-06-30 15:53:22 +00:00
tsconfig.json feat(core): Add durable scheduler storage adapter (no-changelog) (#33394) 2026-07-02 13:16:26 +00:00
vite.config.ts feat: Add @n8n/scheduler package scaffold for Durable Scheduler (no-changelog) (#33294) 2026-06-30 15:53:22 +00:00

@n8n/scheduler

A durable, distributed scheduling service for n8n. It schedules recurring and one-off work and dispatches each due occurrence to a handler, coordinating through the database so every main instance participates and no occurrence is lost across a restart or failover. Scheduling (deciding that something is due) is decoupled from execution (running it), and dispatch is effectively-once.

It is a general scheduling primitive, not tied to one feature: each occurrence is routed to a handler by a task_type key. The Schedule Trigger node is its first consumer; poll triggers, system tasks and waiting executions are intended to follow, replacing today's in-memory, leader-only scheduling. All of it sits behind N8N_SCHEDULER_ENABLED (default off) while the legacy engine stays in place for rollback.

Scope

  • Coordination (the core): assign each due occurrence to a single main via claim, lease and fencing, recover work whose owner has died, and dispatch it across the cluster.
  • Recurrence: turn a cron, interval or one-off schedule definition into its next occurrence, with correct timezone and DST handling.

Status

Early foundation. Today the package ships the domain types, the schedule math and an initial storage adapter; the coordination engine (sweep, executor, reaper) lands in later milestones.