Documentation
Changelog
D-2508Settings

Language servers

Which LSPs the built-in editor uses for diagnostics, completions, and navigation.

Available on
Available onDesktop
Reviewed
August 15, 2026
On this page

The built-in editor uses Language Server Protocol (LSP) servers for diagnostics, autocomplete, hover docs, go-to-definition, rename, and code actions. Glueprint discovers a set of language servers automatically when you open a folder.

Auto-discovered LSPs

When you open a folder, Glueprint scans for language servers it knows about and registers any it finds. Open Settings > Language servers to see what’s registered.

Each row shows:

  • The language it handles.
  • The LSP binary’s path (where it was found).
  • Its current state.

Languages supported today

Glueprint’s discovery registry currently covers:

  • Rust
  • TypeScript and JavaScript
  • Python
  • Go
  • PHP
  • C#
  • Java

If the language you want isn’t in this list, the discovery registry doesn’t have a built-in rule for it yet. We’re adding more over time.

Java and jdtls

Java uses Eclipse JDT Language Server (jdtls). Install a JDK 21 or newer first (Eclipse Temurin is a good default); Settings > Diagnostics carries a Java JDK row that tells you what Glueprint found.

Glueprint can download the language server for you. When no jdtls is on PATH, the Java row in Settings > Language servers shows an Install button: it fetches a pinned, checksum-verified build of jdtls and the java-debug plugin into Glueprint’s cache and the row flips to Ready. A jdtls you put on PATH yourself always takes precedence over the managed install.

The first time you open a Java file in a project, jdtls imports the Gradle or Maven build, which can take a minute or more. The row reads Indexing while that runs; completion and navigation already work, with results filling in as the import finishes. Each project root gets its own jdtls workspace in Glueprint’s cache, removed when you remove the worktree.

The project root is the directory with settings.gradle(.kts); otherwise the outermost pom.xml in a contiguous Maven parent/module tree; otherwise the directory with build.gradle(.kts). Language features cover .java files only; Kotlin files get syntax highlighting from the editor.

C# and csharp-ls

First install the .NET 10 SDK. Then install csharp-ls:

dotnet tool install --global csharp-ls

csharp-ls needs the .NET 10 SDK as its own runtime, independently of the target framework of the code you are editing. csharp-ls 0.24.0 or newer is recommended. Older builds send a configuration request during startup; Glueprint answers it with defaults, so they load a solution too, but they miss later fixes.

A solution file anywhere up the tree wins over a nearer project file. Rooting the server at a single project inside a multi-project solution gives you a server that starts and looks healthy but cannot resolve symbols outside that one project.

Language features cover .cs files only. Razor (.cshtml, .razor) and F# get syntax highlighting from the editor, not language features.

Settings > Diagnostics carries a .NET SDK row showing whether the SDK is installed, its version, and whether it meets the .NET 10 floor csharp-ls needs.

Re-detect

If you’ve installed an LSP after launching Glueprint, click Re-detect at the top of Settings > Language servers to rescan.

State

Each server has a state badge:

  • Running — responding.
  • Indexing — started and answering requests, but still importing or indexing the workspace. Results can be partial until it reaches Running. Servers that import a build (jdtls) sit here for a while on a first open.
  • Idle — registered, not currently handling requests.
  • Starting — launching now.
  • Missing — the binary couldn’t be found.
  • Crashed — the process died and Glueprint is showing you the last error.