
Product
Introducing Reports: An Extensible Reporting Framework for Socket Data
Explore exportable charts for vulnerabilities, dependencies, and usage with Reports, Socket’s new extensible reporting framework.
@nuanced-dev/lsp
Advanced tools
This is the TypeScript library and CLI for the Nuanced LSP containerized code navigation service.
It supports multiple languages and helps retrieve code context and symbol resolution and symbol relationships for a mounted workspace.
System dependencies:
Resource requirements:
Install Nuanced LSP:
Install the package:
npm install -g @nuanced-dev/lsp
Assuming all system dependencies are satisfied and the TypeScript client was successfully built, you should see confirmation the bin/nuanced-lsp binary was added.
Run the CLI:
# Start the container with your workspace
nuanced-lsp up /path/to/workspace
# The first time it can take a while for the service to start because it needs to pull the necessary Docker images._
# Check container status
nuanced-lsp status
# Check service health
nuanced-lsp health
# List all files in the workspace
nuanced-lsp list-files
# Get symbol definitions in a file
nuanced-lsp definitions-in-file src/index.ts
# Find definition at a specific position (line:char, 0-indexed)
nuanced-lsp find-definition src/index.ts --position 10:5
# Find all references to a symbol
nuanced-lsp find-references src/index.ts --position 10:5
# Stop the container
nuanced-lsp down
See all available commands:
nuanced-lsp --help
Use as a library:
Add package dependency:
npm i -S @nuanced-dev/lsp
Example usage:
import { NuancedLspClient } from '@nuanced-dev/lsp';
const client = new NuancedLspClient();
// Start container with workspace
await client.up({ workspace: '/path/to/workspace' });
// List workspace files
const files = await client.listFiles();
console.log(files);
// Get definitions in a file
const definitions = await client.definitionsInFile({ file: 'src/index.ts' });
// Find definition at position
const definition = await client.findDefinition({
file: 'src/index.ts',
position: { line: 10, character: 5 }
});
// Find all references
const references = await client.findReferences({
file: 'src/index.ts',
position: { line: 10, character: 5 }
});
// Clean up
await client.down();
| Language | Image | Language Server |
|---|---|---|
| C/C++ | nuanced-lsp-clangd | clangd |
| C# | nuanced-lsp-csharp | omnisharp |
| Golang | nuanced-lsp-golang | gopls |
| Java | nuanced-lsp-java | eclipse-jdtls |
| PHP | nuanced-lsp-php | phpactor |
| Python | nuanced-lsp-python | jedi-language-server |
| Ruby | nuanced-lsp-ruby-VERSION | ruby-lsp |
| Ruby (Sorbet) | nuanced-lsp-ruby-sorbet-VERSION | sorbet |
| Rust | nuanced-lsp-rust | rust-analyzer |
| TypeScript/JavaScript | nuanced-lsp-typescript | typescript-language-server |
We aim to support the Ruby versioned released in the last year.
Below is a high-level overview of available API (arguments/options omitted here for brevity).
Lifecycle (reference docs):
up – Start the Nuanced LSP Docker containerdown – Stop the containerlogs – Print or stream container logspull – Pull the Nuanced LSProxy Docker imagerun – Run a script inside the containerstatus – Show Docker lifecycle statusSystem (reference docs):
health – Check server health and language readiness flagsWorkspace (reference docs):
list-files – List files detected in the workspaceread-source – Read file contents (optionally a range)Symbols (reference docs):
definitions-in-file – List symbol definitions in a filefind-definition – Find the definition at a given positionfind-identifier – Find identifiers by name in a filefind-referenced-symbols – Find symbols referenced by the identifier at a given positionfind-references – Find all references to the identifier at a given positionThis should map 1:1 against the upstream LSProxy API reference.
Nuanced LSP uses multiple Docker containers to provide LSP functionality.
You can override the default container images using CLI flags:
--service-image-version overrides the version of the service images--language-image-version overrides the version of the language images--container-registry overrides the container registry where images are pulled fromnuanced-lsp up /path/to/workspace \
--service-image-version 0.4.9 \
--language-image-version 1.0.0
Environment variables:
It is also possible to override some aspects of the containers with the following environment variables:
NUANCED_LSP_CONTAINER_NAME - Set the name of the container to start or useNUANCED_LSP_PORT - Set the port at which the Nuanced LSP API is exposedNUANCED_LSP_TIMEOUT - Set the timeout for API requestsThe following variables can be used to override the service and language images that are used:
CONTAINER_REGISTRY - Override the container registryLANGUAGE_IMAGE_VERSION - Override the language image versionSERVICE_IMAGE_VERSION - Override the service image versionThese are useful for testing development builds or using custom container images.
If Nuanced LSP is not working as expected, check the following common issues:
Docker is not running. Docker is required to start the containerized LSP servers.
The Docker socker is not exposed. The services requires access to the Docker socker to be able to start language containers on demand.
Nuanced LSP is already running for another workspace. If Nuanced LSP is already running for another workspace, it cannot bind to the default API port. To run the service multiple times, explicitly specify which port to use.
Nuanced LSP is maintained but not under active development. We do accept bug fixes, documentation improvements, and small, well-scoped extensions. Supporting larger extensions, feature requests, or support with custom integration and deployment scenarios are out of scope.
For more details see support and contribution guidelines in the repository.
This work is licensed under the terms of the MIT license. For a copy, see LICENSE or https://opensource.org/licenses/MIT.
FAQs
TypeScript library and CLI for Nuanced LSP
We found that @nuanced-dev/lsp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Explore exportable charts for vulnerabilities, dependencies, and usage with Reports, Socket’s new extensible reporting framework.

Product
Socket for Jira lets teams turn alerts into Jira tickets with manual creation, automated ticketing rules, and two-way sync.

Company News
Socket won two 2026 Reppy Awards from RepVue, ranking in the top 5% of all sales orgs. AE Alexandra Lister shares what it's like to grow a sales career here.