Fast file search inside the folder that is open in Finder. Press a shortcut in Finder and a Spotlight-style window searches that folder and all its subfolders as you type: by name (fuzzy) or by text inside files.
Finder's own search defaults to "This Mac", is slow and ranks results oddly. Rummage keeps the open folder listed in memory (~120k files in about a second), searches it in a few milliseconds, and keeps results live as files change.
- Results while you type; case, accents and ё/е ignored; fuzzy:
invctrl→invoice-controller.php - Extension field with suggestions from the open folder:
php,pdf, docx - Text inside files (grep with the matching line + Spotlight for PDF/DOCX); ↵ opens VS Code / Cursor at that line
- ⌘↵ selects the file in the same Finder window; Quick Look, copy path, open in Terminal, drag & drop
- Live updates via FSEvents: created, renamed, moved and deleted files show up without rescanning
- Menu bar app, no Dock icon; English, Russian and Hebrew (right-to-left) UI, following the macOS language
- No dependencies, about 1,800 lines of Swift, universal binary (Apple Silicon + Intel), macOS 14+
- Download
Rummage-x.y.z.zipfrom Releases, unzip, moveRummage.appto Applications. - The app is not notarized by Apple, so the first launch is blocked. Either open
System Settings → Privacy & Security and click Open Anyway next to Rummage, or run:
xattr -dr com.apple.quarantine /Applications/Rummage.app
- A magnifier icon appears in the menu bar. In Finder press ⌥⌘F. When macOS asks "Rummage wants to control Finder", click Allow: that is how it learns which folder is open (System Settings → Privacy & Security → Automation).
Needs only the Xcode Command Line Tools (xcode-select --install).
./build.sh install # build, copy to ~/Applications, launch
./build.sh dist # build and zip into dist/ for sharing./build.sh release signs with a Developer ID certificate (hardened runtime, Resources/Rummage.entitlements
allows the Apple Events to Finder), sends the zip to Apple's notary service, staples the ticket and re-zips,
so the app opens on any Mac without a warning. One-time setup:
- Apple Developer Program membership.
- A Developer ID Application certificate in the login keychain (developer.apple.com → Certificates → +, with a CSR from Keychain Access → Certificate Assistant).
- An app-specific password (account.apple.com → Sign-In and Security), then
xcrun notarytool store-credentials viafirst-notary --apple-id <apple id> --team-id <TEAM ID>(prompts for it).
- By default the shortcut exists only while Finder is in front, so other apps keep ⌥⌘F. Change it in the menu (presets include replacing Finder's ⌘F).
- An empty query lists recently modified files.
- Extension field (the narrow box next to the search field, Tab to get there):
pdforphp, js. It suggests the extensions that exist in the open folder, most common first (↑ ↓ ↵). Works in both modes and is cleared every time the window opens. - Filters in the search field too:
ext:pdf,docxor*.pdf,kind:dir/kind:file. A word with/matches the path:themes/ header. - ⌘1 Names, ⌘2 Contents.
| Keys | Action |
|---|---|
| ↑ ↓, PgUp/PgDn | move selection |
| ↵ or ⌘↓ | open the file / open the folder in the Finder window; a Contents match opens in the code editor at the found line |
| ⌥↵ | open in the code editor (folders open as a project) |
| ⌘↵ | show and select in Finder (same window) |
| ⌘Y | Quick Look |
| ⇧⌘C | copy path |
| ⇧⌘T | open in Terminal |
| Tab | search field ↔ extension field |
| ⌘1 / ⌘2 | Names / Contents |
| ⌘↑ | search the parent folder |
| ⌘→ | search inside the selected folder |
| Esc | close |
Right-click a result for the same actions; drag results into other apps.
Menu bar menu: shortcut, code editor (detected: VS Code, VS Code Insiders, Cursor, Antigravity, Windsurf),
language, "only in Finder", hidden files, skipping node_modules, .git and similar, launch at login.
Swift + AppKit/SwiftUI, built with SwiftPM.
| File | Role |
|---|---|
HotKey.swift |
global shortcut via Carbon (no Accessibility permission needed) |
FinderBridge.swift |
AppleScript: folder of the front Finder window, reveal/select a file |
FileIndex.swift |
recursive in-memory listing, cache for 4 folders; apply() patches it from file events |
FolderWatcher.swift |
FSEvents on the current folder, kept running while the window is hidden |
ExtFilter.swift |
extension field: parsing, completion, suggestions from the index |
Matcher.swift |
ranking: exact name > prefix > word boundary > substring > fuzzy > path match |
ContentSearch.swift |
text search: grep + mdfind -onlyin |
SearchModel.swift, SearchView.swift, SearchPanel.swift |
state, SwiftUI list, non-activating floating panel with Quick Look |
L10n.swift |
L("English") → Resources/Localization/*.lproj, language menu, code editor URL schemes |
Self-tests (after ./build.sh; dist/release refuse to package when they fail):
B=build/Rummage.app/Contents/MacOS/Rummage
$B --self-test # everything: ranking, filters, live updates, contents search, edit keys
$B --render-test out.png -AppleLanguages "(he)" # draws the search window, any language
$B --cli ~/Projects "query" # index + search a real folder, with timingsMIT, see LICENSE.