npm-run-all

A cross-platform CLI that runs multiple npm-scripts in parallel or in sequence, replacing fragile shell operators like && with Windows-safe orchestration.

Tool
npm
v4.1.5
5,834 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
46 /100 Fair
Development Activity 0
Maintenance 32
Community 52
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
67 /100 Good
Architecture 72
Code Quality 68
Innovation 48
Learning Curve 80

npm-run-all provides three CLI commands — npm-run-all, run-s, and run-p — for running several npm-scripts together without stitching together shell operators. Native npm only runs one script at a time, so developers historically chained commands with && (sequential) or & (parallel), but & doesn’t work in Windows’ cmd.exe, which npm run-script uses by default. npm-run-all sidesteps that by implementing its own cross-platform process orchestration, so the same script list behaves identically on Windows, macOS, and Linux.

Beyond simple chaining, it supports Glob-like patterns for matching multiple scripts by name (e.g. build:*), mixed sequential/parallel plans in one invocation, argument placeholders for forwarding CLI args into child scripts, a --continue-on-error flag, parallelism limits via --max-parallel, and a Node API for embedding the same orchestration logic directly in build scripts rather than shelling out.

What You Get

  • Three CLI entry points — npm-run-all (full-featured), run-s (sequential shorthand), and run-p (parallel shorthand) — for different levels of verbosity
  • Cross-platform parallel execution that works correctly on Windows’ cmd.exe, where the native & shell operator does not
  • Glob-like task name matching (e.g. build:**) so one pattern can target many npm-scripts in package.json
  • Mixed sequential-then-parallel execution plans in a single command, e.g. npm-run-all clean lint --parallel watch:html watch:js
  • A programmatic Node API (require('npm-run-all')) for embedding the same task-running logic inside custom build scripts
  • Yarn compatibility — scripts invoked via Yarn are re-run through Yarn rather than npm

Common Use Cases

  • Replacing a chain of npm run clean && npm run build:css && npm run build:js with a single npm-run-all clean build:* call
  • Running multiple watch processes (CSS, JS, server) together with run-p watch:* during local development
  • Aborting a multi-step CI build early with --continue-on-error disabled, so a failed lint or test step stops the pipeline
  • Limiting concurrency with --max-parallel when running many parallel tasks would overwhelm CI runner resources
  • Forwarding CLI arguments into individual npm-scripts using {1}/{@} placeholders instead of hardcoding them per script

Under The Hood

Architecture

The package is organized as a thin CLI layer (bin/npm-run-all, bin/run-s, bin/run-p) over a small library core (lib/index.js) that parses patterns, resolves them against package.json’s scripts field via lib/match-tasks.js (Glob matching through minimatch, with a TaskSet class deduping overlapping patterns), and executes them through lib/run-tasks.js and lib/run-task.js. Execution is Promise-based: run-tasks.js maintains a queue of pending tasks and a pool of in-flight promises sized by --max-parallel, spawning the next queued task as each finishes; a shared abort() path kills all in-flight child processes (including signal-to-exit-code translation per Node’s documented convention) the moment a task fails, unless --continue-on-error is set. Platform differences are isolated behind separate spawn-posix.js/spawn-win32.js modules so the parallel-abort and signal-handling logic in run-tasks.js stays platform-agnostic.

Tech Stack

Plain CommonJS JavaScript (no TypeScript), targeting Node >= 4, built and published without a bundler. Runtime dependencies are narrowly scoped to the problem: cross-spawn for portable child-process spawning, minimatch for Glob-style task matching, shell-quote for safely quoting forwarded arguments, memorystream for buffering aggregated output, pidtree for locating descendant processes to kill, chalk/ansi-styles for terminal coloring, and read-pkg for locating and parsing package.json. The project is transpiled with Babel only for async/await syntax support on older Node versions, tested with Mocha plus power-assert, and measures coverage with nyc/Istanbul. CI runs on both Travis (Linux, multiple Node versions down to 4.0.0) and AppVeyor (Windows), reflecting the project’s cross-platform mandate.

Code Quality

The library has a dedicated test/ directory covering parallel execution, sequential execution, mixed plans, argument placeholders, package-config overwrites, aggregated output, Yarn compatibility, print-label/print-name flags, and failure handling — run through Mocha with power-assert for expressive assertion failures and collected under nyc coverage. Source files carry consistent JSDoc annotations for every exported function and its parameters, and an ESLint config (extending a shared eslint-config-mysticatea ruleset) is enforced via a pretest hook, so lint failures block the test run. There is no static type system (plain JS, @types/node is a dev-only annotation aid), and error handling favors explicit Promise rejection with a custom NpmRunAllError type carrying structured per-task exit results rather than bare thrown strings.

What Makes It Unique

The library’s specific value is not running scripts — npm can already do that — but reproducing shell-level parallel/sequential composition (&&, &) in a way that is verified to behave identically across POSIX shells and Windows’ cmd.exe, including correctly propagating signal-based exit codes and killing descendant process trees on abort (via pidtree) rather than leaving orphaned child processes behind. Its Glob-pattern task matching and {1}/{@} argument-placeholder syntax let one invocation stand in for many differently-named scripts, which is a level of expressiveness beyond what shell chaining or npm’s own run command offers natively.

Used by 41 apps in this directory

TypeScript
50%

Kener

Devops · Monitoring

5,198

Stunning, self-hosted status pages with real-time uptime monitoring, incident management, and multi-channel notifications in a single Docker container.

View details
87
Repo Health
76
Technical
66
Dependency
Built with
TypeScript 50%
Svelte 46%
Updated 2 weeks ago
TypeScript
95%
MIT

melty

AI Code Assistants · Code Editors · Developer Tools

5,452

The AI code editor where every chat message is a git commit you can revert, branch, or squash

View details
35
Repo Health
75
Technical
67
Dependency
Built with
TypeScript 95%
Updated 1 years ago
TypeScript
83%
Apache 2.0

nao

AI Development · Analytics

1,842

Build and deploy an open-source analytics agent that understands your data warehouse and answers business questions in plain English.

View details
85
Repo Health
76
Technical
67
Dependency
Built with
TypeScript 83%
Python 17%
Updated 2 weeks ago
TypeScript
98%
Other

Novu

Developer Tools

40,131

Open-source communication infrastructure that connects your products and AI agents to every channel your users live on — Inbox, Email, SMS, Push, Chat, and more.

View details
93
Repo Health
80
Technical
64
Dependency
Built with
TypeScript 98%
Updated 1 weeks ago
TypeScript
39%
AGPL 3.0

OpenObserve

Analytics · Devops · Monitoring

22,312

Open source observability platform for logs, metrics, traces, and real user monitoring — delivering 140x lower storage costs than Elasticsearch with a single binary you can run in under 2 minutes.

View details
90
Repo Health
9
Technical
71
Dependency
Built with
TypeScript 39%
Rust 30%
Vue 17%
Updated 1 weeks ago
Clojure
73%
MPL 2.0

Penpot

Design Tools

60,867

Open-source design platform with GPU-accelerated canvas, native design tokens, and MCP-powered AI workflows for teams that ship fast.

View details
91
Repo Health
83
Technical
72
Dependency
Built with
Clojure 73%
Updated 2 weeks ago
Python
45%
Other

Redash

Analytics · Data Engineering

28,831

Redash lets anyone connect to 35+ SQL and NoSQL data sources, write a query in the browser, and turn the result into a shared dashboard — no separate BI suite required.

View details
91
Repo Health
74
Technical
60
Dependency
Built with
Python 45%
JavaScript 29%
TypeScript 19%
Updated 2 weeks ago
TypeScript
97%
AGPL 3.0

Responsively App

Design Tools · Developer Tools

25,234

Preview and interact with your responsive web design across every device size simultaneously — no more manual resizing.

View details
82
Repo Health
71
Technical
66
Dependency
Built with
TypeScript 97%
Updated 2 weeks ago
TypeScript
97%
Other

Rocket.Chat

Team Chat

46,240

The secure, self-hosted team communications platform for organizations that cannot compromise on data sovereignty.

View details
96
Repo Health
79
Technical
66
Dependency
Built with
TypeScript 97%
Updated 1 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers