# Cliffy > Cliffy is a TypeScript-first, runtime-agnostic CLI toolkit for Deno, > Node.js and Bun. It provides a command framework (subcommands, typed > options/arguments, shell completions, auto-generated help), flag parsing, > interactive prompts, terminal tables, and ANSI/color helpers. - [Introduction](https://cliffy.io/docs/v1.2.1/index.md): Overview of Cliffy and its modules ## Command - [Command](https://cliffy.io/docs/v1.2.1/command/index.md): The command module supports type safe options and arguments, input validation, auto generated help, built-in shell completions, and more. - [Commands](https://cliffy.io/docs/v1.2.1/command/commands.md): The command class is used to create main and sub commands. All methods from the command class are chainable and return the current command instance.… - [Sub commands](https://cliffy.io/docs/v1.2.1/command/sub_commands.md): Sub commands can be added using the .command() method. The first argument specifies the name and optionally arguments for your sub command. The… - [Options](https://cliffy.io/docs/v1.2.1/command/options.md): Options are defined with the .option() method and can be accessed as properties on the options object which is passed to the .action() handler and… - [Types](https://cliffy.io/docs/v1.2.1/command/types.md): Cliffy provides some default types which are used to validate user input, providing shell completions and adding info to the help text. It is also… - [Environment variables](https://cliffy.io/docs/v1.2.1/command/environment_variables.md): To allow deno to access environment variables the --allow-env= flag is required. If the --allow-env flag is not provided, environment… - [Help](https://cliffy.io/docs/v1.2.1/command/help.md): The help information is auto-generated based on the information you have defined on your commands. The name, version, description, meta information,… - [Shell completions](https://cliffy.io/docs/v1.2.1/command/shell_completions.md): Cliffy supports shell completion out of the box. To enable shell completions it is required to register the completions command. - [Built-in commands](https://cliffy.io/docs/v1.2.1/command/built_in_commands.md): Cliffy provides some predefined commands like help, completions and upgrade. These commands are optional and must be registered manually if you want… - [Error handling](https://cliffy.io/docs/v1.2.1/command/error_handling.md): Cliffy throws a ValidationError for invalid options, arguments and environment variables. ValidationErrors can also be thrown manually. By default,… - [Generics](https://cliffy.io/docs/v1.2.1/command/generics.md): Since v0.21.0, cliffy has strict types by default. All types, option and environment-variable names will be automatically magically inferred 🪄. - [Others](https://cliffy.io/docs/v1.2.1/command/others.md): Cliffy has built-in did-you-mean support to improve the user and developer experience. For example, cliffy prints some suggestions, when the user… ## Flags - [Flags](https://cliffy.io/docs/v1.2.1/flags/index.md): Command line arguments parser with built-in validations. - [Parse options](https://cliffy.io/docs/v1.2.1/flags/parse_options.md): By default the parseFlags method parses all flags and tries to autodetect the type. With the flags option you can specify an Array of flag options.… - [Flag options](https://cliffy.io/docs/v1.2.1/flags/flag_options.md): With the name you can specify the name of the flag. The name is also used as property name for the options object. - [Error handling](https://cliffy.io/docs/v1.2.1/flags/error_handling.md): You can catch validation errors with the ValidationError class. A validation error is thrown when an invalid command is invoked by the user. ## Prompt - [Prompt](https://cliffy.io/docs/v1.2.1/prompt/index.md): Cliffy's prompt module allows you to create simple yet powerful interactive prompts for your command-line applications. - [Types](https://cliffy.io/docs/v1.2.1/prompt/types/index.md): All prompt types have the following base options. - [Input](https://cliffy.io/docs/v1.2.1/prompt/types/input.md): The Input prompt is a simple text input with support for auto suggestions. - [Number](https://cliffy.io/docs/v1.2.1/prompt/types/number.md): The Number prompt is a simple number input with support for auto suggestions. - [Secret](https://cliffy.io/docs/v1.2.1/prompt/types/secret.md): The Secret prompt is a hidden text input which doesn't display the input value. - [Confirm](https://cliffy.io/docs/v1.2.1/prompt/types/confirm.md): The Confirm prompt is a simple yes or no prompt. - [Toggle](https://cliffy.io/docs/v1.2.1/prompt/types/toggle.md): The Toggle prompt is a simple yes or no switch. - [List](https://cliffy.io/docs/v1.2.1/prompt/types/list.md): The List prompt is a text input that lets you input multiple values with support for auto suggestions. - [Select](https://cliffy.io/docs/v1.2.1/prompt/types/select.md): The Select prompt lets you select a option from an options list. - [Checkbox](https://cliffy.io/docs/v1.2.1/prompt/types/checkbox.md): The Checkbox prompt is a multi select prompt. - [Dynamic prompts](https://cliffy.io/docs/v1.2.1/prompt/dynamic_prompts.md): You can dynamically control the flow of the prompt list with the before and after callbacks which work like a middleware function. - [Auto suggestions](https://cliffy.io/docs/v1.2.1/prompt/auto_suggestions.md): You can provide suggestions to the input, number and list prompt to enable tab-completions with the suggestions and/or id option. If an id is… - [OS signals](https://cliffy.io/docs/v1.2.1/prompt/os_signals.md): The cbreak option works currently only on Linux and macOS and is not supported with Bun! ## Keycode - [Keycode](https://cliffy.io/docs/v1.2.1/keycode/index.md): ANSI key code parser. - [Keycode](https://cliffy.io/docs/v1.2.1/keycode/keycode.md): The KeyCode interface represents a parsed ansi sequence: ## Keypress - [Keypress](https://cliffy.io/docs/v1.2.1/keypress/index.md): Keypress module with promise, async iterator and event target API. - [Keypress Event](https://cliffy.io/docs/v1.2.1/keypress/keypress_event.md): The KeyPressEvent represents a keypress event and it inherits most properties from the KeyCode interface. ## Table - [Table](https://cliffy.io/docs/v1.2.1/table/index.md): Fast and customizable table module to render unicode tables on the command line. - [Table options](https://cliffy.io/docs/v1.2.1/table/options.md): To customize the table, the table class provides a few chainable option methods. To see a list of all available options go to the Table API section. - [Columns](https://cliffy.io/docs/v1.2.1/table/columns.md): The Column class is used to set table column options. A Column class can be added to the Table with the .columns() and .column() method. - [Rows and cells](https://cliffy.io/docs/v1.2.1/table/rows_and_cells.md): It is also possible to customize single rows and cells. To do this you can use the Row and Cell class. The Row class is also an Array class like the… ## Ansi - [Ansi](https://cliffy.io/docs/v1.2.1/ansi/index.md): Chainable ansi escape sequences. - [Ansi](https://cliffy.io/docs/v1.2.1/ansi/ansi.md): The ansi module exports an ansi object with chainable methods and properties for generating ansi escape sequence strings. The last property must be… - [Tty](https://cliffy.io/docs/v1.2.1/ansi/tty.md): The tty module exports a tty object which works almost the same way as the ansi module. The only difference is, the tty module writes the ansi escape… - [Colors](https://cliffy.io/docs/v1.2.1/ansi/colors.md): The colors module is a simple and tiny chainable wrapper around @std/fmt/colors module and works similarly to node's chalk module. ## Testing - [Testing](https://cliffy.io/docs/v1.2.1/testing/index.md): Experimental testing utilities for command line applications. - [Snapshot](https://cliffy.io/docs/v1.2.1/testing/snapshot/index.md): The snapshotTest method can be used to test stdin, stdout and stderr of a single test case. It injects data to stdin and snapshots the stdout and… - [Options](https://cliffy.io/docs/v1.2.1/testing/snapshot/options.md): The name of the test. - [Examples](https://cliffy.io/docs/v1.2.1/testing/snapshot/examples.md): You can use the ansi module to generate some control sequences to control a prompt in your test. ## Examples - [ansi.ts](https://cliffy.io/examples/v1.2.1/ansi.ts) - [command.ts](https://cliffy.io/examples/v1.2.1/command.ts) - [flags.ts](https://cliffy.io/examples/v1.2.1/flags.ts) - [keycode.ts](https://cliffy.io/examples/v1.2.1/keycode.ts) - [keypress.ts](https://cliffy.io/examples/v1.2.1/keypress.ts) - [prompt.ts](https://cliffy.io/examples/v1.2.1/prompt.ts) - [table.ts](https://cliffy.io/examples/v1.2.1/table.ts) ## Optional - [llms-full.txt](https://cliffy.io/llms-full.txt): All documentation pages concatenated into a single file