Skip to content

Nulifyer/guget

Repository files navigation

guget

guget logo

Go Platform GitHub Release VS Code Extension

A terminal UI for managing NuGet packages across .NET projects.

Overview

guget lets you browse, update, and add NuGet packages across all .csproj, .fsproj, and .vbproj files in a directory β€” without leaving the terminal. It fetches live version data from your configured NuGet sources and shows you at a glance what's out of date.

Screenshot placeholder

Features

Feature Description
πŸ“ Browse projects Scans recursively for .csproj / .fsproj / .vbproj files, with support for Central Package Management (Directory.Build.props) and imported .props files
πŸš€ Live version status Fetches latest versions from NuGet v3 API
πŸ›‘οΈ Vulnerability & deprecation tracking Surfaces CVE advisories and deprecated status per package version, with severity-coloured indicators in the list, detail panel, and version picker. Packages from private/Azure feeds are automatically enriched with vulnerability data from nuget.org
⬆️ Update packages Bump to the latest compatible or latest stable version
πŸ“‹ Version picker Choose any specific version with target-framework and vulnerability indicators
🌳 Dependency tree t shows declared dependencies; T runs dotnet list --include-transitive for the full transitive tree with status icons
βž• Add packages Search NuGet and add new package references
πŸ”„ Bulk operations Update a package across all projects at once
πŸ”§ Restore Run dotnet restore without leaving the TUI
🌐 Multi-source Respects NuGet.config and global NuGet source configuration. Private feed packages are supplemented with metadata from nuget.org
πŸ”— Clickable hyperlinks Package names, advisory IDs, versions, and source URLs are clickable in terminals that support OSC 8 hyperlinks
🎨 Themes Built-in colour themes: auto, dracula, nord, everforest, gruvbox. Select with --theme / -t
↔️ Responsive layout Columns hide progressively on narrow terminals to keep the UI usable at any width
πŸ“œ Log panel Real-time internal logs, toggleable with l
πŸ”Œ Sources panel View configured NuGet sources, toggleable with s
❓ Help overlay Full keybinding reference, press ?

Requirements

To run:

To build:

Installation

Linux / macOS

Installs to /usr/local/bin if writable, otherwise ~/.local/bin. Override the install location with GUGET_INSTALL=/your/path.

curl -fsSL https://raw.githubusercontent.com/nulifyer/guget/main/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nulifyer/guget/main/install.sh | bash

Windows (PowerShell)

irm https://raw.githubusercontent.com/nulifyer/guget/main/install.ps1 | iex

Fetches the latest release from GitHub, installs to %LOCALAPPDATA%\Programs\guget, and adds it to your user PATH automatically. Override the install location with $env:GUGET_INSTALL.

Windows note: The binary is not yet code-signed, so Windows SmartScreen may warn on first run. Running from a terminal (PowerShell or cmd) bypasses this.

Manual download

Grab the archive for your platform from the Releases page and place the binary somewhere on your PATH.

Build from source

git clone https://github.com/nulifyer/guget
cd guget/guget
go build -o guget        # Linux / macOS
go build -o guget.exe    # Windows

Usage

guget [options] [project]

Usage:
    no-color     -nc, --no-color
                Disable colored output in the terminal

    verbosity    -v, --verbose
                Set the logging verbosity level
                [<empty>, none, error, err, warn, warning, info, debug, dbg, trace, trc]

    project      -p, --project
                Set the target project directory (defaults to current working directory)

    theme        -t, --theme
                Color theme
                [auto, dracula, nord, everforest, gruvbox, etc]

    sort-by      -o, --sort-by
                Initial sort order: status, name, source, current, available
                Append :asc or :desc for direction (default: status:asc)

    log-file     -lf, --log-file
                Write all log output to this file (in addition to the TUI log panel)

    version      -V, --version
                Print the version and exit

Examples:

# Scan the current directory
guget

# Scan a specific solution folder
guget ~/src/MyApp

# Enable verbose logging
guget -v debug

# Use the dracula theme
guget -t dracula

# Sort by available updates, newest first
guget -o available:desc

Keybindings

Navigation

Key Action
Tab / Shift+Tab Cycle panel focus (Projects β†’ Packages β†’ Detail β†’ Logs)
↑ / k Move up
↓ / j Move down
Enter Confirm / move focus from Projects to Packages
Esc / q / Ctrl+C Quit (main screen) / Close (overlay)

Package Actions (packages panel)

Key Action
u Update to latest compatible version (this project)
U Update to latest compatible version (all projects)
a Update to latest stable version (this project)
A Update to latest stable version (all projects)
v Open version picker overlay
o Cycle sort mode (status, name, source, current, available)
O Toggle sort direction (asc / desc)
d Remove selected package (prompts for confirmation)
t Show declared dependency tree for the selected package

Project Actions

Key Action
r Run dotnet restore (selected project)
R Run dotnet restore (all projects)
T Show full transitive dependency tree
/ Search NuGet and add a new package

General

Key Action
l Toggle log panel
s Toggle sources panel
? Toggle keybinding help
[ / ] Resize focused panel

Search Overlay (/)

Key Action
↑ / Ctrl+P Previous result
↓ / Ctrl+N Next result
Enter Select package
Esc Close

Version Picker (v)

Key Action
↑ / k Previous version
↓ / j Next version
u Apply version (this project)
U Apply version (all projects)
Enter Apply version
Esc / q Close

Package Status Icons

Icon Meaning
β–² Installed version has known CVE vulnerabilities
βœ— Error fetching version info
↑ Newer compatible version available
⬆ Newer stable version available (beyond compatible)
~ Package is deprecated in the registry
βœ“ Up to date

How It Works

  1. On startup, guget walks the target directory and parses every .csproj / .fsproj / .vbproj it finds (skipping bin, obj, node_modules, .git, etc.).
  2. A background goroutine queries your configured NuGet sources for the latest version data for each package.
  3. The UI updates as results arrive β€” no waiting for a full scan before you can start navigating.
  4. When you update a package, guget rewrites the relevant project file(s) in place.

Built With

  • Bubbletea β€” TUI framework (MVU pattern)
  • Bubbles β€” list, spinner, text input, viewport
  • Lipgloss β€” terminal styling and layout