Web Dev Tools

CLI & TUI Frameworks

Building command-line tools and terminal UIs in Node / Bun.

Most JS devs end up writing a CLI eventually — for project setup, codegen, deploy scripts, or internal tools.

Argument parsing / command structure

  • citty (UnJS) — modern, ESM-first, zero-config commands. The default for new tools.
  • Commander — long-running standard; feature-rich, mature.
  • yargs — also long-running; declarative builder API.
  • cac — small, fast, ergonomic.
  • meow (Sindre Sorhus) — minimal; pair with your own logic.
  • @effect/cli — if you're in the Effect ecosystem.
  • gunshi — newer, type-safe.

Full CLI frameworks (multi-command, plugins, hooks)

  • oclif — Salesforce's framework; plugins, hooks, codegen, autocomplete; used by Heroku, Salesforce, Shopify CLIs.
  • Stricli — newer, type-safe.

Interactive prompts

  • Clack (@clack/prompts) — gorgeous prompts with great defaults. The default for new CLIs in 2026.
  • prompts — long-running classic; lighter.
  • inquirer — older, larger.
  • enquirer — alternative; smaller than inquirer.
  • password-prompt — minimal masked-input prompt.

Output / formatting

  • picocolors — smallest, fastest color library; the modern default.
  • chalk — older, larger, still very popular.
  • kleur — small alternative.
  • ansi-colors, colorette — alternatives.
  • figures — Unicode symbols (✔, ✖, ◯) cross-platform.
  • gradient-string — ANSI gradients.
  • boxen — boxed output.
  • listr2 — parallel task lists with checkboxes.
  • ora — spinners.
  • log-symbols — pretty symbols for log levels.
  • cli-table3, easy-table, table — terminal tables.

TUIs (full-screen terminal UIs)

  • Ink (Vercel) — React for the terminal. Used by Vercel CLI, Cloudflare Wrangler, Gemini CLI, Codex, Claude Code, GitHub Copilot CLI.
  • Pastel — Next.js-style framework on top of Ink; file-based commands.
  • @inkjs/ui — pre-built Ink components (text input, multi-select, spinners).
  • terminal-kit — non-React TUI toolkit.
  • blessed / neo-blessed — older, lower-level.

Distribution / packaging

  • @electron/forge / pkg — bundle to single executables.
  • Bun's bun build --compile — single-file Bun executables.
  • Deno's deno compile — single-file Deno executables.
  • caxa — bundle Node + your script as a binary.

CLI templates / scaffolds

  • plop — file generator from templates; the default for "scaffold a new component."
  • Hygen — alternative.
  • giget (UnJS) — fetch templates from GitHub / GitLab.
  • @antfu/ni — universal package-manager runner (works regardless of npm / pnpm / yarn / bun).

Pick this if…

  • Default new CLI: citty + Clack + picocolors.
  • Multi-command framework: oclif (mature) or citty (modern).
  • Interactive TUI like Wrangler: Ink + Pastel.
  • Pretty prompts: Clack.
  • Cross-package-manager script runner: @antfu/ni.
  • Single-binary distribution: Bun's compile or Deno's compile.

On this page