A visual dashboard for all your npm scripts. Zero config.
Quick Start · Features · Screenshots · Usage · Contributing
Stop memorising script names. Stop tabbing between terminals. Runny scans your project for every package.json, lays out all your scripts in a clean GUI, and lets you run, stop, and monitor them — all from your browser.
Works with npm, pnpm, and yarn workspaces. Monorepos with 50 packages or solo projects with 3 scripts — same experience.
npm i -g @icydotdev/runny
cd your-project
runnyThat's it. Opens your browser. Every script is right there.
Or run without installing:
npx @icydotdev/runny- Instant discovery — Automatically finds every
package.jsonin your project, including all workspace packages - One-click run/stop — Play and stop buttons for each script, with proper process tree cleanup (no orphan processes)
- Live terminal output — Real-time stdout/stderr streaming via WebSocket, rendered with full ANSI color support
- Smart script grouping — Scripts with shared prefixes (
test,test:ci,test:dev) are visually grouped together - Favourites — Star your most-used scripts for quick access across all packages
- Dark & light mode — Respects your system preference, with a manual toggle
- Auto-detects your package manager — pnpm, yarn, or npm — no configuration needed
- Monorepo-native — Built for workspaces. Tested against real monorepos with 20+ packages
- Expand/collapse all — Manage large package lists with one click
- Zero config, zero dependencies on your project —
npxit and go
# Run in current directory
runny
# Custom port
runny --port 4000
# Don't open browser automatically
runny --no-browser
# Via npx (no install)
npx @icydotdev/runny| Type | How it works |
|---|---|
| Single package | Reads package.json scripts, shows them flat (no collapsing) |
| npm workspaces | Reads workspaces field from root package.json |
| yarn workspaces | Reads workspaces field from root package.json |
| pnpm workspaces | Reads pnpm-workspace.yaml |
- Runny starts a lightweight local server (Express + WebSocket)
- It scans your project for
package.jsonfiles based on your workspace config - A React frontend opens in your browser showing all discovered scripts
- When you click Play, Runny spawns the script as a child process using your package manager
- stdout/stderr streams to the browser terminal in real time via WebSocket
- When you click Stop, the entire process tree is killed cleanly — no orphaned processes
Your code is never uploaded anywhere. Everything runs locally on your machine.
Does this upload my code / phone home?
No. Runny is a local-only tool. The server runs on localhost, the frontend is bundled static assets served from your machine. There are zero network requests to external services.
Can I use this in CI?
Runny is designed as a local development tool, not for CI. Use your package manager's built-in script runners for CI.
What about long-running scripts like `dev`?
That's Runny's sweet spot. Start your dev servers, watch processes, and build watchers — see all their output in one place, stop them cleanly with one click.
Will stopping a script leave zombie processes?
No. Runny uses tree-kill to kill entire process trees. When you stop pnpm run dev, it kills pnpm, node, and any child processes spawned by your dev server.
Does it work with Turborepo / Nx / Lerna?
Yes — Runny reads workspace configuration (pnpm-workspace.yaml or the workspaces field in package.json), not your build orchestrator. Your Turbo/Nx scripts appear like any other script and can be run from Runny.
- Multi-terminal — view multiple script outputs simultaneously
- Keyboard shortcuts (
Ctrl+Ksearch, arrow navigation,Enterto run) - Desktop notifications when scripts finish or error
- "Run all" — start a common script across all packages at once
- Detect externally-running scripts started outside Runny
- Environment variable overrides per script
Contributions are welcome! Please feel free to open an issue or submit a PR.
git clone https://github.com/icydotdev/runny.git
cd runny
npm install
npm run devThis starts the Vite dev server (frontend) and the Express backend concurrently. Set TARGET_DIR to point at a project to test against:
TARGET_DIR=~/your-monorepo npm run devMIT © Sam Kavanagh




