#prompt #read-line #ask #cli #questions

asky

Libray to create good looking prompts in the terminal

2 releases

0.1.1 Apr 5, 2023
0.1.0 Apr 5, 2023

#769 in Command-line interface


Used in 2 crates

MIT license

315KB
2K SLoC

Asky

Ansi + ask + yes = Asky

Good looking prompts for the terminal.

Usage

First of all, this is a library, so you need to add this to your project

cargo add asky

Then, you can see the documentation.

Demos

Confirm

Confirm prompt gif demo

Code:
use asky::Confirm;

fn main() -> std::io::Result<()> {
    if Confirm::new("Do you like coffe?").prompt()? {
        println!("Great, me too!");
    }

    // ...

    Ok(())
}

Toggle

Toggle prompt gif demo

Code:
use asky::Toggle;

fn main() -> std::io::Result<()> {
    let tabs = Toggle::new("Which is better?", ["Tabs", "Spaces"]).prompt()?;
    println!("Great choice");

    // ...

    Ok(())
}

Text

Text prompt gif demo

Code:
use asky::Text;

fn main() -> std::io::Result<()> {
    let color = Text::new("What's your favorite color?").prompt()?;
    println!("{color} is a beautiful color");

    // ...

    Ok(())
}

Number

Number prompt gif demo

Code:
use asky::Number;

fn main() -> std::io::Result<()> {
    let age:  = Number::<u8>::new("How old are you?").prompt()?;

    if let Ok(age) = Number::<u8>::new("How old are you?").prompt()? {
        if age <= 60 {
            println!("Pretty young");
        }
    }

    // ...

    Ok(())
}

Password

Password prompt gif demo

Code:
use asky::Password;

fn main() -> std::io::Result<()> {
    let password = Password::new("What's your IG password?").prompt()?;

    if password.len() >= 1 {
        println!("Ultra secure!");
    }

    // ...

    Ok(())
}

Select

Select prompt gif demo

Code:
use asky::Select;

fn main() -> std::io::Result<()> {
    let choice = Select::new("Choose number", 1..=30).prompt()?;
    println!("{choice}, Interesting choice");

    // ...

    Ok(())
}

MultiSelect

Multi select prompt gif demo

Code:
use asky::MultiSelect;

fn main() -> std::io::Result<()> {
    let opts = ["Dog", "Cat", "Fish", "Bird", "Other"];
    let choices = MultiSelect::new("What kind of pets do you have?", opts).prompt()?;

    if choices.len() > 2 {
        println!("So you love pets");
    }

    // ...

    Ok(())
}

Mentions

Inspired by:

  • Prompts - Lightweight, beautiful and user-friendly interactive prompts
  • Astro - All-in-one web framework with a beautiful command line tool
  • Gum - A tool for glamorous shell scripts

Alternatives:

  • Dialoguer - A command line prompting library.
  • Inquire - A library for building interactive prompts on terminals.
  • Requestty - An easy-to-use collection of interactive cli prompts.

License: MIT

Dependencies

~2–12MB
~76K SLoC