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.