Citty

Elegant CLI Builder

README

🌆 citty


Elegant CLI Builder

- Fast and lightweight argument parser based on mri
- Smart value parsing with typecast, boolean shortcuts and unknown flag handling
- Nested sub-commands
- Lazy and Async commands
- Plugable and composable API
- Auto generated usage and help

🚧 This project is under heavy development. More features are coming soon!

Usage


Install package:

  1. ```sh
  2. # npm
  3. npm install citty

  4. # yarn
  5. yarn add citty

  6. # pnpm
  7. pnpm install citty
  8. ```

Import:

  1. ```js
  2. // ESM
  3. import { defineCommand, runMain } from "citty";

  4. // CommonJS
  5. const { defineCommand, runMain } = require("citty");
  6. ```

Define main command to run:

  1. ```ts
  2. import { defineCommand, runMain } from "citty";

  3. const main = defineCommand({
  4.   meta: {
  5.     name: "hello",
  6.     version: "1.0.0",
  7.     description: "My Awesome CLI App",
  8.   },
  9.   args: {
  10.     name: {
  11.       type: "positional",
  12.       description: "Your name",
  13.       required: true,
  14.     },
  15.     friendly: {
  16.       type: "boolean",
  17.       description: "Use friendly greeting",
  18.     },
  19.   },
  20.   run({ args }) {
  21.     console.log(`${args.friendly ? "Hi" : "Greetings"} ${args.name}!`);
  22.   },
  23. });

  24. runMain(main);
  25. ```

Utils


defineCommand


defineCommand is a type helper for defining commands.

runMain


Runs a command with usage support and graceful error handling.

createMain


Create a wrapper around command that calls runMain when called.

runCommand


Parses input args and runs command and sub-commands (unsupervised). You can access result key from returnd/awaited value to access command's result.

parseArgs


Parses input arguments and applies defaults.

renderUsage


Renders command usage to a string value.

showUsage


Renders usage and prints to the console

Development


- Clone this repository
- Install latest LTS version of Node.js
- Enable Corepack usingcorepack enable
- Install dependencies using pnpm install
- Run interactive tests using pnpm dev

License


Made with 💛 Published under MIT License.

Argument parser is based on lukeed/mri by Luke Edwards (@lukeed).