Choose CLI Stack

A CLI is the right product when users want automation more than screens.

CLI Wins When

  • Users are developers, operators, or power users.
  • The product runs in scripts, CI, cron, or local automation.
  • Inputs and outputs are files, streams, APIs, or shell commands.
  • A GUI would mostly wrap flags and logs.
  • Distribution can happen through one binary, package manager, or repo-local tool.

Language Defaults

PickUse whenTrade-off
GoNetworking, subprocesses, test runners, simple static binaries, backend adjacencyLess low-level control than Rust
RustPerformance, safety, native libraries, dependency-conscious toolsSlower iteration and steeper learning curve
PythonInternal scripts, data tasks, quick automationPackaging and runtime management can be the product pain
Node/TypeScriptJS ecosystem tools, frontend-adjacent CLIsRuntime/dependency footprint

Minimum Starter

cmd/<tool>/        # entrypoint
internal/         # implementation packages
README.md         # install and examples
docs/commands.md  # command reference
tests/            # command and library tests

Quality Gates

  • --help is useful.
  • Exit codes are predictable.
  • Output formats are documented.
  • Config paths are explicit.
  • Dry-run exists for destructive operations.
  • Install/update path is real for target users.

Tip: If the CLI grows a server, keep the server hidden or explicit. The user should not need to debug process orchestration unless that is the product.