{"id":13533846,"url":"https://github.com/mkdoc/mkcli","last_synced_at":"2025-04-27T20:32:28.185Z","repository":{"id":57312640,"uuid":"55029369","full_name":"mkdoc/mkcli","owner":"mkdoc","description":"Markdown command line interface definition","archived":true,"fork":false,"pushed_at":"2017-04-26T14:25:07.000Z","size":289,"stargazers_count":64,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-03T05:04:51.894Z","etag":null,"topics":["cli","markdown"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkdoc.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}},"created_at":"2016-03-30T03:25:31.000Z","updated_at":"2024-12-11T22:13:08.000Z","dependencies_parsed_at":"2022-09-10T19:00:58.137Z","dependency_job_id":null,"html_url":"https://github.com/mkdoc/mkcli","commit_stats":null,"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkdoc%2Fmkcli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkdoc%2Fmkcli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkdoc%2Fmkcli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkdoc%2Fmkcli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkdoc","download_url":"https://codeload.github.com/mkdoc/mkcli/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251204565,"owners_count":21552239,"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":["cli","markdown"],"created_at":"2024-08-01T07:01:23.673Z","updated_at":"2025-04-27T20:32:27.769Z","avatar_url":"https://github.com/mkdoc.png","language":"JavaScript","readme":"# Command Line Interface\n\n[![Build Status](https://travis-ci.org/mkdoc/mkcli.svg?v=3)](https://travis-ci.org/mkdoc/mkcli)\n[![npm version](http://img.shields.io/npm/v/mkcli.svg?v=3)](https://npmjs.org/package/mkcli)\n[![Coverage Status](https://coveralls.io/repos/mkdoc/mkcli/badge.svg?branch=master\u0026service=github\u0026v=3)](https://coveralls.io/github/mkdoc/mkcli?branch=master)\n\n\u003e Define command line interfaces as markdown\n\nDescribe a command line interface as an easy to read man-style markdown document and compile it to a program descriptor; the JSON program descriptor can then be used by the program implementation to parse and validate arguments.\n\nThe markdown program definitions can be converted to man pages, help files and shell completion scripts.\n\nEncourages a document first approach to writing command line interfaces in a fluid natural language writing style.\n\n## Install\n\n```\nnpm i mkcli --save\n```\n\nFor the command line interface install [mkdoc][] globally (`npm i -g mkdoc`).\n\n---\n\n- [Install](#install)\n- [Example](#example)\n- [Guide](#guide)\n  - [Defining Programs](#defining-programs)\n    - [Name](#name)\n    - [Synopsis](#synopsis)\n    - [Description](#description)\n    - [Arguments](#arguments)\n      - [Flags](#flags)\n      - [Options](#options)\n        - [Required](#required)\n        - [Multiple](#multiple)\n        - [Type Info](#type-info)\n        - [Default Value](#default-value)\n    - [Commands](#commands)\n    - [Identifiers](#identifiers)\n    - [Manual Sections](#manual-sections)\n  - [Synopsis Expansion](#synopsis-expansion)\n    - [Flags](#flags-1)\n    - [Options](#options-1)\n    - [Exclusive Options](#exclusive-options)\n    - [Expansion Example](#expansion-example)\n  - [Compiling Programs](#compiling-programs)\n  - [Creating Documentation](#creating-documentation)\n    - [Help Styles](#help-styles)\n    - [Help Sections](#help-sections)\n  - [Completion](#completion)\n    - [Actions](#actions)\n    - [Synopsis Completion](#synopsis-completion)\n    - [Specification Completion](#specification-completion)\n    - [Command Completion](#command-completion)\n- [Help](#help)\n- [API](#api)\n  - [src](#src)\n  - [compiler](#compiler)\n  - [dest](#dest)\n    - [Options](#options-2)\n  - [load](#load)\n  - [run](#run)\n- [License](#license)\n\n---\n\n## Example\n\nTo compile all output types to the same directory as the input file:\n\n```shell\nmkcli program.md\n```\n\nCompile all output types to a specific directory:\n\n```shell\nmkcli program.md -o build\n```\n\nCompile a specific output type:\n\n```shell\nmkcli -t man program.md\n```\n\nCompile a specific output type to a particular directory:\n\n```shell\nmkcli -t zsh program.md --zsh build/zsh\n```\n\nIf you have a lot of programs pass a directory and all markdown documents in the directory are compiled:\n\n```shell\nmkcli doc/cli -o build\n```\n\nYou may pipe input for more control over the output; to set a man page title:\n\n```shell\nmkcat program.md | mkcli -t man | mkman --title program \u003e program.1\n```\n\nSee [help](#help) for more options.\n\nExample files for a simple working program are in [doc/example](https://github.com/mkdoc/mkcli/blob/master/doc/example):\n\n* [program definition](https://github.com/mkdoc/mkcli/blob/master/doc/example/argv.md)\n* [program descriptor](https://github.com/mkdoc/mkcli/blob/master/doc/example/argv.json)\n* [help file](https://github.com/mkdoc/mkcli/blob/master/doc/example/argv.txt)\n* [man page](https://github.com/mkdoc/mkcli/blob/master/doc/example/argv.1)\n* [zsh completion](https://github.com/mkdoc/mkcli/blob/master/doc/example/_argv)\n* [program implementation](https://github.com/mkdoc/mkcli/blob/master/doc/example/argv.js)\n* [minimal executable](https://github.com/mkdoc/mkcli/blob/master/doc/example/argv)\n\nEvery program in the [mkdoc][] toolkit is compiled using this library:\n\n* [definitions](https://github.com/mkdoc/mkdoc/tree/master/doc/cli)\n* [compiled descriptors](https://github.com/mkdoc/mkdoc/tree/master/doc/json)\n* [help files](https://github.com/mkdoc/mkdoc/tree/master/doc/help)\n* [man pages](https://github.com/mkdoc/mkdoc/tree/master/doc/man)\n* [zsh completion](https://github.com/mkdoc/mkdoc/tree/master/doc/zsh)\n* [program implementations](https://github.com/mkdoc/mkdoc/tree/master/cli)\n* [executables](https://github.com/mkdoc/mkdoc/tree/master/bin)\n\n## Guide\n\n### Defining Programs\n\nThe markdown document defines sections that start with a level one heading and continue until the next level one heading or the end of file is reached.\n\nThe sections that have special meaning to the compiler are [NAME](#name), [SYNOPSIS](#synopsis), [DESCRIPTION](#description), [COMMANDS](#commands) and [OPTIONS](#arguments).\n\nIt is considered best practice to declare these sections in the order listed.\n\nAll other sections are deemed to be man page sections they are ignored from help output by default (but may be included at compile time) and are always included when generating man pages.\n\nSection headings are not case-sensitive so you can use upper case, title case or lower case but they must match exactly.\n\n#### Name\n\nLike man pages the name section is required and it **must** include a brief summary of the program after the program name. Delimit the program name from the short summary using a hyphen surrounded by spaces as shown below.\n\nThe name section must be the first section in the file otherwise the compiler will error.\n\nThe program name and summary is extracted from the first paragraph under the *NAME* heading:\n\n```markdown\n# Name\n\nprg - short program summary\n```\n\nFor subcommands define parent names for a command using whitespace between the words:\n\n```markdown\n# Name\n\nprg list - perform list action\n```\n\nAdd a list when a program can have multiple names:\n\n```markdown\n# Name\n\nprg - short program summary\n\n+ prg-alias\n```\n\n#### Synopsis\n\nThe program synopsis is created from all code block elements under the *SYNOPSIS* heading:\n\n```markdown\n# Name\n\nprg - short program summary\n\n# Synopsis\n\n    [options] [file...]\n```\n\nIt is a compiler error if any other type is declared in the synopsis section.\n\n#### Description\n\nThe program description is created from all block level elements under the *DESCRIPTION* heading:\n\n```markdown\n# Name\n\nprg - short program summary\n\n# Description\n\nAn extended description that can include paragraphs, lists, code blocks and other block level elements.\n```\n\nNote that the help output only includes paragraphs so some meaning may be lost if you include lists, code blocks or block quotes. For this reason it is recommended that the description section only contain paragraphs.\n\nIf you mix content in the description section you can use the `-d, --desc` option when generating the help file to restrict the number of paragraphs included in the help output.\n\nConsider this example:\n\n```markdown\n# Name\n\nprg - short program summary\n\n# Description\n\nSimple program.\n\nRun with:\n\n    cat file.md | prg\n```\n\nContext would be lost on the second paragraph because the code block would not be included in the help output, whilst it would make perfect sense in the man output.\n\nTo prevent this loss of context just include the first paragraph in the help output:\n\n```shell\nmkcat program.md | mkcli --desc 1 | mktext\n```\n\n#### Arguments\n\nProgram arguments are declared with a heading of *OPTIONS* and a list following the heading.\n\nNote the list bullet character `+` is preferred because it creates a more idiomatic listing in generated man pages.\n\n```markdown\n# Name\n\nprg - short program summary\n\n# Options\n\n+ `-i, --input [FILE...]` Input files\n+ `-o, --output [FILE]` Output file\n```\n\nAn argument is declared as a list item whose first child is an inline code element which defines a *specification*.\n\nThe specification is parsed into an object representing the argument which may be of type `flag`, `option` or `command`.\n\nThe remaining list item content after the specification is treated as a description for the argument.\n\n##### Flags\n\nAn argument specification with no value is treated as a flag option:\n\n```markdown\n+ `-v, --verbose` Print more information\n```\n\n##### Options\n\nTo create an option argument specify a value in either `[]` or `\u003c\u003e`:\n\n```markdown\n+ `-o, --output [FILE]` Output file\n```\n\n###### Required\n\nWhen the `\u003c\u003e` notation is used it indicates that that the option is required:\n\n```markdown\n+ `-t, --type \u003cTYPE\u003e` Output format\n```\n\nThe parsed option will have the `required` flag set.\n\n###### Multiple\n\nTo signify that an option argument is repeatable include an ellipsis:\n\n```markdown\n+ `-i, --input [FILE...]` Input files\n```\n\nThe parsed option will have the `multiple` flag set.\n\n###### Type Info\n\nYou can associate some type information with the `{}` notation:\n\n```markdown\n+ `-i, --indent [NUM] {Number}` Amount of indentation\n```\n\nThe parsed option will have the `kind` property set to `Number`.\n\nYou can delimit multiple types with `|` and `kind` is expanded to an array. This is useful to indicate an argument may be of multiple types or if you want to treat an argument value as an enum:\n\n```markdown\n+ `-t, --type [VAL] {json|help|man}` Renderer type\n```\n\n###### Default Value\n\nTo specify a default value for the option use the `=` operator in the type:\n\n```markdown\n+ `-i, --indent [NUM] {Number=2}` Amount of indentation\n```\n\nThe parsed option will have the `kind` property set to `Number` and the  `value` property set to `2`.\n\nYou can just specify the default value using:\n\n```markdown\n+ `-i, --indent [NUM] {=2}` Amount of indentation\n```\n\nIn which case the `kind` property will be `undefined` and the  `value` property is set to `2`.\n\n#### Commands\n\nCommands are declared in the same way as program arguments but under the *COMMANDS* heading:\n\n```markdown\n# Name\n\nprg - short program summary\n\n# Commands\n\n+ `ls, list` List tasks\n+ `i, info` Print task information\n```\n\nThey allow you to create complex programs with options specific to a command.\n\nCommand files are loaded and compiled automatically following a naming convention. Using the above example to define the `list` command create a file named `prg-list.md`:\n\n```markdown\n# Name\n\nlist - list tasks\n\n# Options\n\n+ `-a, --all` List all tasks\n+ `-t=[TYPE...]` List tasks of TYPE\n```\n\nWill result in the compiled tree containing options specific to the `list` command.\n\n#### Identifiers\n\nWhen a program is created from a source markdown document each argument and command is given a key for the resulting map. This key is generated automatically by using the longest argument (or command) name and converting it to camel case.\n\nIf you wish to use a fixed key you can add an identifier followed by a colon (`:`) to the beginning of the specification:\n\n```markdown\n# Name\n\nprg - short program summary\n\n# Commands\n\n+ `tasks: ls, list` List tasks\n\n# Options\n\n+ `verbose: -v` Print more information\n```\n\n#### Manual Sections\n\nA heading that is not matched by any of the rules above is treated as a manual section:\n\n```markdown\n# Name\n\nprg - short program summary\n\n# Environment\n\nThe environment variable FOO changes the behaviour to `bar`.\n```\n\nThe section ends when the next level one heading is encountered or the end of the file is reached.\n\n### Synopsis Expansion\n\nUnless disabled the synopsis declaration is expanded for the `man` and `help` output types.\n\n#### Flags\n\nUse the notation `[flags]` (or `\u003cflags\u003e`) in the synopsis and it will be replaced with all short form (single character) flag options (for example: `-xvf`).\n\n#### Options\n\nUse the notation `[options]` (or `\u003coptions\u003e`) in the synopsis and it will be replaced with all option names that are not declared in the synopsis and were not expanded using the `[flags]` notation.\n\n#### Exclusive Options\n\nYou should indicate mutually exclusive options using a vertical bar between option names.\n\nWhen compiling to JSON the synopsis is parsed and any mutually exclusive declarations are added to the output using the target option keys.\n\nIt is a compiler error if the target option is not declared.\n\n#### Expansion Example\n\nGiven a definition such as:\n\n```markdown\n# Name\n\nprg - short program summary\n\n# Synopsis\n\n    [flags] [options] [--xml|--html] \u003cfile...\u003e\n\n# Options\n\n+ `-X, --xml` Print as XML\n+ `-H, --html` Print as HTML\n+ `-V` Print more information\n+ `-h, --help` Display help and exit\n+ `--version` Print the version and exit\n```\n\nThe synopsis is expanded to:\n\n```\nprg [-XHVh] [--help] [--version] [--xml|--html] \u003cfile...\u003e\n```\n\n### Compiling Programs\n\nTo compile the markdown document to a JSON program descriptor run:\n\n```shell\nmkcli -t json program.md\n```\n\nNow you have a JSON document that describes your program commands and options.\n\n### Creating Documentation\n\nOnce you have defined the program you will want to generate a man page and some help text.\n\nTo create the help text run:\n\n```shell\nmkcli -t help program.md\n```\n\nFor a man page run:\n\n```shell\nmkcli -t man program.md\n```\n\n#### Help Styles\n\nThe default column help style (`col`) should suit most purposes however the other styles can be useful. The `list` style renders a list of the commands and options which is designed for when you have very long argument names or a few arguments that require long descriptions.\n\nThe `cmd` style is a list of command names (options are not printed) designed to be used when a program has lots of commands and a command is required. Typically the program would show this help page when no command was specified to indicate to the user a command is required.\n\nSometimes you may want very minimal help output that just includes the usage synopsis in which case use the `usage` style.\n\n#### Help Sections\n\nSometimes when creating help files you may want to include a section from the manual, possibly you want to include an *Environment* section to show the environment variables your program recognises.\n\nPass regular expression patterns using the `--section` option and if they match a section heading the section will be included in the help after the commands and options.\n\nTo include an *Environment* section you could use:\n\n```shell\nmkcli -t help -S env program.md\n```\n\nTo include the *Environment* and *Bugs* sections you could use:\n\n```shell\nmkcli -t help -S env -S bug program.md\n```\n\nOr if you prefer:\n\n```shell\nmkcli -t help -S '(env|bug)' program.md\n```\n\nSee the [help](#help) for more options available when creating help and man pages.\n\n### Completion\n\nCompletion scripts are currently available for zsh. To install a completion script for a program copy the script to a directory in `$fpath` or modify `~/.zshrc` to autoload the directory containing the completion script:\n\n```zsh\nfpath=(/path/to/completion $fpath)\n```\n\nA full working completion example is the [notes](https://github.com/mkdoc/mkcli/blob/master/test/fixtures/completion) test fixture.\n\nSometimes you may wish to reload a completion for testing purposes:\n\n```zsh\nunfunction _notes \u0026\u0026 autoload -U _notes\n```\n\n#### Actions\n\nSome option value specifications map to zsh completion functions:\n\n* user: `:user:_users`\n* group: `:group:_groups`\n* host: `:host:_hosts`\n* domain: `:domain:_domains`\n* file: `:file:_files`\n* dir: `:directory:_directories`\n* url: `:url:_urls`\n\nSuch that an option specification such as:\n\n```markdown\n+ `-i, --input [file...]` Input files\n+ `-o, --output \u003cdir\u003e` Output directory\n```\n\nWill result in the `_files` completion function being called to complete file paths for the `--input` option and the `_directories` function for the `--output` option. Note that the ellipsis (...) multiple flag is respected so `--input` will be completed multiple times whilst `--output` will only complete once.\n\nFor options that specify a list of types the `_values` completion function is called.\n\n```markdown\n+ `-t, --type=[TYPE] {json|yaml}` Output type\n```\n\nResults in automatic completion for the `--type` option to one of `json` or `yaml`.\n\nActions are enclosed in double quotes (\") so you may use single quotes and paired double quotes but not a single double quote which will generate an `unmatched \"` zsh error.\n\n#### Synopsis Completion\n\nThe program synopsis section is inspected and will use completion functions when a match is available, so a synopsis such as:\n\n```markdown\n[options] [files...]\n```\n\nWill result in the _files completion function called, see above for the list of matches and completion functions.\n\nSometimes you may need to create a custom completion list; you can set the info string of fenced code blocks in the synopsis section to inject scripts. The value may be either `zsh-locals` to inject code into the beginning of the body of the generated completion function and `zsh` to add to the list of completion actions.\n\nA real-world example is [mk](https://github.com/mkdoc/mkdoc#mk) ([program definition](https://raw.githubusercontent.com/mkdoc/mkdoc/master/doc/cli/mk.md) and [compiled completion script](https://github.com/mkdoc/mkdoc/blob/master/doc/zsh/_mk)) which completes on the available task names.\n\n#### Specification Completion\n\nYou may wish to change the zsh action taken per option, this can be done by appending a colon and the zsh action to an option specification:\n\n```markdown\n+ `-p, --package=[FILE] :file:_files -g '+.json'` Package descriptor\n```\n\nWhich will complete files with a `.json` extension for the `--package` option.\n\n#### Command Completion\n\nCommands are recursively added to the completion script; they are completed using the following rules:\n\n* Required commands (`\u003ccommand\u003e` in the synopsis) will not list options by default.\n* Command options inherit from the global options.\n* Command options cascade to child options.\n* Rest pattern matches (`*: :file:_files` for example) are respected.\n\nIt is recommended you use a program synopsis with the command first:\n\n```markdown\n# Synopsis\n\n    \u003ccommand\u003e [options] [files...] \n```\n\nOr if the command is not required:\n\n```markdown\n# Synopsis\n\n    [command] [options] [files...] \n```\n\nWhich is because command completion is terminated when an option is intermingled with the command hierarchy. Consider a program that has the command structure `notes \u003e list \u003e bug|todo|feature` if you present a command line such as:\n\n```shell\nnotes list --private\n```\n\nCompletion will no longer be attempted on the `list` sub-commands. To put it another way *commands must be consecutive* for command completion to occur.\n\n## Help\n\n```\nUsage: mkcli [-frRCHFNPh] [--full] [--recursive] [--raw-synopsis] [--colon]\n             [--header] [--footer] [--newline] [--preserve] [--help]\n             [--version] [--package=\u003cfile\u003e] [--type=\u003ctype\u003e] [--style=\u003cval\u003e]\n             [--cols=\u003cnum\u003e] [--split=\u003cnum\u003e] [--desc=\u003cnum\u003e] [--indent=\u003cnum\u003e]\n             [--align=\u003ctype\u003e] [--usage=\u003cval\u003e] [--section=\u003cptn...\u003e]\n             [--json=\u003cdir\u003e] [--text=\u003cdir\u003e] [--man=\u003cdir\u003e] [--zsh=\u003cdir\u003e]\n             [--output=\u003cdir\u003e] [files...]\n\n  Compiles markdown cli definitions.\n\nOptions\n  -p, --package=[FILE]    Use package descriptor\n  -t, --type=[TYPE]       Output renderer type (json|help|man)\n  -y, --style=[VAL]       Help output style (col|list|cmd|usage)\n  -c, --cols=[NUM]        Wrap help output at NUM (default: 80)\n  -s, --split=[NUM]       Split help columns at NUM (default: 26)\n  -d, --desc=[NUM]        Number of description paragraphs for help output\n  -i, --indent=[NUM]      Number of spaces for help indentation (default: 2)\n  -a, --align=[TYPE]      Alignment of first help column (left|right)\n  -u, --usage=[VAL]       Set usage message for help synopsis (default: Usage:)\n  -f, --full              Do not compact compiled descriptor\n  -r, --recursive         Recursively load command definitions\n  -R, --raw-synopsis      Do not expand synopsis\n  -C, --colon             Append a colon to headings in help output\n  -S, --section=[PTN...]  Include sections matching patterns in help output\n  -H, --header            Include default header in help output\n  -F, --footer            Include default footer in help output\n  -N, --newline           Print leading newline when no header\n  -P, --preserve          Do not upper case headings in man output\n  -J, --json=[DIR]        Set output directory for json files\n  -T, --text=[DIR]        Set output directory for help text files\n  -M, --man=[DIR]         Set output directory for man pages\n  -Z, --zsh=[DIR]         Set output directory for zsh completion\n  -o, --output=[DIR]      Set output directory for all types\n  -h, --help              Display help and exit\n  --version               Print the version and exit\n\nmkcli@1.0.32 https://github.com/mkdoc/mkcli\n```\n\n## API\n\n### src\n\n```javascript\nsrc([opts])\n```\n\nGets a source parser stream that transforms the incoming tree nodes into\nparser state information.\n\nReturns a parser stream.\n\n* `opts` Object parser options.\n\n### compiler\n\n```javascript\ncompiler([opts])\n```\n\nGets a compiler stream that transforms the parser state information to\na program definition.\n\nReturns a compiler stream.\n\n* `opts` Object compiler options.\n\n### dest\n\n```javascript\ndest([opts])\n```\n\nGets a destination renderer stream.\n\nWhen no type is specified the JSON renderer is assumed.\n\nReturns a renderer stream of the specified type.\n\n* `opts` Object renderer options.\n\n#### Options\n\n* `type` String=json the renderer type.\n\n### load\n\n```javascript\nload(def[, opts])\n```\n\nLoad a program definition into a new program assigning the definition\nproperties to the program.\n\nProperties are passed by reference so if you modify the definition the\nprogram is also modified.\n\nReturns a new program.\n\n* `def` Object the program definition.\n* `opts` Object program options.\n\n### run\n\n```javascript\nrun(src, argv[, runtime], cb)\n```\n\nLoad a program definition into a new program assigning the definition\nproperties to the program.\n\nProperties are passed by reference so if you modify the definition the\nprogram is also modified.\n\nThe callback function signature is `function(err, req)` where `req` is a\nrequest object that contains state information for program execution.\n\nPlugins may decorate the request object with pertinent information that\ndoes not affect the `target` object that receives the parsed arguments.\n\nReturns a new program.\n\n* `src` Object the source program or definition.\n* `argv` Array the program arguments.\n* `runtime` Object runtime configuration.\n* `cb` Function callback function.\n\n## License\n\nMIT\n\n---\n\nCreated by [mkdoc](https://github.com/mkdoc/mkdoc) on April 26, 2017\n\n[mkdoc]: https://github.com/mkdoc/mkdoc\n[mkast]: https://github.com/mkdoc/mkast\n[through]: https://github.com/tmpfs/through3\n[commonmark]: http://commonmark.org\n[jshint]: http://jshint.com\n[jscs]: http://jscs.info\n\n","funding_links":[],"categories":["Uncategorized","The list"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkdoc%2Fmkcli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkdoc%2Fmkcli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkdoc%2Fmkcli/lists"}