cronstable // feature comparison v1.2.8 #5978710a7e1f --:--:-- UTC live ▶ open dashboard
cronstable™ / kraahn-stuh-bl /

As simple as cron, as capable as Airflow, in one daemon.

Point cronstable at the crontab you already run and it behaves like plain cron. Reach for DAGs, durable state, leader-elected clustering and a live dashboard only when you need them, all from one dependency-free daemon. And when you want it, a built-in Model Context Protocol server lets an AI agent drive the whole thing.

35 / 35native features 5-in-1scheduler · DAGs · state · cluster · console 23MCP tools 0new dependencies 13OS × arch builds
▶ Explore the live dashboard An interactive board that drives every view: jobs, DAGs, the cluster, durable state and live logs. Synthetic data; no cluster required.

Start simple, scale when you're ready

The same binary covers the whole range. Run it as a nicer cron on one box, or turn on the orchestration, HA and agent tooling as you grow. You never swap tools or rewrite your jobs to move from one end to the other.

Homelab / single box

Point it at the crontab you already have and keep it. One static binary, no database, no broker, no daemon zoo. It stays out of your way and only does what a cron does until you ask for more.

Team / production

Switch on DAGs, leader-elected HA, fenced exactly-once, a durable state store, metrics and the agent interface. The same binary reaches Airflow-class orchestration without the metadata DB or the worker fleet.

How it stacks up

cronstable versus its closest cron-family competitors, plus Apache Airflow as a heavier orchestrator for scale.

Capability cronstable
35 native
yacron
Python · YAML
9 native
supercronic
Go · crontab
7 native
Ofelia
Go · Docker
4 native
dkron
Go · distributed
9 native
Cronicle
Node · master/worker
9 native
K8s CronJob
native resource
8 native
Airflow
Python · orchestrator
18 native
Diff. class
AI & agent controlSignature
MCP server for AI agents
observe & control
✓23 tools · read-only default – – – – – +3rd-party cluster MCP +draft; 3rd-party wrapper
Agent triage & resources
canned playbooks + context
✓5 prompts + URI resources – – – – – – –
Scheduling core
YAML job configuration
✓native YAML crontab ✓ – – – – ✓ +via dag-factory
Classic crontab files as-is
Vixie /etc/crontab
✓runs it unchanged – ✓ – – ◐import only – –
Sub-minute schedules
second-level, 7-field
✓7-field · down to 1s – ✓ ✓ ✓ – – ◐timedelta only
Extended cron dialect
L · L5 · year column
✓last-day · last-Fri · year ✓ ✓ – – ◐year, no L – ✓
@reboot once per OS boot
durable boot marker
✓per boot, not per restart ◐per process start – – – – – –
Arbitrary per-job timezones
✓any IANA zone, per job ✓ ✓ ◐prefix hack ✓ ✓ ✓ ✓
Concurrency policy + timeouts
execution & kill timeout
✓policy + exec/kill timeout ✓ ◐no timeout ◐no timeout ✓ ✓ ✓ ✓
Configurable failure conditions
stdout · stderr · exit code
✓failsWhen · stderr default ✓ – – ◐HTTP jobs only ◐HTTP jobs only ◐exit codes only ◐exit codes only
Retries with exponential backoff
✓backoff · survives restart ✓ – – ◐no backoff ◐fixed delay ✓ ✓
Depends-on-past gate
skip while the last run fails
✓onlyIfLastSucceeded – – – – – – ✓
Missed-run catch-up
after downtime
✓durable catch-up – – – – ✓ ◐one run only ✓
Orchestration & workflows
DAGs / dependency graphs
durable workflow engine
✓fan-out · sensors · resume – – – ◐chaining only ◐chains only +Argo / Tekton ✓
Cross-task data hand-off
XCom
✓XCom between tasks – – – – ✓ +Argo ✓
Dynamic task mapping
fan-out over a list, then fan-in
✓expand: over upstream list – – – – – – ✓
Sensors
poll-until-true tasks
✓durable poke schedule – – – – – – ✓
Human approval gates
✓pause for sign-off – – – – – +Argo ✓
Backfill / historical reruns
✓whole-DAG backfill – – – – ◐time machine – ✓
Distributed & fault-tolerant
Clustering + no double-run
replicas from one config
✓mTLS leader election · quorum – – – ✓ ✓ ✓ ✓
Fenced exactly-once
lease / lock fenced
✓fenced via lease backend – – – ◐no fencing – – ◐no fencing
Cluster-wide concurrency scope
Forbid / Replace across the fleet
✓concurrencyScope: cluster – – – ◐forbid, race-prone ◐max-N, no Replace ✓ ◐queues, no Replace
Crash-resume of in-flight runs
a peer adopts the orphan
✓peer adopts the run – – – ◐4h stale threshold ◐primary crash loses it ✓ ✓
Durable state store for jobs
KV · locks · cursors · secrets
✓+ idempotency & artifacts – – – – – ◐PV/Secrets only ◐Variables/secrets
Observability & control
Live web dashboard
tail · run · cancel
✓live tail · 10 themes – – – ◐no cancel/tail ✓ +separate UI ✓
HTTP REST control API
✓status · start · cancel · history ✓ – – ✓ ✓ ✓ ✓
Prometheus + statsd metrics
✓both, native ✓ ✓ – ✓ – +kube-state-metrics ✓
Per-job resource monitoring
CPU time · peak memory
✓whole process tree – – – ◐Prom gauges ✓ +metrics-server –
Failure reporting
mail · Sentry · Slack
✓+ webhook & shell ✓ ◐Sentry only ✓ ◐Pro for per-job ✓ +Alertmanager ✓
Secret redaction in output
archived logs · on by default
✓on by default – – – – – +log pipeline only ◐known values only
Platform & deployment
Native Windows + macOS + Linux
✓all three, native – – ◐Docker-centric ✓ ◐no Windows – –
Self-contained multi-arch binaries
no runtime install
✓8 Linux arches + mac + win ◐x86-64 only ✓ ✓ ✓ – – –
Hardened container images
non-root · read-only · distroless
✓+ 8 distro variants – – – – – ◐you harden it ◐not distroless
Minimal runtime dependencies
✓pure Python · MCP adds none ◐8 pip deps ✓ ✓ ✓ – – –
State backup · restore · migrate
live-safe admin verbs
✓live-safe backup verb – – – ◐job defs only ◐offline only ◐etcd-wide, offline ◐no backup/restore

Everything else it packs in

The agent interface gets the attention, but most of cronstable is the scheduler under it: a DAG engine, a fenced cluster, a durable state store and a live console, all in the same dependency-free daemon.

DAG engine

A durable workflow engine rather than plain job chaining: fan-out, sensors that wait on external conditions, and XCom hand-offs between tasks. Runs survive a restart and resume mid-flight; pause on a human approval gate, then backfill history when you need to.

fan-outsensorsXComapproval gatesbackfillresume
Fenced, elected cluster

Run replicas from one config with mTLS leader election and quorum, so a job never double-fires. Fenced exactly-once execution through a lease backend keeps a stalled leader from overwriting its successor's work.

mTLSleader electionquorumfenced exactly-once
Durable state store

A store your jobs can use directly: KV, locks, cursors, secrets, idempotency keys and artifacts, all surviving restarts. It runs without an external database or Redis.

KVlockscursorssecretsidempotencyartifacts
Live console

A web dashboard that tails logs, runs and cancels jobs on demand, and walks any DAG's task graph, with 10 themes. Backed by an HTTP REST API and native Prometheus + statsd.

live tailrun/cancelREST APIPrometheus10 themes
Scheduling core

Runs your classic Vixie crontab files unchanged, with per-job IANA timezones, concurrency policies, exec/kill timeouts, retries with exponential backoff, and missed-run catch-up after downtime.

crontab as-isper-job TZtimeoutsbackoffcatch-up
Portable & hardened

Runs natively on Windows, macOS and Linux, shipped as self-contained binaries across 13 OS × arch targets, plus distroless images that run non-root on a read-only root filesystem. Adds zero new dependencies.

WinmacLinux13 buildsdistrolessnon-root

One cool thing about cronstable

we're the only scheduler with a native agent interface.

Built-in MCP server

Point Claude, Cursor or Copilot at your scheduler.

cronstable speaks the Model Context Protocol natively, served at POST /mcp over Streamable HTTP and through a cronstable mcp stdio bridge for desktop clients. It's written in pure Python against MCP revision 2025-11-25. Enabling it adds zero new dependencies. The agent gets read-only access until you grant it write tools.

# wire it to Claude Code (remote or local)
claude mcp add --transport http \
  cronstable https://host/mcp \
  --header "Authorization: Bearer $TOKEN"

$ cronstable mcp --check
mcp check: ok, protocol 2025-11-25,
  23 tool(s) at http://127.0.0.1:8080/mcp
Observe
  • Every job, run & trend: status, history, live log tails
  • DAGs, their runs and XCom data hand-offs
  • The cluster & fleet, node-by-node
  • Metrics and the durable state store
Act · opt-in
  • Run or cancel a job on demand
  • Trigger, backfill or approve a DAG
  • Every write needs confirm: true
  • Backfills default to a dry-run preview
Triage playbooks
  • Root-cause a failing job
  • Walk why a DAG run failed
  • Scope the blast radius of a change
  • Fleet-health digest & backfill plan
Safe by default
  • Read-only until you opt in to mutating tools
  • Inherits web auth; fails closed with no token
  • Secret values & KV data redacted
  • Origin & body defenses against rebinding
5-in-1
Orchestration without the Airflow overhead

Scheduler, durable DAG engine, a job-facing state store, a leader-elected cluster and a live console in one binary. It matches Airflow's orchestration without the metadata DB, the separate workers, or the Python-only footprint.

1 of 8
Only cronstable ships a native MCP server

Across every tool surveyed, it's the only native agent interface. Airflow and Kubernetes reach MCP only through third-party, whole-system add-ons, and Airflow's own server is still a draft proposal.

0 deps
Portable and dependency-free

Pure-Python with no new dependencies, self-contained binaries for 13 OS/arch targets, and images that run non-root on a read-only root filesystem.

See it running

Open the live dashboard and drive a nine-node fleet yourself: tail a job's logs, walk a DAG's task graph, watch leader election, and inspect the durable state store.