Verdict: Either
Rust vs Go for CLI tools:
it depends. Here's how to pick.
Both languages produce excellent CLI tools. The decision comes down to distribution requirements and iteration speed.
CHOOSE RUST IF
- ✓ You need a single static binary with no runtime dependency (distribute via curl | sh)
- ✓ Performance is user-visible: file search, code linting, compilation step
- ✓ Complex error handling where Rust's ? operator and Result types shine
- ✓ You want to process large files and memory footprint matters
- ✓ You're distributing to embedded Linux, musl targets, or cross-compiling heavily
Examples: ripgrep, fd, bat, exa, starship, delta, tokei, hyperfine, zoxide
CHOOSE GO IF
- ✓ The CLI is a team project and you need fast CI (Go compiles 5-10x faster than Rust)
- ✓ You're calling APIs or doing concurrent network work (goroutines are ideal)
- ✓ Your team already knows Go and shared libraries between CLI and server make sense
- ✓ You want to extend an existing Go CLI ecosystem (kubectl plugins, Terraform providers)
- ✓ Rapid iteration matters more than peak performance
Examples: kubectl, terraform, gh CLI, helm, golangci-lint, goreleaser
The compile time tradeoff in CI
A Rust CLI that takes 60s to compile vs a Go CLI that takes 10s adds up fast on a CI pipeline running 50 times a day. That's 41 minutes of extra CI time daily per engineer. At $0.008/min (GitHub Actions), that's $200+ per engineer per year just in compile time. See cicdcalculator.com for the full calculation.