Fast file explorer written with Tauri and React.

Overview

Rust

Fast File Explorer

This is a fast file explorer written in Rust. After testing on my C drive, this file explorer was able to find a file in 280ms. In comparison, Windows took 3 minutes and 45 seconds.

Before contributing please read the contributing guidelines.

Supported operating systems

  • Windows
  • Linux

Bear in mind this is still in development and missing the following core features:

  • Caching service (constant file watching to keep cache up to date) - only works when program is open
  • Top navigation bar
  • Search/caching progress counter
  • Ability to search for file extensions without including any name
  • Ability to copy/cut/paste files
  • Ability to move files
  • Ability to create files

Fast Search Feature

Dev Setup/Installation

Prerequisites

  • Stable NodeJS Install
  • Stable Rust Install
  • Yarn installation (npm i -g yarn)

Steps

#  Make sure you have Tauri CLI installed
cargo install tauri-cli

# Install dependencies
yarn

# Run app for development
cargo tauri dev

# Build for production
cargo tauri build
Comments
  • [pnpm tauri dev] Using `tauri dev` exits with code 101

    [pnpm tauri dev] Using `tauri dev` exits with code 101

    When using pnpm tauri dev, a panic is thrown and the app was closed.

    > pnpm tauri dev
    
    > [email protected] tauri D:\Joshua\Code\Web\FileExplorer
    > tauri "dev"
    
         Running BeforeDevCommand (`yarn dev`)
    yarn run v1.22.19
    $ vite
    
      VITE v4.3.9  ready in 3398 ms
    
      ➜  Local:   http://localhost:1420/
      ➜  Network: use --host to expose
            Info Watching D:\Joshua\Code\Web\FileExplorer\src-tauri for changes...
       Compiling file-explorer v0.0.0 (D:\Joshua\Code\Web\FileExplorer\src-tauri)
    warning: unused import: `rayon::prelude`
     --> src\file_explorer\search.rs:6:5
      |
    6 | use rayon::prelude::*;
      |     ^^^^^^^^^^^^^^
      |
      = note: `#[warn(unused_imports)]` on by default
    
    warning: variable does not need to be mutable
      --> src\file_explorer\search.rs:39:21
       |
    39 |                 let mut score;
       |                     ----^^^^^
       |                     |
       |                     help: remove this `mut`
       |
       = note: `#[warn(unused_mut)]` on by default
    
    warning: `file-explorer` (bin "file-explorer") generated 2 warnings
        Finished dev [unoptimized + debuginfo] target(s) in 1m 05s
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error("EOF while parsing a value", line: 1, column: 0)', src\file_explorer\mod.rs:74:62
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    [0620/204033.047:ERROR:window_impl.cc(119)] Failed to unregister class Chrome_WidgetWin_0. Error = 0
    🚀 A new version of Tauri CLI is available! [2.0.0-alpha.10]
     ELIFECYCLE  Command failed with exit code 101.
    PS D:\Joshua\Code\Web\FileExplorer> pnpm update @tauri-apps/cli @tauri-apps/api --latest
    Already up to date
    Progress: resolved 193, reused 162, downloaded 0, added 0, done
    Done in 7.3s
    PS D:\Joshua\Code\Web\FileExplorer> pnpm tauri dev
    
    > [email protected] tauri D:\Joshua\Code\Web\FileExplorer
    > tauri "dev"
    
         Running BeforeDevCommand (`yarn dev`)
    yarn run v1.22.19
    $ vite
    
      VITE v4.3.9  ready in 1251 ms
    
      ➜  Local:   http://localhost:1420/
      ➜  Network: use --host to expose
            Info Watching D:\Joshua\Code\Web\FileExplorer\src-tauri for changes...
    warning: unused import: `rayon::prelude`
     --> src\file_explorer\search.rs:6:5
      |
    6 | use rayon::prelude::*;
      |     ^^^^^^^^^^^^^^
      |
      = note: `#[warn(unused_imports)]` on by default
    
    warning: variable does not need to be mutable
      --> src\file_explorer\search.rs:39:21
       |
    39 |                 let mut score;
       |                     ----^^^^^
       |                     |
       |                     help: remove this `mut`
       |
       = note: `#[warn(unused_mut)]` on by default
    
    warning: `file-explorer` (bin "file-explorer") generated 2 warnings
        Finished dev [unoptimized + debuginfo] target(s) in 1.52s
    thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error("EOF while parsing a value", line: 1, column: 0)', src\file_explorer\mod.rs:74:62
    note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
    [0620/204440.510:ERROR:window_impl.cc(119)] Failed to unregister class Chrome_WidgetWin_0. Error = 0
    🚀 A new version of Tauri CLI is available! [2.0.0-alpha.10]
     ELIFECYCLE  Command failed with exit code 101.
     ```
    bug 
    opened by pickaxe828 13
  • Can't be compared with windows explorer in terms of speed.

    Can't be compared with windows explorer in terms of speed.

    Why do I say that? Well, the reason your "explorer" is faster is because it is not up to parity with the windows explorer.

    You don't scan for file attributes, that alone is a big time saver that you took, windows search scans for file attributes. I am all for third party file explorers, but not when they make absurd claims like this.

    Yeah you could probably reach feature parity with the windows explorer and still have faster times, but the time savings you did would not be as big as now.

    PS: I am not a windows fan boy, and I also hate the windows explorer's search speeds, but that doesn't mean I'll blindly agree that your explorer is faster.

    opened by ArjixWasTaken 7
  • Binary Serialization of the Cache File to save space?

    Binary Serialization of the Cache File to save space?

    Hey, I found your project cool, but noticed in the video you're saving the cache as a plaintext file, which could possibly be an issue for filesystems with very large amounts of data. Can you consider using Binary Serialization of the Cache file? I asked an A.I. search engine about this, and it referenced the serde_json and bincode crates.

    enhancement low priority 
    opened by JD-The-65th 5
  • Makes the search functionality more extensible

    Makes the search functionality more extensible

    This PR adds a pipeline that rejects files from a search based on filters and refactors to code to be more understandable and extensible.

    All input is welcome. Note: Due to running rustfmt the commit is polluted. All the relevant work is in src-tauri/src/search.rs

    opened by RaphGL 4
  • Only create build executables on main branch

    Only create build executables on main branch

    Currently the workflow creates a new release every time the dev branch is updated. It would make sense that these executables are only built when changes are made to the main branch.

    low priority 
    opened by conaticus 3
  • Adds Unix file system support and refactors code

    Adds Unix file system support and refactors code

    This PR is separated into 3 commits.

    Added Unix Support

    The first one is focused on removing previous assumptions about how file systems are laid out. The letters are substituted for mountpoints. This means that on unix systems where there's only one true root and everything is mounted on that tree the mountpoint will be a path relative to the root. On Windows the mount point is whatever lettered disk it happens to be given.

    Along with adding mountpoints file system standard directories were added this allows for the react frontend to easily give the user a way to jump into them the same way it happens on other file explorers/managers.

    Refactored code

    This commit tries to encapsulate logic as long as it makes sense as well as make reasonable renames. The file system was flattened as the hierarchy was confusing to navigate, new modules should be created as needs arise.

    Removed lettered assumption, used mountpoint instead

    This commit removes the assumption that all disks have a letter assigned to them and instead uses mountpoints. This makes the frontend be in line with the work done on the tauri side.

    Notice When testing this I've found that search panics when you haven't entered a disk yet, so if you merge this PR someone should create an issue for this (this is caused by an assumption about letters on search.rs that I haven't touched yet as not to bloat this PR)

    Solves #13

    opened by RaphGL 3
  • Add compiler using github actions

    Add compiler using github actions

    Added a compiler to the project with github actions

    This compiler works every time a change is made to the repository and takes around 20-30 minutes to compile.

    Note:

    The following file causes problems to compile it src-tauri/tauri.conf.json

    https://github.com/vicentefelipechile/FileExplorer/actions/runs/5365212765/jobs/9733891266

    imagen

    opened by vicentefelipechile 2
  • fix: prevent panic on thread if no mount is selected

    fix: prevent panic on thread if no mount is selected

    Just a simple fix You can see the bug if you try to search before selecting a drive, the drive is set to "" and an unwrap none panics a thread

    something like

    thread 'tokio-runtime-worker' panicked at 'called Option::unwrap() on a None value', src/search.rs:88:59 note: run with RUST_BACKTRACE=1 environment variable to display a backtrace thread 'tokio-runtime-worker' panicked at 'called Result::unwrap() on an Err value: PoisonError { .. }', src/search.rs:85:34 thread 'notify-rs fsevents loop' panicked at 'called Result::unwrap() on an Err value: PoisonError { .. }', src/filesystem/cache.rs:48:48

    I think this should be set to all mounts or the 0th by defualt, and outlined in the ui somehow

    @conaticus

    i think this may fix part of https://github.com/conaticus/FileExplorer/issues/26

    opened by HenryRoutson 1
  • Compilator fails at permissions

    Compilator fails at permissions

    The compiler fails because it does not have the necessary permissions to perform the compilation

    imagen


    To fix this, you have to configure your repository like this

    imagen

    imagen

    opened by vicentefelipechile 1
  • Add more info in README.md file

    Add more info in README.md file

    Can we add more info in README.md file , for setting up project locally ?? Someone who is new to Rust or JS and wants to set up project locally will make it easy.

    opened by 101amolkadam 1
  • Use Compression and Binary Encoding for Cache

    Use Compression and Binary Encoding for Cache

    Addresses #6 by using serde_bencode and zstd libraries to encode and compress the Cache file in a more efficient format, taking less overall space on the disk.

    Requires further testing, but seems to be working on Windows and Linux thus far.

    opened by ProtogenDelta 0
  • made mountpoint retrieval cross-platform

    made mountpoint retrieval cross-platform

    Very small change that removes the windows bias ('\' is not a path separator on unix systems, this would result in the program erroring out on any of the file operations)

    This PR makes the path canonical, meaning it expands the whole path to it's absolute path. So on most unix systems it would give you / or /home/user or whatever mountpoint is being used. On windows it would give you C:\\ or equivalent lettered disks.

    opened by RaphGL 0
  • File operations sometimes deny permissions

    File operations sometimes deny permissions

    A permissions error sometimes occurs when doing file operations such as deletions. Not sure what causes this but maybe to do with conflict with the file watcher for cache invalidation.

    medium priority 
    opened by conaticus 0
  • Tauri commands (sometimes) block

    Tauri commands (sometimes) block

    For some reason Tauri commands such as file creations pause for a few seconds before executing. This likely due to the main thread being used where it shouldn't.

    medium priority 
    opened by conaticus 0
  • Recaching interval not long enough on slower systems

    Recaching interval not long enough on slower systems

    The interval works well on most systems, but slower systems or systems with a bigger file system have the chance of not being able to recache in time for this 30s interval.

    The best solution is to have a check to ensure that the previous recache is completed, and skip if it is not. We could implement an algorithm to check for file changes first, but these usually happen so often that it would be redundant.

    bug medium priority easy task 
    opened by conaticus 0
Owner
Sam
Programmer & content creator Business Enquiries: [email protected]
Sam
Extracting react native app source code from apk file.

extract-myreact Extracting React Native app source code from apk file.

Aan 3 Oct 5, 2022
Akinator clone in Rust with Tauri, written in 2 days

Rustinator Akinator clone written in Rust + Tauri in 2 days How to play Install Rust Install Tauri Open a cmd/Terminal in this folder. Run cd src-taur

Face 5 Jul 17, 2023
Tauri and Leptos example.

tauri-leptos-example Tauri Leptos Requires Rust Nightly. See Leptos nightly Note. # Install Tauri CLI cargo install tauri-cli # Build and develop for

Michal Vavra 5 Dec 6, 2022
SimpleX Chat GUI built with Rust, Tauri and Yew

simplex-desktop A desktop application for simplex-chat. WIP, contributions are welcome. Architecture For the back end we rust with tauri and frontend

Simon Shine 5 Feb 28, 2023
TaurApp is a WhatsApp desktop client powered by Tauri and Rust.

TaurApp TaurApp is a WhatsApp desktop client powered by Tauri and Rust. TaurApp is an experimental client and is initially created to test out Tauri i

Eray Erdin (&mut self) 22 Mar 19, 2023
🏪 Modern emoji picker popup for desktop, based on Emoji Mart, built with Tauri and Svelte

Emoji Mart desktop popup Modern emoji picker popup app for desktop, based on the amazing Emoji Mart web component. ?? Built as a popup: quick invocati

Vincent Emonet 10 Jul 3, 2023
Cross-platform Window library in Rust for Tauri. [WIP]

Cross-platform application window creation library in Rust that supports all major platforms like Windows, macOS, Linux, iOS and Android. Built for you, maintained for Tauri.

Tauri 899 Jan 1, 2023
Hydrogen is the desktop application for Geplauder, built with tauri studio.

Hydrogen Hydrogen is the desktop application for Geplauder, built with tauri studio. For more information on Geplauder, click here. Usage To configure

null 4 Nov 21, 2021
Helps positioning your tauri windows.

Tauri plugin positioner A plugin for tauri that helps positioning you windows at well known locations. Install Rust [dependencies] tauri-plugin-positi

Jonas Kruckenberg 42 Jan 5, 2023
A custom invoke system for Tauri that leverages a localhost server

Tauri Invoke HTTP This is a crate that provides a custom invoke system for Tauri using a localhost server. Each message is delivered through a XMLHttp

Tauri 17 Dec 17, 2022
This is a small demo to accompany the Tauri + Yew tutorial

Tauri + Yew Demo This is a small demo to accompany the Tauri + Yew tutorial

Steve Pryde 94 Jan 2, 2023
📦 Port of tauri-bundler

?? Port of tauri-bundler You can now easily create installers for your Deno apps, thanks to the amazing work of Tauri ??

Marc Espín 28 Dec 7, 2022
Rust + Yew + Axum + Tauri, full-stack Rust development for Desktop apps.

rust-yew-axum-tauri-desktop template Rust + Yew + Axum + Tauri, full-stack Rust development for Desktop apps. Crates frontend: Yew frontend app for de

Jet Li 54 Dec 23, 2022
Type-safe IPC for Tauri using GraphQL

Tauri Plugin graphql A plugin for Tauri that enables type-safe IPC through GraphQL. Install Rust [dependencies] tauri-plugin-graphql = "0.2" JavaScrip

Jonas Kruckenberg 40 Dec 29, 2022
🦀 Small Tauri SolidJS Example feat. Vite

Tauri Solid Example (2022) Simple Solid(vite) starter running with Tauri. Should hopefully save some time trying to setup Tauri and Solid. Currently c

Luke Secomb 14 Oct 25, 2022
A Raycast/Spotlight like app shell using tauri

Tauri Shell This repo can be used as reference for building alfred/raycast/spotlight apps using Tauri. Usage This reference repository is using Svelte

Shivaprasad Bhat 6 Oct 27, 2022
Bindings to the Tauri API for projects using wasm-bindgen

tauri-sys Raw bindings to the Tauri API for projects using wasm-bindgen Installation This crate is not yet published to crates.io, so you need to use

Jonas Kruckenberg 25 Jan 9, 2023
A cross-platform tauri gui where Oblique Strategies meets Pomodoro

Obliqoro Oblique Strategies meets Pomodoro Built in Rust, Vue3, and Typescript, using Tauri, and SQLite Screenshots About Obliqoro is an open source,

Jack Wills 8 Dec 19, 2022
OpenAI ChatGPT desktop app for Mac, Windows, & Linux menubar using Tauri & Rust

ChatGPT Desktop App Unofficial open source OpenAI ChatGPT desktop app for mac, windows, and linux menubar using tauri & rust. Downloads Windows (2.7 M

Sonny Lazuardi 732 Jan 5, 2023