A lightweight, portable GUI application for managing NuGet packages on .NET projects — built with Python and CustomTkinter.
- Browse — Search for packages on any NuGet feed with live results, download counts, and author info
- Installed — View all packages currently installed in a project or across an entire solution
- Updates — Detect and apply available updates in one click
- Install / Uninstall / Update — Full package lifecycle management via the .NET CLI (
dotnet) - Solution mode — Open a
.slnor.slnxfile and manage packages across all projects at once; per-project badges show installation scope - NuGet source manager — Add, remove, enable/disable, and reorder NuGet feeds; supports credentials (username + password) for private feeds
- Multi-config support — Automatically merges Machine, User, and project-level
NuGet.Configfiles; load any additional config with a single click - Parallel operations — Package searches and installs run concurrently using a thread pool scaled to your CPU count
- Portable single-file executable — Ship as a single
.exewith no Python installation required (built with PyInstaller) - Light / Dark / System theme — Adapts to your OS appearance preference automatically
- Settings persistence — Remembers your last project directory and loaded config path between sessions
- Error logging — Errors are written to
nurestore.logalongside the executable for easy diagnostics
| Requirement | Version |
|---|---|
| Python | 3.11 or later |
| customtkinter | latest |
| .NET SDK | any version with dotnet CLI on PATH |
Install Python dependencies:
pip install customtkinter- PyInstaller 6.11 or later (installed automatically by the build script)
python nurestore.py
# or open a specific directory directly
python nurestore.py D:\MyProjectRun the install script from the project root to register nurestore as a global command:
.\scripts\install_cli.ps1Install scope behavior:
- Non-elevated PowerShell: installs for the current user and updates User PATH.
- Elevated PowerShell (Run as Administrator): installs for all users and updates Machine PATH.
- Force all-users install explicitly:
.\scripts\install_cli.ps1 -AllUsersAfter installation you can launch the app from any folder:
# Opens in the current directory
nurestore
# Opens with a specific directory
nurestore D:\MyProjectRun the PowerShell build script from the project root:
.\scripts\build_portable.ps1The output is written to dist\NuRestorePortable.exe. This file is fully self-contained and requires no Python or additional libraries.
Optional: install portable build and add Explorer right-click integration:
# Explicit build-only mode
.\scripts\build_portable.ps1 -BuildOnly
# Current user install + context menu
.\scripts\build_portable.ps1 -Install
# All users install + context menu (run as Administrator)
.\scripts\build_portable.ps1 -Install -AllUsers
# Register context menu only (no copy/install)
.\scripts\build_portable.ps1 -RegisterContextMenuThis adds an Open with NuRestore entry when right-clicking a folder or the background inside a folder in Windows Explorer.
- Select a project or solution — Use the dropdown to pick a
.csproj,.fsproj,.vbproj,.sln, or.slnxfile. The app scans your last-used directory automatically. - Browse packages — Type a package name in the search box and press Enter or click Search. Results appear with version, author, and download count.
- Install a package — Select a result, choose the target version from the dropdown, and click Install.
- View installed packages — Switch to the Installed tab to see what is installed; click a package to uninstall it.
- Check for updates — Switch to the Updates tab; packages with newer versions are listed. Select one and click Update.
- Manage sources — Click Sources to open the NuGet source manager. Add private feeds with credentials, disable public feeds, or load an additional
NuGet.Config.
The source manager reads all active NuGet.Config files in the following priority order:
- Machine-level configs (
%ProgramData%\NuGet\Config\) - User-level config (
%APPDATA%\NuGet\NuGet.Config) - Solution / project-level
NuGet.Configfiles found under the selected directory
You can also Load Config… to merge in any additional config file without modifying your existing configs.
Sources marked as read-only (Machine or project-level) cannot be edited directly; add overrides at the User level.
Settings are stored in nurestore.settings.json alongside the executable (or script). The file is created automatically and contains:
{
"last_base_dir": "D:\\path\\to\\your\\project",
"loaded_config_path": "C:\\path\\to\\NuGet.Config"
}nurestore.py Main application
nurestore_portable.spec PyInstaller spec for single-file build
nurestore.settings.json User settings (auto-generated)
scripts/
build_portable.ps1 Builds the portable .exe with PyInstaller
install_cli.ps1 Installs nurestore as a global CLI command
tests/
test_nurestore.py Unit tests
python -m unittest discover -s tests