Skip to content
hmerrittPublic

About

Windows File Explorer for macOS, Linux, and Windows.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Repository files navigation

Explorer app icon

Explorer

Windows File Explorer for macOS, Linux, and Windows. Built in pure Rust with GPUI.

Latest release Coverage Downloads License

🌐 Website and downloads | 💾 Install | ⚡ Features | 🔃 Anti-Features

Explorer UI

💾 Install

➡️ Manually Download The Latest Release Here, or install via one of the supported package managers:

➡️ macOS via Homebrew

First launch may need approval in System Settings → Privacy & Security

brew install --cask hmerritt/tap/explorer

➡️ Linux installer

curl -fsSL https://raw.githubusercontent.com/hmerritt/explorer/master/install.sh | sh

➡️ Windows via Scoop

scoop bucket add hmerritt https://github.com/hmerritt/scoop-bucket
scoop install hmerritt/explorer

⚡ Features

  • Cross-platform macOS, Linux (Wayland/X11), and Windows
  • GPU-accelerated Explorer UI (GPUI)
  • Tabs
  • Arrow keys navigation
  • Sidebar custom pins (drag-to-pin)
  • Key bindings for everything most things
  • HTTP, HTTPS, FTP, and SFTP file URLs can be downloaded directly when pasted
  • yt-dlp integration, supported URLs can be downloaded as videos when pasted
  • Native ZIP creation with Finder-style Compress naming and progress
  • A simple, functional, built-in image viewer (you can set explorer as the default image viewer)
  • A native, paginated EPUB reader with reading settings, search, bookmarks, and note previews
  • Archive extraction (supported archive formats including 7z, bz2, gz, rar, tar, xz, zip, zst)
  • Search
    • Type-to-search current directory
    • Recursive search (no pre-indexing like Windows, but still pretty quick)
  • Git repo support
    • Branch
    • Outgoing/Incoming commits
    • Lines of code
    • Primary language used
    • Github-style language makup bar
  • Alt+hover special keybinding to instantly preview files
    • Images
    • Videos
    • PDF first-page preview
    • EPUB cover preview
    • Text (plain text, logs, markdown, code files, etc...)
  • File properties
    • Generic file/folder information
    • Image preview in properties
    • Video frames preview in properties
    • In-depth image/video/audio metadata
    • Audio spectrum analyser (inspired by Spek)
    • Image EXIF tags (grouped and organised for ease-of-use)
  • Removable and portable storage
    • Native mounted volumes, USB mass storage, and optical media
    • Android phones, cameras, and media players using MTP/PTP
    • In-app copy/move, rename, folder creation, delete, thumbnails, and file opening when supported by the device

🔃 'Anti-Features' that will NOT be implemented

  • 3D Objects that gets used as much as a welcome mat at a house that never has visitors
  • File grouping that randomly appears when you didn't set it
  • List, Titles, and Content file view modes that are as pointless as a screen door on a submarine
  • Search that takes as long as a cross-country flight
  • Context menu delays that take longer than my wife does when deciding where to eat
  • Claiming it's built in 'pure rust' when really it's just a WebView wrapper with basic app logic in rust.

explorer-url-download.mp4

Downloading a file URL directly into the current directory.


Configuration

Explorer stores settings as JSON and watches the file for changes while the app is running.

  • macOS: ~/.config/explorer/settings.json
  • Linux: ${XDG_CONFIG_HOME:-~/.config}/explorer/settings.json
  • Windows: %USERPROFILE%/.config/explorer/settings.json

Minimal example:

{
    "app": {
        "copy_verify": true,
        "start": "~/Downloads"
    },
    "updater": {
        "enabled": true,
        "check_interval": "6h",
        "feed_url": "https://github.com/hmerritt/explorer/releases/latest/download"
    },
    "view": {
        "media_preview_size": 400,
        "mode": "details",
        "search_mode": "detailed",
        "show_extensions": true,
        "show_hidden": false,
        "show_folder_sizes": false
    }
}

Example with sidebar and contextmenu items:

{
    "app": {
        "start": "~/Downloads",
        "ytdlp_options": ["-S", "ext:mp4"]
    },
    "view": {
        "mode": "details",
        "search_mode": "detailed",
        "show_extensions": true,
        "show_hidden": false,
        "show_folder_sizes": false
    },
    "sidebar": {
        "hide_groups": ["network", "wsl"],
        "hide_items": ["google_drive", "C:/"],
        "pinned": ["~", "~/Downloads", "~/Documents", "~/Pictures"],
        "order": {
            "drives": ["D:/", "C:/"],
            "network": ["sftp://production/var/www", "onedrive", "google_drive"],
            "wsl": ["//wsl.localhost/Ubuntu/"]
        },
        "width": 225
    },
    "contextmenu": [
        {
            "exe": "zed",
            "icon": "",
            "args": [],
            "label": "Open with Zed",
            "only": ["*directory", "*folders", "*files"]
        }
    ]
}

Sidebar item order is stored independently for the drives, network, and wsl groups. Path-backed items use their displayed path, SFTP bookmarks use a credential-free URL including the bookmarked folder, and cloud roots use google_drive or onedrive. Pinned folders are ordered directly by the pinned array. Existing sidebar.items settings are migrated to sidebar.pinned.

Context-menu entries can launch an external executable or invoke a built-in action. The native no-dialog ZIP action is configured as:

{
    "label": "Compress",
    "action": "compress",
    "only": ["*file", "*folder"]
}

Custom commands, built-in actions, and groups can use in to restrict where they appear. An absolute path matches that directory and every child directory:

{
    "exe": "C:/Program Files/PowerShell/7/pwsh.exe",
    "label": "Run with PowerShell",
    "only": [".ps1"],
    "in": "C:/Users/hrmer/Documents/my"
}

A relative path matches a sequence of whole directory names anywhere in the path. For example, media/films matches E:/my/media/films/trailers and C:/Sandbox/media/films, but excludes multimedia/films and media/filmstrip. Use an array to allow any of several locations. Groups can restrict all their children, and each child can add its own restriction:

{
    "label": "Media tools",
    "in": ["media/films", "media/music"],
    "items": [
        {
            "exe": "zed",
            "label": "Open with Zed",
            "only": ["*directory", "*folder", "*file"]
        },
        {
            "label": "Compress films",
            "action": "compress",
            "only": ["*file", "*folder"],
            "in": "media/films"
        }
    ]
}

Matching is case-sensitive on every platform. Drive-prefixed, slash-rooted, and Windows UNC paths are treated as roots. Windows paths accept either slash style; POSIX filenames retain literal backslashes. Repeated and trailing separators and ./.. components are normalized lexically, without resolving symlinks or expanding ~, environment variables, or wildcards.

For selected files, in checks their containing directories; for selected folders, it checks their own paths. Every selected target must match at least one listed location, even in search results. Background menus check the current directory. The in filter combines with only and all ancestor-group filters; groups with no visible children are hidden. Omitting in or setting it to [] leaves locations unrestricted. Blank strings are invalid.

Development

Explorer is a Rust 2024 project using GPUI.

cargo check --locked
cargo test --locked --all-targets
cargo run

Useful project docs:


Folder icons created by kmg design - Flaticon

About

Windows File Explorer for macOS, Linux, and Windows.

Topics

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages