Added
- The official Docker image now includes
bashandtzdataon both thealpineanddebianvariants. - New
-dockerimage tags (latest-docker,latest-alpine-docker,latest-debian-docker, and the versioned equivalents) add a Docker CLI with the Compose plugin. For tasks that shell out todocker/docker composefrom inside the RunWisp container itself — e.g. to manage sibling containers over a mounted Docker socket. See Docker.
Changed
- The run detail header now leads with the outcome — a verdict line (
succeeded in 933ms) over one fact line with the time, date, trigger, queue wait, retries and parameters. Queue wait, retries and parameters appear only when they apply, and a failing run colours the verdict and tints the header.
Fixed
npm install -g runwisp,bun add -g runwisp, andnpx runwispnow install and run therunwispcommand. The npm package now ships a small launcher that execs the bundled platform binary directly (no resident wrapper process), so every documented install path works — not justbunx.- A task removed by
runwisp reloadnow finalizes any run still waiting in its queue, recording it with a terminal status so the run history and API never show it as perpetually pending. min_free_spacekeeps enforcing free-disk headroom across log rotations, so the safeguard stays active for the full duration of a long-running task whose output rotates. Seemin_free_space.- Log line numbers stay continuous after a run’s output rotates more than once, keeping log-search results and paging anchors pointing at the right lines.
- The data directory is always created with
0700permissions, including when it already exists (for example a pre-created Docker volume), so its contents stay private to the daemon’s user. - Notification log excerpts are always valid UTF-8 — trimming a captured-output tail to fit a message no longer cuts through a multi-byte character.
- Release tarballs now package
runwispas an executable (mode 0755). - CPU and memory stats now report real host values on macOS. The system-resource collector only understood Linux
/proc, so on macOS the dashboard, TUI,/api/systemand/metricsshowed the daemon’s own Go heap as “total memory” with CPU stuck at 0%. macOS now reads host RAM and load average directly (viasysctland a mach VM-statistics call), matching the Linux figures. - The TUI’s shutdown command now targets the daemon it’s connected to via
--socket, and surfaces an error if the shutdown fails. - The web UI no longer shows connection status twice. The header’s connection pip and timezone badge are gone; the sidebar footer is now the one place for both, with the timezone’s source (config vs. detected) moved into a tooltip instead of sitting in the label.
- The dashboard now seeds
/api/systemand/api/infoonce per session instead of re-fetching them on every auth state change; live values already stream over/api/stream. - Multiple open dashboard tabs no longer stall each other’s live updates. The tab holding the shared event stream now hands it off when it’s backgrounded, so a visible tab always keeps the connection.
- A cron schedule with more than one tick per hour (e.g.
0,30 2 * * *) no longer re-fires on the DST fall-back day. The dedup only remembered the single most recent firing, so the second tick of the rewound hour slipped past as a “new” one. - A restart shortly after a large missed-run backlog no longer re-alerts on the same gap. When the backlog was capped by
max_catch_up_runs, the next restart re-counted from the same anchor and reported the gap again. overlap = "queue"no longer lets a fresh trigger start ahead of runs already waiting. A trigger arriving in the brief window after a slot frees but before the queue drains now joins the back of the queue instead of racing ahead.overlap = "terminate"no longer lets active runs exceedmax_concurrentunder rapid triggers. Repeated triggers could re-cancel the same already-dying run instead of picking a fresh victim, letting the active set grow unbounded.runwisp reloadnow gives newly added or rescheduled jittered tasks their start-spread immediately, instead of firing at the raw tick until the next restart.- Fixed a race where a task’s live run state could be read while still being mutated, surfacing torn or stale values in
GetActiveRunscallers. - Fixed a race that let a single-use login token or launch ticket be redeemed twice when two requests presented it at the same moment.
- Coalesced notifications now keep the first occurrence’s timestamp and run ID instead of overwriting them with the latest occurrence’s.
- A dropped control-plane heartbeat no longer tears down an otherwise healthy session. Liveness is already governed by the watchdog; a single failed send now logs and continues instead of forcing a reconnect.
- A 401/403 from the control-plane sync endpoint is no longer treated as a hard authentication failure. The WebSocket handshake is the actual auth boundary, so these now retry with backoff like any other transient error.
runwisp promoteon a live cron-sourced task now comments out the crontab line it came from, instead of leaving it live. Previously a promoted task lost its “held” status the moment it became native, so if a system cron daemon was still running unmasked, both it and RunWisp would fire the job. The line is commented, not deleted — it stays visible with a note pointing at yourrunwisp.toml. Promote refuses, writing nothing, if that line has changed or gone missing since the config was loaded. See CLI.
- v1.5.1 latest
- v1.5.0
- v1.4.0
- v1.3.1
- v1.3.0
- v1.2.0
- v1.1.0
- v1.0.1
- v1.0.0
- v0.16.4 pre
- v0.16.3 pre
- v0.16.2 pre
- v0.16.1 pre
- v0.16.0 pre
- v0.15.1 pre
- v0.15.0 pre
- v0.14.0 pre
- v0.13.2 pre
- v0.13.1 pre
- v0.13.0 pre
- v0.12.0 pre
- v0.11.0 pre
- v0.10.0 pre
- v0.9.0 pre
- v0.8.0 pre
- v0.7.0 pre
- v0.6.0 pre
- v0.5.0 pre
- v0.4.0 pre
- v0.3.0 pre
- v0.2.0 pre
- v0.1.2 pre
- v0.1.0 pre