[![Latest Version]][crates.io] ![Build status] ![Supported platforms] ![License]
[crates.io]: https://crates.io/crates/inquire
[latest version]: https://img.shields.io/crates/v/inquire.svg
[build status]: https://github.com/mikaelmello/inquire/actions/workflows/build.yml/badge.svg
[supported platforms]: https://img.shields.io/badge/platform-linux%20%7C%20macos%20%7C%20windows-success
[license]: https://img.shields.io/crates/l/inquire.svg
---
inquire
is a library for building interactive prompts on terminals.
It provides several different prompts in order to interactively ask the user for information via the CLI. With `inquire`, you can use:
- [`Text`] to get text input from the user, with _built-in autocompletion support_;
- [`Editor`]\* to get longer text inputs by opening a text editor for the user;
- [`DateSelect`]\* to get a date input from the user, selected via an _interactive calendar_;
- [`Select`] to ask the user to select one option from a given list;
- [`MultiSelect`] to ask the user to select an arbitrary number of options from a given list;
- [`Confirm`] for simple yes/no confirmation prompts;
- [`CustomType`] for text prompts that you would like to parse to a custom type, such as numbers or UUIDs;
- [`Password`] for secretive text prompts.
---
## Demo
![Animated GIF making a demonstration of a questionnaire created with this library. You can replay this recording in your terminal with asciinema play command - asciinema play ../assets/expense_tracker.cast](../assets/expense_tracker.gif)
[Source](./examples/expense_tracker.rs)
## Features
- Cross-platform, supporting UNIX and Windows terminals (thanks to [crossterm](https://crates.io/crates/crossterm));
- Several kinds of prompts to suit your needs;
- Support for fine-grained configuration for each prompt type, allowing you to customize:
- Default values;
- Input validators and formatters;
- Help messages;
- Autocompletion for [`Text`] prompts;
- Custom list filters for Select and [`MultiSelect`] prompts;
- Custom parsers for [`Confirm`] and [`CustomType`] prompts;
- Custom extensions for files created by [`Editor`] prompts;
- and many others!
## Usage
Put this line in your `Cargo.toml`, under `[dependencies]`.
```
inquire = "0.7.5"
```
\* This prompt type is gated under a feature flag, e.g.:
```
inquire = { version = "0.7.5", features = ["date", "editor"] }
```
[`text`]: https://docs.rs/inquire/*/inquire/prompts/text/struct.Text.html
[`dateselect`]: https://docs.rs/inquire/*/inquire/prompts/dateselect/struct.DateSelect.html
[`select`]: https://docs.rs/inquire/*/inquire/prompts/select/struct.Select.html
[`multiselect`]: https://docs.rs/inquire/*/inquire/prompts/multiselect/struct.MultiSelect.html
[`confirm`]: https://docs.rs/inquire/*/inquire/prompts/confirm/struct.Confirm.html
[`editor`]: https://docs.rs/inquire/*/inquire/prompts/editor/struct.Editor.html
[`customtype`]: https://docs.rs/inquire/*/inquire/struct.CustomType.html
[`password`]: https://docs.rs/inquire/*/inquire/prompts/password/struct.Password.html