clish

The most elegant CLI framework for Rust. Annotate a function, ship a CLI.

#[command]
fn install( package: Pos<String>, version: Named<Option<String>>, force: bool ) { ... }

Easy API

Annotate a function with #[command] and you have a CLI. Argument types determine parsing automatically.

🔧

Powerful & Flexible

Positional, named, variadic, repeatable, optional. Short flags, bundled flags, env fallbacks, defaults, value choices, and so much more.

🎨

Supreme Customizability

Style every element of help and error output with farben markup or anstyle. Command aliases, hidden commands, deprecation.

🛡

Compile-Time Safety

Invalid type combinations and duplicate short flags are caught at compile time. No runtime surprises.