# What changed in zx

> 31 changes in zx 5 to 8 from its official release notes, upgrade guides and advisories: 8 breaking, 1 security, 15 new APIs and options. Each one cited. Sources checked 2026-10-23. HTML: https://unstale.sh/npm/zx/

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

## zx 8

### Breaking changes

- The experimental toggle was removed; all APIs are available by default. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- The exported ps utility provides process-tree queries, including recursive traversal. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- The ssh API was dropped; install the webpod package instead. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- Process cwd synchronization between $ invocations is disabled by default; call syncProcessCwd to restore the legacy behavior. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- On Windows, zx no longer looks for powershell by default; call usePowerShell to enable it. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)

### Security

- zx Uses Incorrectly-Resolved Name or Reference (8.8.5) — [security advisory](https://github.com/advisories/GHSA-W87R-VG9Q-CRQM)

### New APIs and options

- Pass an AbortController through the ac option to abort command execution; a default instance is used when none is specified. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- The input option passes data to a command, including strings, streams, buffers, or another process promise. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- The exported kill method terminates a process, including processes not started by zx. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- The minimist API is exposed for parsing command-line arguments. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- The postfix option appends text to the end of a command, for example to support PowerShell compatibility. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- ProcessPromise.valueOf() simplifies value comparisons. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- PromiseResponse exposes an abort trigger for stopping command execution. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- The internal spawnSync API can be overridden, for example to implement pools or test mocking. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- The new synchronous API runs a command and exposes its output. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- The refactored zx core is available as a separate package, enabling options presets. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)

### Performance

- Custom esbuild plugins and dts-bundle-generator produce bundled JavaScript and typings; the package is approximately 20 times smaller, reducing installation time. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)

### Behavior and default changes

- Duration parsing now supports minutes. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- Stack extraction was enhanced to support bun. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- $.verbose is false by default; errors are still printed to stderr. Set $.quiet to true to suppress all output. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)

### Fixes and other changes

- Fixes an issue where zx flushes external node_modules when linking. (8.8.5) — [release notes](https://github.com/google/zx/releases/tag/8.8.5)
- The package-name pattern used in install mode is fixed, allowing scoped package entry paths. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)
- A spinner issue on unusual TTYs was fixed. (8.0.0) — [release notes](https://github.com/google/zx/releases/tag/8.0.0)

## zx 7

### New APIs and options

- echo() is now included out of the box. (7.0.0) — [release notes](https://github.com/google/zx/releases/tag/7.0.0)
- Adds support for the --eval flag. (7.0.0) — [release notes](https://github.com/google/zx/releases/tag/7.0.0)
- Adds REPL support. (7.0.0) — [release notes](https://github.com/google/zx/releases/tag/7.0.0)
- Adds the within() API for async contexts. (7.0.0) — [release notes](https://github.com/google/zx/releases/tag/7.0.0)

## zx 5

### Breaking changes

- The CommonJS version is no longer built. (5.0.0) — [release notes](https://github.com/google/zx/releases/tag/5.0.0)
- The minimum required Node.js version is 16.0.0. (5.0.0) — [release notes](https://github.com/google/zx/releases/tag/5.0.0)
- The zx bin no longer supports the .ts extension; TypeScript can still be run via ts-node. (5.0.0) — [release notes](https://github.com/google/zx/releases/tag/5.0.0)

### New APIs and options

- The YAML package was added, allowing scripts to parse YAML with YAML.parse. (5.0.0) — [release notes](https://github.com/google/zx/releases/tag/5.0.0)
