Skip to content

Repository files navigation

EasyCLI

The modern framework for building type-safe, beautiful CLI applications.

A complete replacement for Commander.js + Inquirer with better DX.

npm versionnpm downloadsBundle SizeBuild StatusLicenseTypeScriptNode.jsPRs Welcome

Features | Quick Start | Documentation | Tutorial


Quick Start

npx create-easycli my-app
cd my-app
pnpm dev hello World

Features

FeatureDescription
Type SafetyFull TypeScript inference from schema to handler
UI ComponentsColors, spinners, progress bars, tables, boxes
PromptsText, password, confirm, select, multiselect
Signal HandlingGraceful SIGINT/SIGTERM with cleanup hooks
Input SanitizationBuilt-in injection attack protection
Array Flags--file a.ts --file b.ts collects into arrays
Optional Args{ type: "string", optional: true }
Subcommandscli db migrate, cli db seed
Rich ErrorsErrors with hints and exit codes

Example

import{defineCLI}from"easycli-core";import{colors,spinner,box}from"easycli-ui";constcli=defineCLI({name: "deploy-cli",version: "1.0.0",commands: {up: {description: "Deploy to environment",args: {env: ["staging","production"]},flags: {force: {type: "boolean",alias: "f"},file: {type: "string",array: true,alias: "F"}},asyncrun({ env, force, file },ctx){if(!force){constproceed=awaitctx.ask.confirm(`Deploy to ${env}?`);if(!proceed)return;}consts=spinner(`Deploying ${file?.length||0} files to ${env}...`);s.start();awaitdeploy(env);s.success("Deployed!");console.log(box(`Environment: ${colors.cyan(env)}`,{borderStyle: "rounded",borderColor: "green"}));}}}});cli.run();

Usage:

deploy-cli up production --force --file api.ts --file worker.ts

Packages

PackageDescriptionInstall
easycli-coreCLI definition, parsing, routingpnpm add easycli-core
easycli-uiColors, spinners, progress, tables, boxespnpm add easycli-ui
easycli-promptsInteractive prompts, sanitizationpnpm add easycli-prompts
easycli-helpHelp text generationpnpm add easycli-help
easycli-configConfig file loadingpnpm add easycli-config
easycli-pluginsPlugin systempnpm add easycli-plugins
create-easycliProject scaffoldernpx create-easycli

UI Components

Colors

import{colors}from"easycli-ui";console.log(colors.green("Success!"));console.log(colors.bold(colors.red("Error!")));console.log(colors.bgCyan(colors.white("Highlight")));

Spinner

import{spinner}from"easycli-ui";consts=spinner("Loading...");s.start();awaitdoWork();s.success("Done!");

Progress Bar

import{progress}from"easycli-ui";constbar=progress(100);for(leti=0;i<=100;i+=10){bar.update(i);awaitdelay(100);}bar.complete();

Table

import{table}from"easycli-ui";table([{Name: "api",Status: "Running",Port: 3000},{Name: "worker",Status: "Stopped",Port: 3001}]);

Box

import{box}from"easycli-ui";console.log(box("Hello World!",{title: "Greeting",borderStyle: "rounded",borderColor: "cyan",padding: 1}));

Documentation

DocumentDescription
Getting StartedSetup in 5 minutes
TutorialBuild a CLI from scratch
API ReferenceComplete API docs
Building Beautiful CLIsFull feature guide
Why EasyCLI?Framework comparison

Examples

ExampleDescription
simple-appBasic CLI with one command
myappFull-featured demo
test-featuresTests all production features
deploy-cliDeployment tool example

Contributing

Contributions welcome! Please read CONTRIBUTING.md.


License

MIT - Avijit

Releases

Packages

Contributors

Languages