Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

citty

unjs9.5mMIT0.1.6TypeScript support: included

Elegant CLI Builder

readme

🌆 citty

npm version npm downloads bundle Codecov License

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:

# npm
npm install citty

# yarn
yarn add citty

# pnpm
pnpm install citty

Import:

// ESM
import { defineCommand, runMain } from "citty";

// CommonJS
const { defineCommand, runMain } = require("citty");

Define main command to run:

import { defineCommand, runMain } from "citty";

const main = defineCommand({
  meta: {
    name: "hello",
    version: "1.0.0",
    description: "My Awesome CLI App",
  },
  args: {
    name: {
      type: "positional",
      description: "Your name",
      required: true,
    },
    friendly: {
      type: "boolean",
      description: "Use friendly greeting",
    },
  },
  run({ args }) {
    console.log(`${args.friendly ? "Hi" : "Greetings"} ${args.name}!`);
  },
});

runMain(main);

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 using corepack 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).

changelog

Changelog

v0.1.6

compare changes

🩹 Fixes

  • usage: Render valueHint for positional args (dbd1d92)

🏡 Chore

❤️ Contributors

  • Pooya Parsa (@pi0)

v0.1.5

compare changes

🚀 Enhancements

  • command: Return result of run command (#101)
  • runMain: Support custom showUsage option (#74)

🏡 Chore

🎨 Styles

❤️ Contributors

v0.1.4

compare changes

🚀 Enhancements

  • Support cleanup hook (#64)
  • Add createMain utility (#65)
  • Support --version (#67)

🩹 Fixes

  • Do not throw error when no subcommand specified but main has run (#58)

🏡 Chore

❤️ Contributors

v0.1.3

compare changes

🩹 Fixes

  • Allow string[] in arg signature (#56)

🏡 Chore

  • Typo in readme (#45)
  • Update dependencies (f863f9d)

🤖 CI

  • Use conventional commit for autofix action (#50)

❤️ Contributors

v0.1.2

compare changes

🚀 Enhancements

  • usage: Resolve sub commands for meta description (#32)
  • Use consola for output formatting (bf5de7f)
  • runCommand: Allow passing custom data (4abc848)

🩹 Fixes

  • Fix generic type issues (#38)
  • Handle required: false for positional arguments (ab0401b)

🏡 Chore

❤️ Contributors

v0.1.1

compare changes

🩹 Fixes

🏡 Chore

❤️ Contributors

  • Pooya Parsa (@pi0)
  • Ʀᴀʏ (@so1ve)
  • 4c9582f <Pooya Parsa>

v0.1.0

compare changes

🏡 Chore

❤️ Contributors

  • Pooya Parsa (@pi0)

v0.0.2

🚀 Enhancements

  • setup hook (#9)
  • Allow accessing args with camelCase or kebabCase (#17)
  • Basic type inference for args (#1)

🩹 Fixes

  • Correctly parse positional arguments (#16)
  • Allow any args type for SubCommandsDef (60d218d)

🏡 Chore

❤️ Contributors