Windows File Explorer for macOS, Linux, and Windows. Built in pure Rust with GPUI.
🌐 Website and downloads
|
💾 Install
|
⚡ Features
|
🔃 Anti-Features
➡️ Manually Download The Latest Release Here, or install via one of the supported package managers:
First launch may need approval in System Settings → Privacy & Security
brew install --cask hmerritt/tap/explorercurl -fsSL https://raw.githubusercontent.com/hmerritt/explorer/master/install.sh | shscoop bucket add hmerritt https://github.com/hmerritt/scoop-bucket
scoop install hmerritt/explorer- 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
everythingmost things - HTTP, HTTPS, FTP, and SFTP file URLs can be downloaded directly when pasted
yt-dlpintegration, supported URLs can be downloaded as videos when pasted- Native ZIP creation with Finder-style
Compressnaming and progress - A simple, functional, built-in image viewer (you can set
exploreras 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+hoverspecial 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
- 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.
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.
Explorer is a Rust 2024 project using GPUI.
cargo check --locked
cargo test --locked --all-targets
cargo runUseful project docs:
- README-development.md: platform notes, local installs, and development setup.
- BENCHMARKS.md: benchmark suites for search, navigation, thumbnails, image viewing, properties, copy, and archive extraction.
- docs/assets/README.md: reproducible README screenshot workflow.
Folder icons created by kmg design - Flaticon

