# minish

> Simple shell-like command-line interface

Latest version **0.5.4** (published 2015-11-23) · MIT license · 0 weekly downloads

## Install

```sh
npm install minish
pnpm add minish
yarn add minish
bun add minish
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.5.4 |
| Published | 2015-11-23 |
| First published | 2015-09-15 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >=0.10.0 |
| Dependencies | 2 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 3 |
| Author | Lukas Pokorny |
| Maintainers | lukaaash |
| Keywords | command line, shell, cli |

## Links

- npm: https://www.npmjs.com/package/minish
- Repository: https://github.com/lukaaash/minish
- Homepage: https://github.com/lukaaash/minish#readme
- Issues: https://github.com/lukaaash/minish/issues
- npm.io page: https://npm.io/package/minish

## Dependencies (2)

- [argler](https://npm.io/package/argler.md) ^1.0.1
- [minimist](https://npm.io/package/minimist.md) ^1.2.0

## Alternatives

- [@salesforce/cli](https://npm.io/package/@salesforce/cli.md) — 389.7K weekly downloads
- [@mintlify/cli](https://npm.io/package/@mintlify/cli.md) — 208.9K weekly downloads
- [@grafana/e2e-selectors](https://npm.io/package/@grafana/e2e-selectors.md) — 128.7K weekly downloads
- [mintlify](https://npm.io/package/mintlify.md) — 112.0K weekly downloads
- [@intlayer/cli](https://npm.io/package/@intlayer/cli.md) — 22.8K weekly downloads

## Recent versions

- 0.5.4 (latest) — 2015-11-23
- 0.5.3 — 2015-10-11
- 0.5.2 — 2015-10-06
- 0.5.1 — 2015-10-06
- 0.5.0 — 2015-09-15

## README

minish
======

Minish makes it easy to write applications that interact with a user using a simple shell-like command-line interface.

## Installing

```shell
$ npm install --save minish
```

## Usage

Starting an interactive command-line session is very simple. Just *require* minish, declare some commands and start a command prompt:

```javascript
var shell = require('minish');

// 'hello' command
shell.command("hello", function (context) {

    // display something
	shell.write("Hello world!");

	// make sure to end each command properly
    context.end();
});

shell.command("exit", function (context) {

    // exit the application
    shell.exit();
});

// start prompting for commands
shell.prompt();
```

Commands accept arguments and options. Both of these get parsed with [minimist](https://www.npmjs.com/package/minimist) and are passed to the callback with *command context* object:

```javascript
shell.command("echo", function (context) {
    // retrieve command arguments and options (parsed with minimist)
    var args = context.args;
    var opts = context.options;

    // show arguments
    shell.write(args, opts);

    // end the command
    context.end();
});
```

Minish makes it simple to ask for input. It can also ask for passwords discretely:

```javascript
// ask for a password without revealing its characters:
shell.password("Type a secret password:", function (password) {

    // ask whether to show the password
    shell.question("Type 'show' to display the password:", function (reply) {

        // show the password if needed
        if (reply === "show") shell.write("The password was:", password);
    });
});
```

Let's try something more complicated:

```javascript
var shell = require('minish');

// 'hello' command
shell.command("hello", function (context) {
    // write to shell's output (the console by default)
    shell.write("Hello world!");

    // end the command
    context.end();
});

// 'echo' command
shell.command("echo", "Shows arguments and options", function (context) {
    // retrieve command arguments and options (parsed with minimist)
    var args = context.args;
    var opts = context.options;

    // show arguments
    shell.write(args, opts);

    // end the command
    context.end();
});

// 'ask' command
shell.command("ask", "Asks a question", function (context) {

    // ask a question and await answer
    shell.question("What's your name?", function (reply) {

        // show reply
        shell.write("Your name is:", reply);

        context.end();
    });
});

// 'passwd' command
shell.command("passwd", "Asks for a password without revealing its characters", function (context) {

    // aks for a password
    shell.password("Type a secret password:", function (password) {

        // ask whether to show the password
        shell.question("Type 'show' to display the password:", function (reply) {

            // show the password if needed
            if (reply === "show") shell.write("The password was:", password);

            context.end();
        });
    });
});

// 'quit' and 'exit' commands
shell.command(["quit", "exit"], "Exits the example", function (context) {
    shell.write("Ending...");
    shell.exit();
});

// override default 'command not supported' handler
shell.command("_", function (context) {
    context.fail("Command '" + context.command + "' not supported");
});

// display a welcome message
shell.write("Welcome to minish.");
shell.write("Type 'help' to see a list of available commands.");

// start prompting for commands
shell.prompt("> ");
```

Check out [minish TypeScript typings](https://github.com/lukaaash/minish/raw/master/typings/minish/minish.d.ts) for a quick overview of the rest of available API.

---
_Source: https://npm.io/package/minish · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
