A TypeScript-first, runtime-agnostic toolkit for building complex command-line interfaces with Deno, Node, and Bun.
Cliffy is a command-line toolkit for building complex CLI applications using TypeScript. It provides a suite of modular packages including a command framework, argument parser, interactive prompts, table generator, and ANSI utilities, designed to work across Deno, Node.js, and Bun runtimes. It solves the problem of creating robust, type-safe, and feature-rich command-line interfaces with consistent tooling.
Developers and teams building sophisticated command-line tools, utilities, or developer tooling who want type safety, modularity, and cross-runtime compatibility.
Developers choose Cliffy for its TypeScript-first design, runtime agnosticism, and comprehensive feature set that eliminates the need to piece together multiple CLI libraries. Its modular architecture allows using only the needed components while maintaining consistency.
A TypeScript-first, runtime-agnostic command-line toolkit for building complex CLIs — featuring a command framework, argument parser, interactive prompts, tables, ANSI utilities, and more.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
The command module enforces input validation and auto-generates help, reducing bugs and improving developer experience, as highlighted in the documentation for complex CLIs.
Works seamlessly with Deno, Node.js, and Bun without modification, offering flexibility for teams targeting multiple JavaScript runtimes, as stated in the key features.
Developers can import only needed packages like prompts or tables, avoiding bloat, evidenced by the separate packages listed in the README with individual versions and downloads.
Includes everything from argument parsing to interactive prompts and ANSI styling, providing a one-stop solution for complex CLI development without piecing together multiple libraries.
The testing package is labeled as experimental, which may lead to instability or lack of long-term support for testing CLI applications, as noted in the packages table.
Being runtime-agnostic and newer, it might have fewer community-contributed plugins or integrations than established Node.js libraries like Commander.js, potentially limiting extensibility.
For simple CLIs, the modular architecture might require more initial configuration and understanding of multiple packages compared to all-in-one alternatives, increasing onboarding time.