{"id":50844518,"url":"https://github.com/situmorang-com/file-explorer","last_synced_at":"2026-06-14T08:33:44.444Z","repository":{"id":361891533,"uuid":"1255616932","full_name":"situmorang-com/file-explorer","owner":"situmorang-com","description":"Translucent fuzzy-search file explorer for macOS, built in Rust with GPUI","archived":false,"fork":false,"pushed_at":"2026-06-01T17:16:44.000Z","size":144,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-14T08:33:43.893Z","etag":null,"topics":["file-manager","finder-alternative","fuzzy-search","fzf","gpui","macos","ripgrep","rust","spotlight"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/situmorang-com.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-01T02:44:47.000Z","updated_at":"2026-06-01T17:22:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/situmorang-com/file-explorer","commit_stats":null,"previous_names":["situmorang-com/file-explorer"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/situmorang-com/file-explorer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/situmorang-com%2Ffile-explorer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/situmorang-com%2Ffile-explorer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/situmorang-com%2Ffile-explorer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/situmorang-com%2Ffile-explorer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/situmorang-com","download_url":"https://codeload.github.com/situmorang-com/file-explorer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/situmorang-com%2Ffile-explorer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34315072,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["file-manager","finder-alternative","fuzzy-search","fzf","gpui","macos","ripgrep","rust","spotlight"],"created_at":"2026-06-14T08:33:44.373Z","updated_at":"2026-06-14T08:33:44.427Z","avatar_url":"https://github.com/situmorang-com.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# file-explorer\n\nA translucent, fuzzy, content-searchable file explorer for macOS — built in Rust with [GPUI](https://www.gpui.rs/) (the same UI framework that powers [Zed](https://zed.dev/)).\n\nDesigned to feel like Spotlight, Raycast, and Telescope had a kid that does what Finder won't.\n\n\u003e macOS only. Linux/Windows aren't supported yet because the renderer uses Metal.\n\n## Screenshot\n\n\u003e Add a real screenshot to `docs/screenshot.png` and uncomment the line below.\n\u003e Until then, here's a lo-fi ASCII preview of the layout:\n\n\u003c!-- ![file-explorer](docs/screenshot.png) --\u003e\n\n```\n┌──────────────────────────────────────────────────────────────────────────────┐\n│ 🏠 Home │ 🌿 main │ ~ › code › file-explorer                                  │\n├─────────┼────────────────────────────────────────────────────────────────────┤\n│ ▾ FILES │ [FILES] 🔍 push                                  124 / 8,432       │\n│ src     ├────────────────────────────────────────────────────────────────────┤\n│  ▸ ind… │ │ 🦀 main.rs                          src/                  4.8 KB │\n│  ▸ wat… │ │ 📝 README.md                        ./                    9.0 KB │\n│         │ │ 📁 scripts                          ./                  – items  │\n│ assets  │ │ 🦀 index.rs                         src/                  2.4 KB │\n│ scripts │ │                                                                  │\n│ docs    │ │ ───── preview ──────────────────────────────────────────────────│\n│         │ │   fn push_undo(\u0026mut self, action: UndoAction) { … }              │\n│ LOCATI  │ │   self.undo_stack.push(action);                                  │\n│ ⌘1 Home │ │   …                                                              │\n│ ⌘2 Docs │                                                                    │\n├─────────┴────────────────────────────────────────────────────────────────────┤\n│ ↵ open  ⌘↵ reveal  ⇥ descend  ␣ quicklook  ⌘F find  ⌘Z undo  ⇅ relevance     │\n└──────────────────────────────────────────────────────────────────────────────┘\n```\n\n## Why\n\nFinder is fine for browsing, but slow when you actually know what you're looking for. `fzf` is fast but command-line only. This is the in-between: native-feeling, GPU-rendered, with `fzf`-style filtering and `ripgrep`-style content search baked in.\n\n## Features\n\n- **Fuzzy filename search** powered by [nucleo](https://github.com/helix-editor/nucleo) (Helix's matcher). Streams results as the walker discovers files — `~/` indexes in under a second.\n- **Content search** (`⌘F`) using the [grep crates](https://docs.rs/grep) — ripgrep's matcher and searcher, gitignore-aware, multi-threaded. Enter on a hit opens the file at the matching line in VS Code / Cursor / your `$EDITOR`.\n- **Syntax-highlighted previews** for ~150 languages via [syntect](https://github.com/trishume/syntect) + [two-face](https://github.com/eth-p/two-face) (TypeScript, Astro, Vue included). Images, PDFs, Office docs, videos, and audio get inline Quick Look thumbnails (cached via `qlmanage`).\n- **Translucent macOS-native UI** — full Metal vibrancy, Catppuccin Mocha palette, emoji-based file icons (no font install needed), bold yellow folder names.\n- **Tabs** (`⌘T` / `⌘W` / `⌘⇧]` / `⌘⇧[`) with per-tab state saved across launches.\n- **In-window tree pane** (`⌘\\`) — VS Code–style disclosure triangles.\n- **Multi-select** with `Shift+Click` / `⌘+Click`, batch trash and batch rename with a live find/replace preview.\n- **Undo** (`⌘Z`) for renames and moves, persisted across sessions.\n- **Right-click context menu** — Open / Reveal / Quick Look / Copy Path / Rename / Trash.\n- **Self-update check** against GitHub Releases (set `FILE_EXPLORER_UPDATE_REPO=owner/repo` at compile time).\n- **Settings overlay** (`⌘,`) — toggle hidden files, sort default, persisted to `~/.config/file-explorer/settings.txt`.\n\n## Install\n\n### Pre-built `.app` (recommended)\n\nEach release at [github.com/situmorang-com/file-explorer/releases](https://github.com/situmorang-com/file-explorer/releases) ships a `file-explorer-vX.Y.Z-macos.zip` with the bundled `File Explorer.app`. Download, unzip, drag into `/Applications`.\n\n### Homebrew (after a tap is set up)\n\nOnce you create your tap repo (see [homebrew/file-explorer.rb](homebrew/file-explorer.rb) for a starter formula):\n\n```bash\nbrew install situmorang-com/tap/file-explorer\n```\n\n### From source\n\nYou'll need Rust (1.91+), Xcode (full app, not just Command Line Tools), and the Metal toolchain:\n\n```bash\nsudo xcode-select -s /Applications/Xcode.app/Contents/Developer\nsudo xcodebuild -runFirstLaunch\nsudo xcodebuild -downloadComponent MetalToolchain\nxcrun metal --version   # should print a version\n```\n\nThen:\n\n```bash\ngit clone https://github.com/situmorang-com/file-explorer.git\ncd file-explorer\ncargo run --release -- ~/code   # or any starting directory\n```\n\nFor a real `.app` bundle (drag into `/Applications`):\n\n```bash\ncargo install cargo-bundle\ncargo bundle --release\nopen \"target/release/bundle/osx/File Explorer.app\"\n```\n\nOptionally drop a 1024×1024 PNG and run `./scripts/make-icon.sh icon.png` to bundle a custom icon.\n\n## Keyboard map\n\n### Navigation\n| Key | Action |\n|---|---|\n| `↑` `↓` / `Ctrl+J` `Ctrl+K` / `Ctrl+N` `Ctrl+P` | Move selection |\n| `Ctrl+D` `Ctrl+U` | Half-page down/up |\n| `PageDown` `PageUp` | Page down/up |\n| `Home` `End` / `⌘↑` `⌘↓` | Jump to first/last |\n| `Tab` | Descend into selected folder |\n| `Shift+Tab` / `Backspace` (empty query) | Go to parent |\n| `Enter` | Open (or jump-to-line in content mode) |\n| `⌘Enter` | Reveal in Finder |\n| `Space` | Quick Look preview |\n\n### Search \u0026 mode\n| Key | Action |\n|---|---|\n| Any printable | Append to query |\n| `Backspace` | Delete query char (or ascend if empty) |\n| `⌘F` | Toggle content search (ripgrep mode) |\n| `⌘L` | \"Go to\" path bar |\n| `⌘J` | Cycle sort: relevance / name / size / modified |\n| `⌘H` | Toggle hidden files |\n| `⌘R` | Refresh / re-walk |\n\n### File operations\n| Key | Action |\n|---|---|\n| `⌘C` | Copy path(s) of selection / marked |\n| `⌘⇧C` | Copy basename(s) |\n| `⌘V` | Paste-move clipboard paths into selected folder |\n| `⌘⌫` | Move selection / marked to Trash |\n| `F2` | Rename |\n| `⌘F2` | Batch rename marked (find/replace template, live preview) |\n| `⌘⇧N` | New folder |\n| `⌘⌥N` | New file |\n| `⌘Z` | Undo |\n\n### Selection\n| Key | Action |\n|---|---|\n| `⌘+Click` | Toggle mark on row |\n| `Shift+Click` | Range-mark from last anchor |\n| `⌘A` | Mark all visible results |\n| `⌘D` | Clear marks |\n\n### Tabs \u0026 windows\n| Key | Action |\n|---|---|\n| `⌘T` | New tab |\n| `⌘W` | Close tab |\n| `⌘⇧]` `⌘⇧[` | Next / previous tab |\n| `⌘N` | New window |\n| `⌘1`–`⌘6` | Jump to pinned location |\n| `⌘B` | Bookmark current root |\n| `⌘\\` | Toggle file tree pane |\n| `⌘,` | Settings overlay |\n| `Esc` | Close overlay / quit |\n\n### Text editing in modals\nPath bar, Rename, Create, Batch rename all support:\n- `←` `→` (chars), `⌥←` `⌥→` (words), `⌘←` `⌘→` / `Home` `End` (line)\n- `Backspace`, `⌥Backspace`, `⌘Backspace`, `Delete`\n- `Shift` + any motion above to extend selection\n- `⌘A` select all, `⌘C` copy, `⌘X` cut, `⌘V` paste\n\n## Configuration\n\nFiles live under `~/.config/file-explorer/`:\n\n| File | What it stores |\n|---|---|\n| `settings.txt` | `show_hidden=true/false`, `sort=relevance/name/size/modified` |\n| `session.txt` | Open tabs with per-tab root, query, sort, selected index |\n| `bookmarks.txt` | One bookmark path per line |\n| `recents.txt` | Last 8 visited roots |\n| `undo.txt` | Persisted undo stack (capped at 50 actions) |\n\n## Architecture\n\n- [src/main.rs](src/main.rs) — UI and Explorer state machine\n- [src/index.rs](src/index.rs) — parallel `ignore::WalkBuilder` streaming into Nucleo\n- [src/content_search.rs](src/content_search.rs) — ripgrep-style file-content search\n- [src/watcher.rs](src/watcher.rs) — `notify` filesystem watcher with debounce\n- [src/highlight.rs](src/highlight.rs) — `syntect` + `two-face` syntax highlighting\n- [src/settings.rs](src/settings.rs) — settings file parser\n- [src/updater.rs](src/updater.rs) — GitHub Releases version check\n\n## What's not in here yet\n\n- External drag-out to other apps (gpui doesn't expose `NSDraggingSource`; needs a small `objc2` shim).\n- Full Sparkle auto-update (currently it only checks for updates and opens the release page).\n- Linux / Windows ports — would mean a different renderer.\n- Tree-pane keyboard navigation.\n\n## Acknowledgements\n\nBuilt on [GPUI](https://www.gpui.rs/) by Zed Industries. Search powered by [nucleo](https://github.com/helix-editor/nucleo) (Helix) and the [grep crates](https://docs.rs/grep) (ripgrep). Syntax highlighting by [syntect](https://github.com/trishume/syntect) + [two-face](https://github.com/eth-p/two-face).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsitumorang-com%2Ffile-explorer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsitumorang-com%2Ffile-explorer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsitumorang-com%2Ffile-explorer/lists"}