A terminal-based NuGet package manager inspired by lazygit.
It helps others discover the project and motivates continued development.
LazyNuGet brings a fast, keyboard-driven interface to NuGet package management. Navigate your projects, view package details, check for updates, and search NuGet.org—all without leaving the terminal.
Browse. Update. Search. — Visit the project website
Get LazyNuGet running in seconds:
Option 1: .NET Global Tool (requires .NET 9 or later)
dotnet tool install --global LazyNuGet
lazynugetOption 2: Self-contained binary (no .NET required)
curl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.sh | bash
lazynugetThat's it! Use arrow keys (or the mouse) to navigate, Enter to view package details, and Ctrl+S to search NuGet.org.
| 🎨 Visual Interface | Beautiful terminal UI, not just CLI commands |
| ⚡ Smart Updates | Auto-detect outdated packages across all projects |
| 🔍 Package Search | Browse and install from NuGet.org in-app |
| 🌳 Dependencies | Visualize project and package dependency trees |
| 📜 History | Track, retry, and undo NuGet operations |
| 🔒 Security | Per-package vulnerability details with severity and advisory links |
| 🏗️ Multi-TF | Full multi-target framework display (net8.0 | net9.0) |
| 🔐 Private Feeds | Authenticated custom NuGet sources with stored credentials |
| 🗂️ Solution Groups | Projects grouped by .sln file in the sidebar |
| 🔄 Migrate | One-click migration from deprecated packages to their recommended replacements |
| 🧪 Prerelease | Prerelease version hints in package details |
| 📦 CPM | Full Central Package Management support — versions resolved from Directory.Packages.props |
| ⚙️ Configuration | Private feeds, custom sources, settings |
LazyNuGet is fully usable with both keyboard and mouse. Click to focus controls, scroll lists, and activate buttons. Keyboard shortcuts are available for every action and are the fastest way to navigate.
| Key | Action |
|---|---|
↑/↓ |
Navigate lists |
Enter |
View package details / Select project |
Ctrl+O |
Open folder picker |
Ctrl+R |
Reload projects (clears cache) |
Ctrl+S |
Search NuGet.org |
Ctrl+D |
Dependency tree (project deps or package deps) |
Ctrl+H |
View operation history |
Ctrl+P |
Settings |
Ctrl+U |
Update package / Update all |
Ctrl+V |
Change package version |
Ctrl+X |
Remove package |
Ctrl+G |
Migrate all projects to Central Package Management (CPM) |
Ctrl+M |
Migrate legacy packages.config project to PackageReference |
Ctrl+L |
Open log viewer |
Ctrl+↑/↓ |
Scroll details panel |
Esc |
Go back / Close dialogs |
F1 |
Package details — Overview tab |
F2 |
Package details — Dependencies tab |
F3 |
Package details — Versions tab |
F4 |
Package details — What's New tab |
F5 |
Package details — Security tab |
If you have .NET 9.0 or later installed:
dotnet tool install --global LazyNuGetAdvantages:
- ✅ Single command installation
- ✅ Automatic updates with
dotnet tool update -g LazyNuGet - ✅ Works on all platforms (Windows, macOS, Linux)
- ✅ Lightweight (~5MB vs ~60MB for self-contained)
Update:
dotnet tool update --global LazyNuGetUninstall:
dotnet tool uninstall --global LazyNuGetDownload and install the latest release:
curl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.sh | bashThis automatically:
- Downloads the binary for your architecture (x64 or ARM64)
- Installs to
~/.local/bin/lazynuget - Adds
~/.local/binto your PATH
After installation, reload your shell:
source ~/.bashrc # or ~/.zshrccurl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.sh | bashThe installer detects macOS automatically and:
- Downloads the correct binary (Intel or Apple Silicon)
- Installs to
/usr/local/bin/(or~/.local/bin/if not writable) - Clears the Gatekeeper quarantine flag
Note: If macOS still blocks the binary, run:
xattr -d com.apple.quarantine $(which lazynuget)
Open PowerShell and run:
irm https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.ps1 | iexThis installs to %LOCALAPPDATA%\Programs\LazyNuGet\ and adds it to your user PATH.
Note: If Windows SmartScreen blocks the binary, click "More info" then "Run anyway".
Download the latest binary for your platform:
- lazynuget-linux-x64 (Linux Intel/AMD)
- lazynuget-linux-arm64 (Linux ARM)
- lazynuget-osx-x64 (macOS Intel)
- lazynuget-osx-arm64 (macOS Apple Silicon)
- lazynuget-win-x64.exe (Windows Intel/AMD)
- lazynuget-win-arm64.exe (Windows ARM)
Linux/macOS — make executable and move to PATH:
chmod +x lazynuget-linux-x64
sudo mv lazynuget-linux-x64 /usr/local/bin/lazynugetRequirements:
- .NET 9.0 SDK or later
- Terminal with Unicode support
git clone https://github.com/nickprotop/lazynuget.git
cd lazynuget
dotnet build -c ReleaseRun with:
dotnet run [path]# Manage packages in current directory
lazynuget
# Manage packages in specific directory
lazynuget /path/to/your/projects
# Migrate all packages.config projects in a directory tree (headless, no UI)
lazynuget --migrate /path/to/your/projects
# Migrate all projects to Central Package Management (headless)
lazynuget --migrate-cpm /path/to/your/projects
# Show help
lazynuget --helpLazyNuGet will scan the directory for .csproj files and display all discovered projects and their packages.
LazyNuGet scans for .csproj files. Make sure you open the folder that contains your projects (or a parent folder). Folders named bin, obj, .git, and node_modules are skipped automatically.
LazyNuGet caches package metadata during a session. Press Ctrl+R to force a full reload and clear the cache. Also confirm you have network access to NuGet.org.
Version checks run in the background after projects load. If the badge never appears, check that NuGet.org is reachable. A red indicator in the status bar usually means a source failed to connect.
- Confirm the feed URL is correct — open
Ctrl+P→ Sources tab and verify it is enabled. - If the feed requires authentication, make sure credentials are saved (edit the source and re-enter them).
- On Linux/macOS credentials are stored as clear-text in
~/.nuget/NuGet/NuGet.Config. On Windows they are encrypted with DPAPI. - If the feed was added outside LazyNuGet (e.g. via
dotnet nuget add source), it will appear automatically — LazyNuGet reads the standard NuGet.config hierarchy.
Re-enter credentials via Ctrl+P → select the source → press E to edit. If the feed uses a PAT (Personal Access Token), put the token in the Password field (username can be anything, e.g. pat).
LazyNuGet reads <PackageReference> elements by default. Older .NET Framework projects use a separate packages.config file instead, which is also supported — they appear in the project list with a legacy badge and their packages are shown read-only.
To manage these projects fully, migrate them to the modern PackageReference format:
- In-app: navigate into the project's packages view and press
Ctrl+M. LazyNuGet will confirm, create a.csproj.bakbackup, convert allpackages.configentries to<PackageReference>elements, remove old NuGet<Reference>hint-paths, and deletepackages.config. After migration the project reloads as a normal project. - Headless (batch): run
lazynuget --migrate /path/to/solutionto migrate everypackages.configproject in the tree at once. Results are printed to stdout and a.csproj.bakbackup is created next to each migrated file. If a migration fails for any reason the original.csprojis restored from the backup automatically.
Framework assembly references (System, System.Core, etc.) are never touched — only NuGet hint-path references are removed.
LazyNuGet requires a terminal with Unicode and 256-colour support. Recommended terminals: Windows Terminal, iTerm2, GNOME Terminal, Alacritty, Kitty. The basic Windows cmd.exe console is not supported — use Windows Terminal instead.
Run: xattr -d com.apple.quarantine $(which lazynuget)
lazynuget-uninstallOr manually:
curl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/uninstall.sh | bashirm https://raw.githubusercontent.com/nickprotop/lazynuget/main/uninstall.ps1 | iexSettings are stored in ~/.config/LazyNuGet/ (Linux), ~/Library/Application Support/LazyNuGet/ (macOS), or %APPDATA%\LazyNuGet\ (Windows) and are not removed by the uninstaller.
- SharpConsoleUI - A .NET library for building terminal user interfaces with responsive layouts and window management
Nikolaos Protopapas
- GitHub: @nickprotop
This project is licensed under the MIT License - see the LICENSE file for details.
