Skip to content
vic

Michael-F-Bryan/include_dir

The logical evolution of the include_str macro for embedding a directory tree into your binary.

Michael-F-Bryan/include_dir.json
{
"createdAt": "2017-06-07T01:47:20Z",
"defaultBranch": "master",
"description": "The logical evolution of the include_str macro for embedding a directory tree into your binary.",
"fullName": "Michael-F-Bryan/include_dir",
"homepage": "https://michael-f-bryan.github.io/include_dir",
"language": "Rust",
"name": "include_dir",
"pushedAt": "2024-07-05T12:01:32Z",
"stargazersCount": 377,
"topics": [],
"updatedAt": "2025-11-24T09:35:33Z",
"url": "https://github.com/Michael-F-Bryan/include_dir"
}

Continuous Integration [license]!(./LICENSE) Crates.io Docs.rs

An evolution of the include_str!() and include_bytes!() macros for embedding an entire directory tree into your binary.

Rendered Documentation:

The include_dir!() macro works very similarly to the normal include_str!() and include_bytes!() macros. You pass the macro a file path and assign the returned value to some static variable.

use include_dir::{include_dir, Dir};
static PROJECT_DIR: Dir = include_dir!("$CARGO_MANIFEST_DIR");
// of course, you can retrieve a file by its full path
let lib_rs = PROJECT_DIR.get_file("src/lib.rs").unwrap();
// you can also inspect the file's contents
let body = lib_rs.contents_utf8().unwrap();
assert!(body.contains("SOME_INTERESTING_STRING"));
// you can search for files (and directories) using glob patterns
#[cfg(feature = "glob")]
{
let glob = "**/*.rs";
for entry in PROJECT_DIR.find(glob).unwrap() {
println!("Found {}", entry.path().display());
}
}
  • Embed a directory tree into your binary at compile time
  • Find a file in the embedded directory
  • Search for files using a glob pattern (requires the globs feature)
  • File metadata (requires the metadata feature)

To-Do list:

  • Compression?