Skip to content

LSP distribution strategy for VSCode extension (avoid bundling multi-platform binaries) #28

@emil14

Description

@emil14

Problem

vscode-neva currently needs to ship LSP binaries for multiple OS/arch targets, which makes every extension release large and tightly couples extension publishing cadence with backend binary updates.

This issue tracks how VSCode should obtain and run Neva LSP going forward.

Important clarification

This is not about moving LSP into neva CLI in the nevalang/neva repository.

  • Canonical LSP source lives in nevalang/neva-lsp.
  • The question here is extension-side distribution/runtime strategy.

Goals

  • Keep extension package small.
  • Avoid shipping all platform binaries in every extension release.
  • Keep UX simple for end users.
  • Keep CLI / extension / LSP version compatibility manageable.

Candidate directions

  1. Extension-managed install (Go-style):
    • extension downloads platform-specific neva-lsp on demand
    • verifies checksums/signatures
    • stores binary in extension global storage
    • supports update + rollback policy
  2. External tool management:
    • user installs neva-lsp separately (brew, scoop, apt, etc.)
    • extension resolves from PATH and reports actionable diagnostics if missing
  3. Hybrid:
    • prefer external neva-lsp if present
    • otherwise offer one-click managed install

Questions to resolve

  • Version handshake policy: must LSP match CLI exactly, or tolerate a semver window?
  • Who owns updates: extension auto-update vs explicit command (Neva: Update Language Tools)?
  • How to support air-gapped/corporate environments?
  • Should we introduce a shared "tool manager" concept for future Neva tools (formatter, debugger, etc.)?

Acceptance criteria

  • Chosen strategy documented in repo docs.
  • Extension no longer bundles all LSP binaries.
  • Clear install/update UX in VSCode.
  • Compatibility and fallback behavior explicitly defined.

Related context

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions