PrettyGet is a desktop front-end for winget, the Windows package manager. It shows you what is out of date, lets you update everything or pick and choose, streams the output live while it works, and can schedule unattended updates — all without opening a terminal.
It is built with Tauri: a Rust backend and a plain web frontend, in a minimal dark theme. No Electron, no bundled browser.
Features
Updates
Lists every package with a newer version available — name, package Id, current version and the version it would move to. Update all of them, update a selection, or one at a time.
Explore
Search for new packages with winget search and install them, or browse what is already installed with winget list and uninstall it. Advanced options let you pick the source (all sources, winget, or the Microsoft Store) and the install mode (silent or interactive). Your preferences are remembered between sessions.
Live log
Everything winget prints is streamed back into the window line by line while an operation runs, instead of leaving you staring at a spinner.
Scheduling
Create real entries in the Windows Task Scheduler — daily, weekly or monthly at a given time — that run winget upgrade --all silently. You can test a task or delete it from inside the app.
Run as administrator
A button relaunches the app elevated, once. Without it, Windows prompts for UAC on every single package during a bulk update.
Language
English by default, with an EN/ES switch in the top bar. The choice is remembered.
Requirements
- Windows 10 or 11 with
wingetavailable (it ships with App Installer from the Microsoft Store). - Rust and Node.js, if you are building from source.
- Tauri’s Windows prerequisites: Microsoft Edge WebView2 (already present on Windows 11) and Visual Studio Build Tools with Desktop development with C++.
Building from source
npm install # installs the Tauri CLI
npm run dev # compiles Rust and opens the window
npm run build # produces an .msi and an NSIS .exe installerThe first Rust build takes a while. Subsequent ones are fast — the slow part is compiling the dependency tree once.
How it works inside
Parsing winget’s output in any language
This was the interesting problem. winget upgrade prints a human-readable table whose column headers are translated into the system language, so matching on header text breaks the moment someone runs Windows in Spanish, German or Japanese.
PrettyGet locates the columns by position instead, using the row of dashes underneath the header as the ruler. It also strips ANSI escape codes and filters out table footers. The result parses correctly regardless of the system locale, and it is covered by unit tests — cargo test runs them against captured output.
Streaming progress without freezing
Updates run with --silent but deliberately without --disable-interactivity, so progress keeps flowing. Lines ending in a carriage return are progress redraws: they are emitted as transient and replace the previous one. Lines ending in a newline are committed to the log. The frontend listens on two events, one for output and one for completion.
Elevation and scheduling
Relaunching elevated uses Start-Process -Verb RunAs, which costs a single UAC prompt for the whole session. Scheduled tasks are created through schtasks with a PrettyGet_ name prefix, so the app can list and delete its own tasks without ever touching anything else in the Task Scheduler.
Console windows spawned by winget and schtasks are hidden with the CREATE_NO_WINDOW flag, so nothing flashes on screen mid-operation.
What’s next
- Per-package progress bar and a system tray icon.
- Notifications when new updates appear.
- Exporting and importing a package list.
A note on the parser. It handles winget’s current output format. If Microsoft changes it, the fix lives in one place — parse_upgrades in winget.rs — and the unit tests will tell you immediately.
