execa

execa breaking-changes badge

execa (latest known version: 10.0.1) has 100 known breaking changes on record, each backed by a source URL.

Actively maintainedLatest known version: 10.0.1npm ↗GitHub ↗

Recent changes

v10.0.1Breaking

Fix `preferLocal` argument escaping edge-case on Windows (#1259)

source ↗

v10.0.0Notable

The transform generator function's chunk argument is now typed based on the transform's mode, instead of always being unknown.

source ↗

v10.0.0Notable

Use an additional file descriptor as input by wrapping its stdio value as a {value, input: true} object. Direction-ambiguous values default to output on additional file descriptors.

source ↗

v10.0.0Notable

The value returned by subprocess.pipe() now exposes the destination subprocess' methods, so the piped output can be consumed directly.

source ↗

v10.0.0Notable

Convert the subprocess to a web stream by using subprocess.readableStream(), subprocess.writableStream(), or subprocess.transformStream().

source ↗

v10.0.0Notable

Terminate the subprocess' descendant processes by using the killDescendants option. This is useful when the subprocess spawns its own processes, such as when using the shell option.

source ↗

v10.0.0Breaking

Fixed fd-specific options when the ipc option is true: fd3 and ipc no longer target the same file descriptor.

source ↗

v10.0.0Breaking

When the input or inputFile option is combined with an inherited stdin, the explicit input is now used, instead of being ignored. To combine multiple inputs, pass an array like stdin: ['inherit', {string: 'input'}].

source ↗

v10.0.0Breaking

Removed the old undocumented stdio: [..., 'ipc'] syntax. Use the ipc: true option instead.

source ↗

v10.0.0Breaking

Removed execaCommand() and execaCommandSync(). Use the template string syntax instead, which splits on spaces. If the command is a dynamic string, split it with parseCommandString().

source ↗

v10.0.0Breaking

The subprocess is now a normal promise, instead of a ChildProcess instance augmented with promise methods. Node.js-specific ChildProcess APIs must now be accessed through the new subprocess.nodeChildProcess property.

source ↗

v10.0.0Breaking

Require Node.js 22.

source ↗

v9.6.1Breaking

Fix `VerboseOption` type not being properly exported.

source ↗

v9.6.0Breaking

Update dependencies

source ↗

v9.5.3Deprecation

Fix Node 24-specific deprecation warning.

source ↗

v9.5.2Breaking

Fix escaping newlines inside template strings.

source ↗

v9.5.1Breaking

Fix odd characters being printed in `verbose` mode on Windows.

source ↗

v9.5.0Notable

When redirecting `stdout` or `stderr` to a file, it is now possible to append instead of overwriting.

source ↗

v9.4.1Breaking

Fixed using `process.execPath` with Deno.

source ↗

v9.4.0Notable

Fixed a small typo in the documentation.

source ↗

v9.4.0Notable

Improved handling of edge cases related to PATH environment variable modification by execaNode() and preferLocal.

source ↗

v9.4.0Notable

Improvements to how execaNode() and the preferLocal option modify the PATH environment variable to keep it small.

source ↗

v9.4.0Notable

A separate package called nano-spawn has been created, offering a smaller alternative to Execa with fewer features.

source ↗

v9.3.1Breaking

Document how to add custom logging.

source ↗

v9.3.1Breaking

Document how to terminate hanging subprocesses.

source ↗

v9.3.1Breaking

Fix typo in "Inputs" documentation.

source ↗

v9.3.1Breaking

Fix type of the env option, which was failing for Remix or Next.js users.

source ↗

v9.3.1Breaking

Do not crash when using a custom Node.js binary without ICU support.

source ↗

v9.3.0Notable

The verbose option can now be a function to customize logging.

source ↗

v9.2.0Notable

Added 'error.isForcefullyTerminated'. It is true when the subprocess was terminated by the 'forceKillAfterDelay' option.

source ↗

Check what changed for execa since your installed version, live.

Open the playground →