1 unstable release

0.1.0 Aug 6, 2021

#572 in GUI

MIT license

94KB
2.5K SLoC

img

version Documentation dependency status

Rusty file dialogs for Windows, Linux (GTK), MacOS And WASM32.

Why RFD?

  • It uses 100% native API on all platforms, it does not spawn any processes in the background.
  • It supports async/await syntax
  • And if one day you decide to port your program to browser, WASM support is there for you!

Example

// Sync Dialog
let files = FileDialog::new()
    .add_filter("text", &["txt", "rs"])
    .add_filter("rust", &["rs", "toml"])
    .set_directory("/")
    .pick_file();

// Async Dialog
let file = AsyncFileDialog::new()
    .add_filter("text", &["txt", "rs"])
    .add_filter("rust", &["rs", "toml"])
    .set_directory("/")
    .pick_file()
    .await;

let data = file.read().await;

State

GitHub Workflow Status

API Stability
🚧
Feature Linux Windows MacOS [1] Wasm32
SingleFile
MultipleFile
PickFolder
SaveFile
Filters
StartingPath
Async

[1] Macos Sync dialog freezes when used with winit (same way as nfd) Caused by winit #1779

Diference bettwen MacOS Windowed App and MacOS NonWindowed App

  • Macos async dialog requires an started NSApplication instance, so dialog is truly async only when opened in windowed env like winit,SDL2, etc. otherwise it will fallback to sync dialog.
  • It is also recomended to spawn dialogs on main thread, RFD can run dialogs from any thread but it is only posible in windowed app and it adds a lite bit of overhead. So it is recomended to: spawn on main and await in other thread
  • NonWindowed apps will never be able to spawn dialogs from threads diferent than main
  • NonWindowed apps will never be able to spawn async dialogs

rfd-extras

AKA features that are not file related

Feature Linux Windows MacOS Wasm32
MessageDialog
PromptDialog
ColorPicker

Dependencies

~0–3MB
~55K SLoC