Interactive symbol finder
IDE - Zed
zed.mp4
Terminal - Ghostty
ghostty.mp4
snav is a terminal UI for jumping to any symbols.
Type a query, pick a result, and open the exact file:line:col.
- Find functions, types, classes, constants, and more across the repo
- Fuzzy-ranked results while you type
- Syntax-highlighted preview before opening
- Fast reopen with local cache
- Works on macOS, Linux, and Windows
Syntax-highlighted preview currently supports:
- Go
- Rust
- Zig
- C#
- Java
- Kotlin
- PHP
- Ruby
- Python
- JavaScript
- TypeScript
- TSX
- Swift
- Bash
- C
- C++
- JSON
- YAML
- TOML
Common config and markup files such as .env, .ini, .properties, .tf, .hcl, and .xml are also indexed with heuristic key matching, but do not have the same first-class language support as the list above.
snav requires rg on your PATH.
curl -fsSL https://raw.githubusercontent.com/m7b-io/snav/main/install | bashDefault install path: /usr/local/bin.
Update an existing install in place:
snav updateOptional local install path:
SNAV_INSTALL_DIR="$HOME/.local/bin" curl -fsSL https://raw.githubusercontent.com/m7b-io/snav/main/install | bashBy default, the installer auto-enforces signature verification when cosign is available.
Optional: enforce signature verification explicitly (requires cosign):
SNAV_REQUIRE_SIGNATURE=1 curl -fsSL https://raw.githubusercontent.com/m7b-io/snav/main/install | bashsnav --root .Keys:
- Type to filter symbols
up/downorctrl+p/ctrl+n: movetab: toggle previewenter: open selected resultctrl+space: copypath:line:colescorctrl+c: quit
--exclude-tests: ignore common test files/directories--no-ignore: include files ignored by.gitignore,.ignore,.rgignore--theme github: set color theme--highlight-context synthetic: use line-only highlighting--editor-cmd "code --goto {target}": custom open command
~/.config/zed/tasks.json:
[
{
"label": "snav",
"command": "snav --exclude-tests --root $ZED_WORKTREE_ROOT",
"use_new_terminal": false,
"allow_concurrent_runs": false,
"reveal": "always",
"reveal_target": "center",
"hide": "always",
"shell": "system",
"show_summary": false,
"show_command": false
}
]~/.config/zed/keymap.json:
[
{
"context": "Workspace",
"bindings": {
"cmd-shift-t": [
"task::Spawn",
{
"task_name": "snav"
}
]
}
}
]- Press your keybinding
- Jump around
snav keeps one local index cache for the most recent root and scan options.
When settings match, cached results load first and a rescan refreshes in the background.
MIT - see LICENSE.