winup

Windows package manager wrapper

Winget upgrades,
finally
bearable.

Terminal

~ winup check

[ INFO ] Checking for available updates...

[ OK ] 32 upgrades available.

~ winup upgrade

[ INFO ] Fetching available upgrades...

? Select packages to upgrade (Space to select, Enter to confirm):

❯ ◉ Obsidian (Obsidian.Obsidian) [1.7.7 -> 1.12.7]

  ◉ Python (Python.Python.3.13) [3.13.7 -> 3.13.13]

  ◯ Zed (ZedIndustries.Zed) [1.0.1 -> 1.2.6]

  ◯ Telegram (Telegram.Telegram) [unknown -> unknown] (UNKNOWN)

~

A fast, interactive wrapper around winget - hides noisy unknown versions, lets you pick exactly what to upgrade, ships as a standalone .exe.

Why winup

Everything winget lacks.

Safe by default

Winget shows all updates including ones marked as unknown - often unstable or test releases. Winup hides them automatically, protecting you from potentially broken upgrades.

Interactive selection

No need to know package IDs upfront. Winup opens a checkbox prompt with all available updates - pick what you want with arrows and space, confirm, done.

Zero noise

Winget dumps walls of technical output. Winup parses everything and surfaces only what matters: a clean table via list, or a single count via check.

Idempotent

Built to run multiple times without issue. Gracefully handles UAC prompts, winget errors, and network failures - never leaves your system in a broken state.

Smart upgrade modes

Skip the prompt entirely with --all-safe, target specific packages with -i, or simulate the whole process with --dry-run before committing to any changes.

Portable

Ships as a single standalone .exe - drop it anywhere in your PATH and run. Also available as an NPM package for developers who already have Node.js or Bun.

Usage

Every command,
explained.

$ winup check

Quickly see how many updates are available without parsing the full list.

winup check

~ winup check

[ INFO ] Checking for available updates...

[ OK ] 32 upgrades available.

$ winup list

Display a clean table of all safe updates. Add --include-unknown to show everything.

winup list

~ winup list

[ INFO ] Fetching available upgrades...

--------------------------------------------------------------------------------

Name Id Version Available

--------------------------------------------------------------------------------

Obsidian Obsidian.Obsidian 1.7.7 1.12.7

Python 3.13 Python.Python.3.13 3.13.7 3.13.13

Zed ZedIndustries.Zed 1.0.1 1.2.6

AutoHotkey AutoHotkey.AutoHotkey 2.0.19 2.0.26

$ winup upgrade

Launch the interactive checkbox prompt. Safe packages are selected by default.

winup upgrade

~ winup upgrade

[ INFO ] Fetching available upgrades...

? Select packages to upgrade (Space to select, Enter to confirm):

❯ ◉ Obsidian (Obsidian.Obsidian) [1.7.7 -> 1.12.7]

◉ Python (Python.Python.3.13) [3.13.7 -> 3.13.13]

◯ Telegram (Telegram.Telegram) [unknown -> unknown] (UNKNOWN)

$ winup upgrade --all-safe

Skip the prompt entirely. Automatically upgrades all packages with known versions.

winup upgrade --all-safe

~ winup upgrade --all-safe

[ INFO ] Fetching available upgrades...

[ INFO ] Starting upgrade for 3 package(s)...

[ INFO ] Upgrading Obsidian (Obsidian.Obsidian)...

[ OK ] Obsidian.Obsidian successfully upgraded.

[ OK ] All selected packages upgraded successfully.

$ winup upgrade --dry-run

Simulate the entire upgrade process without making any real changes to your system.

winup upgrade --dry-run

~ winup upgrade --dry-run

[ INFO ] Fetching available upgrades...

[ INFO ] Starting upgrade for 1 package(s)...

[ INFO ] Upgrading Obsidian (Obsidian.Obsidian)...

[ OK ] Obsidian.Obsidian successfully upgraded (DRY RUN).

$ winup upgrade -i Obsidian.Obsidian

Upgrade specific packages by ID - like winget, but with safety checks built in.

winup upgrade -i Obsidian.Obsidian

~ winup upgrade -i Obsidian.Obsidian

[ INFO ] Fetching available upgrades...

[ INFO ] Starting upgrade for 1 package(s)...

[ INFO ] Upgrading Obsidian (Obsidian.Obsidian)...

[ OK ] Obsidian.Obsidian successfully upgraded.

[ OK ] All selected packages upgraded successfully.

Installation

Two ways to get started.

A

Standalone .exe

No runtime required. Download winup.exe, place it in any folder on your PATH, and run it from any terminal.

  1. 1 Go to the Releases page on GitHub
  2. 2 Download winup.exe
  3. 3 Place it in a folder that is on your PATH
  4. 4 Run winup from any terminal
Download winup.exe
B

NPM / Bun

For developers who already have Node.js or Bun installed. The package is published on npm as winup-cli.

npm

$ npm install -g winup-cli

bun

$ bun add -g winup-cli

View on npm