Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.9.2] - 2026-03-21

### Fixed
- Add missing `offset_encoding` field to `InitializeResult` in LSP server

### Security
- Update `quinn-proto` 0.11.13 -> 0.11.14

## [0.9.1] - 2026-03-04

### Security
Expand Down Expand Up @@ -401,7 +409,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- TLS enforced via rustls
- cargo-deny configured for vulnerability scanning

[Unreleased]: https://github.com/bug-ops/deps-lsp/compare/v0.9.1...HEAD
[Unreleased]: https://github.com/bug-ops/deps-lsp/compare/v0.9.2...HEAD
[0.9.2]: https://github.com/bug-ops/deps-lsp/compare/v0.9.1...v0.9.2
[0.9.1]: https://github.com/bug-ops/deps-lsp/compare/v0.9.0...v0.9.1
[0.9.0]: https://github.com/bug-ops/deps-lsp/compare/v0.8.0...v0.9.0
[0.8.0]: https://github.com/bug-ops/deps-lsp/compare/v0.7.1...v0.8.0
Expand Down
24 changes: 12 additions & 12 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

26 changes: 13 additions & 13 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ exclude = ["crates/deps-zed"]
resolver = "3"

[workspace.package]
version = "0.9.1"
version = "0.9.2"
edition = "2024"
rust-version = "1.89"
authors = ["Andrei G"]
Expand All @@ -15,18 +15,18 @@ repository = "https://github.com/bug-ops/deps-lsp"
async-trait = "0.1"
criterion = "0.8"
dashmap = "6.1"
deps-core = { version = "0.9.1", path = "crates/deps-core" }
deps-cargo = { version = "0.9.1", path = "crates/deps-cargo" }
deps-npm = { version = "0.9.1", path = "crates/deps-npm" }
deps-pypi = { version = "0.9.1", path = "crates/deps-pypi" }
deps-go = { version = "0.9.1", path = "crates/deps-go" }
deps-bundler = { version = "0.9.1", path = "crates/deps-bundler" }
deps-dart = { version = "0.9.1", path = "crates/deps-dart" }
deps-maven = { version = "0.9.1", path = "crates/deps-maven" }
deps-composer = { version = "0.9.1", path = "crates/deps-composer" }
deps-gradle = { version = "0.9.1", path = "crates/deps-gradle" }
deps-swift = { version = "0.9.1", path = "crates/deps-swift" }
deps-lsp = { version = "0.9.1", path = "crates/deps-lsp" }
deps-core = { version = "0.9.2", path = "crates/deps-core" }
deps-cargo = { version = "0.9.2", path = "crates/deps-cargo" }
deps-npm = { version = "0.9.2", path = "crates/deps-npm" }
deps-pypi = { version = "0.9.2", path = "crates/deps-pypi" }
deps-go = { version = "0.9.2", path = "crates/deps-go" }
deps-bundler = { version = "0.9.2", path = "crates/deps-bundler" }
deps-dart = { version = "0.9.2", path = "crates/deps-dart" }
deps-maven = { version = "0.9.2", path = "crates/deps-maven" }
deps-composer = { version = "0.9.2", path = "crates/deps-composer" }
deps-gradle = { version = "0.9.2", path = "crates/deps-gradle" }
deps-swift = { version = "0.9.2", path = "crates/deps-swift" }
deps-lsp = { version = "0.9.2", path = "crates/deps-lsp" }
futures = "0.3"
insta = "1"
mockito = "1"
Expand Down
99 changes: 47 additions & 52 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,16 @@
# deps-lsp

[![Crates.io](https://img.shields.io/crates/v/deps-lsp)](https://crates.io/crates/deps-lsp)
[![docs.rs](https://img.shields.io/docsrs/deps-lsp)](https://docs.rs/deps-lsp)
[![CI](https://github.com/bug-ops/deps-lsp/actions/workflows/ci.yml/badge.svg)](https://github.com/bug-ops/deps-lsp/actions)
[![codecov](https://codecov.io/gh/bug-ops/deps-lsp/graph/badge.svg?token=S71PTINTGQ)](https://codecov.io/gh/bug-ops/deps-lsp)
[![CI](https://img.shields.io/github/actions/workflow/status/bug-ops/deps-lsp/ci.yml?branch=main)](https://github.com/bug-ops/deps-lsp/actions)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
[![MSRV](https://img.shields.io/badge/MSRV-1.89-blue)](https://blog.rust-lang.org/)
[![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance/)

A universal Language Server Protocol (LSP) server for dependency management across Cargo, npm, PyPI, Go, Bundler, Dart, Maven, Gradle, Swift, and Composer ecosystems.

![deps-lsp in action](https://raw.githubusercontent.com/bug-ops/deps-zed/main/assets/img.png)

## Features

- **Intelligent autocomplete** — Package names, versions, and feature flags
Expand All @@ -21,36 +22,20 @@ A universal Language Server Protocol (LSP) server for dependency management acro
- **Code actions** — Quick fixes to update dependencies
- **High performance** — Parallel fetching with per-dependency timeouts, optimized caching

![deps-lsp in action](https://raw.githubusercontent.com/bug-ops/deps-zed/main/assets/img.png)

## Performance

deps-lsp is optimized for responsiveness:

| Operation | Latency | Notes |
| ----------- | --------- | ------- |
| Document open (50 deps) | ~150ms | Parallel registry fetching |
| Inlay hints | <100ms | Cached version lookups |
| Hover | <50ms | Pre-fetched metadata |
| Code actions | <50ms | No network calls |

> [!TIP]
> Lock file support provides instant resolved versions without network requests.

## Supported ecosystems

| Language | Ecosystem | Manifest file | Status |
| ---------- | ----------- | --------------- | -------- |
| Rust | Cargo | `Cargo.toml` | Supported |
| JavaScript | npm | `package.json` | Supported |
| Python | PyPI | `pyproject.toml` | Supported |
| Go | Go Modules | `go.mod` | Supported |
| Ruby | Bundler | `Gemfile` | Supported |
| Dart | Pub | `pubspec.yaml` | Supported |
| Java | Maven | `pom.xml` | Supported |
| Java | Gradle | `libs.versions.toml`, `build.gradle.kts`, `build.gradle`, `settings.gradle` | Supported |
| Swift | SPM | `Package.swift` | Supported |
| PHP | Composer | `composer.json` | Supported |
| Rust | Cargo | `Cargo.toml` | Supported |
| JavaScript | npm | `package.json` | Supported |
| Python | PyPI | `pyproject.toml` | Supported |
| Go | Go Modules | `go.mod` | Supported |
| Ruby | Bundler | `Gemfile` | Supported |
| Dart | Pub | `pubspec.yaml` | Supported |
| Java | Maven | `pom.xml` | Supported |
| Java | Gradle | `libs.versions.toml`, `build.gradle.kts`, `build.gradle`, `settings.gradle` | Supported |
| Swift | SPM | `Package.swift` | Supported |
| PHP | Composer | `composer.json` | Supported |

> [!NOTE]
> **Ecosystem details:**
Expand All @@ -71,19 +56,9 @@ deps-lsp is optimized for responsiveness:
cargo install deps-lsp
```

Latest published crate version: `0.9.1`.

> [!TIP]
> Use `cargo binstall deps-lsp` for faster installation without compilation.

### From source

```bash
git clone https://github.com/bug-ops/deps-lsp
cd deps-lsp
cargo install --path crates/deps-lsp
```

### Pre-built binaries

Download from [GitHub Releases](https://github.com/bug-ops/deps-lsp/releases/latest):
Expand All @@ -97,6 +72,14 @@ Download from [GitHub Releases](https://github.com/bug-ops/deps-lsp/releases/lat
| Windows | x86_64 | `deps-lsp-x86_64-pc-windows-msvc.exe` |
| Windows | ARM64 | `deps-lsp-aarch64-pc-windows-msvc.exe` |

### From source

```bash
git clone https://github.com/bug-ops/deps-lsp
cd deps-lsp
cargo install --path crates/deps-lsp
```

## Feature flags

By default, all ecosystems are enabled. To build with specific ecosystems only:
Expand All @@ -111,16 +94,16 @@ cargo install deps-lsp --no-default-features --features "pypi"

| Feature | Language | Manifest | Default |
| --------- | ---------- | ----------- | ------- |
| `cargo` | Rust | Cargo.toml | |
| `npm` | JavaScript | package.json | |
| `pypi` | Python | pyproject.toml | |
| `go` | Go | go.mod | |
| `bundler` | Ruby | Gemfile | |
| `dart` | Dart | pubspec.yaml | |
| `maven` | Java | pom.xml | |
| `gradle` | Java | libs.versions.toml, build.gradle.kts, build.gradle | |
| `swift` | Swift | Package.swift | |
| `composer` | PHP | composer.json | |
| `cargo` | Rust | Cargo.toml | Yes |
| `npm` | JavaScript | package.json | Yes |
| `pypi` | Python | pyproject.toml | Yes |
| `go` | Go | go.mod | Yes |
| `bundler` | Ruby | Gemfile | Yes |
| `dart` | Dart | pubspec.yaml | Yes |
| `maven` | Java | pom.xml | Yes |
| `gradle` | Java | libs.versions.toml, build.gradle.kts, build.gradle | Yes |
| `swift` | Swift | Package.swift | Yes |
| `composer` | PHP | composer.json | Yes |

## Usage

Expand All @@ -145,7 +128,6 @@ Install the **Deps** extension from Zed Extensions marketplace. Ruby support is
Enable inlay hints in Zed settings:

```json
// settings.json
{
"inlay_hints": {
"enabled": true
Expand Down Expand Up @@ -197,7 +179,6 @@ display-inlay-hints = true
Install an LSP client extension and configure deps-lsp. Enable inlay hints:

```json
// settings.json
{
"editor.inlayHints.enabled": "on"
}
Expand Down Expand Up @@ -228,7 +209,7 @@ Configure via LSP initialization options:
"loading_indicator": {
"enabled": true,
"fallback_to_hints": true,
"loading_text": ""
"loading_text": "..."
},
"cold_start": {
"enabled": true,
Expand All @@ -245,7 +226,7 @@ Configure via LSP initialization options:
| `cache` | `max_concurrent_fetches` | `20` | Concurrent registry requests (1-100) |
| `loading_indicator` | `enabled` | `true` | Show loading feedback during fetches |
| `loading_indicator` | `fallback_to_hints` | `true` | Show loading in inlay hints if LSP progress unsupported |
| `loading_indicator` | `loading_text` | `""` | Text shown during loading (max 100 chars) |
| `loading_indicator` | `loading_text` | `"..."` | Text shown during loading (max 100 chars) |

> [!TIP]
> Increase `fetch_timeout_secs` for slower networks. The per-dependency timeout prevents slow packages from blocking others. Cold start support ensures LSP features work immediately when your IDE restores previously opened files.
Expand Down Expand Up @@ -276,6 +257,20 @@ alias zed='env GITHUB_TOKEN=(gh auth token) command zed'
> [!TIP]
> Add the alias to your shell profile (`~/.zshrc`, `~/.bashrc`, `~/.config/fish/config.fish`) for persistence.

## Performance

deps-lsp is optimized for responsiveness:

| Operation | Latency | Notes |
| ----------- | --------- | ------- |
| Document open (50 deps) | ~150ms | Parallel registry fetching |
| Inlay hints | <100ms | Cached version lookups |
| Hover | <50ms | Pre-fetched metadata |
| Code actions | <50ms | No network calls |

> [!TIP]
> Lock file support provides instant resolved versions without network requests.

## Development

> [!IMPORTANT]
Expand Down
Loading
Loading