xes is a fast terminal file searcher for macOS, Linux, and Windows.
It indexes files in parallel, skips noisy directories before traversal enters them, filters results live while you type, and lets you open or reveal the selected result directly from the terminal UI.
GitHub: https://github.com/rgcsekaraa/xes
- Parallel filesystem indexing
- Live fuzzy search and literal substring search
- Early directory exclusion for large repos and project trees
- Keyboard and mouse support
- Cross-platform open behavior
- Scriptable non-interactive output with
--print
- macOS
--action revealreveals the selected file in Finder
- Windows
--action revealreveals the selected file in Explorer
- Linux
--action revealopens the parent directory withxdg-open
Linux does not have a single universal desktop API for “reveal this exact file in the file manager”, so xes falls back to opening the containing folder there.
macOS and Linux:
curl -fsSL https://raw.githubusercontent.com/rgcsekaraa/xes/main/scripts/install-unix.sh | shWindows PowerShell:
irm https://raw.githubusercontent.com/rgcsekaraa/xes/main/scripts/install.ps1 | iexIf you want to install from source:
cargo install --path . --lockedThat installs xes into Cargo's bin directory.
End users do not need Rust or Cargo when installing from release binaries.
Runtime requirements:
- macOS or Linux
curltar
- Windows
- PowerShell
- GUI open support
- macOS:
open - Windows:
explorer - Linux:
xdg-open
- macOS:
Most desktop systems already include these tools. On minimal Linux systems, xdg-open may need to be installed separately.
Search the current directory:
xes .Search a specific path:
xes ~/ProjectsSkip directories immediately:
xes ~/Projects --exclude node_modules,.git,dist,buildStart with a query:
xes ~/Projects --query CargoLiteral substring matching:
xes ~/Projects --literal --query configCase-sensitive matching:
xes ~/Projects --case-sensitive --query MakefilePrint matches without launching the TUI:
xes ~/Projects --print --query Cargo --max-results 20Include hidden files and directories:
xes ~/Projects --hiddenRestrict results to files only:
xes ~/Projects --files-onlyOpen the file itself instead of revealing it:
xes ~/Projects --action fileOpen the parent directory instead:
xes ~/Projects --action parentROOT- Root path to search. Defaults to the current directory.
-e, --exclude- Comma-separated directory names to skip before traversal enters them.
--no-default-excludes- Disable built-in excludes such as
.git,node_modules,target,dist,.cache, and virtual environment folders.
- Disable built-in excludes such as
--hidden- Include hidden files and directories.
--follow-links- Follow symlinks.
--no-ignore-files- Ignore
.gitignore,.ignore, and related parent ignore files.
- Ignore
--files-only- Exclude directories from results.
--max-results- Maximum number of results to display or print.
--threads- Override the indexing worker count.
--batch-size- Tune how many indexed paths are pushed per UI update.
--query- Start with a pre-filled query.
--literal- Use substring matching instead of fuzzy matching.
--case-sensitive- Disable smart case matching.
--print- Print matches and exit instead of launching the interactive UI.
--action- Action for
Enteror mouse click:reveal,parent,file, ornone.
- Action for
- Type to filter
Up/Downto movePageUp/PageDownto move fasterHome/Endto jumpF2orCtrl+Lto toggle literal matchingF3orCtrl+Sto toggle case sensitivityF4orCtrl+Dto toggle deep content searchTaborCtrl+Ato cycle open action?orCtrl+Hto toggle helpEnterto run the configured action on the selected result- Left mouse click to run the configured action on a result
EscorCtrl+Cto quit
In terminal apps, the modifier is Ctrl on both macOS and Windows. Cmd is usually not delivered to terminal TUIs.
By default, xes skips these directory names before traversing into them:
.gitnode_modulestarget.idea.vscodedistbuild.next.turbo.cache__pycache__.venvvenv
This is name-based exclusion and is intentionally optimized for fast project searches.
The Unix installer places xes in:
/usr/local/binif writable- otherwise
~/.local/bin
The Windows installer places xes.exe in:
%LOCALAPPDATA%\Programs\xes\bin
This repo includes .github/workflows/release.yml, which builds release archives for:
- macOS x86_64
- macOS aarch64
- Linux x86_64
- Linux aarch64
- Windows x86_64
To publish a release:
git tag v0.1.0
git push origin v0.1.0The workflow builds the binaries and attaches them to the GitHub release.
Build:
cargo buildRun:
cargo run -- .Run help:
cargo run -- --helpInstall locally:
cargo install --path . --locked --forcexesis optimized for fast local filesystem search, not full-text file contents search.- Large trees still need to be indexed once per run; the UI remains searchable while indexing continues.
- On Linux, file reveal is implemented as opening the parent directory because desktop file manager support is inconsistent across environments.