Scheduled tasks
Cron expressions with a real execution history. Skip, queue, or terminate overlapping runs. Catch-up missed runs after a reboot. Notify Slack or Telegram on failure.
One binary · Linux, macOS, WSL · 25 MB RAM idle
It's 3 AM. Your backup didn't run. You won't know until tomorrow morning. RunWisp fixes that — one binary that replaces crond, supervisord, and the tab you forgot to open.
Scheduled jobs, long-running services, and health checks — defined in the same
runwisp.toml
file and run by the same process.
Cron expressions with a real execution history. Skip, queue, or terminate overlapping runs. Catch-up missed runs after a reboot. Notify Slack or Telegram on failure.
Supervise worker processes with restart policies, instance counts, and graceful-stop windows. Same TOML file, same dashboard, same logs.
Hit an endpoint, exit non-zero if it's broken. RunWisp captures the run, retains the output, and pages you the way you want to be paged.
The 3 AM problem
crond runs your job, dumps stderr somewhere you'll never read, and forgets about it.
No exit code history. No "did the last run finish?" No notification when it didn't.
RunWisp captures every run — stdout, stderr, exit code, duration — and keeps the last N runs per task in embedded SQLite. Stream the output live in your browser. Re-trigger with one click. SSH at 3 AM is optional now.
Not a DAG engine. If you need workflows, try Dagu or Airflow. RunWisp does one machine, well.
From curl to "my backups have a dashboard." No package manager wrangling.
One curl, no Node, no Python, no Docker required.
curl -fsSL https://get.runwisp.com | sh Tasks and services in one file. Checked into your repo. The schema is the source of truth.
[tasks.backup-db]
cron = "0 2 * * *"
on_overlap = "skip"
keep_runs = 30
run = "pg_dump mydb | gzip > /backups/mydb-$(date +%F).sql.gz"
[services.worker]
run = "./bin/worker"
restart = "on-failure" Schedules fire, services supervise, logs persist. Open the web dashboard on http://localhost:7777 or stay in the terminal.
runwisp journalctl.
Predictable, observable, scriptable. The stuff a solo dev or a small ops team actually needs — without standing up Airflow.
Exit code, duration, stdout, stderr, timestamps — captured for every run, browsable in the web UI, queryable via REST. No silent failures.
Static Go binary. No Python, no Node, no external database. Embedded SQLite, embedded dashboard. Works on a Raspberry Pi.
Schedules, retries, services, notifiers — all in runwisp.toml. The dashboard reads and triggers; it never edits your config.
Per-task on_overlap policy: skip, queue, or terminate. Per-service instance counts. Backoff with reset on stability.
Reboot the machine, run RunWisp, and missed firings replay (bounded by max_catch_up_runs). No quiet gaps in your history.
Slack, Telegram, or an in-app bell. Per-task overrides. Route notifications by event. Or stay silent — your call.
A Svelte dashboard ships inside the binary. A Bubbletea TUI for SSH sessions. Same data, two surfaces, no extra installs.
Watch a task's output as it happens, in the browser or over SSH. Tail historic logs without grep-ing through files.
SIGTERM-then-SIGKILL with a configurable grace window per task. The daemon waits, the long-running task gets to flush.
Everything works with the network unplugged. The optional cloud control plane is strictly opt-in and never blocks execution.
RunWisp sits between "edit crontab over SSH" and "stand up Airflow." If your scheduler needs a team to run it, you've outgrown us.
| Tool | Today | With RunWisp |
|---|---|---|
| crond | No history, no UI, no notifications. | Persistent run history, live log streaming, notifications. |
| systemd timers | Tedious to author, Linux-only, journalctl in a container is a chore. | One TOML file. Same daemon on macOS, Linux, WSL, Docker. |
| supercronic | Container-cron, but logs go to stdout and disappear. | Per-task retention, live streaming, one-click re-trigger. |
| Airflow / Dagster | DAGs, schedulers, web UI — and a Python install, a metadata DB, and a learning curve. | One binary, one TOML. Not a workflow engine — and proud of it. |
A single Go binary. No telemetry. Apache-2.0. If it doesn't earn the disk space, rm it.