#task-runner #cross-platform #default #plz #failure #suggest #command-run

bin+lib plzplz

A simple cross-platform task runner with helpful defaults

17 releases

Uses new Rust 2024

0.0.17 Mar 22, 2026
0.0.16 Mar 21, 2026
0.0.11 Feb 27, 2026

#414 in Configuration

MIT license

750KB
4K SLoC

plzplz

cargo install plzplz

A simple cross-platform task runner with helpful defaults. Tasks are stored in a plz.toml and run with plz [task]

plz init auto-detects your environment and suggests defaults

For the following example, plz format would run cargo fmt --check, and then suggest cargo fmt if it fails:

# Check formatting
[tasks.format]
run = "cargo fmt --check"
fail_hook = { suggest_command = "cargo fmt" }

Add plz to a project

In a rust, uv, or pnpm repo run this to initialize a new plz.toml:

plz init

To add a new task, you can run:

plz add [task]

Default files

If you run

plz plz

plzplz will create files in in ~/.plz that you can add your own default tasks to for different environments.

TOML Reference

Basic task

[tasks.build]
run = "cargo build"

Run commands in parallel or serial

[tasks.check]
run_parallel = ["plz lint", "plz format"]

[tasks.fix]
run_serial = ["cargo fmt", "cargo clippy --fix --allow-dirty"]

Working directory

[tasks.frontend]
dir = "packages/web"
run = "pnpm dev"

Failure hooks

On failure, suggest a command for the user to run:

[tasks.check]
run_parallel = ["plz lint", "plz format"]
fail_hook = { suggest_command = "plz fix" }

Display a message on failure:

[tasks.deploy]
run = "deploy.sh"
fail_hook = { message = "Check the deploy logs at /var/log/deploy.log" }

Run a shell command on failure:

[tasks.test]
run = "cargo test"
fail_hook = "notify-send 'Tests failed'"

Dependencies

~19–56MB
~795K SLoC