Skip to content

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.

Backbencher Brain (bb_lsp) v0.1.0 · 52 registry ids · requires bb_lsp ≥ 0.1.0

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 action

Open in graph

The connections view for the hovered symbol, so the neighbourhood is visible without leaving the editor.

VS Code hover action

Local, 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 extension
curl -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 extension
Extensions → 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 entry
Add 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 template
LSP4IJ → 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.

bb_lsp settings, their defaults and what each one does
SettingDefaultWhat it does
bbLsp.serverPathemptyexplicit server entry override (validated, never guessed)
bbLsp.sourceModeautocompiled dist preferred; source via bun is a declared fallback
bbLsp.minServerVersion0.1.0minimum server version accepted
bbLsp.activationBudgetMs150declared activation budget; miss it and activation is treated as failed
bbLsp.autoIndexModeaskconsent before building an index; never is a declared no-op

On a narrow screen the table scrolls sideways inside its panel.

Keep going.