A smart, interactive package upgrade manager for Windows Package Manager (winget). Track what's changed since your last check and selectively upgrade packages with a clean, user-friendly interface.
- Clean, aligned output - No more messy progress bars or encoding issues
- Change tracking - See what's new or removed since last run
- Interactive selection - Pick exactly which packages to upgrade
- Color-coded output - Easy to read at a glance
- Baseline tracking - Automatically remembers your last check
- Fast and lightweight - Pure Python, no dependencies
- Windows 10/11
- Windows Package Manager (winget)
- Python 3.6 or higher
-
Download the script:
git clone https://github.com/yourusername/winget-upgrade-manager.git cd winget-upgrade-manager -
Set up the shortcut command:
Open PowerShell and run:
# Create profile if it doesn't exist if (!(Test-Path $PROFILE)) { New-Item -Path $PROFILE -Type File -Force } # Add the function (replace with your actual path) Add-Content $PROFILE "`nfunction wup { python `"$PWD\compare_winget_upgrades.py`" `$args }" # Reload profile . $PROFILE
-
You're done! Now you can use
wupfrom anywhere.
# View available upgrades and changes since last check
wup
# Interactive mode - select which packages to upgrade
wup -i
wup --interactive
# Reset baseline (clears saved history)
wup --reset
# Show help
wup --helpWhen you run wup -i, you'll see a numbered list of packages:
=== SELECT PACKAGES TO UPGRADE ===
Enter package numbers to upgrade (e.g., 1 3 5-7 or 'all' or 'none'):
1. Microsoft OneDrive Microsoft.OneDrive 25.206.1021 25.209.1026 winget
2. VLC media player VideoLAN.VLC 3.0.20 3.0.23 winget
3. Discord Discord.Discord 1.0.9003 1.0.9216 winget
Select:
Selection options:
1 3 5- Select specific packages1-5- Select a range1 2-4 7- Combine individual and rangesall- Upgrade everythingnoneor just Enter - Skip upgrades
Initial run:
Found 16 packages available for upgrade:
Current upgrades available:
Microsoft OneDrive Microsoft.OneDrive 25.206.1021 25.209.1026 winget
VLC media player VideoLAN.VLC 3.0.20 3.0.23 winget
Discord Discord.Discord 1.0.9003 1.0.9216 winget
...
Baseline created.
After upgrades:
=== CHANGES DETECTED ===
Packages no longer needing upgrade:
- VLC media player VideoLAN.VLC 3.0.20 3.0.23 winget
- Discord Discord.Discord 1.0.9003 1.0.9216 winget
New packages available for upgrade:
+ Python Launcher Python.Launcher 3.11.5 3.13.5 winget
- Scans winget for available upgrades
- Compares with your last scan (stored in
~/.winget-upgrade-last.txt) - Shows changes - what's new, what's been upgraded
- Optionally upgrades selected packages in interactive mode
- Updates baseline for next time
Problem:
winget upgrade --allupgrades everything without control- Manual selection is tedious with long package IDs
- Hard to track what changed since last check
- Progress bars make output messy and hard to parse
Solution:
- See exactly what changed
- Pick and choose what to upgrade
- Clean, readable output
- Fast baseline comparison
Contributions are welcome! Feel free to:
- Report bugs
- Suggest features
- Submit pull requests
MIT License - feel free to use and modify as you wish.
If you find this useful, give it a star! It helps others discover the tool.
- Progress bars from winget still appear during upgrades (cosmetic only)
- Very long package names may wrap on narrow terminals
- Run
wupregularly to stay on top of updates - Use
wup --resetif the baseline gets corrupted - Add
wupto your startup script for daily checks
Found a bug or have a question? Open an issue
Made with ❤️ for Windows power users