npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

runwisp

v1.2.0

Published

Open-source cron replacement and process supervisor with a built-in web UI. A modern alternative to crond and supervisord.

Readme

RunWisp

See what ran, when, why it failed, and what it printed.

RunWisp is an open-source, self-hosted cron job manager and process supervisor. It ships as a single Go binary with a built-in web dashboard, terminal UI, and REST API.

runwisp.com · Documentation · Install · Quick Start · Compare

License: GPL-3.0 Latest Release CI Coverage Security Rating GitHub Stars


RunWisp replaces crond and supervisord when you want scheduled jobs and long-running services in one place. You describe both in runwisp.toml; the daemon runs them without needing Python, Node.js or an external database.

Every run leaves evidence behind: its exit code, duration, timestamps, and stdout/stderr. You can inspect history, follow logs, and trigger or stop tasks from the web dashboard, terminal UI, or REST API. Task definitions stay on disk in TOML.

Install

Install the latest binary on your PATH:

curl -fsSL https://get.runwisp.com | sh

You can also use the npm package, which runs the prebuilt Go binary:

bunx runwisp
bun add -g runwisp     # or: npm install -g runwisp

Tarballs are available from GitHub Releases. For Docker:

docker run -d --name runwisp -p 9477:9477 \
  -e RUNWISP_PASSWORD=change-me \
  -v ./runwisp.toml:/etc/runwisp/runwisp.toml:ro \
  -v runwisp-data:/var/lib/runwisp \
  runwisp/runwisp:latest

The image supports amd64 and arm64, with Alpine and Debian variants. See the Docker guide for tags, environment variables, and volumes.

Quick Start

Run:

runwisp

If the current directory has no runwisp.toml, RunWisp offers to create an example config file. Press Enter and it will write an example task, start the daemon, and open the terminal UI. The Home page shows the web dashboard URL and a generated password; press Enter on the password row to copy it.

Set RUNWISP_PASSWORD env variable if you want to choose the password yourself. For a trusted local setup, RUNWISP_AUTH=off disables authentication explicitly.

Running headless? Use runwisp daemon in cron, systemd, Docker, CI, or a piped SSH session. It doesn't prompt, and a missing config exits non-zero. To start RunWisp after a reboot, use runwisp service install for systemd or launchd.

Replace the starter task with your own jobs and services:

[tasks.backup-db]
cron       = "0 2 * * *"
jitter     = "30m"  # delay by up to 30 mins if other jobs are running
on_overlap = "kill" # if yesterday's job is still running, kill it
keep_runs  = 30     # remove older runs
run = "pg_dump mydb | gzip > /backups/mydb-$(date +%F).sql.gz"

[services.worker]
instances    = 3                           # keep three copies running
env          = { NODE_ENV = "production" } # shown in API/UI
secrets_file = "/etc/runwisp/worker.env"   # never leaked to the API/UI
run          = "node /app/worker.js"

Moving from cron, supervisord, or Docker Compose

RunWisp can start from the configuration you already have:

Features

Scheduling and supervision

  • Standard cron schedules, missed-run handling, retries, timeouts, and queue, skip, or kill overlap policies
  • Long-running services with multiple instances, restart backoff, crash recovery, and graceful shutdown. 500k lines/day, for months without interruption, RunWisp can handle it and stream it to you.
  • Typed parameters for manual runs, passed as arguments or environment variables through UI/API/CLI

Run history and logs

  • Exit code, duration, timestamps, and status persisted in embedded SQLite
  • Live stdout/stderr streaming in the web UI and terminal UI
  • Per-task log rotation and failure notifications through Slack, Discord, Telegram, ntfy, Gotify, Pushover, email, webhooks, or the in-app inbox

Day-to-day operation

  • One binary with the Svelte web dashboard and SQLite embedded
  • TOML configuration that can be versioned and reviewed like code
  • Validate-first reloads, recoverable state after a crash or power loss, and interrupted-run reporting on restart
  • Local-first operation with no signup, account, telemetry, or required network connection

Comparison

| | crond | systemd timers | supervisord | RunWisp | | -------------------- | -------------------- | ------------------ | -------------- | -------------------------------------------------------------------- | | Cron scheduling | Yes | Yes | No | Yes | | Process supervision | No | Yes | Yes | Yes | | Web dashboard | No | No | Basic HTML | Built in | | Terminal UI | No | No | No | Built in | | Remote interface | No | D-Bus | XML-RPC | REST API | | Live log streaming | No | journalctl -f | Tail only | Web UI, TUI, and SSE | | Concurrency policies | No | Overlap prevention | No | Queue, skip, or kill | | Failure alerts | No | OnFailure= unit | Event listener | Slack, Discord, Telegram, ntfy, Gotify, Pushover, email, webhook | | Execution history | No | journalctl | No | SQLite, browsable in the UI | | Runtime dependencies | libc | systemd | Python | None | | Configuration | crontab | Unit files | INI files | One TOML file |

The API and user interfaces can inspect tasks and trigger or stop them. Task definitions cannot be modified remotely. runwisp.toml remains the source of truth.

Links

Development transparency

RunWisp is built by PoppyCake, s.r.o., led by Richard Popelis, a software engineer with 15 years of professional experience. PoppyCake owns the product design, APIs, configuration model, architecture, and release decisions. Generative AI helps with implementation, tests, documentation, and review; generated work is reviewed before release.

License

The RunWisp daemon and web UI are licensed under GPL-3.0-or-later. Basically, do what you want but if you distribute a modified version, you must keep it open under the same license. See LICENSE.

Shared libraries under packages/ use Apache-2.0 instead. See LICENSE-APACHE and the license file in each package.


runwisp.com · Documentation · Releases · Report a bug