Execa is a Node.js library for running commands from your script, application, or library, built on top of Node’s child_process. It’s useful for executing local binaries with a programmatic, “optimized for humans” API, including advanced output handling like piping multiple subprocesses and returning detailed errors.
Project status
- Actively maintained, with an upstream push and update on October 23, 2026.
- Updates have been frequent recently, with several in October, including patch and behavior-focused updates.
AI summary generated
Recent updates
v10.2.1
Execa v10.2.1 is a patch release focused on fixing TypeScript compatibility with `exactOptionalPropertyTypes`. The production change is limited to result type declarations; no runtime API or behavior changes are evident in the diff.
v10.2.0
v10.2.0 focuses on correctness around stream and transform lifecycle handling, plus stronger enforcement of `maxBuffer` limits. It also includes multiple type-related fixes and documentation updates that reflect the new `maxBuffer` termination behavior and stdin piping rules.
Breakingv10.1.1
v10.1.1 is a bugfix release focused on edge cases across command escaping/parsing, stricter option/type validation, stdin and input transforms, IPC behavior, and stream piping. The code changes show multiple behavior shifts where previously invalid types or ambiguous runtime situations could be coerced or handled differently.
Breakingv10.1.0
v10.1.0 is primarily a correctness and behavior update release. It tightens Windows argument escaping and significantly reworks synchronous execution paths, especially around transforms, buffering (maxBuffer), newline stripping, and writing output files.
Breakingv10.0.1
v10.0.1 is primarily a Windows command-resolution fix, described in the release notes as addressing a preferLocal argument escaping edge case. The code changes go beyond that and significantly rework Windows PATH/PATHEXT resolution and how executables are spawned.
v10.0.0
v10.0.0 introduces several breaking API changes, including requiring Node.js 22 and changing the main return value to be a native Promise with Node.js child process access moved under a new property. The release also adds web stream conversion helpers, expands `.pipe()` to expose destination methods, and improves subprocess termination via `killDescendants` and several edge-case fixes.
BreakingFeaturesv9.6.1
v9.6.1 is a small patch release focused on TypeScript typing. The only apparent functional change in the diff is exporting the `VerboseOption` type correctly, with additional documentation and test adjustments.
v9.6.0
v9.6.0 appears to be primarily a dependency update release. The code diff also includes a small change in the test helper that overrides the global Promise implementation.
v9.5.3
v9.5.3 addresses a Node 24 deprecation warning related to using the `shell` option. The implementation change modifies how `execa` calls `child_process.spawn` and `spawnSync` when `shell: true`, by pre-concatenating the command into a single string.
v9.5.2
v9.5.2 is a small patch release that fixes handling of escaped newlines inside template strings. It adjusts the template parsing logic so sequences like a backslash followed by a newline are treated as intended whitespace/newline content rather than mis-parsed characters.
v9.5.1
v9.5.1 is presented as a small bug fix release addressing odd characters printed in `verbose` mode on Windows. The code diff shows a more substantial change to how verbose output is written to stderr, alongside test and CI adjustments for newer Node versions.
Breakingv9.5.0
v9.5.0 introduces an `append` option for file-based redirection so that when stdout or stderr is redirected to a file, output can be appended instead of overwriting. The change updates TypeScript types and adjusts both async and sync output handling to support append semantics.
Featuresv9.4.1
v9.4.1 includes a Deno compatibility fix related to handling node executables derived from Deno's `process.execPath`. The code changes ensure these Deno-style execPath objects are normalized to a string before being used in argument processing, and extend related piping logic to accept the same input shape.
v9.4.0
v9.4.0 primarily introduces the new companion package documentation for nano-spawn, and includes bug fix improvements related to keeping the PATH environment variable small when using execaNode() and preferLocal. The code diff provided is almost entirely documentation changes plus a dependency bump to npm-run-path 6.0.0, which is likely where the PATH-related behavior changes come from.
Featuresv9.3.1
v9.3.1 mainly addresses a runtime crash scenario for Node.js builds without ICU support, and fixes the TypeScript type for the `env` option (notably for Remix and Next.js users). It also includes documentation updates and several test/doc-only changes, plus dependency/tooling version bumps.
v9.3.0
v9.3.0 adds support for passing a function to the `verbose` option to customize how execa prints verbose logs. The implementation refactors the verbose subsystem and adds new types that describe the verbose event object passed to the function.
Features