Editors · the bb_lsp language server
Your editor, answering from the same index.
bb_lsp is Backbencher’s language server: hover that names its evidence tier, go-to-definition, find references, document and workspace symbols, call hierarchy, impact and graph views — all served from the local index your CLI and MCP tools read. It is a complement to your editor’s own language server, not a replacement: no completion, no diagnostics, no rename.
What you get in the editor.
The server answers from stored facts, so every response can show the tier it came from and whether the record is fresh. The same rules as the CLI, the MCP tools and the graph.
Hover that names its evidence
Type, signature and the stored relationship facts for the symbol under the cursor, with its evidence tier and whether the record is fresh or stale. No guessed signature: if the index does not know, the hover says so. Cross-language handoffs are named in the hover where the index stores them.
Go to definition
Jump to the declaration the index stored, not a text match. A position the index does not know returns an empty result rather than a plausible guess.
Find references
Every indexed reference to the symbol, one location per served position. Stored rows that cannot be resolved to a source position are omitted and counted, never invented.
Document and workspace symbols
The symbols of the open file and of the whole index. Workspace results follow the index’s stored gravity ranking: exact names ahead of fuzzy matches.
Call hierarchy
The recorded callers and callees of a symbol, one level at a time — the same edges the graph and impact tools read.
Impact analysis
The bounded reverse-dependency set: what depends on this symbol, over how many files and within how many hops.
VS Code hover actionOpen in graph
The connections view for the hovered symbol, so the neighbourhood is visible without leaving the editor.
VS Code hover actionLocal, always
The server reads the same local SQLite index your CLI and MCP tools use. Nothing is uploaded; no call leaves the machine.
What it deliberately does not do.
bb_lsp is not a compiler front-end and does not pretend to be one. Your editor keeps its own language server for the jobs that need a full type system; bb_lsp adds the graph facts that server does not have.
Declared exclusions
- No completion
- No diagnostics
- No rename
Where a first-party language server exists, bb_lsp must not degrade its activation or startup — if it does, that is a bug, not a trade-off. It adds graph, navigation and evidence facts to that server; it does not replace it.
Every analyzer is in the launch set.
The launch set is the same analyzer inventory the CLI indexes with: 52 registry ids across 49 analyzers, one server and no per-language configuration. 3 of those ids — TSX, Sass, Terraform — are alias ids answered by their parent analyzer rather than extra languages; Objective-C is outside the editor launch set.
- Java
- Groovy
- Kotlin
- Scala
- TypeScript
- JavaScript
- Python
- Zig
- Go
- Rust
- C
- C++
- Vue
- Svelte
- TSXalias
- HTML
- CSS
- SCSS
- Sassalias
- JSON
- YAML
- TOML
- Markdown
- XML
- GraphQL
- Protobuf
- SQL
- Perl
- Ruby
- PHP
- Lua
- Elixir
- Erlang
- Haskell
- Clojure
- Julia
- R
- Bash
- PowerShell
- Make
- Swift
- Dart
- C#
- F#
- Nim
- Visual Basic
- VBA
- MATLAB
- Clean
- Solidity
- HCL
- Terraformalias
An alias id shares its parent analyzer’s code path and relationship vocabulary; it is a separate registry entry, not a separate language. 49 of the 52 ids are analyzers.
Set it up in your editor.
Install backbencher-brain first, then index the project once with bb index. bb_lsp ships inside the installed package; each integration below launches a server entry on the machine.
VS Code and VS Code forks
bundled extensioncurl -LO https://github.com/backbencher-hq/backbencher-brain/releases/download/v0.1.0/bb-lsp-vscode-0.1.0.vsix code --install-extension bb-lsp-vscode-0.1.0.vsix
Scope: all 52 registry ids
Zed
dev extensionExtensions → Install Dev Extension → the product checkout’s ide/zed/bb-lsp directory, then open a file in an indexed project.
Scope: TypeScript, JavaScript
Helix
languages.toml entryAdd a languages.toml entry whose server command is: node "<npm root -g>/@backbencher/brain/dist/lsp/server.js"
Scope: TypeScript, JavaScript, Java, Scala
JetBrains
LSP4IJ templateLSP4IJ → Language Servers → Import from custom template → ide/lsp4ij/bb-lsp in the product checkout.
Scope: TypeScript, JavaScript, Java, Scala
Distribution
The VS Code extension is attached to the GitHub release as bb-lsp-vscode-0.1.0.vsix; it is not on a marketplace yet. The 0.1.x extension line requires a server that reports version 0.1.0 or newer, and refuses a server that will not state its version.
Editor configuration and the server live in the product repository.
Settings.
5 settings from the extension manifest, with the defaults a fresh install runs with.
| Setting | Default | What it does |
|---|---|---|
| bbLsp.serverPath | empty | explicit server entry override (validated, never guessed) |
| bbLsp.sourceMode | auto | compiled dist preferred; source via bun is a declared fallback |
| bbLsp.minServerVersion | 0.1.0 | minimum server version accepted |
| bbLsp.activationBudgetMs | 150 | declared activation budget; miss it and activation is treated as failed |
| bbLsp.autoIndexMode | ask | consent before building an index; never is a declared no-op |
On a narrow screen the table scrolls sideways inside its panel.