A cross-platform, native GUI input box for Rust. Yes, finally.
Picture this: you're writing a Rust CLI tool and you just want to pop up a little dialog that says "hey, what's your name?" and take whatever the user types. Simple, right?
So you look at the ecosystem.
rfd: Rusty File Dialogs! Cross-platform! Async! Beautiful! ...opens files. Not text. Files.native-dialog: Again, no input box, just message boxes and file pickers.tinyfiledialogs:input_boxlooks promising! ...but why does my input box turn into a password input whendefaultis empty (Some(""))? No multiline, no custom labels, no control over backends... Oh and it's a C binding.dialog: Finally, an input box! ...but not for Windows or macOS. It fully depends on tools likezenity,kdialogordialog.
You stare into the void. The void stares back. You write the dialog in HTML/JS because at least Electron works on all platforms.
Not anymore.
inputbox is a minimal, cross-platform Rust library that shows a native GUI
input dialog and returns what the user typed. It uses whatever is available on
the system. Should work™ most of the time.
[dependencies]
inputbox = "0.1"use inputbox::InputBox;
fn main() {
let result = InputBox::new()
.title("Greetings")
.prompt("What's your name?")
.run();
match result {
Some(name) => println!("Hello, {name}!"),
None => println!("Fine, be that way."),
}
}- Multiple input modes — text, password, or multiline
- Highly customizable — title, prompt, button labels, and more
- Works on most platforms — Windows, macOS, and Linux (with
yadorzenity) - Pluggable backends — use a specific backend or let the library pick
| Backend | Platform | How it works |
|---|---|---|
PSScript |
Windows | PowerShell + WinForms, no extra install needed |
JXAScript |
macOS | osascript JXA, built into the OS |
Yad |
Linux | yad — preferred if available |
Zenity |
Linux | zenity — fallback on GNOME systems |
The run() method automatically picks the best backend for the current platform.
You can also specify one explicitly via run_with().
MIT