{"id":13902910,"url":"https://github.com/4i8/clinei","last_synced_at":"2025-05-16T11:09:56.909Z","repository":{"id":65518801,"uuid":"581386757","full_name":"4i8/clinei","owner":"4i8","description":"clinei is a library that provides a command line interface handler to make it easy to build CLI programs.","archived":false,"fork":false,"pushed_at":"2023-07-12T00:58:38.000Z","size":153,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-16T18:26:35.505Z","etag":null,"topics":["bun","cli","command","command-line","command-line-parser","command-line-tool","deno","easy-to-use","handler","helper","nodejs"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/4i8.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-12-23T03:19:16.000Z","updated_at":"2024-07-11T03:02:38.000Z","dependencies_parsed_at":"2024-11-25T11:31:40.552Z","dependency_job_id":"9202f7ad-16f4-44c6-a9a3-9aaee6a90381","html_url":"https://github.com/4i8/clinei","commit_stats":{"total_commits":44,"total_committers":2,"mean_commits":22.0,"dds":0.25,"last_synced_commit":"58e7e57a9f580328a8037525ab2b106a86dd7a5f"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4i8%2Fclinei","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4i8%2Fclinei/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4i8%2Fclinei/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4i8%2Fclinei/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/4i8","download_url":"https://codeload.github.com/4i8/clinei/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254518401,"owners_count":22084376,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bun","cli","command","command-line","command-line-parser","command-line-tool","deno","easy-to-use","handler","helper","nodejs"],"created_at":"2024-08-06T22:01:29.592Z","updated_at":"2025-05-16T11:09:56.885Z","avatar_url":"https://github.com/4i8.png","language":"TypeScript","funding_links":[],"categories":["cli"],"sub_categories":[],"readme":"# **clinei**\n\n\u003cdiv align=\"center\"\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n  \u003cp\u003e\n \u003ca href=\"https://www.npmjs.com/package/clinei\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/clinei.svg?style=for-the-badge\" alt=\"NPM version\" /\u003e\u003c/a\u003e\n \u003ca href=\"https://www.npmjs.com/package/clinei\"\u003e\u003cimg src=\"https://img.shields.io/npm/dt/clinei.svg?maxAge=3600\u0026style=for-the-badge\" alt=\"NPM downloads\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/clinei\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/clinei.svg?maxAge=3600\u0026style=for-the-badge\" alt=\"license\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/4i8/clinei/stargazers\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/stars/4i8/clinei?label=Stars\u0026style=for-the-badge\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/4i8/clinei/releases/latest\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/v/release/4i8/clinei?label=Latest%20Version\u0026style=for-the-badge\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/4i8/clinei/commit/master\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/last-commit/4i8/clinei?label=Last%20Update\u0026style=for-the-badge\"\u003e\n    \u003c/a\u003e\n    \u003cimg src=\"https://img.shields.io/github/languages/code-size/4i8/clinei?label=Size\u0026style=for-the-badge\"\u003e\n    \u003ca href=\"https://github.com/4i8/clinei/issues\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/issues/4i8/clinei?label=Issues\u0026style=for-the-badge\"\u003e\n    \u003c/a\u003e\n     \u003c/p\u003e\n\u003c/div\u003e\n\n# **command-line interface handler**\n\n**clinei is handler to facilitate the building of cli programs with stability and also you can specify the type of entry of each command and customization that helps you write a clean program clinei is not a cli package, it is a package that helps you build a cli package**\n\n## Features\n\n- ✅ **Command**\n- ✅ **Option**\n- ✅ **Argument**\n- ✅ **Help**\n- ✅ **Version**\n- ✅ **Customization**\n- ✅ **Type**\n- ✅ **Alias**\n- ✅ **Default**\n- ✅ **Required**\n- ✅ **Description**\n- ✅ **Example**\n\n## Support\n\n- ✅ **ECMAScript Modules (ESM)**\n- ✅ **CommonJS (CJS)**\n- ❌️ **Deno**\n\n## **Map**\n\n- **[Examples](#examples)**\n- **[Installation](#installation)**\n  - [NPM](#npm)\n  - [yarn](#yarn)\n- **[Build](#build)**\n  - [esm (ECMAScript Modules)](#esmbuild)\n  - [cjs (CommonJS)](#cjsbuild)\n- **[Command](#command)**\n\n  - [CommandConfig](#CommandConfig)\n    - [cmd](#cmd)\n    - [desc](#desc)\n    - [options](#CommandConfigoption)\n    - [usage](#usage)\n    - [FinalConfiguration](#finallycommandconfig)\n  - [CommandConfigOption](#CommandConfigoption)\n    - [name](#name)\n    - [desc](#desc-1)\n    - [type](#type)\n    - [msg](#msg)\n    - [required](#required)\n    - [default](#default)\n  - [Methods](#methods)\n    - [getOptions()](#getoptions)\n    - [getArgs()](#getargs)\n    - [parseArgs()](#parseargs)\n    - [exist()](#exist)\n    - [getStructure](#getstructure)\n    - [printHelp](#printhelp)\n  - [HelpCommand](#help) (required)\n  - [Make Cli Global](#globalcli)\n\n# \u003cdiv id=\"examples\"\u003e \u003cstrong\u003eExamples\u003c/strong\u003e\u003c/div\u003e\n\n#### `index.js`\n\n```js\n#!/usr/bin/env node\nimport { Build } from \"clinei\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nnew Build({\n  path: __dirname + \"/commands\",\n  prefix: \" real-cli\",\n});\n```\n\n**if You use CommonJS**\n\n```diff\n- import\n+ require\n\n+ const { Build } = require(\"clinei\");\n- import { Build } from \"clinei\";\n- import path from \"path\";\n- import { fileURLToPath } from \"url\";\n- const __dirname = path.dirname(fileURLToPath(import.meta.url));\n+ new Build({\n+   path: __dirname + \"/commands\",\n+   prefix: \" real-cli\",\n+ });\n\nand\n+ module.exports = Command(...);\n- export default Command(...);\n```\n\n#### `commands/print.js`\n\n```js\nimport { Command } from \"clinei\";\nexport default Command(\n  {\n    cmd: \"print\", //or [\"print\",\"--print\",\"-p\",\"myprint\"] //with aliases for this command\n    desc: \"Log in and print data in console\",\n    options: [\n      {\n        name: [\"--username\", \"-u\"], //with aliases\n        desc: \"your real name\",\n        required: true,\n      },\n      {\n        name: \"--age\", //no aliases\n        desc: \"your real age\",\n        type: \"number\",\n        msg: \"See the documentation for more information on github\",\n        default: 99,\n      },\n      {\n        name: \"--store\", //no aliases\n        desc: \"store your data or no (optional)\",\n      },\n    ],\n    usage: \"print pro -u Arth --age=101 --store --skills 1 2 3 4 5 6\",\n  },\n  ({ getOptions, exist, getArgs, parseArgs }) =\u003e {\n    const username = getOptions(\"--username\"); // or -u\n    const age = getOptions(\"--age\");\n    const store = exist(\"--store\");\n    const Skills = parseArgs(\"--skills\"); //or any other key like --\n    if (getArgs(\"pro\")) {\n      console.log(\n        `[${getArgs()[0]}] Hi ,${username} Your Data Enjoy!\n      \n  [username] ${username}\n  [age] ${age}\n  [store] ${store ? \"yes store my data\" : \"No!\"}\n  [skills] ${Skills.join(\", \")}\n`\n      );\n    } else\n      console.log(\n        `[noob] Hi ,${username} Your Data Enjoy!\n    \n[username] ${username}\n[age] ${age}\n[store] ${store ? \"yes store my data\" : \"No!\"}\n[skills] ${Skills.join(\", \")}\n`\n      );\n  }\n);\n```\n\n#### `commands/help.js`\n\n```js\nimport { Command } from \"clinei\";\nexport default Command(\n  {\n    cmd: [\"-h\", \"--help\", \"help\"], // \u003c-- This is the command name like \u003cPrefix\u003e help \u003ccommand\u003e\n    desc: \"View Commands\", // \u003c-- This is the command desc\n    usage: \"help \u003ccommand\u003e\",\n  },\n  ({ printHelp, getArgs, getStructure }, focus) =\u003e {\n    console.log(printHelp);\n    if (\n      (getArgs()[0] || focus) \u0026\u0026\n      !getStructure.commands.find(({ cmd }) =\u003e\n        cmd.find((c) =\u003e c === focus || c === getArgs()[0])\n      )\n    ) {\n      console.log(`Warn: ${`[\"${getArgs()[0] || focus}\"]`} not found`);\n    }\n  }\n);\n```\n\n**Run**\n\n```bash\nnode index.js print -u Arth --age 120 --store\n```\n\n**OutPut**\n\n```bash\n[noob] Hi ,Arth Your Data Enjoy!\n\n[username] Arth\n[age] 120\n[store] yes store my data\n[skills]\n```\n\n# Installation\n\n## NPM\n\n```bash\nnpm i clinei\n```\n\n## yarn\n\n```bash\nyarn add clinei\n```\n\n# Build\n\n**Build is a class that is responsible for building the cli program, it is necessary to pass the path of the commands folder and the prefix of the program**\n\n## We use `real-cli` as an example\n\n\u003cdiv id=\"esmbuild\"\u003e \u003cstrong\u003eesm (ECMAScript Modules)\u003c/strong\u003e\u003c/div\u003e\n\n```js\nimport { Build } from \"clinei\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\nnew Build({\n  path: __dirname + \"/\u003ccommands folder\u003e\",\n  prefix: \"real-cli\", //\u003cprefix\u003e\n});\n```\n\n\u003cdiv id=\"cjsbuild\"\u003e \u003cstrong\u003ecjs (CommonJS)\u003c/strong\u003e\u003c/div\u003e\n\n```js\nconst { Build } = require(\"clinei\");\nnew Build({\n  path: __dirname + \"/\u003ccommands folder\u003e\",\n  prefix: \"real-cli\", //\u003cprefix\u003e\n});\n```\n\n# Command\n\n`/\u003ccommands folder\u003e/**/*.js`\n**Command() a function that registers the command in the program**\n\n\u003cdiv id=\"esmcommand\"\u003e \u003cstrong\u003eesm (ECMAScript Modules)\u003c/strong\u003e\u003c/div\u003e\n\n```js\nimport { Command } from \"clinei\";\nexport default Command(\n  {\n    cmd: [], // or string\n    desc: \"\",\n    usage: \"\",\n    options: [],\n  },\n  ({ \u003cMethods\u003e }) =\u003e {\n    // code\n    }\n);\n```\n\n\u003cdiv id=\"cjscommand\"\u003e \u003cstrong\u003ecjs (CommonJS)\u003c/strong\u003e\u003c/div\u003e\n\n```js\nconst { Command } = require(\"clinei\");\nmodule.exports = Command(\n  {\n    cmd: [], // or string\n    desc: \"\",\n    usage: \"\",\n    options: [],\n  },\n  ({ \u003cMethods\u003e }) =\u003e {\n    // code\n    }\n);\n```\n\n# CommandConfig\n\n```js\n{\n  cmd: [],\n  desc: \"\",\n  usage: \"\",\n  options: [...],\n}\n```\n\n\u003e ## **cmd**\n\n**cmd is the command that will be executed in the program, it can be a string or an array of strings**\n\n### no alias\n\n```bash\n$ real-cli print\n```\n\n```js\n{\n  cmd: \"print\",\n}\n```\n\n### with alias\n\n**-p or --print or print**\n\n```bash\n$ real-cli -p\n```\n\n```js\n{\n  cmd: [\"-p\", \"--print\", \"print\"],\n}\n```\n\n\u003e ## **desc**\n\n**desc is the description of the command, it is used in the help command**\n\n```js\n{\n  desc: \"Log in and print data in console\",\n}\n```\n\n\u003e ## **options**\n\n**the options of the command, required if the command has options**\n\n**see full documentation of [CommandConfigOption](#CommandConfigoption)**\n\n\u003e ## **usage**\n\n**usage is the usage of the command, it is used in the help command**\n\n```js\n{\n  usage: \"print pro -u Arth --age=101 --store --skills 1 2 3 4 5 6\",\n}\n```\n\n\u003e ## \u003cdiv id=\"finallycommandconfig\"\u003e \u003cstrong\u003eFinally\u003c/strong\u003e\u003c/div\u003e\n\n```js\n {\n    cmd: \"print\", //or [\"print\",\"--print\",\"-p\",\"myprint\"] //with aliases for this command\n    desc: \"Log in and print data in console\",\n    options: [\n      {\n        name: [\"--username\", \"-u\"], //with aliases\n        desc: \"your real name\",\n        required: true,\n      },\n      {\n        name: \"--age\", //no aliases\n        desc: \"your real age\",\n        type: \"number\",\n        msg: \"See the documentation for more information on github\",\n        default: 99,\n      },\n      {\n        name: \"--store\", //no aliases\n        desc: \"store your data or no (optional)\",\n      },\n    ],\n    usage: \"print pro -u Arth --age=101 --store --skills 1 2 3 4 5 6\",\n  }\n```\n\n# CommandConfigOption\n\n**ConfigOption is the configuration of the options of the command**\n\n\u003e ## **default value**\n\n```js\n{\n  name: \"\",// or array\n  desc: \"\",\n  type: \"string\",\n  msg: false,\n  required: false,\n  default: undefined\n}\n```\n\n\u003e ## **name**\n\n**name of the option, it can be a string or an array of strings must start with `-` or `--`**\n\n### **no alias**\n\n```js\n{\n  name: \"--username\",\n}\n```\n\n```bash\n$ real-cli --username Arth\n```\n\n### **with alias**\n\n**-u or --username**\n\n```js\n{\n  name: [\"-u\", \"--username\"],\n}\n```\n\n```bash\n$ real-cli -u Arth\n```\n\n\u003e ## **desc**\n\n**the description of the option, it is used in the help command**\n\n```js\n{\n  desc: \"your real name\",\n}\n```\n\n\u003e ## **type**\n\n**the type of the option, it is used to validate the option**\n\n```js\n{\n  type: \"string\" | \"number\" | \"boolean\",\n}\n```\n\n**Type Test**\n\n```js\n{\n  name: \"--age\", //no aliases\n  desc: \"your real age\",\n  type: \"number\",\n  msg: \"See the documentation for more information on github\",\n  default: 99\n}\n```\n\n**expected number**\n\n```bash\n$ real-cli --age nine\n```\n\n**OutPut in interface**\n\n```bash\nError: Invalid value for option --age expected number got nine\n                                                         ^\nTip: use  real-cli help print to see command options\n```\n\n\u003e ## **msg**\n\n**will be displayed if the option is not valid**\n\n```js\n{\n  msg: \"See the documentation for more information on github\",\n}\n```\n\n```bash\n$ real-cli --age nine\n```\n\n**OutPut in interface**\n\n```bash\nError: Invalid value for option --age expected number got nine\n                                                         ^\nSee the documentation for more information on github\n\nTip: use  real-cli help print to see command options\n```\n\n\u003e ## **required**\n\n**required is a boolean that indicates if the option is required**\n\n```js\n  {\n    name: [\"--username\", \"-u\"], //with   aliases\n    desc: \"your real name\",\n    required: true,\n  }\n```\n\n```bash\n$ real-cli --age 99\n```\n\n**OutPut in interface**\n\n```bash\nMissing required option --username,-u\n\nTip: use  real-cli help print to see command options\n```\n\n\u003e ## **default**\n\ndefault is the default value of the option\n\n```js\n  {\n    name: \"--age\", //no aliases\n    desc: \"your real age\",\n    type: \"number\",\n    msg: \"See the documentation for more information on github\",\n    default: 99\n  }\n```\n\n```bash\n$ real-cli\n```\n\n```js\ngetOptions(\"--age\"); // 99\n```\n\n# Methods\n\n```js\nCommand(\n  {\n    cmd: [], // or string\n    desc: \"\",\n    usage: \"\",\n    options: [],\n  },\n  ({ getOptions, getArgs, parseArgs, exist, getStructure, printHelp }) =\u003e {\n    // code\n  }\n);\n```\n\n\u003e ## **getOptions()**\n\n**returns values of the options passed in the command**\n\n**specify the name of the option to get the value**\n\n```js\ngetOptions(\"--username\");\n// or one of the aliases\ngetOptions(\"-u\");\n```\n\n**all options**\n\n```js\ngetOptions();\n```\n\n\u003e ## **getArgs()**\n\n**returns the arguments passed in the command**\n\n```js\ngetArgs(); // return array\n```\n\n**specify the key to get the arguments**\n\n```js\ngetArgs(\"arg1\"); // \"arg1\" || false\n```\n\n```bash\n$ real-cli print arg1 arg2 arg3\n```\n\n**OutPut**\n**`getArgs();`**\n\n```js\n[\"arg1\", \"arg2\", \"arg3\"]; // if the key exists\n[]; // if the key does not exist\n```\n\n**`getArgs(\"arg1\");`**\n\n```js\n\"hi\"; // if the key exists\nfalse; // if the key does not exist\n```\n\n\u003e ## **parseArgs()**\n\n**returns the arguments associated with the key passed in the command**\n\n```bash\n-- 1 2 3 4 5\n```\n\n**specify the key to get the arguments -- or any other key or string**\n\n```js\nparseArgs(\"--\");\n```\n\n**OutPut Array**\n\n```js\n[1, 2, 3, 4, 5] // if the key exists\n[] // if the key does not exist\n```\n\n\u003e ## **exist()**\n\n**returns a boolean indicating if the option exists**\n\n```js\nexist(\"--username\");\n```\n\n**OutPut Boolean**\n\n```js\ntrue; // if the option exists\nfalse; // if the option does not exist\n```\n\n\u003e ## **getStructure**\n\n**returns the structure of the commands You can use it to build a custom help instead printHelp()**\n\n```js\ngetStructure; // return object\n```\n\n**OutPut Object**\n\n```js\n{\n  commands: [\n  {\n  \"cmd\": [], // or string\n  \"desc\": \"\",\n  \"usage\": \"\",\n  \"options\": [...]\n  ,...\n  }\n  ];\n  prefix: string;\n  //this is the structure of the command that is being executed\n  this: {\n  \"cmd\": [], // or string\n  \"desc\": \"\",\n  \"usage\": \"\",\n  \"options\": [...]\n  }\n}\n```\n\n\u003e ## **printHelp**\n\n**printHelp is a property\nthat prints the help of the commands**\n\n```js\nprintHelp;\n```\n\n# \u003cdiv id=\"help\"\u003e \u003cstrong\u003eHelpCommand\u003c/strong\u003e\u003c/div\u003e\n\n**HelpCommand is a command that is used to print the help of the commands**\n\n```js\nCommand(\n  {\n    cmd: [\"-h\", \"--help\", \"help\"],\n    desc: \"View Commands\",\n    usage: \"help \u003ccommand\u003e\",\n  },\n  ({ printHelp }) =\u003e {\n    console.log(printHelp);\n  }\n);\n```\n\n```bash\n$ real-cli help\n```\n\n**OutPut**\n\n```\nusage:  real-cli help \u003ccommand\u003e\n\n real-cli -h, --help, help [options] [aliases]\n                                                  View Commands\n real-cli print [options] [aliases]\n                                                  Log in and print data in console\n Options:\n    --username, -u  REQUIRED,STRING\n                                                  your real name\n    --age  NUMBER\n                                                  your real age\n    --store  STRING\n                                                  store your data or no (optional)\n\n\n```\n\n```bash\n$ real-cli help print\n```\n\n**OutPut**\n\n```bash\nusage:  real-cli print pro -u Arth --age=101 --store --skills 1 2 3 4 5 6\n\n real-cli print [options] [aliases]\n                                                  Log in and print data in console\nOptions:\n    --username, -u  REQUIRED,STRING\n                                                  your real name\n    --age  NUMBER\n                                                  your real age\n    --store  STRING\n                                                  store your data or no (optional)\n\n```\n\n```js\nCommand(\n  {\n    cmd: [\"-h\", \"--help\", \"help\"], // \u003c-- This is the command name like \u003cPrefix\u003e help \u003ccommand\u003e\n    desc: \"View Commands\", // \u003c-- This is the command desc\n    usage: \"help \u003ccommand\u003e\",\n  },\n  ({ printHelp, getArgs, getStructure }, focus) =\u003e {\n    console.log(printHelp);\n    //focus -\u003e\u003e delete\n    if (\n      (getArgs()[0] || focus) \u0026\u0026\n      !getStructure.commands.find(({ cmd }) =\u003e\n        cmd.find((c) =\u003e c === focus || c === getArgs()[0])\n      )\n    ) {\n      console.log(`Warn: ${`[\"${getArgs()[0] || focus}\"]`} not found`);\n    }\n  }\n);\n```\n\n```bash\n$ real-cli delete\n           ^^^^^^ -\u003e\u003e focus\n```\n\n```bash\n$ real-cli help delete\n                ^^^^^^ -\u003e\u003e getArgs()[0]\n```\n\n**OutPut**\n\n```bash\nusage:  real-cli help \u003ccommand\u003e\n\n real-cli -h, --help, help [options] [aliases]\n                                                  View Commands\n real-cli print [options] [aliases]\n                                                  Log in and print data in console\n Options:\n    --username, -u  REQUIRED,STRING\n                                                  your real name\n    --age  NUMBER\n                                                  your real age\n    --store  STRING\n                                                  store your data or no (optional)\n\nWarn: [\"delete\"] not found\n```\n\n## \u003cdiv id=\"globalcli\"\u003e \u003cstrong\u003eMake Cli Global\u003c/strong\u003e\u003c/div\u003e\n\n## Make a global program local use npm\n\n## add this to your `package.json`\n\n```json\n{\n  \"bin\": {\n    \"real-cli\": \"index.js\"\n  }\n}\n```\n\n## run\n\n```bash\n$ npm link\n```\n\n## or publish and install it globally\n\n### Example with npm\n\n```bash\nnpm install \u003cpackage\u003e -g\n```\n\n## now you can use your program\n\n```bash\n$ real-cli help\n```\n\n## Links\n\n- [Github](https://github.com/4i8)\n\n## License\n\n- [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0)\n\n# clinei is a CLI program builder\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F4i8%2Fclinei","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F4i8%2Fclinei","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F4i8%2Fclinei/lists"}