concurrently
10.0.6 · 8 Oct 2026MIT29.2M / weekRepositoryHomepagenpmAtom feed
9.2.5 is the newest release of 9.x.
In short
3 breaking7 new5 fixed3 changed
- breaking
Dropped support for Node.js < 18.0.0. Older Node.js version have reached end-of-life, and certain features require new-ish JS APIs.
- breaking
Pending commands no longer run when
--max-processesis set and an interruption/kill signal is sent - #433, #452, #460 Before v9.0.0, pressing Ctrl+C when--max-processesis set meant that only those commands would receive it. Once these stopped, the pending commands would start, which in turn meant that another Ctrl+C press would be necessary to stop them, and so on. Similar situation applied to combining--max-processeswith--kill-others/--kill-others-on-fail. - breaking
The
concurrentlyand default exports are now the same - #399 It's reasonable to expect thatimport { concurrently } from 'concurrently'would work the same asimport concurrently from 'concurrently', however this has not been the case. The former used to be an unconfigured version of concurrently, lacking all features that you'd get from the CLI, which was seen as a "footgun". Both are now the same function.
Release note
Breaking Changes
- breaking
Dropped support for Node.js < 18.0.0.
Older Node.js version have reached end-of-life, and certain features require new-ish JS APIs. - breaking
Pending commands no longer run when
--max-processesis set and an interruption/kill signal is sent - #433, #452, #460
Before v9.0.0, pressing Ctrl+C when--max-processesis set meant that only those commands would receive it. Once these stopped, the pending commands would start, which in turn meant that another Ctrl+C press would be necessary to stop them, and so on.
Similar situation applied to combining--max-processeswith--kill-others/--kill-others-on-fail.Starting with v9.0.0, this no longer happens, as these flags and/or key presses send a signal to stop the running commands in addition to preventing new commands from running.
- breaking
The
concurrentlyand default exports are now the same - #399
It's reasonable to expect thatimport { concurrently } from 'concurrently'would work the same asimport concurrently from 'concurrently', however this has not been the case.
The former used to be an unconfigured version of concurrently, lacking all features that you'd get from the CLI, which was seen as a "footgun". Both are now the same function.If you'd like to access the unconfigured function, use
import { createConcurrently } from 'concurrently'instead.
New Features
Exponential back-off support for process restarting - #265, #462
Use--restart-after exponential. Restarts happen at2^Nseconds.Add prefix padding via new
--pad-prefixflag - #166, #417, #495Specify teardown commands via new
--teardownflag - #472, #500Expand
node:<script>commands tonode --run <script>- #475[API only] Inter-Process Communication (ipc) - #498
[API only] Make it possible to use no colors at all - #466
[API only] Add a
statefield toCommand- #455
Bug Fixes
Fix importing concurrently in ESM package - #454, #456, #494
Make sure concurrently doesn't resolve when manually restarting commands through API - #463, #464
Fix warning coming from
spawn-commandwhen running in Node 22 - #407, #477, #479, #492Ensure prefix is written when logging without a trailing LF - #276, #467
Other Changes
--helpno longer shows examples due to there being too many.
Refer to github.com/open-cli-tools/concurrently/tree/v9.… instead, or to thenode_modules/concurrently/docsdirectory in your project.Improve examples of
--passthrough-arguments- #490Replace
date-fnswith hand-rolled date formatting - #436, #443
This should make installing concurrently faster.