@polymech/runny
v0.2.0
Published
A local GUI for running npm/pnpm/yarn scripts across your project
Maintainers
Readme
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.
Quick Start
npm i -g @polymech/runny
cd your-project
runnyThat's it. Opens your browser. Every script is right there.
Or run without installing:
npx @polymech/runnyOriginal project: github.com/icydotdev/runny · npm
@icydotdev/runny
Features
Core
- Instant discovery — Finds every
package.json, including workspace packages - One-click run/stop — Process-tree cleanup with tree-kill (no orphans)
- Live terminal — WebSocket stdout/stderr with ANSI colors (xterm.js)
- Smart script grouping — Colon prefixes (
test,test:ci,test:dev) nest visually - Dark & light mode — System preference + manual toggle
- Package manager auto-detect — pnpm, yarn, or npm
- Monorepo-native — Expand/collapse packages; works with Turbo/Nx/Lerna scripts
- Zero project deps —
npxand go; nothing is uploaded
Favourites & organisation
- Favourite groups — Multiple named lists, reorder groups and scripts by drag-and-drop
- Ctrl+drag to duplicate — Copy a favourite into another group (keep the source)
- Mute in a group — Skip muted scripts when running a favourite list
- Custom descriptions — Hover notes on favourite scripts
- Hide scripts — Tuck away noise from the sidebar
Soft CI (sequential sessions)
- Run a colon-group or favourite list sequentially — fail-fast by default
- Session strip — Live step progress; stop a running session
- CLI —
runny session run …/runny session listfor headless soft-CI - Terminal auto-follow — Active step output stays in view (toggle off via prev/next)
Terminal & search
- Stdout / stderr filters — Toggle streams; preference persisted
- Cycle running tasks — Prev/next in the terminal header, or
Alt+←/Alt+→ - Finished markers — Compact
DONE/FAIL/SKIP+ relative time on rows - Fuzzy search — camelCase,
:-_, acronyms, and subsequences; matching trees start collapsed
Packaging
- Single Rspack client bundle — one
runny.bundle.jsfor publish (dist/client) - Local-only — Express + WebSocket on
127.0.0.1; no telemetry
Screenshots
Usage
# Run in current directory
runny
# Custom port
runny --port 4000
# Don't open browser automatically
runny --no-browser
# Via npx (no install)
npx @polymech/runnySoft CI
# Sequential colon-group (e.g. scripts named build:*, test:*)
runny session run build --package my-app
# Favourite group by id path
runny session run favourite:<groupId>
# List recent / active sessions
runny session list
# Keep going after a failed step
runny session run test --no-fail-fastIn the UI: use the Play control on a script group or favourite group header.
Supported project types
| 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 |
How it works
- 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 stream 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.
Config (favourites, muted scripts, descriptions, theme, etc.) is stored under your user config directory as runny-config.json.
FAQ
This repo is a maintained fork of icydotdev/runny, published on npm as @polymech/runny. Upstream remains available as @icydotdev/runny.
No. Runny is a local-only tool. The server runs on 127.0.0.1, the frontend is bundled static assets served from your machine. There are zero network requests to external services.
The GUI is aimed at local development. Soft-CI sessions (runny session run …) can run sequential script groups headlessly on a machine that has your package manager installed — still not a replacement for your real CI matrix.
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. Use the terminal prev/next controls to jump between running tasks.
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.
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.
Roadmap
- [x] Soft-CI sessions for groups & favourite lists
- [x] Favourite groups, mute, Ctrl+drag duplicate
- [x] Terminal stream filters + cycle running tasks
- [x] Fuzzy search
- [x] Single Rspack client bundle
- [ ] Multi-terminal panes (side-by-side)
- [ ] Keyboard shortcuts (
Ctrl+Ksearch, arrow navigation,Enterto run) - [ ] Desktop notifications when scripts finish or error
- [ ] Detect externally-running scripts started outside Runny
- [ ] Environment variable overrides per script
Contributing
Contributions are welcome — open an issue or PR on polymech-info/runny. For upstream discussion, see icydotdev/runny.
git clone https://github.com/polymech-info/runny.git
cd runny
npm install
npm run devThis starts the Express API and the Rspack dev server concurrently. Set TARGET_DIR to point at a project to test against:
# Windows (PowerShell)
$env:TARGET_DIR="C:\path\to\your-monorepo"; npm run dev
# macOS / Linux
TARGET_DIR=~/your-monorepo npm run devDev UI: http://127.0.0.1:5173 (proxies /api and /ws to the API on :3717).
npm run build # dist/cli.js + dist/client/runny.bundle.jsLicense
MIT © Sam Kavanagh — original icydotdev/runny
