Search and palettes
Three navigation surfaces: a file palette, full-text project search, and a command palette. Find a file, find a string, run a command.
File palette — Cmd+P
VS Code-style fuzzy quick-open over the whole workspace.
- Matching runs off the main thread (an fzf index in a Web Worker), so results never lag the cursor even on large repos.
- Ranking blends the fuzzy score with basename and recency boosts — files and folders you touch often float up. An empty query just shows your recent files.
- Path-style queries work:
auth/servmatches the directory againstauthand the filename againstserv. - Smart-case: lowercase queries match case-insensitively; add a capital to make it strict.
- When a task is active, that task's changed files are indexed too, tagged as overlay entries.
- Inside the markdown editor, typing
@opens an inline version of the same index to insert a file link. See Markdown editor.
Project search — Cmd+Shift+F
ripgrep on file contents, run from the Rust backend.
- Honours
.gitignoreby default. - Literal by default; toggle the regex pill in the search bar to switch to a regex matcher.
- Results stream in as ripgrep finds them and the list is virtualized — a thousand-match query doesn't block the UI.
- Per-file result groups with line + context snippets; click a hit to jump to the file viewer at that line.
Command palette — Cmd+K
Fuzzy match over Grove's actions, grouped: Actions (new task, open last terminal), Panels (toggle task rail / file tree / comments), Editors (split pane, toggle chat, settings, shortcuts, project search), and File (copy relative/absolute path).
When the workspace has a GitHub remote, the palette also lists open pull requests live — selecting one opens it as a review task. See GitHub PR sync.
New-tab picker — Alt+N
Not an overlay: an empty editor tab renders as a picker. Tiles for New note, Browser, New terminal, New chat (docked as a pane tab), and Open file… (which hands off to the file palette).
Cmd+P vs Cmd+K
Cmd+Pis purpose-built for filenames and is faster for "open this file."Cmd+Kis for actions: panels, panes, settings, PRs. Use it when "open this file" isn't what you want.
Indexing
- The file index lives in memory, warms on first use, and is cached for a few minutes per workspace — a missed filesystem event self-heals when the cache expires.
- No persistent text-search index:
rgruns live per query. Snappy up to ~1M-LOC repos; we'll revisit if that stops being true.
Keyboard
| Action | Default |
|---|---|
| Command palette | Cmd+K |
| File palette | Cmd+P |
| Project search | Cmd+Shift+F |
| New empty tab | Alt+N |
Within results: ↑ / ↓ move selection, Enter opens, Esc closes. Full list: Keyboard shortcuts.
Out of scope for now
- Workspace-wide symbol search (LSP go-to-definition and find-references work within open files — see LSP).
- Persistent / pre-warmed text index.
- Search-and-replace across files.
Where this lives in the code
- File index and palette:
src/lib/fileSearchIndex.ts,src/workers/fileSearch.worker.ts,src/components/FilePalette.tsx. - Project search:
src/components/ProjectSearch.tsx,src-tauri/src/search.rs. - Command palette and new-tab picker:
src/components/CommandPalette.tsx,src/components/NewTabPicker.tsx.