Language intelligence
Grove ships language-server coverage the way Zed does: you don't install language servers yourself. The first time a file needs one, Grove offers a one-click install — and from then on go-to-definition, find-references, hover, completion, and rich highlighting just work.
Opt-in installs
Grove never downloads a server behind your back. The first time you open a language that needs one, a small card appears in the corner — Install / Not now / Never — with the server's name and download size. Accept and you'll see live progress (downloading, installing, ready); decline and the editor still works, just without language smarts for that language. "Never" is remembered until you re-enable the language.
Installs land in Grove's own cache, never inside your projects, and versions are pinned per Grove release.
Coverage
| Language | Server |
|---|---|
| Rust | rust-analyzer |
| TypeScript / JavaScript | typescript-language-server |
| Python | basedpyright |
| Go | gopls (uses your Go toolchain on PATH) |
| C / C++ | clangd |
| Bash | bash-language-server |
| JSON / CSS / HTML | vscode language servers |
| YAML | yaml-language-server |
Python uses basedpyright, the pyright fork that supports semantic highlighting over LSP — without it, Python files would get basic coloring only.
Capabilities
- Go-to-definition and go-to-implementation
- Find-references — including a Knowledge section listing your own notes anchored to the symbol (see Wikilinks)
- Hover (types and docs)
- Completion
- Semantic highlighting that tracks your unsaved edits — coloring follows the buffer you're looking at, not the last saved copy
- Inline diagnostics — error and warning squiggles, off by default (some servers are noisy in unusual project layouts); turn them on in Settings → LSP
Project roots
A language server only resolves imports correctly when it's started at the right root — and in a monorepo that's often a subdirectory, not the repo top. Grove finds the nearest enclosing config (tsconfig.json, pyrightconfig.json, Cargo.toml, go.mod, …) automatically, and Settings → LSP offers a per-project manual root override for repos the walk can't infer.
Managing servers
Settings → LSP shows every running server — restart a stuck one, or turn a language off to reclaim memory (it stays off across restarts until re-enabled). The process monitor offers the same controls next to each server's RAM usage. One server runs per language, shared across all your worktrees and windows, so twenty workspaces don't mean twenty copies of rust-analyzer.
The same engine backs the agent-facing navigation tools (goto_definition, find_references, hover, and friends) — see MCP.