Sno Station
Sno Station is your agents' workstation: open-source software that turns the AI agents you already run into one squad on your own machine. Two heads are better than one, and they get better with every
NuGet package manager for VS Code with vulnerability scanning, multi-project support, and version consolidation.
PluginsTypeScript · JavaScriptGitHub @nuget-workbenchSelf-installOwner unconfirmed
Paste into Claude or ChatGPT for installation instructions suited to your environment.
Have you tried it? One tap is enough. No sign-in needed.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Installable projects can be verified without a deployment domain. Use GitHub sign-in for a personal repository, or the repository verification file above for an organization repository.
Ask about other verification options
Loading the full README. The saved excerpt is shown below.
A full-featured NuGet package manager for Visual Studio Code — browse, install, update, and audit packages across all your .NET projects without leaving the editor. [README 설치·사용 부분 발췌] Installation 1. Open VS Code 2. Press Ctrl+Shift+X to open the Extensions panel 3. Search for NuGet Workbench 4. Click InstallRead the full README ↗
A full-featured NuGet package manager for Visual Studio Code — browse, install, update, and audit packages across all your .NET projects without leaving the editor.
| Feature | Description | |
|---|---|---|
| 📦 | Browse & Install | Search nuget.org and private feeds, install into one or all selected projects at once |
| 🔄 | One-click Updates | See all outdated packages with version diffs, update individually or all at once |
| 🛡️ | Vulnerability Scanning | Color-coded CVE severity badges (Critical / High / Medium / Low) with advisory links, including transitive packages |
| ⚠️ | Deprecation Warnings | Deprecated package versions are flagged, with the reason and the suggested alternative |
| 🧬 | Transitive Packages | See which packages your references pull in, and through which reference |
| 🔀 | Version Consolidation | Find and fix version inconsistencies across projects in a single click |
| 🌲 | Project Tree | Checkbox-based project selector — scope every operation to exactly the projects you want |
| 🔐 | Private Feeds | Reads NuGet.config like NuGet does, supports the Azure Artifacts Credential Provider and custom password scripts |
| 📌 | CPM Support | Full Central Package Management — detects Directory.Packages.props, tracks version sources |
| 🔁 | Auto-Refresh | Picks up edits to project files, Directory.Packages.props, NuGet.config and settings (e.g. after a git checkout) |
| ✏️ | Inline Hints | Optional hints at the end of PackageReference lines in project files showing available updates |
| ⌨️ | Keyboard Accessible | Full keyboard navigation and ARIA support across all interactive elements |
.csproj, .fsproj, or .sln filesPATH (for install / update / restore operations)Ctrl+Shift+X to open the Extensions panelOr install directly from the command line:
code --install-extension nuget-workbench.nuget-workbench
Download the latest .vsix from the Releases page, then:
code --install-extension nuget-workbench-x.x.x.vsix
Or via the Extensions panel: click ··· → Install from VSIX…
.csproj / .fsproj / .sln files — the extension activates automatically.Tip: Use the Command Palette (
Ctrl+Shift+P) and typeNuGet Workbenchto jump directly to any feature.
Search nuget.org (or any configured feed) and install packages into your projects.
CPM or override when it comes from Directory.Packages.props or a VersionOverride); install, update to a specific version, or uninstall individuallydotnet (e.g. error NU1101: Unable to find package ...)Shows every package installed across all selected projects. Use this tab to quickly uninstall or change versions without leaving the package list.
Check Show transitive packages to also list the packages your references pull in, read from obj/project.assets.json (restore the project first). Each one shows the direct reference that brings it in. Projects with a custom BaseIntermediateOutputPath, MSBuildProjectExtensionsPath or the artifacts output layout are not supported.
Lists all packages where a newer version is available on the configured sources.
Scans installed packages against the NuGet vulnerability database.
Detects packages that are installed at different versions across your projects.
The collapsible project tree on the left of the main view lets you scope operations:
Directory.Packages.props is detected.csproj), F# (.fsproj), and VB.NET (.vbproj) project filesnode_modules, bin, objDirectory.Packages.props, Directory.Build.props, NuGet.config or the extension's settings change outside of itAccess these from the Command Palette (Ctrl+Shift+P):
| Command | ID | Description |
|---|---|---|
| NuGet Workbench: Open Packages | nugetWorkbench.open | Focus the NuGet panel |
| NuGet Workbench: Add Package | nugetWorkbench.install | Prompt for a package ID and open Browse with it pre-searched |
| NuGet Workbench: Update Package | nugetWorkbench.update | Focus the NuGet panel and switch to the Updates tab |
| NuGet Workbench: Remove Package | nugetWorkbench.remove | Focus the NuGet panel and switch to the Installed tab |
| Settings | nugetWorkbench.openSettings | Open the NuGet Workbench settings view |
| Report Problem | nugetWorkbench.reportProblem | Open a new GitHub issue |
Open VS Code Settings (Ctrl+,) and search for NuGet Workbench, or edit settings.json directly.
| Setting | Type | Default | Description |
|---|---|---|---|
NugetWorkbench.sources | string[] | [nuget.org] | List of NuGet feed URLs to search and update from. Each entry is a JSON string {"name":"...","url":"..."}. |
NugetWorkbench.defaultSource | string | "" | Source pre-selected in the source dropdown, by URL or name. Empty = search all sources. |
NugetWorkbench.prerelease | boolean | false | Include pre-release versions when checking for updates. |
NugetWorkbench.skipRestore | boolean | false | Skip the restore preview and compatibility check when installing/updating packages. |
NugetWorkbench.enablePackageVersionInlineInfo | boolean | false | Show inline hints with available update versions in project files and Directory.Packages.props. |
NugetWorkbench.statusBarLoadingIndicator | boolean | false | Show a loading progress indicator in the VS Code status bar. |
NugetWorkbench.pageSize | number | 50 | Number of packages returned per search page (1–100). |
NugetWorkbench.showOutputOnError | boolean | true | Automatically expand the output log at the bottom of the NuGet view when an operation fails. |
NugetWorkbench.logLevel | "DEBUG" | "INFO" | "WARN" | "ERROR" | "INFO" | Minimum log level written to the NuGet Workbench output channel. |
settings.json{
"NugetWorkbench.sources": [
"{\"name\": \"nuget.org\", \"url\": \"https://api.nuget.org/v3/index.json\"}",
"{\"name\": \"My Feed\", \"url\": \"https://pkgs.dev.azure.com/my-org/_packaging/my-feed/nuget/v3/index.json\"}"
],
"NugetWorkbench.prerelease": false,
"NugetWorkbench.enablePackageVersionInlineInfo": true,
"NugetWorkbench.skipRestore": false
}
NuGet Workbench supports private package feeds out of the box.
The extension reads sources and credentials from the NuGet.config files the way dotnet does: every NuGet.config from a project's folder up to the root of the drive, then the user-level NuGet.Config (%APPDATA%\NuGet\NuGet.Config on Windows, ~/.nuget/NuGet/NuGet.Config on macOS/Linux). If your feed credentials are already configured there, no extra setup is needed.
The files are merged like NuGet does: a file closer to the project overrides sources with the same key, <clear/> removes the sources inherited from the files further up, and <disabledPackageSources> is honored. Searching, the Updates and Vulnerabilities tabs and the settings view use the sources of all workspace folders and all folders with their own NuGet.config (nested solutions, multi-root workspaces). Sources from the NugetWorkbench.sources setting are added on top, unless a NuGet.config disables or clears a source with the same name; when such a source is used to install or update a package, it is passed to dotnet together with the project's configured sources.
Install the Microsoft Artifacts Credential Provider and authenticate once via the .NET CLI:
dotnet restore --interactive
The credential provider handles token refresh automatically. NuGet Workbench uses it too: when an Azure Artifacts feed without credentials in NuGet.config answers with 401, the extension asks the credential provider (non-interactively) for a token and retries. Credentials from the VSS_NUGET_EXTERNAL_FEED_ENDPOINTS environment variable are used as well. If the provider needs a sign-in, run dotnet restore --interactive once.
Feed requests go through VS Code's proxy support, so http.proxy (including credentials in the URL), http.noProxy / NO_PROXY, PAC files, http.proxyStrictSSL and the system certificates apply.
If the password stored in NuGet.config is encrypted or encoded, configure a script that decodes it. The script receives the stored password value as its only argument and must print the decoded password to stdout. Set the script path in Settings > Sources (edit icon of the source), or add an entry with the source name to the NugetWorkbench.sources setting:
// settings.json
{
"NugetWorkbench.sources": [
"{\"name\": \"Internal\", \"passwordScriptPath\": \"/path/to/decode-password.sh\"}"
]
}
.ps1 scripts run with powershell.exe on Windows and pwsh on macOS/Linux, .bat/.cmd with cmd.exe; other files are executed directly. Relative paths are resolved against the workspace folder. A script must finish within two minutes.
NuGet Workbench has first-class support for Central Package Management.
Directory.Packages.props are detected and labelled in the project treeproject, central, or overridedotnet invocation for CPM workspacesEnable NugetWorkbench.enablePackageVersionInlineInfo to see available updates directly in your project files:
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" /> ← 13.0.3 available
Hints appear at the end of <PackageReference> and <PackageVersion> entries whenever a newer version exists on the sources that apply to the file.
Contributions are welcome — bug reports, feature requests, documentation improvements, and pull requests.
Please use the GitHub Issues tracker. Include:
logLevel to DEBUG)Prerequisites: Node.js 18+, npm
# 1. Clone the repository
git clone https://github.com/nuget-workbench/nuget-workbench-vscode.git
cd nuget-workbench-vscode
# 2. Install dependencies
npm install
# 3. Build the extension
npm run esbuild
Press F5 in VS Code to launch a new Extension Development Host window with the extension loaded. The host reloads automatically after npm run esbuild.
npm run lint # Check for lint errors (ESLint 9)
npm run lint:fix # Auto-fix fixable issues
any is a warning, avoid it_ to suppress the warningcss tagged template literal and VS Code CSS variables (--vscode-*)npm test # Full test suite (VSCode Test CLI + Mocha)
npm run test-compile # Type-check tests only (no execution)
Tests live alongside source files as *.test.ts. The test runner opens a headless VS Code Extension Host.
After UI changes, regenerate the screenshots and animated GIF automatically:
npm run esbuild # Rebuild bundles first
npm run screenshot # Generates docs/images/*.png and docs/images/demo.gif
The script (tools/take-screenshots.mjs) starts a local HTTP server, loads the UI with mock data in a headless Chromium browser via Playwright, captures each tab, and assembles the animated GIF.
npm run package
# → releases/nuget-workbench-x.x.x.vsix
mainnpm run lint and npm test — both must passCloses #123Commit messages follow Conventional Commits:
feat:, fix:, refactor:, chore:, docs:, test:, perf:
The extension runs in two isolated processes that communicate via a typed RPC layer over postMessage:
┌─────────────────────────────────────────────┐ ┌──────────────────────────────────────────────┐
│ VS Code Extension Host (Node.js) │ │ Webview (Browser / Lit) │
│ │ │ │
│ extension.ts │ │ main.ts → nuget-workbench (root element) │
│ host-api.ts ── RpcHost │◄──►│ RpcClient → packages-view │
│ nuget/api.ts (axios → NuGet API) │ │ components/* (@state, @property) │
│ utilities/ (csproj parser, decorator) │ │ registrations.ts (singletons) │
└─────────────────────────────────────────────┘ └──────────────────────────────────────────────┘
postMessage RPC: { type, id, method, params } / { type, id, result }
Key design decisions:
HostAPI interface in src/common/rpc/types.ts is the single source of truth for all IPC. Every method returns Result<T> (a discriminated union), so error paths are always explicit.dist/extension.js (Node.js CommonJS for the host) and dist/web.js (ESM for the webview).Source layout:
src/
├── common/ # Shared between host and web (types, RPC protocol, utilities)
│ ├── rpc/ # RpcHost, RpcClient, types, Result<T>
│ └── types.ts # Domain types (Package, Project, Configuration, …)
├── host/ # Extension host (Node.js context)
│ ├── extension.ts # Activation, command registration, WebviewViewProvider
│ ├── host-api.ts # HostAPI implementation
│ └── nuget/ # NuGet API client (axios), .csproj / .sln parsing
└── web/ # Webview UI (browser context)
├── main.ts # Root element, routing
├── components/ # LitElement components (packages-view, updates-view, …)
├── styles/ # Shared CSS (VS Code variables, codicons, scrollbars)
└── registrations.ts# Module-level singletons (hostApi, router, configuration)
NuGet Workbench builds on the work of: