Skip to content

Repository files navigation

⚑ Fast Explorer

A blazing-fast, keyboard-driven file explorer and search engine for macOS.
Built with Rust + Tauri + React. Searches 325,000+ files in under 5ms.

Version Platform License Stack


πŸ“– Overview

Fast Explorer is a native macOS desktop application that replaces Spotlight and Finder for power users. It maintains an in-memory fuzzy index of your entire filesystem β€” pre-warmed from a SQLite database on launch β€” allowing sub-millisecond searches across hundreds of thousands of files without ever touching the disk at query time.

The application provides two core modes:

  • Search Mode β€” Fuzzy search your entire filesystem with real-time results.
  • Browse Mode β€” Navigate directories like a native file browser with keyboard shortcuts.

πŸ“Έ Screenshots

Search Mode Landing Page

Browse Mode
Browse Mode (3-Column Layout)
Command Palette
Command Palette
Settings & Shortcuts
Settings & Shortcuts
Search Latency Metrics
Performance Latency Metrics

πŸŽ₯ Product Demo Video

Check out the full capabilities and real-time sub-5ms fuzzy search of Fast Explorer in action:

πŸš€ Watch the Fast Explorer Product Demo on Google Drive


πŸ—οΈ Architecture

fast-explorer/
β”œβ”€β”€ src/                        # React + TypeScript frontend (Vite)
β”‚   β”œβ”€β”€ App.tsx                 # Root application shell & state management
β”‚   β”œβ”€β”€ index.css               # Glassmorphic design system (CSS variables)
β”‚   └── components/
β”‚       β”œβ”€β”€ ResultList.tsx      # Virtualized search result list
β”‚       β”œβ”€β”€ FileIcon.tsx        # Native file type icon resolver
β”‚       └── StatusBar.tsx       # Bottom status bar (search latency metric)
β”‚
β”œβ”€β”€ src-tauri/                  # Rust + Tauri native backend
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ main.rs             # Tauri command handlers & IPC bridge
β”‚   β”‚   β”œβ”€β”€ models.rs           # Shared data types (FileEntry, Metadata)
β”‚   β”‚   β”œβ”€β”€ db/mod.rs           # SQLite persistence layer (rusqlite)
β”‚   β”‚   β”œβ”€β”€ scanner/
β”‚   β”‚   β”‚   β”œβ”€β”€ mod.rs          # Orchestrates parallel directory scans
β”‚   β”‚   β”‚   └── worker.rs       # Concurrent file walker (tokio tasks)
β”‚   β”‚   β”œβ”€β”€ platform/
β”‚   β”‚   β”‚   β”œβ”€β”€ mod.rs          # Platform abstraction trait
β”‚   β”‚   β”‚   β”œβ”€β”€ macos.rs        # macOS FSEvents + metadata APIs
β”‚   β”‚   β”‚   └── fallback.rs     # Cross-platform fallback implementation
β”‚   β”‚   β”œβ”€β”€ watcher.rs          # Real-time filesystem change watcher (notify)
β”‚   β”‚   β”œβ”€β”€ symlink.rs          # Safe symlink resolution & cycle detection
β”‚   β”‚   └── telemetry/
β”‚   β”‚       β”œβ”€β”€ mod.rs
β”‚   β”‚       β”œβ”€β”€ metrics.rs      # Throughput & latency instrumentation
β”‚   β”‚       └── reporter.rs     # Live throughput logging to stderr
β”‚   β”œβ”€β”€ Cargo.toml              # Rust dependencies
β”‚   └── tauri.conf.json         # Tauri app configuration (window, CSP, etc.)
β”‚
β”œβ”€β”€ index.html                  # Vite HTML entry point
β”œβ”€β”€ vite.config.ts              # Vite bundler configuration
β”œβ”€β”€ tailwind.config.js          # TailwindCSS configuration
β”œβ”€β”€ package.json                # npm scripts & frontend dependencies
└── README.md                   # This file

Data Flow

Launch
  β”‚
  β–Ό
SQLite DB (fex.db)
  β”‚  Pre-loads all known paths into RAM
  β–Ό
In-Memory Index (DashMap<String, FileEntry>)
  β”‚
  β”œβ”€β”€[User Types Query]──► Nucleo Fuzzy Matcher ──► Ranked Results ──► UI
  β”‚
  └──[Background]──► Scanner Workers (10 tokio tasks)
                         β”‚  Walk /Applications + ~/
                         β–Ό
                     SQLite Writer ──► DB Updated ──► RAM Reloaded

πŸš€ Performance: Why It's Faster than Finder

Operation macOS Finder / Spotlight Fast Explorer
Search 325K files 1,200 – 4,000 ms (Spotlight index cold) 2 – 8 ms
Directory listing 80 – 250 ms (Finder builds thumbnails) < 2 ms
Fuzzy match quality Exact prefix / metadata only Full path fuzzy + boundary boost
App launch readiness 3 – 8 sec (Spotlight daemon re-index) < 500 ms (DB pre-warm)
Background RAM usage ~200 MB (mds + mds_stores) ~60 MB

Why the gap exists:

  1. Zero disk I/O at query time. The entire index lives in a DashMap in RAM. Queries never touch the filesystem.
  2. Nucleo fuzzy matcher. The same engine powering Helix editor β€” hyper-optimised for Unicode-aware, boundary-boosted fuzzy matching with SIMD acceleration.
  3. Parallel scan pipeline. On first launch, 10 concurrent tokio workers fan out across /Applications and ~/ simultaneously, achieving 200,000+ files/sec scan throughput.
  4. Incremental updates. The notify crate hooks into macOS FSEvents β€” only changed paths are re-written to SQLite and re-inserted into RAM, never a full re-scan.
  5. No thumbnail generation. Fast Explorer resolves file type icons from extension + UTI metadata only, with zero image I/O.

πŸ› οΈ Installation & Setup

Prerequisites

Requirement Version Install
Rust β‰₯ 1.75 curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Node.js β‰₯ 18 nodejs.org or brew install node
Xcode CLT Latest xcode-select --install

Development Build

# 1. Clone the repository
git clone https://github.com/yourname/fast-explorer.git
cd fast-explorer

# 2. Install JavaScript dependencies
npm install

# 3. Start the development server (Vite + Tauri hot-reload)
npm run tauri dev

First run note: Rust will compile ~420 crates which takes 3–5 minutes. Subsequent builds use the incremental cache and are nearly instant.

Production Build

# Produces a signed .app bundle in src-tauri/target/release/bundle/macos/
npm run tauri build

Database Location

The SQLite index is stored at:

~/Library/Application Support/fast-explorer/fex.db

It is auto-created on first launch and auto-updated in the background. You can safely delete it β€” it will rebuild on the next launch.


✨ Features

Core Search Engine

  • Fuzzy search across 325K+ indexed files with sub-10ms response time
  • Boundary-boosted scoring β€” repo matches my-Repo higher than depository
  • Paginated results β€” loads 50 at a time, expands on demand (no UI jitter)
  • Live search latency metric β€” ⚑ badge in the status bar shows exact ms cost

Directory Browser

  • 3-column layout β€” Favorites sidebar | File list | Detail Inspector
  • Breadcrumb navigation with history stack (Backspace to go back)
  • Inline filter β€” type to filter current directory without leaving browse mode
  • Favorites β€” pin any folder with ⌘D, persisted for the session

Command Palette (/)

Type / in either mode to open the system command palette:

Command Action
/search Switch to Search Mode
/browse Switch to Browse Mode
/home Jump to Home Directory
/apps Jump to /Applications
/desktop Jump to Desktop
/downloads Jump to Downloads
/terminal Open Terminal in active folder
/vscode Open highlighted item in VS Code
/reveal Reveal item in macOS Finder
/settings Open in-app Settings panel
/displays Open macOS Displays preferences
/sound Open macOS Sound preferences
/keyboard Open macOS Keyboard preferences
/network Open macOS Network preferences
/battery Open macOS Battery preferences
/info Show database index statistics
/close Quit the application window

In-App Settings (⌘,)

Three tabbed panels accessible via the gear icon or ⌘,:

  • ⌨️ Shortcuts β€” Full keyboard reference
  • βš™οΈ App Settings β€” Result limit (50/100/200), toggle Inspector, toggle Favorites sidebar
  • ℹ️ Version & About β€” Build ID, engine info, database optimiser

File Operations

  • Open any file natively with ↡ (uses macOS open command)
  • Copy full path to clipboard with ⌘C
  • Reveal in Finder via command palette
  • Open in VS Code via command palette
  • Open Terminal at current directory via command palette

⌨️ Keyboard Shortcuts

Global

Shortcut Action
⌘1 Switch to Search Mode
⌘2 Switch to Browse Mode
⌘B Toggle Search ↔ Browse
⌘, Open / Close Settings panel

Search Mode

Shortcut Action
↑ / ↓ Navigate results
↡ Open highlighted file
⌘C Copy full path to clipboard
⌘D Add/remove folder from Favorites
Esc Clear query
/ Enter command palette

Browse Mode

Shortcut Action
↑ / ↓ Navigate items
↡ Enter folder / Open file
Backspace / Esc Go back / clear filter
Tab / ⇧Tab Cycle Favorites sidebar
⌘C Copy full path to clipboard
⌘D Add/remove current folder from Favorites
/ Enter command palette

πŸ”Œ Extensibility

Adding New System Commands

In src/App.tsx, add an entry to the SYSTEM_COMMANDS array:

{
  cmd: "/mycommand",
  desc: "Human-readable description shown in palette",
  icon: "πŸ”§",
  action: async () => {
    // Call any Tauri command or run JS logic
    await invoke("my_rust_command", { param: "value" });
  }
}

Adding New Rust Backend Commands

In src-tauri/src/main.rs:

#[tauri::command]
async fn my_new_command(param: String) -> Result<String, String> {
    // Your logic here
    Ok(format!("Result: {}", param))
}

// Register it in the handler:
tauri::Builder::default()
    .invoke_handler(tauri::generate_handler![
        // ... existing commands ...
        my_new_command,
    ])

Scanning Additional Directories

The scanner is launched per-directory in main.rs. To index additional paths, add them alongside the existing scan triggers:

start_background_scan(app_handle.clone(), "/your/custom/path".to_string()).await;

Custom File Type Icons

In src/components/FileIcon.tsx, add extension mappings to the EXTENSION_MAP object:

const EXTENSION_MAP: Record<string, { icon: string; color: string }> = {
  // ... existing entries ...
  myext: { icon: "πŸ”§", color: "#FF6B6B" },
};

πŸ“¦ Key Dependencies

Rust (Backend)

Crate Purpose
tauri 1.6 Native window + IPC bridge
tokio Async runtime for parallel scanning
rusqlite (bundled) SQLite persistence β€” no system dependency
nucleo 0.2 SIMD-accelerated fuzzy matcher
notify 6.1 Cross-platform filesystem event watcher
dashmap 6 Concurrent lock-free in-memory hashmap
dirs 5 XDG/macOS-aware path resolution

JavaScript (Frontend)

Package Purpose
@tauri-apps/api JS ↔ Rust IPC bindings
react 18 Component UI framework
framer-motion Smooth animations & transitions
vite Ultra-fast dev server & bundler
typescript Type-safe component development
tailwindcss Utility CSS (design system base)

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feat/my-feature
  3. Make your changes with clear commit messages
  4. Ensure npm run tauri dev builds without errors
  5. Open a Pull Request describing what you changed and why

πŸ“„ License

MIT License β€” see LICENSE for details.


Built with ❀️ using Rust, Tauri, and React.
Searches your whole Mac faster than you can blink.

About

A blazing-fast, keyboard-driven file explorer and search engine for macOS.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages