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 | shpowershell -ExecutionPolicy Bypass -c "irm https://github.com/mfyuu/muu/releases/latest/download/muu-installer.ps1 | iex"brew install mfyuu/tap/muuCreate a muu.toml in your project:
muu initThis 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 argsmuuLaunches a fuzzy-searchable task selector. If the selected task has arguments, you'll be prompted for each one.
muu listdeploy - 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
