{"id":34510089,"url":"https://github.com/bug-ops/deps-lsp","last_synced_at":"2026-04-02T17:05:12.667Z","repository":{"id":330227904,"uuid":"1120764371","full_name":"bug-ops/deps-lsp","owner":"bug-ops","description":"Universal LSP server for dependency management — autocomplete, version hints, and diagnostics for Cargo.toml and package.json. Supports Zed, Neovim, Helix.","archived":false,"fork":false,"pushed_at":"2026-03-21T21:13:10.000Z","size":4046,"stargazers_count":11,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-22T09:33:33.751Z","etag":null,"topics":["autocomplete","cargo","dependency-management","go","golang","helix","ide","inlay-hints","language-server","lsp","neovim","npm","rust","zed"],"latest_commit_sha":null,"homepage":"https://bug-ops.github.io/deps-lsp/","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bug-ops.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-21T22:28:34.000Z","updated_at":"2026-03-21T21:13:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bug-ops/deps-lsp","commit_stats":null,"previous_names":["bug-ops/deps-lsp"],"tags_count":23,"template":false,"template_full_name":null,"purl":"pkg:github/bug-ops/deps-lsp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bug-ops%2Fdeps-lsp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bug-ops%2Fdeps-lsp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bug-ops%2Fdeps-lsp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bug-ops%2Fdeps-lsp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bug-ops","download_url":"https://codeload.github.com/bug-ops/deps-lsp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bug-ops%2Fdeps-lsp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31311082,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T12:59:32.332Z","status":"ssl_error","status_checked_at":"2026-04-02T12:54:48.875Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["autocomplete","cargo","dependency-management","go","golang","helix","ide","inlay-hints","language-server","lsp","neovim","npm","rust","zed"],"created_at":"2025-12-24T03:54:40.281Z","updated_at":"2026-04-02T17:05:12.657Z","avatar_url":"https://github.com/bug-ops.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# deps-lsp\n\n[![Crates.io](https://img.shields.io/crates/v/deps-lsp)](https://crates.io/crates/deps-lsp)\n[![CI](https://github.com/bug-ops/deps-lsp/actions/workflows/ci.yml/badge.svg)](https://github.com/bug-ops/deps-lsp/actions)\n[![codecov](https://codecov.io/gh/bug-ops/deps-lsp/graph/badge.svg?token=S71PTINTGQ)](https://codecov.io/gh/bug-ops/deps-lsp)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n[![MSRV](https://img.shields.io/badge/MSRV-1.89-blue)](https://blog.rust-lang.org/)\n[![unsafe forbidden](https://img.shields.io/badge/unsafe-forbidden-success.svg)](https://github.com/rust-secure-code/safety-dance/)\n\nA universal Language Server Protocol (LSP) server for dependency management across Cargo, npm, PyPI, Go, Bundler, Dart, Maven, Gradle, Swift, and Composer ecosystems.\n\n![deps-lsp in action](https://raw.githubusercontent.com/bug-ops/deps-zed/main/assets/img.png)\n\n## Features\n\n- **Intelligent autocomplete** — Package names, versions, and feature flags\n- **Version hints** — Inlay hints showing latest available versions\n- **Loading indicators** — Visual feedback during registry fetches with LSP progress support\n- **Lock file support** — Reads resolved versions from Cargo.lock, package-lock.json, poetry.lock, uv.lock, go.sum, Gemfile.lock, pubspec.lock, Package.resolved, composer.lock\n- **Diagnostics** — Warnings for outdated, unknown, or yanked dependencies\n- **Hover information** — Package descriptions with resolved version from lock file\n- **Code actions** — Quick fixes to update dependencies\n- **High performance** — Parallel fetching with per-dependency timeouts, optimized caching\n\n## Supported ecosystems\n\n| Language | Ecosystem | Manifest file | Status |\n| ---------- | ----------- | --------------- | -------- |\n| Rust | Cargo | `Cargo.toml` | Supported |\n| JavaScript | npm | `package.json` | Supported |\n| Python | PyPI | `pyproject.toml` | Supported |\n| Go | Go Modules | `go.mod` | Supported |\n| Ruby | Bundler | `Gemfile` | Supported |\n| Dart | Pub | `pubspec.yaml` | Supported |\n| Java | Maven | `pom.xml` | Supported |\n| Java | Gradle | `libs.versions.toml`, `build.gradle.kts`, `build.gradle`, `settings.gradle` | Supported |\n| Swift | SPM | `Package.swift` | Supported |\n| PHP | Composer | `composer.json` | Supported |\n\n\u003e [!NOTE]\n\u003e **Ecosystem details:**\n\u003e - **PyPI** — PEP 621, PEP 735 (dependency-groups), Poetry formats\n\u003e - **Go** — `require`, `replace`, `exclude` directives, pseudo-version handling\n\u003e - **Bundler** — git/path/GitHub sources, pessimistic operator (`~\u003e`)\n\u003e - **Dart** — hosted, git, path, SDK sources, caret version semantics\n\u003e - **Maven** — `dependencies`, `dependencyManagement`, `build/plugins`, qualifier-aware version comparison\n\u003e - **Gradle** — Version Catalogs, Kotlin/Groovy DSL, `settings.gradle` plugins; resolves from Maven Central, Google Maven, Gradle Plugin Portal\n\u003e - **Swift** — all `.package()` forms (from, upToNextMajor/Minor, exact, range, branch, revision, path); versions via GitHub API tags\n\u003e - **Composer** — `require`/`require-dev` sections, Packagist v2 API with metadata de-minification, Composer-specific tilde semantics (`~1.2` = `\u003e=1.2.0 \u003c2.0.0`)\n\n## Installation\n\n### From crates.io\n\n```bash\ncargo install deps-lsp\n```\n\n\u003e [!TIP]\n\u003e Use `cargo binstall deps-lsp` for faster installation without compilation.\n\n### Pre-built binaries\n\nDownload from [GitHub Releases](https://github.com/bug-ops/deps-lsp/releases/latest):\n\n| Platform | Architecture | Binary |\n| ---------- | -------------- | -------- |\n| Linux | x86_64 | `deps-lsp-x86_64-unknown-linux-gnu` |\n| Linux | aarch64 | `deps-lsp-aarch64-unknown-linux-gnu` |\n| macOS | x86_64 | `deps-lsp-x86_64-apple-darwin` |\n| macOS | Apple Silicon | `deps-lsp-aarch64-apple-darwin` |\n| Windows | x86_64 | `deps-lsp-x86_64-pc-windows-msvc.exe` |\n| Windows | ARM64 | `deps-lsp-aarch64-pc-windows-msvc.exe` |\n\n### From source\n\n```bash\ngit clone https://github.com/bug-ops/deps-lsp\ncd deps-lsp\ncargo install --path crates/deps-lsp\n```\n\n## Feature flags\n\nBy default, all ecosystems are enabled. To build with specific ecosystems only:\n\n```bash\n# Only Cargo and npm support\ncargo install deps-lsp --no-default-features --features \"cargo,npm\"\n\n# Only Python support\ncargo install deps-lsp --no-default-features --features \"pypi\"\n```\n\n| Feature | Language | Manifest | Default |\n| --------- | ---------- | ----------- | ------- |\n| `cargo` | Rust | Cargo.toml | Yes |\n| `npm` | JavaScript | package.json | Yes |\n| `pypi` | Python | pyproject.toml | Yes |\n| `go` | Go | go.mod | Yes |\n| `bundler` | Ruby | Gemfile | Yes |\n| `dart` | Dart | pubspec.yaml | Yes |\n| `maven` | Java | pom.xml | Yes |\n| `gradle` | Java | libs.versions.toml, build.gradle.kts, build.gradle | Yes |\n| `swift` | Swift | Package.swift | Yes |\n| `composer` | PHP | composer.json | Yes |\n\n## Usage\n\nRun the server over stdio (typical editor integration):\n\n```bash\ndeps-lsp --stdio\n```\n\n\u003e [!TIP]\n\u003e Configure your editor to launch `deps-lsp` and connect over stdio. See the editor snippets below.\n\n## Editor setup\n\n\u003e [!IMPORTANT]\n\u003e Inlay hints must be enabled in your editor to see version indicators. See configuration for each editor below.\n\n### Zed\n\nInstall the **Deps** extension from Zed Extensions marketplace. Ruby support is enabled for Gemfile files.\n\nEnable inlay hints in Zed settings:\n\n```json\n{\n  \"inlay_hints\": {\n    \"enabled\": true\n  }\n}\n```\n\n### Neovim\n\n```lua\nrequire('lspconfig').deps_lsp.setup({\n  cmd = { \"deps-lsp\", \"--stdio\" },\n  filetypes = { \"toml\", \"json\", \"gomod\", \"ruby\", \"yaml\", \"xml\", \"swift\", \"php\" },\n})\n\n-- Enable inlay hints (Neovim 0.10+)\nvim.lsp.inlay_hint.enable(true)\n```\n\nFor older Neovim versions, use [nvim-lsp-inlayhints](https://github.com/lvimuser/lsp-inlayhints.nvim).\n\n### Helix\n\n```toml\n# ~/.config/helix/languages.toml\n[[language]]\nname = \"toml\"\nlanguage-servers = [\"deps-lsp\"]\n\n[[language]]\nname = \"json\"\nlanguage-servers = [\"deps-lsp\"]\n\n[language-server.deps-lsp]\ncommand = \"deps-lsp\"\nargs = [\"--stdio\"]\n```\n\nEnable inlay hints in Helix config:\n\n```toml\n# ~/.config/helix/config.toml\n[editor.lsp]\ndisplay-inlay-hints = true\n```\n\n### VS Code\n\nInstall an LSP client extension and configure deps-lsp. Enable inlay hints:\n\n```json\n{\n  \"editor.inlayHints.enabled\": \"on\"\n}\n```\n\n## Configuration\n\nConfigure via LSP initialization options:\n\n```json\n{\n  \"inlay_hints\": {\n    \"enabled\": true,\n    \"up_to_date_text\": \"✅\",\n    \"needs_update_text\": \"❌ {}\"\n  },\n  \"diagnostics\": {\n    \"outdated_severity\": \"hint\",\n    \"unknown_severity\": \"warning\",\n    \"yanked_severity\": \"warning\"\n  },\n  \"cache\": {\n    \"enabled\": true,\n    \"refresh_interval_secs\": 300,\n    \"fetch_timeout_secs\": 5,\n    \"max_concurrent_fetches\": 20\n  },\n  \"loading_indicator\": {\n    \"enabled\": true,\n    \"fallback_to_hints\": true,\n    \"loading_text\": \"...\"\n  },\n  \"cold_start\": {\n    \"enabled\": true,\n    \"rate_limit_ms\": 100\n  }\n}\n```\n\n### Configuration reference\n\n| Section | Option | Default | Description |\n| --------- | -------- | --------- | ------------- |\n| `cache` | `fetch_timeout_secs` | `5` | Per-package fetch timeout (1-300 seconds) |\n| `cache` | `max_concurrent_fetches` | `20` | Concurrent registry requests (1-100) |\n| `loading_indicator` | `enabled` | `true` | Show loading feedback during fetches |\n| `loading_indicator` | `fallback_to_hints` | `true` | Show loading in inlay hints if LSP progress unsupported |\n| `loading_indicator` | `loading_text` | `\"...\"` | Text shown during loading (max 100 chars) |\n\n\u003e [!TIP]\n\u003e 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.\n\n### GitHub API token\n\nSome ecosystems (Swift) resolve versions via the GitHub API, which is limited to **60 requests/hour** without authentication. Set `GITHUB_TOKEN` to increase the limit to **5,000 requests/hour**:\n\n```bash\n# Using GitHub CLI (recommended)\nexport GITHUB_TOKEN=$(gh auth token)\n\n# Or create a personal access token at https://github.com/settings/tokens\n# No scopes required for public repository access\nexport GITHUB_TOKEN=ghp_...\n```\n\nFor **Zed**, launch with the token so the LSP process inherits it:\n\n```bash\n# bash / zsh\nalias zed='GITHUB_TOKEN=\"$(gh auth token)\" command zed'\n\n# fish\nalias zed='env GITHUB_TOKEN=(gh auth token) command zed'\n```\n\n\u003e [!TIP]\n\u003e Add the alias to your shell profile (`~/.zshrc`, `~/.bashrc`, `~/.config/fish/config.fish`) for persistence.\n\n## Performance\n\ndeps-lsp is optimized for responsiveness:\n\n| Operation | Latency | Notes |\n| ----------- | --------- | ------- |\n| Document open (50 deps) | ~150ms | Parallel registry fetching |\n| Inlay hints | \u003c100ms | Cached version lookups |\n| Hover | \u003c50ms | Pre-fetched metadata |\n| Code actions | \u003c50ms | No network calls |\n\n\u003e [!TIP]\n\u003e Lock file support provides instant resolved versions without network requests.\n\n## Development\n\n\u003e [!IMPORTANT]\n\u003e Requires Rust 1.89+ (Edition 2024).\n\n### Build\n\n```bash\ncargo build --workspace\n```\n\n### Test\n\n```bash\n# Run tests with nextest\ncargo nextest run\n\n# Run tests with coverage\ncargo llvm-cov nextest\n\n# Generate HTML coverage report\ncargo llvm-cov nextest --html\n```\n\n### Lint\n\n```bash\n# Format (requires nightly for Edition 2024)\ncargo +nightly fmt --check\n\n# Clippy (all targets, all features)\ncargo clippy --workspace --all-targets --all-features -- -D warnings\n\n# Security audit\ncargo deny check\n```\n\n### Project structure\n\n```text\ndeps-lsp/\n├── crates/\n│   ├── deps-core/      # Shared traits, cache, generic handlers\n│   ├── deps-cargo/     # Cargo.toml parser + crates.io registry\n│   ├── deps-npm/       # package.json parser + npm registry\n│   ├── deps-pypi/      # pyproject.toml parser + PyPI registry\n│   ├── deps-go/        # go.mod parser + proxy.golang.org\n│   ├── deps-bundler/   # Gemfile parser + rubygems.org registry\n│   ├── deps-dart/      # pubspec.yaml parser + pub.dev registry\n│   ├── deps-maven/     # pom.xml parser + Maven Central registry\n│   ├── deps-gradle/    # Gradle parser (Version Catalog, Kotlin/Groovy DSL)\n│   ├── deps-swift/     # Package.swift parser + GitHub API registry\n│   ├── deps-composer/  # composer.json parser + Packagist registry\n│   ├── deps-lsp/       # Main LSP server\n│   └── deps-zed/       # Zed extension (WASM)\n├── .config/            # nextest configuration\n└── .github/            # CI/CD workflows\n```\n\n### Architecture\n\nThe codebase uses a trait-based architecture with the `Ecosystem` trait providing a unified interface for all package ecosystems:\n\n```rust\n// Each ecosystem implements the Ecosystem trait\npub trait Ecosystem: Send + Sync {\n    fn id(\u0026self) -\u003e \u0026'static str;\n    fn display_name(\u0026self) -\u003e \u0026'static str;\n    fn matches_uri(\u0026self, uri: \u0026Uri) -\u003e bool;\n    fn registry(\u0026self) -\u003e Arc\u003cdyn Registry\u003e;\n    fn formatter(\u0026self) -\u003e Arc\u003cdyn EcosystemFormatter\u003e;\n    async fn parse_manifest(\u0026self, content: \u0026str, uri: \u0026Uri) -\u003e Result\u003cParseResult\u003e;\n}\n\n// EcosystemRegistry discovers the right handler for any manifest file\nlet ecosystem = registry.get_for_uri(\u0026uri);\n```\n\n### Benchmarks\n\nRun performance benchmarks with criterion:\n\n```bash\ncargo bench --workspace\n```\n\nView HTML report: `open target/criterion/report/index.html`\n\n## Contributing\n\nRead [CONTRIBUTING.md](CONTRIBUTING.md) for setup, style, and testing expectations.\n\n## License\n\n[MIT](LICENSE)\n\n## Acknowledgments\n\nInspired by:\n\n- [crates-lsp](https://github.com/MathiasPius/crates-lsp) — Cargo.toml LSP\n- [dependi](https://github.com/filllabs/dependi) — Multi-ecosystem dependency management\n- [taplo](https://github.com/tamasfe/taplo) — TOML toolkit\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbug-ops%2Fdeps-lsp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbug-ops%2Fdeps-lsp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbug-ops%2Fdeps-lsp/lists"}