Crate rust_search

source ·
Expand description

Group 1

Blazingly fast file search crate built in Rust 🔥

Version info Documentation License

📦 Usage

Please report any problems you encounter when using rust search here: Issues

Add rust_search = "2.0.0" in Cargo.toml.

rust_search = "2.0.0"


  • General use
use rust_search::SearchBuilder;

fn main(){
    let search: Vec<String> = SearchBuilder::default()
        .search_input("what to search")
        .more_locations(vec!["/anotherPath/to/search", "/keepAddingIfYouWant/"])
        .limit(1000) // results to return

    for path in search {
        println!("{}", path);
  • Sort the output by similarity with the input
 use rust_search::{SearchBuilder, similarity_sort};
 fn main() {
     let search_input = "fly";
     let mut search: Vec<String> = SearchBuilder::default()

     similarity_sort(&mut search, &search_input);
     for path in search {
        println!("{:?}", path);

search without similarity sort ["afly.txt", "bfly.txt", "flyer.txt", "fly.txt"]

search with similarity sort ["fly.txt", "flyer.txt", "afly.txt", "bfly.txt",]

  • To get all the files with a specific extension in a directory, use:
use rust_search::SearchBuilder;

let files: Vec<String> = SearchBuilder::default()
  • To get all the files in a directory, use:
use rust_search::SearchBuilder;

let files: Vec<String> = SearchBuilder::default()

To filter files by date_created, date_modified, file_size and/or custom_filter, use:

use rust_search::{FileSize, FilterExt, SearchBuilder};
use std::time::{Duration, SystemTime};

let search: Vec<String> = SearchBuilder::default()
		.created_after(SystemTime::now() - Duration::from_secs(3600 * 24 * 10))
		.modified_after(SystemTime::now() - Duration::from_secs(3600 * 24 * 5))
		.custom_filter(|dir| dir.metadata().unwrap().is_file())
		.custom_filter(|dir| !dir.metadata().unwrap().permissions().readonly())

👉 For more examples, please refer to the Documentation

⚙️ Benchmarks

The difference in sample size is due to the fact that fd and glob are different tools and have different use cases. fd is a command line tool that searches for files and directories. glob is a library that can be used to search for files and directories. The benchmark is done on a MacBook Air M2, 16 GB Unified memory.

Benchmarks are done using hyperfine, Benchmarks files are available in the benchmarks drive folder.

- Rust Search vs Glob

The benchmark was done on a directories containing 300K files.

Command / LibraryMean [s]Min [s]Max [s]Relative
rust_search1.317 ± 0.0021.3141.3201.00
glob22.728 ± 0.02322.69022.74617.25 ± 0.03

- Rust Search vs FD

The benchmark was done on a directories containing 45K files.

Command / LibraryMean [ms]Min [ms]Max [ms]Relative
rust_search680.5 ± 2.1678.3683.61.00
fd -e .js738.7 ± 10.2720.8746.71.09 ± 0.02


+ rust_search is 17.25 times faster than Glob.

+ rust_search** is 1.09 times faster than FD.

👨‍💻 Contributors

Any contributions would be greatly valued as this library is still in its early stages.

  • Documentation
  • Benchmarks
  • Implementation guidelines
  • Code Improvement

If you want to contribute to this project, please follow the steps below:

  1. Fork the project
  2. Clone the forked repository
  3. Create a feature branch
  4. Make changes to the code
  5. Commit the changes
  6. Push the changes to the forked repository
  7. Create a pull request
  8. Wait for the pull request to be reviewed and merged (if approved)


This project is licensed under the terms of the MIT license.

Discord server & Linkedin

Click the button below to join the discord server or Linkedin

Join Discord Server Connect on Linkedin


A directory entry with a possible error attached.
A struct that holds the receiver for the search results
Builder for a Search instance, allowing for more complex searches.


enum to easily convert between byte_sizes


import this trait to filter files


This function can be used to sort the given vector on basis of similarity between the input & the vector

Type Definitions

custom filter fn to expose the dir entry directly