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: The repo shows continued activity, with the last upstream push on 2026-01-29 and recent published updates through v9.6.1 (2025-11-29).
- Update cadence: Updates have occurred at least every few months in the recent cycle (for example, v9.5.3 (2025-05-08), v9.6.0 (2025-05-26), v9.6.1 (2025-11-29)). As of 2026-06-09, the most recent listed update is ~6 months old, though upstream activity suggests ongoing work.
AI summary generated
Recent updates
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