{"id":44647453,"url":"https://github.com/nickprotop/lazynuget","last_synced_at":"2026-04-11T02:18:11.666Z","repository":{"id":337727637,"uuid":"1154257987","full_name":"nickprotop/lazynuget","owner":"nickprotop","description":"TUI for managing NuGet packages across .NET solutions. Search, update, and manage dependencies from your terminal.","archived":false,"fork":false,"pushed_at":"2026-03-30T16:25:47.000Z","size":10910,"stargazers_count":25,"open_issues_count":3,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-02T09:31:42.854Z","etag":null,"topics":["cli","csharp","developer-tools","dotnet","dotnet-tool","linux","nuget","nuget-packages","package-manager","terminal","tui"],"latest_commit_sha":null,"homepage":"https://github.com/nickprotop/lazynuget","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nickprotop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-10T07:20:56.000Z","updated_at":"2026-03-30T16:23:17.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nickprotop/lazynuget","commit_stats":null,"previous_names":["nickprotop/lazynuget"],"tags_count":26,"template":false,"template_full_name":null,"purl":"pkg:github/nickprotop/lazynuget","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2Flazynuget","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2Flazynuget/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2Flazynuget/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2Flazynuget/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nickprotop","download_url":"https://codeload.github.com/nickprotop/lazynuget/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2Flazynuget/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31494177,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","csharp","developer-tools","dotnet","dotnet-tool","linux","nuget","nuget-packages","package-manager","terminal","tui"],"created_at":"2026-02-14T20:14:19.087Z","updated_at":"2026-04-07T00:01:48.383Z","avatar_url":"https://github.com/nickprotop.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LazyNuGet\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\".github/logo.svg\" alt=\"LazyNuGet Logo\" width=\"600\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![NuGet](https://img.shields.io/nuget/v/LazyNuGet?logo=nuget\u0026color=004880)](https://www.nuget.org/packages/LazyNuGet)\n[![.NET](https://img.shields.io/badge/.NET-9.0%2B-purple.svg)](https://dotnet.microsoft.com/)\n[![NuGet Downloads](https://img.shields.io/nuget/dt/LazyNuGet?color=004880)](https://www.nuget.org/packages/LazyNuGet)\n[![Platform](https://img.shields.io/badge/Platform-Linux%20|%20macOS%20|%20Windows-orange.svg)]()\n\n\u003c/div\u003e\n\n**A terminal-based NuGet package manager inspired by lazygit.**\n\n\u003cdiv align=\"center\"\u003e\n\n### ⭐ If you find LazyNuGet useful, please consider giving it a star! ⭐\n\nIt helps others discover the project and motivates continued development.\n\n[![GitHub stars](https://img.shields.io/github/stars/nickprotop/lazynuget?style=for-the-badge\u0026logo=github\u0026color=yellow)](https://github.com/nickprotop/lazynuget/stargazers)\n\n\u003c/div\u003e\n\nLazyNuGet 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.\n\n**Browse. Update. Search.** — **[Visit the project website](https://nickprotop.github.io/lazynuget/)**\n\n![LazyNuGet Dashboard](.github/dashboard-overview.png)\n\n**[View more screenshots](docs/screenshots/SCREENSHOTS.md)**\n\n## Quick Start\n\nGet LazyNuGet running in seconds:\n\n**Option 1: .NET Global Tool** (requires .NET 9 or later)\n```bash\ndotnet tool install --global LazyNuGet\nlazynuget\n```\n\n**Option 2: Self-contained binary** (no .NET required)\n```bash\ncurl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.sh | bash\nlazynuget\n```\n\nThat's it! Use arrow keys (or the mouse) to navigate, `Enter` to view package details, and `Ctrl+S` to search NuGet.org.\n\n## Features\n\n| | |\n|---|---|\n| 🎨 **Visual Interface** | Beautiful terminal UI, not just CLI commands |\n| ⚡ **Smart Updates** | Auto-detect outdated packages across all projects |\n| 🔍 **Package Search** | Browse and install from NuGet.org in-app |\n| 🌳 **Dependencies** | Visualize project and package dependency trees |\n| 📜 **History** | Track, retry, and undo NuGet operations |\n| 🔒 **Security** | Per-package vulnerability details with severity and advisory links |\n| 🏗️ **Multi-TF** | Full multi-target framework display (`net8.0 \\| net9.0`) |\n| 🔐 **Private Feeds** | Authenticated custom NuGet sources with stored credentials |\n| 🗂️ **Solution Groups** | Projects grouped by `.sln` file in the sidebar |\n| 🔄 **Migrate** | One-click migration from deprecated packages to their recommended replacements |\n| 🧪 **Prerelease** | Prerelease version hints in package details |\n| 📦 **CPM** | Full Central Package Management support — versions resolved from `Directory.Packages.props` |\n| ⚙️ **Configuration** | Private feeds, custom sources, settings |\n\n## Input\n\nLazyNuGet 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.\n\n## Keyboard Shortcuts\n\n| Key | Action |\n|-----|--------|\n| `↑/↓` | Navigate lists |\n| `Enter` | View package details / Select project |\n| `Ctrl+O` | Open folder picker |\n| `Ctrl+R` | Reload projects (clears cache) |\n| `Ctrl+S` | Search NuGet.org |\n| `Ctrl+D` | Dependency tree (project deps or package deps) |\n| `Ctrl+H` | View operation history |\n| `Ctrl+P` | Settings |\n| `Ctrl+U` | Update package / Update all |\n| `Ctrl+V` | Change package version |\n| `Ctrl+X` | Remove package |\n| `Ctrl+G` | Migrate all projects to Central Package Management (CPM) |\n| `Ctrl+M` | Migrate legacy `packages.config` project to `PackageReference` |\n| `Ctrl+L` | Open log viewer |\n| `Ctrl+↑/↓` | Scroll details panel |\n| `Esc` | Go back / Close dialogs |\n| `F1` | Package details — Overview tab |\n| `F2` | Package details — Dependencies tab |\n| `F3` | Package details — Versions tab |\n| `F4` | Package details — What's New tab |\n| `F5` | Package details — Security tab |\n\n## Installation\n\n### .NET Global Tool (Recommended for .NET developers)\n\nIf you have .NET 9.0 or later installed:\n\n```bash\ndotnet tool install --global LazyNuGet\n```\n\n**Advantages:**\n- ✅ Single command installation\n- ✅ Automatic updates with `dotnet tool update -g LazyNuGet`\n- ✅ Works on all platforms (Windows, macOS, Linux)\n- ✅ Lightweight (~5MB vs ~60MB for self-contained)\n\n**Update:**\n```bash\ndotnet tool update --global LazyNuGet\n```\n\n**Uninstall:**\n```bash\ndotnet tool uninstall --global LazyNuGet\n```\n\n---\n\n### Self-Contained Binaries (No .NET required)\n\n#### Linux\n\nDownload and install the latest release:\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.sh | bash\n```\n\nThis automatically:\n- Downloads the binary for your architecture (x64 or ARM64)\n- Installs to `~/.local/bin/lazynuget`\n- Adds `~/.local/bin` to your PATH\n\nAfter installation, reload your shell:\n```bash\nsource ~/.bashrc  # or ~/.zshrc\n```\n\n### macOS\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.sh | bash\n```\n\nThe installer detects macOS automatically and:\n- Downloads the correct binary (Intel or Apple Silicon)\n- Installs to `/usr/local/bin/` (or `~/.local/bin/` if not writable)\n- Clears the Gatekeeper quarantine flag\n\n\u003e **Note:** If macOS still blocks the binary, run: `xattr -d com.apple.quarantine $(which lazynuget)`\n\n### Windows\n\nOpen PowerShell and run:\n\n```powershell\nirm https://raw.githubusercontent.com/nickprotop/lazynuget/main/install.ps1 | iex\n```\n\nThis installs to `%LOCALAPPDATA%\\Programs\\LazyNuGet\\` and adds it to your user PATH.\n\n\u003e **Note:** If Windows SmartScreen blocks the binary, click \"More info\" then \"Run anyway\".\n\n### Manual Install\n\nDownload the latest binary for your platform:\n- [lazynuget-linux-x64](https://github.com/nickprotop/lazynuget/releases/latest) (Linux Intel/AMD)\n- [lazynuget-linux-arm64](https://github.com/nickprotop/lazynuget/releases/latest) (Linux ARM)\n- [lazynuget-osx-x64](https://github.com/nickprotop/lazynuget/releases/latest) (macOS Intel)\n- [lazynuget-osx-arm64](https://github.com/nickprotop/lazynuget/releases/latest) (macOS Apple Silicon)\n- [lazynuget-win-x64.exe](https://github.com/nickprotop/lazynuget/releases/latest) (Windows Intel/AMD)\n- [lazynuget-win-arm64.exe](https://github.com/nickprotop/lazynuget/releases/latest) (Windows ARM)\n\nLinux/macOS — make executable and move to PATH:\n```bash\nchmod +x lazynuget-linux-x64\nsudo mv lazynuget-linux-x64 /usr/local/bin/lazynuget\n```\n\n### Build from Source\n\nRequirements:\n- .NET 9.0 SDK or later\n- Terminal with Unicode support\n\n```bash\ngit clone https://github.com/nickprotop/lazynuget.git\ncd lazynuget\ndotnet build -c Release\n```\n\nRun with:\n```bash\ndotnet run [path]\n```\n\n## Usage\n\n```bash\n# Manage packages in current directory\nlazynuget\n\n# Manage packages in specific directory\nlazynuget /path/to/your/projects\n\n# Migrate all packages.config projects in a directory tree (headless, no UI)\nlazynuget --migrate /path/to/your/projects\n\n# Migrate all projects to Central Package Management (headless)\nlazynuget --migrate-cpm /path/to/your/projects\n\n# Show help\nlazynuget --help\n```\n\nLazyNuGet will scan the directory for .csproj files and display all discovered projects and their packages.\n\n## Troubleshooting\n\n### Projects not found\nLazyNuGet 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.\n\n### Packages show as up-to-date but shouldn't be\nLazyNuGet 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.\n\n### Outdated/vulnerable badges not appearing\nVersion 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.\n\n### Private feed not showing packages\n1. Confirm the feed URL is correct — open `Ctrl+P` → **Sources** tab and verify it is enabled.\n2. If the feed requires authentication, make sure credentials are saved (edit the source and re-enter them).\n3. On Linux/macOS credentials are stored as clear-text in `~/.nuget/NuGet/NuGet.Config`. On Windows they are encrypted with DPAPI.\n4. 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.\n\n### Authentication errors on a private feed\nRe-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`).\n\n### Project shows zero packages (legacy packages.config project)\n\nLazyNuGet reads `\u003cPackageReference\u003e` 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.\n\nTo manage these projects fully, migrate them to the modern `PackageReference` format:\n\n- **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 `\u003cPackageReference\u003e` elements, remove old NuGet `\u003cReference\u003e` hint-paths, and delete `packages.config`. After migration the project reloads as a normal project.\n- **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.\n\nFramework assembly references (`System`, `System.Core`, etc.) are never touched — only NuGet hint-path references are removed.\n\n### Terminal display looks broken (missing borders, garbled text)\nLazyNuGet 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.\n\n### macOS: \"cannot be opened because the developer cannot be verified\"\nRun: `xattr -d com.apple.quarantine $(which lazynuget)`\n\n---\n\n## Uninstall\n\n### Linux / macOS\n\n```bash\nlazynuget-uninstall\n```\n\nOr manually:\n```bash\ncurl -fsSL https://raw.githubusercontent.com/nickprotop/lazynuget/main/uninstall.sh | bash\n```\n\n### Windows\n\n```powershell\nirm https://raw.githubusercontent.com/nickprotop/lazynuget/main/uninstall.ps1 | iex\n```\n\nSettings are stored in `~/.config/LazyNuGet/` (Linux), `~/Library/Application Support/LazyNuGet/` (macOS), or `%APPDATA%\\LazyNuGet\\` (Windows) and are not removed by the uninstaller.\n\n## Built With\n\n- [SharpConsoleUI](https://github.com/nickprotop/ConsoleEx) - A .NET library for building terminal user interfaces with responsive layouts and window management\n\n## Author\n\n**Nikolaos Protopapas**\n\n- GitHub: [@nickprotop](https://github.com/nickprotop)\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickprotop%2Flazynuget","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickprotop%2Flazynuget","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickprotop%2Flazynuget/lists"}