npm / execa
execa
What changed in execa 9 to 10, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-17.
11 breaking2 new APIs and options1 behavior and defaults1 tooling34 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initexeca 1048 changes
Breaking changes 11
Wrong-typed options and arguments are no longer silently ignored or coerced.
Synchronous methods now throw when the signal option is used, matching asynchronous methods.
Using the same file as input and output now throws even when the paths are written differently.
This function was removed; use template string syntax instead, or parse a dynamic command string with
parseCommandString().This function was removed; use template string syntax instead, or parse a dynamic command string with
parseCommandString().When combined with inherited stdin, explicit input is now used instead of ignored.
When combined with inherited stdin, explicit input is now used instead of ignored.
Node.js 22 is now required to use execa.
The undocumented
stdio: [..., 'ipc']syntax was removed; use theipc: trueoption instead.The subprocess is now a normal promise rather than a ChildProcess instance augmented with promise methods; documented Execa methods and properties are unchanged.
Access Node.js-specific ChildProcess APIs such as
.on(),.send(),.ref()and.unref()through this property.
New APIs and options 2
Use this option to terminate subprocess descendant processes, including processes spawned by a subprocess using the
shelloption.An additional file descriptor can be used as input by wrapping its stdio value in a
{value, input: true}object; ambiguous values default to output on additional descriptors.
Behavior and default changes 1
The value returned by
subprocess.pipe()now exposes the destination subprocess' methods, enabling direct output iteration, stream conversion, and IPC messaging.
Tooling 1
The transform generator's
chunkargument is typed by transform mode:stringfor line transforms,Uint8Arrayfor binary transforms, andunknownin object mode.
Fixes and other changes 33
Fixes errors and early error edge cases.
Fixes argument quoting when using the shell option.
Fixes missing IPC in the types for execaNode().
Fixes execaNode() edge cases.
Fixes handling of invalid forceKillAfterDelay values.
Fixes IPC edge cases.
Fixes missing IPC in the types for the node option.
Fixes parseCommandString() edge cases.
Fixes edge cases in .pipe() and stream conversion.
Fixes result.all edge cases.
Fixes edge cases involving stdin iterables and input transforms.
Fixes template string edge cases.
Fixes handling of invalid timeout values.
Fixes argument quoting when using the shell option.
Fixes color output when stderr is not a terminal.
On Windows, arguments are escaped like Rust does, fixing batch files that read %~1.
These fields are no longer undefined when synchronous methods fail to spawn.
Fixes the encoding option and line splitting in transforms.
Synchronous methods now write raw output bytes to files, matching asynchronous methods.
Fixes input and output transforms with synchronous methods.
Fixes IPC with JSON serialization, strict mode, and the verbose option.
On Windows, killDescendants no longer signals unrelated processes.
Fixes results when only some file descriptors are buffered or split into lines.
Fixes small shebang scripts on Windows.
The subprocess error is no longer hidden when the current directory has been deleted.
The subprocess promise no longer hangs until an output stream is read.
Spawning no longer crashes when it fails with EMFILE or ENFILE, or when a file target cannot be opened.
Calling subprocess.kill() after a spawn failure no longer signals the current process group.
Fixes piping with the stdio option and destination subprocesses being left running.
Fixes template strings containing emojis and line continuations.
Fixes an argument escaping edge case on Windows when using preferLocal.
fd-specific options such as
maxBuffernow work whenipcis true because fd3 and IPC no longer target the same file descriptor.fd-specific options such as
verbosenow work whenipcis true because fd3 and IPC no longer target the same file descriptor.
execa 91 changes
Fixes and other changes 1
Fixes the type export so developers can import VerboseOption.