Open-source job scheduler built in Rust. SQLite or Postgres. Web UI with inline editor, live log streaming, job stats, Autosys JIL import, conditions DSL, retries, and alerts. Get running in 60 seconds.
🐧 Linux · 🍎 macOS · 🪟 Windows · MIT / Apache-2.0
Every option has a fatal flaw.
No monitoring. No retries. No UI. No alerts. No history. Silent failures.
Python DAGs, scheduler + workers + DB + executor + Redis. Overkill for running a shell script.
Node.js (~100MB RAM), flat-file storage, no SQL backend, no Autosys DSL, no JIL import.
Single Rust binary (~4MB RAM). SQLite or Postgres. Autosys conditions DSL. JIL import. Inline editor. Live logs. Reliable as cron, powerful as Autosys. Free forever.
No dependencies. No setup. No registration.
curl -fsSL https://github.com/jdp5949/rusty-sched/releases/latest/download/install.sh | sh
Install to custom prefix: PREFIX=$HOME/.local ... | PREFIX=$HOME/.local sh
irm https://github.com/jdp5949/rusty-sched/releases/latest/download/install.ps1 | iex
# SQLite (default — zero config)
rusty-sched server
# Postgres
rusty-sched server --db-url postgres://user:pass@host/dbname
Open http://localhost:8080 — that's it.
cat <<EOF | rusty-sched apply -f -
name: nightly-etl
trigger:
cron: "0 2 * * *"
command: /opt/etl/run.sh
max_attempts: 3
backoff_secs: 30
timeout_secs: 3600
EOF
rusty-sched jil -f my_jobs.jil
Shipped and working today.
Cron, interval, one-shot, manual, dependency, webhook, file watch.
Full Autosys expression parser: success("a") AND failure("b"). Short forms s/f/d/n/r. AND/OR/NOT/parens.
Parse Autosys JIL text files and import jobs directly. Migrate from Autosys in minutes.
Max attempts, backoff delay, hard timeout. Live KILLJOB via API or CLI.
React + Tailwind. CodeMirror inline job editor. Live log tail. Run history. Pause/resume/trigger.
Success rate (24h), p50/p99 duration, last failure. Sparkline of last 20 runs per job.
stdout/stderr stored in DB (100MB cap). Stream to UI in real time. Replay after restart.
Zero-config SQLite by default. Pass --db-url postgres://... to use Postgres. Same binary.
Email (SMTP / Gmail app password), Slack webhook, generic JSON webhook. Per-job config.
apply / update / delete / trigger / pause / resume / runs / jil / sendevent KILLJOB
Session login, roles (admin/operator/viewer), audit log.
3-node embedded Raft. Sub-second failover. Zero missed fires.
✅ done · 🔜 planned · ❌ not available
| rusty-sched | Cronicle | cron | Airflow | Autosys | |
|---|---|---|---|---|---|
| Single binary | ✅ | ❌ Node.js | ✅ | ❌ | ❌ |
| RAM footprint | ~4 MB | ~100 MB | <1 MB | ~500 MB | ~2 GB |
| SQLite / zero-config | ✅ | flat files | ✅ | ❌ | ❌ |
| Postgres support | ✅ | ❌ | ❌ | ✅ | ✅ |
| Web UI | ✅ | ✅ | ❌ | ✅ | ✅ |
| Inline job editor | ✅ | ✅ | ❌ | ❌ | ❌ |
| Conditions DSL (Autosys-style) | ✅ | ❌ | ❌ | Python only | ✅ |
| JIL import | ✅ | ❌ | ❌ | ❌ | ✅ |
| Retries + backoff | ✅ | ✅ | ❌ | ✅ | ✅ |
| Live log streaming | ✅ | ✅ | ❌ | ✅ | ✅ |
| Job stats + sparklines | ✅ | ✅ | ❌ | ✅ | ✅ |
| Live KILLJOB | ✅ | ✅ | ❌ | ✅ | ✅ |
| Email + Slack alerts | ✅ | ✅ | ❌ | ✅ | ✅ |
| Auth / RBAC | 🔜 v0.3 | ✅ | ❌ | ✅ | ✅ |
| Multi-host agents | 🔜 v0.3 | ✅ | ❌ | ✅ | ✅ |
| HA cluster | 🔜 v0.4 | ✅ | ❌ | ⚠️ | ✅ |
| Open source + free | ✅ | ✅ | ✅ | ✅ | ❌ $$$ |
One binary. SQLite or Postgres. Web UI. Conditions DSL. Zero ops overhead.
★ Star on GitHub