← All open source projects

zx

google/zx

zx is Google’s tool for writing shell scripts in JavaScript with a convenient `$`, await, and access to the Node.js ecosystem.

Forks 1,269
Author google
Language JavaScript
License Apache-2.0
Synced 2026-06-27

What it is

zx is Google’s tool for writing shell scripts in JavaScript. It provides a convenient `$` syntax, await, and familiar Node.js capabilities.

The project appeared around pain in bash scripts: they are convenient for commands, but become difficult around strings, JSON, errors, and complex logic.

zx’s main task is to keep the power of shell commands while writing control logic in JavaScript.

What is inside the repository

The repository contains install, usage, compatibility, see also, and license.

The README starts with a `#!/usr/bin/env zx` example, commands through `$`, reading the current git branch, and parallel shell operations.

How people usually use it

zx is used for internal scripts, release tasks, repository automation, file generation, and wrappers around командной строки tools.

A normal scenario is to write an .mjs or executable script, call shell commands through `$`, process the result with JavaScript, and fail the process on command errors.

A shell command as await

This example shows the core zx idea: shell commands can be written inside JavaScript and awaited like promises.

Language: JavaScript
#!/usr/bin/env zx

const branch = await $`git branch --show-current`;
await $`echo Current branch: ${branch}`;

What it feels like in practice

The project’s strength is readability of complex automation. Where bash starts to break on quoting and JSON, JavaScript is often easier.

Another advantage is access to npm packages and standard Node.js APIs directly inside the script.

Limits and careful spots

The limitation is that zx adds a runtime dependency. The machine needs Node.js and zx installed.

Not every simple one-liner should become a large JavaScript script; sometimes plain shell is clearer.

Who it fits

zx best fits teams already living in JavaScript/Node.js who want automation in a familiar language.

In the catalog, zx matters as a small but expressive tool: it shows how scripts can move closer to normal application code.

For reliability, such scripts should live in the repository, document input variables, and run in checks when they affect releases or data.

The point of zx becomes clear in repositories where scripts have grown: one file builds artifacts, another calls git, a third cleans folders and passes parameters between commands. Plain shell can become fragile quickly. zx keeps familiar system commands, but adds JavaScript for conditions, loops, parallel tasks, and error handling. The important part is not to hide complex business logic inside scripts without tests and documented inputs.