30 releases (9 breaking)

Uses new Rust 2021

0.9.1 Jun 17, 2022
0.8.4 Jun 4, 2022
0.8.1 Mar 5, 2022
0.6.3 Dec 26, 2021
0.0.1 Nov 27, 2020

#1 in #dialog

Download history 5011/week @ 2022-03-11 5596/week @ 2022-03-18 6151/week @ 2022-03-25 6074/week @ 2022-04-01 6178/week @ 2022-04-08 5787/week @ 2022-04-15 5517/week @ 2022-04-22 7253/week @ 2022-04-29 10049/week @ 2022-05-06 8645/week @ 2022-05-13 7749/week @ 2022-05-20 6953/week @ 2022-05-27 8505/week @ 2022-06-03 8739/week @ 2022-06-10 11194/week @ 2022-06-17 7897/week @ 2022-06-24

37,439 downloads per month
Used in 25 crates (23 directly)

MIT license



version Documentation dependency status

Rusty File Dialogs is a cross platform Rust library for using native file open/save dialogs. It provides both asynchronous and synchronous APIs. Supported platforms:

  • Windows
  • macOS
  • Linux & BSDs (GTK3 or XDG Desktop Portal)
  • WASM32 (async only)

Refer to the documentation for more details.

Platform-specific notes


Please refer to Linux & BSD backends for information about the needed dependencies to be able to compile on Linux.


Rusty File Dialogs is a cross platform library for using native file open/save dialogs. It provides both asynchronous and synchronous APIs. Supported platforms:

  • Windows
  • macOS
  • Linux & BSDs (GTK3 or XDG Desktop Portal)
  • WASM32 (async only)



use rfd::FileDialog;

let files = FileDialog::new()
    .add_filter("text", &["txt", "rs"])
    .add_filter("rust", &["rs", "toml"])


use rfd::AsyncFileDialog;

let future = async {
    let file = AsyncFileDialog::new()
        .add_filter("text", &["txt", "rs"])
        .add_filter("rust", &["rs", "toml"])

    let data = file.unwrap().read().await;

Linux & BSD backends

On Linux & BSDs, two backends are available, one using the GTK3 Rust bindings and the other using the XDG Desktop Portal D-Bus API through ashpd & zbus.

GTK backend

The GTK backend is used with the gtk3 Cargo feature which is enabled by default. The GTK3 backend requires the C library and development headers to be installed to build RFD. The package names on various distributions are:

Distribution Installation Command
Fedora dnf install gtk3-devel
Arch pacman -S gtk3
Debian & Ubuntu apt install libgtk-3-dev

XDG Desktop Portal backend

The XDG Desktop Portal backend is used when the gtk3 feature is disabled with default-features = false, and xdg-portal is enabled instead. This backend will use either the GTK or KDE file dialog depending on the desktop environment in use at runtime. It does not have any non-Rust build dependencies, however it requires the user to have either the GTK, GNOME, or KDE XDG Desktop Portal backend installed at runtime. These are typically installed by the distribution together with the desktop environment. If you are packaging an application that uses RFD, ensure either one of these is installed with the package. The wlroots portal backend does not implement the D-Bus API that RFD requires (it does not interfere with the other portal implementations; they can all be installed simultaneously).

The XDG Desktop Portal has no API for message dialogs, so the [MessageDialog] and [AsyncMessageDialog] structs will not build with this backend.

macOS non-windowed applications, async, and threading

macOS async dialogs require an NSApplication instance, so the dialog is only truly async when opened in windowed environment like winit or SDL2. Otherwise, it will fallback to sync dialog. It is also recommended to spawn dialogs on your main thread. RFD can run dialogs from any thread but it is only possible in a windowed app and it adds a little bit of overhead. So it is recommended to spawn on main and await in other thread. Non-windowed apps will never be able to spawn async dialogs or from threads other than the main thread.

Cargo features

  • gtk3: Uses GTK for dialogs on Linux & BSDs; has no effect on Windows and macOS
  • xdg-portal: Uses XDG Desktop Portal instead of GTK on Linux & BSDs


API Stability
Feature Linux Windows MacOS Wasm32
Filters ✔ (GTK only)


AKA features that are not file related

Feature Linux Windows MacOS Wasm32
MessageDialog ✔ (GTK only)


~1M SLoC