# What changed in execa

> 49 changes in execa 9 to 10 from its official release notes, upgrade guides and advisories: 11 breaking, 2 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/npm/execa/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## execa 10

### Breaking changes

- Wrong-typed options and arguments are no longer silently ignored or coerced. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Synchronous methods now throw when the signal option is used, matching asynchronous methods. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Using the same file as input and output now throws even when the paths are written differently. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- This function was removed; use template string syntax instead, or parse a dynamic command string with `parseCommandString()`. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)
- This function was removed; use template string syntax instead, or parse a dynamic command string with `parseCommandString()`. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)
- When combined with inherited stdin, explicit input is now used instead of ignored. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)
- When combined with inherited stdin, explicit input is now used instead of ignored. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)
- Node.js 22 is now required to use execa. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)
- The undocumented `stdio: [..., 'ipc']` syntax was removed; use the `ipc: true` option instead. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)
- The subprocess is now a normal promise rather than a ChildProcess instance augmented with promise methods; documented Execa methods and properties are unchanged. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)
- Access Node.js-specific ChildProcess APIs such as `.on()`, `.send()`, `.ref()` and `.unref()` through this property. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)

### New APIs and options

- Use this option to terminate subprocess descendant processes, including processes spawned by a subprocess using the `shell` option. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)
- 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. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)

### Behavior and default changes

- The value returned by `subprocess.pipe()` now exposes the destination subprocess' methods, enabling direct output iteration, stream conversion, and IPC messaging. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)

### Tooling

- The transform generator's `chunk` argument is typed by transform mode: `string` for line transforms, `Uint8Array` for binary transforms, and `unknown` in object mode. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)

### Fixes and other changes

- Fixes errors and early error edge cases. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes argument quoting when using the shell option. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes missing IPC in the types for execaNode(). (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes execaNode() edge cases. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes handling of invalid forceKillAfterDelay values. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes IPC edge cases. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes missing IPC in the types for the node option. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes parseCommandString() edge cases. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes edge cases in .pipe() and stream conversion. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes result.all edge cases. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes edge cases involving stdin iterables and input transforms. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes template string edge cases. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes handling of invalid timeout values. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes argument quoting when using the shell option. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- Fixes color output when stderr is not a terminal. (10.1.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.1)
- On Windows, arguments are escaped like Rust does, fixing batch files that read %~1. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- These fields are no longer undefined when synchronous methods fail to spawn. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Fixes the encoding option and line splitting in transforms. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Synchronous methods now write raw output bytes to files, matching asynchronous methods. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Fixes input and output transforms with synchronous methods. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Fixes IPC with JSON serialization, strict mode, and the verbose option. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- On Windows, killDescendants no longer signals unrelated processes. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Fixes results when only some file descriptors are buffered or split into lines. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Fixes small shebang scripts on Windows. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- The subprocess error is no longer hidden when the current directory has been deleted. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- The subprocess promise no longer hangs until an output stream is read. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Spawning no longer crashes when it fails with EMFILE or ENFILE, or when a file target cannot be opened. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Calling subprocess.kill() after a spawn failure no longer signals the current process group. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Fixes piping with the stdio option and destination subprocesses being left running. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Fixes template strings containing emojis and line continuations. (10.1.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.1.0)
- Fixes an argument escaping edge case on Windows when using preferLocal. (10.0.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.1)
- fd-specific options such as `maxBuffer` now work when `ipc` is true because fd3 and IPC no longer target the same file descriptor. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)
- fd-specific options such as `verbose` now work when `ipc` is true because fd3 and IPC no longer target the same file descriptor. (10.0.0) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v10.0.0)

## execa 9

### Fixes and other changes

- Fixes the type export so developers can import VerboseOption. (9.6.1) — [release notes](https://github.com/sindresorhus/execa/releases/tag/v9.6.1)
