#native #file #dialog #nativefiledialog


Rust bindings for Native File Dialog Extended

4 releases

0.0.4 Jul 24, 2021
0.0.3 Apr 11, 2021
0.0.2 Apr 8, 2021
0.0.1 Apr 5, 2021

#98 in GUI

Zlib license


C++ 1K SLoC // 0.2% comments Rust 656 SLoC // 0.0% comments Objective-C 215 SLoC // 0.1% comments


GitHub CI Build Crates.io

This crate contains Rust bindings for Native File Dialog Extended (NFDe), a small library for invoking native file dialogs on Windows, MacOS, and Linux.

It supports four kinds of dialogs:

  • Open file
  • Open multiple files
  • Save file
  • Pick folder

This crate should be regarded as experimental for now — while upstream NFDe is stable, these Rust bindings are still in flux.

For more information and screenshots, please see the upstream NFDe repository.


The following dependencies need to be installed on your machine manually (Cargo will not install it for you):

  • CMake
  • A decent C/C++ compiler (MSVC, Clang, or GCC are known to work)

You might also need to place CMake on your PATH so that the build script can find it.

Basic Usage

use nfde::*;

fn main() -> Result<(), nfde::Error> {
    // Initialize NFD... NFD will be automatically deinitialized when this object is destroyed
    let nfd = Nfd::new()?;

    // Show the dialog...
    // Note: .show() will block until the dialog is closed
    // You can also set a default path using .default_path(Path)
    let res = nfd
        .add_filter("Source code", "c,cpp,cc")?
        .add_filter("Headers", "h,hpp")?

    match res {
        DialogResult::Ok(path_buf) => {
            println!("Path: {}", path_buf.display());
        DialogResult::Cancel => {
            println!("User pressed cancel.");
        DialogResult::Err(error_str) => {
            println!("Error: {}", error_str);


See the /examples directory for more examples.