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: GitHub activity is recent (upstream push on 2026-07-21), and the newest update (v10.0.0 on 2026-07-17) indicates ongoing work rather than dormancy.
- Update cadence: The most recent updates are very close together in July 2026, but earlier tags show a more irregular cadence (for example, v9.6.x in late 2025, with several prior changes in 2024-2025).
AI summary generated
Recent updates
v10.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