LazyNuGet 1.0.4

There is a newer version of this package available.
See the version list below for details.
dotnet tool install --global LazyNuGet --version 1.0.4
                    
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
                    
if you are setting up this repo
dotnet tool install --local LazyNuGet --version 1.0.4
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=LazyNuGet&version=1.0.4
                    
nuke :add-package LazyNuGet --version 1.0.4
                    

LazyNuGet

<div align="center"> <img src=".github/logo.svg" alt="LazyNuGet Logo" width="600"> </div>

<div align="center">

License: MIT NuGet .NET Platform

</div>

A terminal-based NuGet package manager inspired by lazygit.

<div align="center">

⭐ If you find LazyNuGet useful, please consider giving it a star! ⭐

It helps others discover the project and motivates continued development.

GitHub stars

</div>

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.

LazyNuGet Dashboard

View more screenshots

Quick Start

Get LazyNuGet running in seconds:

Option 1: .NET Global Tool (if you have .NET 9 installed)

dotnet tool install --global LazyNuGet
lazynuget

Option 2: Self-contained binary (no .NET required)

curl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.sh | bash
lazynuget

That's it! Use arrow keys (or the mouse) to navigate, Enter to view package details, and Ctrl+S to search NuGet.org.

Features

🎨 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

Input

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.

Keyboard Shortcuts

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

Installation

If you have .NET 10.0 or later installed:

dotnet tool install --global LazyNuGet

Advantages:

  • βœ… 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 LazyNuGet

Uninstall:

dotnet tool uninstall --global LazyNuGet

Self-Contained Binaries (No .NET required)

Linux

Download and install the latest release:

curl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.sh | bash

This automatically:

  • Downloads the binary for your architecture (x64 or ARM64)
  • Installs to ~/.local/bin/lazynuget
  • Adds ~/.local/bin to your PATH

After installation, reload your shell:

source ~/.bashrc  # or ~/.zshrc

macOS

curl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.sh | bash

The 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)

Windows

Open PowerShell and run:

irm https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.ps1 | iex

This 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".

Manual Install

Download the latest binary for your platform:

Linux/macOS β€” make executable and move to PATH:

chmod +x lazynuget-linux-x64
sudo mv lazynuget-linux-x64 /usr/local/bin/lazynuget

Build from Source

Requirements:

  • .NET 10.0 SDK
  • Terminal with Unicode support
git clone https://github.com/nickprotop/lazynuget.git
cd lazynuget
dotnet build -c Release

Run with:

dotnet run [path]

Usage

# 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 --help

LazyNuGet will scan the directory for .csproj files and display all discovered projects and their packages.

Troubleshooting

Projects not found

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.

Packages show as up-to-date but shouldn't be

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.

Outdated/vulnerable badges not appearing

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.

Private feed not showing packages

  1. Confirm the feed URL is correct β€” open Ctrl+P β†’ Sources tab and verify it is enabled.
  2. If the feed requires authentication, make sure credentials are saved (edit the source and re-enter them).
  3. On Linux/macOS credentials are stored as clear-text in ~/.nuget/NuGet/NuGet.Config. On Windows they are encrypted with DPAPI.
  4. 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.

Authentication errors on a private feed

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).

Project shows zero packages (legacy packages.config project)

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.bak backup, convert all packages.config entries to <PackageReference> elements, remove old NuGet <Reference> hint-paths, and delete packages.config. After migration the project reloads as a normal project.
  • Headless (batch): run lazynuget --migrate /path/to/solution to migrate every packages.config project in the tree at once. Results are printed to stdout and a .csproj.bak backup is created next to each migrated file. If a migration fails for any reason the original .csproj is restored from the backup automatically.

Framework assembly references (System, System.Core, etc.) are never touched β€” only NuGet hint-path references are removed.

Terminal display looks broken (missing borders, garbled text)

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.

macOS: "cannot be opened because the developer cannot be verified"

Run: xattr -d com.apple.quarantine $(which lazynuget)


Uninstall

Linux / macOS

lazynuget-uninstall

Or manually:

curl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/uninstall.sh | bash

Windows

irm https://raw.githubusercontent.com/nickprotop/lazynuget/main/uninstall.ps1 | iex

Settings are stored in ~/.config/LazyNuGet/ (Linux), ~/Library/Application Support/LazyNuGet/ (macOS), or %APPDATA%\LazyNuGet\ (Windows) and are not removed by the uninstaller.

Built With

  • SharpConsoleUI - A .NET library for building terminal user interfaces with responsive layouts and window management

Author

Nikolaos Protopapas

License

This project is licensed under the MIT License - see the LICENSE file for details.

Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
1.0.19 377 6/6/2026
1.0.18 167 4/17/2026
1.0.17 144 4/14/2026
1.0.16 152 4/13/2026
1.0.15 167 4/7/2026
1.0.14 148 4/7/2026
1.0.13 170 4/6/2026
1.0.12 160 4/6/2026
1.0.11 153 3/30/2026
1.0.10 148 3/25/2026
1.0.9 138 3/22/2026
1.0.8 152 3/15/2026
1.0.7 141 3/13/2026
1.0.6 143 3/4/2026
1.0.5 142 2/27/2026
1.0.4 138 2/27/2026
1.0.3 133 2/27/2026
1.0.2 126 2/26/2026
1.0.1 135 2/26/2026
1.0.0 150 2/26/2026
Loading failed