Open-source VB.NET language tooling built around Roslyn:
- A VS Code extension: VB.NET Language Support
- Standalone language server binaries for non-VS Code LSP clients
- Thin editor adapters for non-VS Code clients (Neovim, Emacs)
- Marketplace: https://marketplace.visualstudio.com/items?itemName=dnakode.vbnet-language-support
- VSIX packages are also attached to GitHub Releases for manual install
- Includes:
- VB.NET language server backend (default)
- Optional Roslyn backend support
- Bundled netcoredbg for debugging
Install as a global .NET tool (recommended):
dotnet tool install --global DNAKode.VbNet.LspOr download from GitHub Releases:
- Releases: https://github.com/DNAKode/vbnet-lsp/releases
- Language server artifacts:
vbnet-language-server-win-x64.zipvbnet-language-server-linux-x64.tar.gzvbnet-language-server-osx-x64.tar.gzvbnet-language-server-osx-arm64.tar.gz
- VSIX artifacts:
vbnet-language-support-win32-x64.vsixvbnet-language-support-linux-x64.vsixvbnet-language-support-darwin-x64.vsixvbnet-language-support-darwin-arm64.vsix
Use these with any LSP client that supports stdio or named pipes.
Use editor-native adapters that launch the standalone language server:
- Neovim adapter source:
adapters/nvim/vbnet-lsp.nvim - Emacs
eglotadapter source:adapters/emacs/vbnet-eglot
Packaging guidance for native channels is documented in docs/editor-packaging.md.
- Roslyn-backed semantic analysis and project loading (
.sln,.slnf,.slnx,.vbproj) - Best-effort fallback support for old-style / non-SDK VB.NET Framework project files, including project-level imports, framework references, restored packages, WinForms application-framework startup artifacts, and common
My.Applicationproject-system symbols - Core language features: diagnostics, completion, hover, definition, references, rename, symbols
- Advanced navigation: type definition, implementation, call hierarchy, type hierarchy
- Editing support: formatting, semantic tokens, signature help, folding ranges, code actions, and Roslyn-backed Extract Method
- Debugger integration in the VS Code extension via bundled netcoredbg
Current implementation details and roadmap are tracked in PROJECT_PLAN.md and docs/features.md.
- Install the extension from the Marketplace.
- Open a folder containing a
.slnor.vbproj. - Start coding in
.vbfiles.
Useful commands:
VB.NET: Select Workspace ContextVB.NET: Select Workspace SolutionVB.NET: Show LogsVB.NET: Toggle LSP TraceVB.NET: Reload Workspace
The status bar shows the active VB.NET context: a loaded solution, one selected project,
all discovered projects in Workspace Dev Mode, or Select Context when multiple solutions
are present and an explicit choice is needed. Restore and test commands follow the selected
context when no active file gives a more specific project target.
For GitHub issue reports or shared logs, set vbnet.output.language to en-US to request
English diagnostics and build output from the language server, .NET CLI, MSBuild, and Roslyn
where supported.
- Install the global tool (
dotnet tool install --global DNAKode.VbNet.Lsp) or download and extract the server artifact for your platform from Releases. - Configure your editor/client to launch the server with
--stdio.
Examples:
# Global tool
vbnet-ls --stdio
# Linux/macOS (app host)
./VbNet.LanguageServer --stdio
# Linux/macOS/Windows (dotnet host)
dotnet VbNet.LanguageServer.dll --stdio
# Windows (app host)
VbNet.LanguageServer.exe --stdioThe server also supports --pipe (named pipe transport), --logLevel, and --msbuildPath.
- .NET SDK 10.0 or later
- For VS Code extension development: Node.js 18+
- For VS Code users: VS Code 1.80+
Notes:
- Dev containers / SSH / WSL are supported if .NET SDK is available in the runtime environment.
- VS Code Web (
vscode.dev/github.dev) is not supported.
GitHub Actions release automation is available in .github/workflows/release.yml and publishes:
- Platform-specific standalone language server archives
- Platform-specific VSIX packages
- A GitHub Release containing all artifacts
The dotnet tool package (DNAKode.VbNet.Lsp, command: vbnet-ls) is built in
.github/workflows/publish-dotnet-tool.yml and published to NuGet when
NUGET_API_KEY is configured.
Editor adapters are validated separately in .github/workflows/editor-adapters.yml
and are intended for editor-native distribution channels (for example, Neovim
plugin managers and MELPA/package-vc for Emacs).
Downstream snapshot sync guidance (adapters + Claude plugin) is documented in docs/downstream-repositories.md.
The release workflow runs on tag push (v*) and can also be run manually with workflow_dispatch.
For non-draft releases it publishes VSIX packages to the VS Code Marketplace after
creating the GitHub Release.
The extension supports backend selection:
vbnet(default)roslyn
Only one backend is active at a time by design (single active backend) to reduce regression risk.
The Roslyn backend currently uses stdio transport even when vbnet.server.transportType
is set to auto or namedPipe. Roslyn named-pipe mode requires the client to provide
the pipe name; the extension-managed pipe handshake is only used by the default vbnet
backend.
For Roslyn packaging constraints (.roslyn + .roslyn-vb split), see docs/roslyn-packaging.md.
- Architecture
- Development Guide
- Configuration
- Feature Matrix
- Roslyn Packaging
- Roslyn Comparison Notes
- Editor Adapter Packaging
- Adapter Release Checklist
- Claude Plugin Marketplace Plan
- Downstream Repositories
- Release Artifacts
Build from source:
dotnet build src/VbNet.LanguageServer.Vb
dotnet test
cd src/extension && npm ci && npm run compileFor full workflows and exploratory harnesses, see:
Issues, bug reports, docs improvements, and code contributions are welcome.
- Issues: https://github.com/DNAKode/vbnet-lsp/issues
- Discussions: https://github.com/DNAKode/vbnet-lsp/discussions
MIT - see LICENSE.