A minimal, fast task runner written in Rust.
- TOML-based task definitions
- Local (
muu.toml) and global (~/.config/muu/config.toml) configuration - Interactive task selector with fuzzy filtering
- Positional and named arguments with defaults
- Multi-line commands with fail-fast execution
- Single binary, no runtime dependencies
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/mfyuu/muu/releases/latest/download/muu-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/mfyuu/muu/releases/latest/download/muu-installer.ps1 | iex"brew install mfyuu/tap/muu
Create a muu.toml in your project:
muu init
This generates a starter file. Edit it to define your tasks:
[tasks.hello] cmd = "echo hello" [tasks.deploy] description = "Deploy to S3" cmd = "aws s3 sync $dir s3://$bucket" args = { dir = ".", bucket = "" } [tasks.setup] cmd = """ brew install node npm install """
muu deploy ./dist my-bucket # positional args muu deploy --bucket=my-bucket # named args (dir uses default ".") muu hello # no args
muu
Launches a fuzzy-searchable task selector. If the selected task has arguments, you'll be prompted for each one.
muu list
deploy - Deploy to S3 [local]
hello [local]
setup [local]
muu -l # local tasks only muu -g # global tasks only muu list -l # works with list too
| Field | Type | Required | Description |
|---|---|---|---|
cmd |
string | yes | Command to run. Use """ for multi-line. |
description |
string | no | Shown in muu list and the selector. |
args |
inline table | no | Argument definitions. Key order = positional order. |
args = { dir = ".", bucket = "" }
- Non-empty value = optional (used as default)
- Empty string
""= required (error if not provided) "?"= optional with no default (empty string if omitted)- Key order determines positional argument order
# Optional argument example [tasks.greet] cmd = """ if [ -n "$name" ]; then echo "Hello, $name!"; else echo "Hello!"; fi """ args = { name = "?" }
muu greet # Hello! muu greet Alice # Hello, Alice!
Tab completion for task names, subcommands, and flags.
Zsh (add to ~/.zshrc):
source <(COMPLETE=zsh muu)
Bash (add to ~/.bashrc):
source <(COMPLETE=bash muu)
Fish (add to ~/.config/fish/config.fish):
COMPLETE=fish muu | source- Local: searches upward from the current directory for
muu.toml - Global:
~/.config/muu/config.toml - Local tasks override global tasks with the same name
MIT