lsproxy - Precise code navigation via an API

What is lsproxy?

lsproxy offers IDE-like code analysis and navigation functionality in a docker container with a REST API.

It supports multiple languages and resolves relationships between code symbols (functions, classes, variables) anywhere in the project - which can be used to help AI assistants navigate a codebase or build custom code RAG systems.

lsproxy runs Language Servers and ast-grep under the hood, giving you precise search results without the headache of configuring and integrating language-specific tooling.

Key Features

  • ๐ŸŽฏ Precise Cross-File Code Navigation: Find symbol definitions and references across your entire project.
  • ๐ŸŒ Unified API: Access multiple language servers through a single API.
  • ๐Ÿ› ๏ธ Auto-Configuration: Automatically detect and configure language servers based on your project files.
  • ๐Ÿ“Š Code Diagnostics: (Coming Soon) Get language-specific lint output from an endpoint.
  • ๐ŸŒณ Call & Type Hierarchies: (Coming Soon) Query multi-hop code relationships computed by the language servers.
  • ๐Ÿ”„ Procedural Refactoring: (Coming Soon) Perform symbol operations like rename, extract, auto import through the API.
  • ๐Ÿงฉ SDKs: Libraries to get started calling lsproxy in popular languages.

Getting started

The easiest way to get started is to run our tutorial! Check it out at demo.lsproxy.dev Itโ€™s also super easy to run lsproxy on your code! We keep the latest version up to date on Docker Hub, and we have a Python SDK available via pip.

Install the sdk

pip install lsproxy-sdk

You can find the source for the SDK here

Run a container or add to compose

Make sure your WORKSPACE_PATH is an absolute path, otherwise docker will complain.

docker run -p 4444:4444 -v $WORKSPACE_PATH:/mnt/workspace agenticlabs/lsproxy
services:
  lsproxy:
    image: agenticlabs/lsproxy
    ports:
      - "4444:4444"
    volumes:
      - ${WORKSPACE_PATH}:/mnt/workspace

You can find the reference for the API that lsproxy exposes here

Explore your workspace!

from lsproxy import Lsproxy

client = Lsproxy()
file_path = "relative/path/from/project/root.cpp"
symbols = client.definitions_in_file(file_path)
for symbol in symbols:
    print(f"{symbol.name} is defined in {file_path}")

Building products with lsproxy

If youโ€™re building AI coding agents or code RAG, or would like to use lsproxy in a commercial product, please reach out!

Contributing

We appreciate all contributions! You donโ€™t need to be an expert to help out. Please see CONTRIBUTING.md for more details on how to get started.

Questions? Reach out to us on Discord.

Community

Weโ€™re building a community. Come hang out with us!

Supported languages

Weโ€™re looking to add new language support or better language servers so let us know what you need!

LanguageServerURL
Javascripttypescript-language-serverhttps://github.com/typescript-language-server/typescript-language-server
Pythonpyrighthttps://github.com/microsoft/pyright
Rustrust-analyzerhttps://github.com/rust-lang/rust-analyzer
Typescripttypescript-language-serverhttps://github.com/typescript-language-server/typescript-language-server
Your Favorite LanguageAwesome Language Serverhttps://github.com/agentic-labs/lsproxy/issues/new