google/zx

A tool for writing better scripts

45,734

stars

1,027

commits

JavaScript

primary language

Aug 14, 2026

updated

google.github.io/zx/
bash
child-process
cli
exec
javascript
nodejs
pipe
shell
spawn

README

Zx logo zx

#!/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

npm install zx

All setup options: zx/setup. See also zx@lite.

Usage

Compatibility

See also

  • MAML — JSON for config, with comments, multiline strings, unquoted keys, and optional commas.

License

Apache-2.0

Disclaimer: This is not an officially supported Google product.

Contributors

(top 30 of 73)

antongolub

506 commits

antonmedv

424 commits

easymikey

9 commits

google/zx

A tool for writing better scripts

45,734

stars

1,027

commits

JavaScript

primary language

Aug 14, 2026

updated

google.github.io/zx/
bash
child-process
cli
exec
javascript
nodejs
pipe
shell
spawn

README

Zx logo zx

#!/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

npm install zx

All setup options: zx/setup. See also zx@lite.

Usage

Compatibility

See also

  • MAML — JSON for config, with comments, multiline strings, unquoted keys, and optional commas.

License

Apache-2.0

Disclaimer: This is not an officially supported Google product.

Contributors

(top 30 of 73)

antongolub

506 commits

antonmedv

424 commits

easymikey

9 commits

Languages

JavaScript

64.2%

TypeScript

35.7%