This is a feature request for Warp, a modern terminal, to allow users to add custom Language Server Protocol (LSP) configurations. The proposed solution involves a Neovim-like configuration in the settings file, enabling users to define binary paths, arguments, and file types for unsupported languages. When opening a file of a custom-configured language type, Warp would prompt the user to enable the server.
A starter prompt for Claude Code, what you'll need, and how to reach them.
You are an expert Rust developer with experience contributing to large open-source projects. Your task is to implement support for custom Language Server Protocol (LSP) configurations in the `warpdotdev/warp` terminal application. The goal is to allow users to define external LSP binaries, their arguments, and associated file types within Warp's settings, similar to Neovim's LSP configuration. Here's the plan: 1. **Fork the `warpdotdev/warp` GitHub repository.** 2. **Identify the existing LSP integration points:** Locate how Warp currently discovers, configures, and launches built-in language servers. Focus on files related to settings, language detection, and process management for LSPs. 3. **Implement settings parsing for custom LSPs:** Add a new section to Warp's configuration file schema (likely TOML or JSON) that allows users to define custom LSPs. Each custom LSP entry should include `path_to_binary` (string), `arguments` (list of strings, optional), and `file_types` (list of strings, e.g., `["my_lang", "myl"]`). 4. **Integrate custom LSPs into the LSP manager:** Modify Warp's internal LSP management system to load and register these custom configurations alongside the native ones. This might involve adapting an existing `LspClient` or similar abstraction. 5. **Develop activation logic and UI prompt:** When a user opens a file whose type is associated with a custom LSP, detect this and display a non-intrusive prompt in the footer (e.g., 'Enable custom LSP for this file type?') with an option to activate it. This prompt should persist for the current session or until dismissed. 6. **Error Handling:** Implement robust error handling for cases like missing binaries, invalid paths, or failed LSP startup. **MVP Scope:** Focus on getting a single custom LSP (e.g., for a hypothetical 'mylang') to correctly launch and provide basic diagnostics (if supported by the custom server) when a `.mylang` file is opened and the user opts-in via the footer prompt. **Stack:** The Warp project is primarily written in Rust. You will be working within the existing Rust codebase. **Build/Verify Gate:** A custom LSP for a trivial language (e.g., one that just echoes text or provides basic linting) can be configured by the user via settings. When a file of that type is opened, Warp displays the 'enable server' prompt, and upon activation, the custom LSP process starts and interacts correctly with the editor buffer.
Developers using Warp are likely users of AI coding tools and other developer productivity enhancements; Lumivara can reach them with developer tools like forge-kit or ai-usage-monitor.
### Pre-submit Checks - [x] I have [searched Warp feature requests](https://github.com/warpdotdev/warp/issues?q=is%3Aissue+label%3AFEATURE) and there are no duplicates - [x] I have [searched Warp docs](https://docs.warp.dev) and my feature is not there ### Describe the solution you'd like? Allow users to configure custom language servers that are not supported out-of-the-box in app To add more color to the product behavior I think we should be building towards: * We should directly support a neovim-like (https://neovim.io/doc/user/lsp/) config in our settings file. This adds that server into our set of globally installed servers * The user flow here would be: * User opens a file editor. If this is a language we does not support natively, we show a link to documentation on how to add custom lsp configs * User can define the path to binary, arguments, and file types for a custom lsp binary in their settings file * Now whenever they open a file of the same language type, in the footer we can support showing “enable server X for repo Y” ### Is your feature request related to a problem? Please describe. _No response_ ### Additional context _No response_ ### Operating system
Standard GitHub workflow for open-source contributions.
Warp is written in Rust; significant Rust proficiency is required for this level of contribution (~1-2 weeks to get comfortable with Warp's specific idioms).
Learn it: Search getting-started ↗
Familiarity with LSP specification is crucial for implementing server integration (~1 day).
Learn it: Search getting-started ↗
Get set up: Create the account/instance, generate the API key or credentials, and add them to your project's environment variables.
Understanding how terminals integrate with underlying OS features and UI frameworks (~1-2 days).
Learn it: Search getting-started ↗
Comment directly on the GitHub issue #8803, providing a detailed plan or linking to a draft PR.
“I've started working on a prototype for custom LSP support in Warp, aiming for a Neovim-like configuration. I'm leveraging my experience with Rust and developer tooling. Would you be open to reviewing a draft PR with a minimal viable implementation soon?”
Open the original ↗