45,835
stars
+1+2+61
1,330
forks
162
watchers
872
prs
522
issues
100
releases
100
discussions
README
zx
js
!/usr/bin/env zx
await $cat package.json | grep name
const branch = await $git branch --show-current
await $dep deploy --branch=${branch}
await Promise.all([
$sleep 1; echo 1,
$sleep 2; echo 2,
$sleep 3; echo 3,
])
const name = 'foo bar'
await $mkdir /tmp/${name}
Bash is great, but when it comes to writing more complex scripts,
many people prefer a more convenient programming language.
JavaScript is a perfect choice, but the Node.js standard library
requires additional hassle before using. No compromise, take the best of both. The zx package provides
useful cross-platform wrappers around child_process, escapes arguments and
gives sensible defaults.
Install
bash
npm install zx
All setup options: zx/setup.
See also zx@lite.
Usage
Documentation at google.github.io/zx/
Code examples
Compatibility
Linux, macOS, or Windows
JavaScript Runtime:
Node.js = 12.20.0
Bun = 1.0.0
Deno 1.x, 2.x
GraalVM Node.js
Electron = 11
Bash or PowerShell
Both CJS or ESM modules in JS or TS
See also
- Ant - A small language with TypeScript-like syntax, and goroutine-style concurrency.
License
Apache-2.0
Disclaimer: _This is not an officially supported Google product._Top issues
#525Improve `--install`14 comments · 2022-10-08#876Misleading documentation11 comments · 2024-08-23#715Allow multiple lines of hashbangs5 comments · 2024-01-15#543Some characters like dash breaks commands / arguments highlighting5 comments · 2022-11-03#1297How do I write tests for zx scripts?3 comments · 2025-07-30#1505`ProcessOutput.json()` parses combined stdout+stderr, breaking on CLIs that log progress to stderr2 comments · 2026-08-19#1389[Bug]: TypeError: $(...) is not a function2 comments · 2026-01-24#1388[Bug]: cannot parse indented content1 comments · 2026-01-24
Discussions
#1421$({verbose: true}) vs .verbose(true)1 comments · 2026-01-12#1219Regression quoting empty string?1 comments · 2025-06-03#1202zx code evolution0 comments · 2025-04-22#1159How to execute commands in variables when zx?1 comments · 2025-03-24#1150Handle no input from stdin()1 comments · 2025-03-22#1133missing types for node and fs-extra since 8.4.04 comments · 2025-03-15#1104Unknown file extension ".zx"2 comments · 2025-02-20#10868.3.1 — Perfect Seal0 comments · 2025-01-29
Latest release
8.8.5 — Temporary Reservoir 8.8.5 2025-10-19This release fixes the issue, when zx flushes external node_modules on linking 1348 1349 1355 Also [email protected] arrives here.