NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2182 most downloaded on crates.io
inquire is a library for building interactive prompts on terminals
Last release 7 months ago
24 Feb 2026
Ships unpredictably
gaps range from 1 weeks to 1.4 years
Nearly every release is documented
notes for 29 of 31 stable releases
5 versions withdrawn
withdrawn after publishing
5 years old
40 releases · first in 2021
One column per quarter.
Experimental: Added multi-line input support for Password and Text prompts via Alt+Enter . Enable the experimental-multiline-input feature to use it.
Experimental: Added multi-line input support for Password and Text prompts via Alt+Enter. Enable the experimental-multiline-input feature to use it. It is only supported when using crossterm (default) as the terminal back-end. Thanks @domenkozar!
Added new_line_prefix option to RenderConfig , allowing a styled prefix to be displayed at the beginning of every new line.
new_line_prefix option to RenderConfig, allowing a styled prefix to be displayed at the beginning of every new line.answer_from_new_line option to RenderConfig, allowing the submitted answer to be rendered on a new line below the prompt.unhighlighted_option_prefix option to RenderConfig, allowing customization of the prefix for non-highlighted options in Select and MultiSelect prompts.Thanks @frol for the contribution!
Bumped MSRV from 1.80 -> 1.82 due to new requirements of dependencies.
Select (thanks @devjgm!)Adds Selectable derive macro for enums! You can now easily create enum-based prompts (e.g. menus) by using the Selectable derive macro on your enums.
See the example for more details. Thank you @TheBearodactyl for the contribution!
unicode-width to 0.2.crossterm to 0.29.termion to 4.0.console to 0.16.Select (thanks @devjgm!)Adds Selectable derive macro for enums! You can now easily create enum-based prompts (e.g. menus) by using the Selectable derive macro on your enums.
Adds Selectable derive macro for enums! You can now easily create enum-based prompts (e.g. menus) by using the Selectable derive macro on your enums.
See the example for more details. Thank you @TheBearodactyl for the contribution!
unicode-width to 0.2.crossterm to 0.29.termion to 4.0.console to 0.16.Adds Selectable derive macro for enums! You can now easily create enum-based prompts (e.g. menus) by using the Selectable derive macro on your enums.
Adds Selectable derive macro for enums! You can now easily create enum-based prompts (e.g. menus) by using the Selectable derive macro on your enums.
See the example for more details. Thank you @TheBearodactyl for the contribution!
unicode-width to 0.2.crossterm to 0.29.termion to 4.0.console to 0.16.Improve end user experience when prompting for input without a message.
raw_prompt_skippable for Select.crossterm to 0.28.1.once_cell to stdlib.fxhash to stdlib.Thanks to all the users and contributors who helped improve this library with their feedback and contributions!
@basbossink-ds, @CraftSpider, @ereOn, @istudyatuni, @jarjk, @jonassmedegaard, @Maffey, @moritz-hoelting, @phostann, @sebhoss, @stormshield-guillaumed, @theRookieCoder, @tusharmath
Improve end user experience when prompting for input without a message.
raw_prompt_skippable for Select.crossterm to 0.28.1.once_cell to stdlib.fxhash to stdlib.Thanks to all the users and contributors who helped improve this library with their feedback and contributions!
@basbossink-ds, @CraftSpider, @ereOn, @istudyatuni, @jarjk, @jonassmedegaard, @Maffey, @moritz-hoelting, @phostann, @stormshield-guillaumed, @theRookieCoder, @tusharmath
Fix user-provided ANSI escape codes from being removed when rendering.
keep_filter option in MultiSelect prompts:
keep_filter == false.h and l bindings when vim_mode is enabled on MultiSelect prompts, clearing or selecting all options respectively. Thanks @afh for the PR!Option<i64>, making it possible to order/rank the list of options. #176None: Will not be displayed in the list of options.Some(score): score determines the order of options, higher score, higher on the list of options.Hidden display mode, matching the user expectation of having to write the password from scratch again. Thanks to @CM-IV for the questions on #149!termion crate from v1.5 to v2.0.bitflags from v1 to v2, which affects the Attributes and KeyModifiers crates. If you use any of bitflag's methods directly, you might be affected, refer to the bitflags changelog for more information.thiserror dependency in favor of implementing InquireError by hand. (@bheylin #146)lazy_static with once_cell as once_cell::sync::Lazy is being standardized and lazy_static is not actively maintained anymore. (@bheylin #158)fuzzy-matcher as a dependency for fuzzy filtering in Select and MultiSelect prompts #176Fix unexpected behaviors of keep_filter option in MultiSelect prompts:
keep_filter option in MultiSelect prompts:
keep_filter == false.h and l bindings when vim_mode is enabled on MultiSelect prompts, clearing or selecting all options respectively. Thanks @afh for the PR!Option<i64>, making it possible to order/rank the list of options. #176None: Will not be displayed in the list of options.Some(score): score determines the order of options, higher score, higher on the list of options.Hidden display mode, matching the user expectation of having to write the password from scratch again. Thanks to @CM-IV for the questions on #149!termion crate from v1.5 to v2.0.bitflags from v1 to v2, which affects the Attributes and KeyModifiers crates. If you use any of bitflag's methods directly, you might be affected, refer to the bitflags changelog for more information.thiserror dependency in favor of implementing InquireError by hand. (@bheylin #146)lazy_static with once_cell as once_cell::sync::Lazy is being standardized and lazy_static is not actively maintained anymore. (@bheylin #158)fuzzy-matcher as a dependency for fuzzy filtering in Select and MultiSelect prompts #176Fix cursor occasionally blinking in unexpected places.
h and l bindings when vim_mode is enabled on MultiSelect prompts, clearing or selecting all options respectively. Thanks @afh for the PR!Option<i64>, making it possible to order/rank the list of options. #176None: Will not be displayed in the list of options.Some(score): score determines the order of options, higher score, higher on the list of options.Hidden display mode, matching the user expectation of having to write the password from scratch again. Thanks to @CM-IV for the questions on #149!termion crate from v1.5 to v2.0.bitflags from v1 to v2, which affects the Attributes and KeyModifiers crates. If you use any of bitflag's methods directly, you might be affected, refer to the bitflags changelog for more information.thiserror dependency in favor of implementing InquireError by hand. (@bheylin #146)lazy_static with once_cell as once_cell::sync::Lazy is being standardized and lazy_static is not actively maintained anymore. (@bheylin #158)fuzzy-matcher as a dependency for fuzzy filtering in Select and MultiSelect prompts #176Pressing Ctrl+D now cancels the prompt. Thanks @mikecvet for the PR!
h and l bindings when vim_mode is enabled on MultiSelect prompts, clearing or selecting all options respectively. Thanks @afh for the PR!Fix render issue #228 when using console crate as the terminal backend. Thanks @maospr for reporting.
console crate as the terminal backend. Thanks @maospr for reporting.The Select and Multiselect Filter now scores input and is now expected to return an Option , making it possible to order/rank the list of options. #17
Option<i64>, making it possible to order/rank the list of options. #176
None: Will not be displayed in the list of options.
Some(score): score determines the order of options, higher score, higher on the list of options.Hidden display mode, matching the user expectation of having to write the password from scratch again. Thanks to @CM-IV for the questions on #149!termion crate from v1.5 to v2.0.bitflags from v1 to v2, which affects the Attributes and KeyModifiers crates. If you use any of bitflag's methods directly, you might be affected, refer to the bitflags changelog for more information.thiserror dependency in favor of implementing InquireError by hand. #146lazy_static with once_cell as once_cell::sync::Lazy is being standardized and lazy_static is not actively maintained anymore.fuzzy-matcher as an optional dependency for fuzzy filtering in Select and MultiSelect prompts #176Allow usage of ANSI escape codes in prompts. #136. Thanks to @JimLynchCodes for reporting on #135.
Fix incorrect highlighting of lists when filtered. #110. Thanks to @prime31 for reporting on #106.
Selected option can now be styled independently of other options through RenderConfig::with_selected_option().
RenderConfig::with_selected_option().stderr instead of stdout #89.Addition of with_starting_date(NaiveDate) to DateSelect prompts.
with_starting_date(NaiveDate) to DateSelect prompts.
with_default(NaiveDate), but with a more descriptive name.Fixed typo in the default error message when a password confirmation does not match. Thanks to @woodruffw for the PR! #79
Removed use of bool::then_some feature to keep minimum supported Rust version on 1.56.0.
bool::then_some feature to keep minimum supported Rust version on 1.56.0.`Password` prompts now enable a secondary confirmation prompt by default:
Password prompts now enable a secondary confirmation prompt by default:
without_confirmation() method into the Password builder chain. Thanks to @hampuslidin for the PR! #73Multiple changes to the `CustomType` prompt:
Multiple changes to the CustomType prompt:
New autocompletion mechanism for Text prompts
with_suggester calls to with_autocomplete.rgb(r: u8, g: u8, b: u8) to create a Color struct from RGB components. Thanks to @tpoliaw for the PR! #73Features #1 to #4 are all breaking changes and could break the compilation of your program.
Features #1 to #4 are all breaking changes and could break the compilation of your program.
Fix #2 represents a change in usability and might be an unexpected behavior.
Completer for Text prompts, allowing users to auto-update their text input by pressing tab and not having to navigate through a suggestion list.
It takes the current input and return an optional suggestion. If any, the prompter will replace the current input with the received suggestion. Completer is an alias for &'a dyn Fn(&str) -> Result<Option<String>, CustomUserError>.
The auto-completion API will be revamped for v0.4.0, watch #69.
Added answered_prompt_prefix configuration on RenderConfig, allowing users to set custom prefixes (e.g. a check mark) to prompts that have already been answered.
Additionally, prompts that have been answered are now differed by a > prefix instead of the usual ?.
Cheers to @href for the suggestion! #44
Input validation, suggestions and completions are now fallible operations.
The return type of validators has been changed to Result<Validation, CustomUserError>. This means that validating the input can now be a fallible operation. The docs contain more thorough explanations and full-featured examples.
Validation enum, which can be either Valid or Invalid(ErrorMessage).CustomUserError type, which is an alias for Box<dyn std::error::Error + Send + Sync + 'static>.The return type of suggesters has also been changed to allow fallible executions. The return type in successful executions continues to be Vec<String>, while CustomUserError is used with errors.
All builtin validators have been turned into traits, with structs instead of macros as implementations.
This change makes it easier to share the validators throughout the code, especially if these carry their own owned data. For example, consider a validator that uses a compiled regular expression to verify the input. That validator can now be built as a new-type struct that encapsulates the regex.
Closures can still be used as before, but may not require to pass the argument type explicitly. The previous macros are now simply shorthands for the constructors of builtin validators.
struct.Text documentation.Text prompt.
Text prompt was created with a pre-existing input value or after the user entered any input.crossterm and console to their latest versions.Nothing published for this version
Nothing published for this version
Add initial_value property to Text prompts, which sets an initial value for the prompt's text input. Huge thanks to @irevoire for the suggestion and i
Add inquire::set_global_render_config method to set a global RenderConfig object to be used as the default one for all prompts created after the call.
inquire::set_global_render_config method to set a global RenderConfig object to be used as the default one for all prompts created after the call.inquire prompts.RenderConfig was made Copy-able and prompts now contain a RenderConfig field where it previously held a &'a RenderConfig. Consequently, with_render_config() methods now accept a RenderConfig argument instead of &'a RenderConfig.This is a bump to v0.1.0 as per @jam1garner's advice on the Virtual RustConf Discord server.
No changes in this version.
This is a bump to v0.1.0 as per @jam1garner's advice on the Virtual RustConf Discord server.
The library is already featureful enough to warrant a higher version number, bumping us to a minor release while we are still on our path to stabilization.
Add support to use console or termion as the library to handle terminals while keeping crossterm as the default choice.
Editor prompt.console or termion as the library to handle terminals while keeping crossterm as the default choice.ESC is now a different behavior than interrupting the prompt by pressing Ctrl+C.
<canceled> text, which is customizable via RenderConfig, and the prompt method returns Err(InquireError::OperationCanceled).Err(InquireError::OperationInterrupted).prompt_skippable method for all prompts.
Err(InquireError::OperationCanceled), but Ok(None). Meanwhile, if the user does submit an answer, the method wraps the return type with Some.use inquire::validator::InquireLength when using one of the length-related built-in validators.Color enum used for render configuration has been improved.builtin_validators feature, making it now compile when the feature is not turned on.Use native terminal cursors in text inputs by default.
None. The default behavior is still a custom style sheet which highlights the two columns pertaining to a date, instead of using a native cursor which can only highlight one column.ListOption struct were relative to the output instead of the original input vector. #31InquireError::NotTTY. #28Improve docs on the differences between raw_prompt and prompt on Select and MultiSelect prompts.
raw_prompt and prompt on Select and MultiSelect prompts.crossterm dependencyPassword display toggle: By enabling this option in Password prompts via with_display_toggle_enabled(), the application user can choose to display the
Password prompts via with_display_toggle_enabled(), the application user can choose to display the current text input for the password by pressing Ctrl+R, and hide it back by pressing the hotkey again. #18Password prompts now support another render mode of the text input. Before, the only behavior was to not render anything about the current password input. Now, if the developer so chooses, they can activate the Masked mode where the current text input will be masked with special characters such as '*'. #19Select, MultiSelect and Text (suggestions list) prompts, where they go a page up or down in the current list. Also, for Select and MultiSelect prompts, the Home and End keys were mapped to go to the start or end of the list, respectively. #17Select, MultiSelect and Text prompts, indicate whether there are more options other than the ones currently displayed. Little arrows are displayed at the top or bottom of the list indicating to which positions the user can scroll. #8Select and MultiSelect prompts accept any type of options as input, allowing developers to pass a vector of owned objects and get back the full object picked by the user. #9\n on strings such as prompt messages, the library previously did not render it very well and did not account for it when cleaning the current prompt. This is fixed and you are free to create multi-line prompts! #15Add possibility to set custom rendering config, allowing users to set:
Nothing published for this version
Nothing published for this version
Add [previously non-existing] documentation.
All function arguments now accept closures by having their type changed to &dyn Fn.
&dyn Fn.Add a custom error enum InquireError, improving error handling for library users.
InquireError, improving error handling for library users.Add custom parser option to Confirm prompt
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →