A Windows desktop front end for winget.
Update, install, uninstall, pin, export and import — all from one table with checkboxes.
- Update what has a newer version: tick, press Update, and each row shows its own outcome.
- Install something new by searching as you type, from the winget catalogue and, if you want, the Microsoft Store.
- Details of any package from the right-click menu: what it is, who publishes it, and where and how it is installed.
- List and uninstall what is already on the machine, including programs installed without winget.
- Lists refresh themselves after every operation, keeping each row's outcome, and Retry failed runs it again on just the packages where it failed. Right-click the log to save it to a file or clear it.
- Pin what must not be touched, so updates skip it.
- Export / import the whole package list to rebuild a machine.
- Keeps winget itself working: installs it if it is missing, and shows when App Installer has a newer version.
- Light and dark theme, following Windows if you like. No telemetry, no branding, nothing to set up.
- Windows 10 (1809 or later) or 11 with winget, which comes in the App Installer package.
- If winget is missing, the app offers to install it at startup. It first registers the App Installer that comes with Windows; if there is none, it downloads App Installer and its dependencies from github.com/microsoft/winget-cli (a few hundred MB, checked against the published SHA-256). Saying no closes the app.
- Administrator rights: installing and removing software needs them, so the app asks for elevation when it starts.
From the latest release, pick one:
| File | What you get | |
|---|---|---|
| Installer (recommended) | WinGetStudio_Setup.exe |
Installs for all users, adds a Start menu entry (a desktop one is optional) and shows up in Windows Settings to uninstall. Uninstalling keeps your preferences. |
| Portable | WinGetStudio.exe |
Runs from anywhere and installs nothing. Nothing is written outside the registry key holding your preferences. |
It is also in the winget catalogue:
winget install FedeB2160.WinGetStudioSince 1.11.0 that runs the installer: the Start menu entry and the uninstall entry in Windows Settings come with it, and winget upgrade updates it. If you installed an earlier version with winget, winget upgrade FedeB2160.WinGetStudio replaces the portable copy, and its WinGetStudio command-line alias, with the installed one.
Note
Windows will warn about an unknown publisher. The exe is signed, but with a self-signed certificate. Choose More info → Run anyway, or see Troubleshooting to make the signature trusted.
Tip
If an antivirus quarantines the executable, or the app vanishes while running, it is a known false positive of Microsoft Defender on PowerShell compiled into an exe. Troubleshooting explains how to confirm it and get the app back.
The window has three tabs, plus Settings and About pinned to the right of the strip. Unknown, MS Store and Scope are remembered between launches, next to the theme. The progress bar and the log at the bottom stay visible from every tab, so you can start a long update, switch tab, and still see how it is going.
- Check lists what has a newer version available.
- Unknown (off by default) also lists packages whose installed version winget cannot determine. It applies to the next check.
- Tick what you want, or Select all.
- Update upgrades them one at a time. Each row shows its own outcome, and slow installers are never cut off: the log writes a line every 30 seconds so you can see it is still working.
- While the queue runs, Update reads Cancel. Pressing it lets the package in progress finish and then stops, so nothing is interrupted halfway through an installer; the packages that never ran keep their tick and an empty result.
- When the queue ends, the list checks again by itself. Packages that were updated drop out of it, since they have nothing left to update, and the ones that failed stay with their ❌. The log ends with a summary, such as 5 ok, 1 with warnings, 2 failed.
- If anything failed, Retry failed (N) appears at the top right of the tab: it runs the update again on just those packages, after a confirmation. The same button appears in Install and Installed after an install or an uninstall.
The list stays scrollable while updating (the ticks and the pin entries are greyed, not the list), and columns can be resized by dragging their edge in the header.
While a scan is running the progress bar is indeterminate: a scan has no progress to report, and a bar sitting at zero looks like something stuck. It shows real progress only for a queue, which knows how many packages it has.
| Icon | Meaning |
|---|---|
| ⏳ | in progress |
| ✅ | done |
| done, with a warning: usually "a reboot is needed" or "already installed" | |
| ❌ | failed: hover for the code, full detail in the log |
Type a name and results appear as you type. There is no autocomplete popup: the results list itself is the suggestion, so you see version and ID before choosing.
- Type at least 3 characters. The search runs against the local winget catalogue, which is fast.
- MS Store also searches the Microsoft Store. Since that goes online and is much slower, it only applies when you press Enter or Search, never while typing.
- Scope chooses who the package is installed for:
Autolets winget decide,Machineinstalls for all users,Useronly for you. - Tick rows and press Install, or double click a row to install just that one.
The SOURCE column says where each result comes from, winget or msstore, and the install uses that source, so winget does not look the package up in the other one too.
Note
The app runs elevated. If you elevated with a different account than the one you are signed in with, a per-user package ends up in that other profile. The log warns you once when that can happen.
The inventory of what is on the machine, loaded the first time you open the tab.
- The filter box narrows the list by name or ID as you type.
- Tick rows and press Uninstall. A confirmation lists exactly what will be removed, and defaults to No: a stray Enter cannot delete anything.
- If the filter is hiding a package you had ticked, both the counter and the confirmation say so, so nothing is removed off screen.
- Export... saves the list of installed packages to a
.jsonfile. Import... installs the packages a file describes: the quick way to set up a new machine.
Packages you installed without winget appear here too, with IDs like ARP\Machine\X64\Android Studio, and can be uninstalled like any other. winget refuses to uninstall some per-user programs from an elevated app; WinGet Studio then repeats the uninstall without elevation, and a console window shows while it runs.
After an uninstall the list refreshes by itself: removed packages drop out, the ones that failed stay with their ❌. An install or an update in another tab also changes this list, which then refreshes the next time you open the tab, and the Updates list does the same.
A pin tells winget to leave a package alone until you remove the pin: for the one that keeps reappearing and that you do not want touched. Pins made here are blocking: winget refuses to upgrade the package even when asked for it by name, from this app or from the command line. Pins created elsewhere keep their own type; this app skips them on update anyway.
Right click a row in Updates or Installed → Pin highlighted or Remove pin from highlighted. It works on the highlighted rows, not the ticked ones, and the entries say so. A pinned package shows a 📌 icon and is skipped by updates, including Select all. It can still be uninstalled: a pin blocks upgrades, not removal.
Right click a row in any of the three lists → Details of highlighted package. It shows the package as winget describes it: for one that is installed, its scope, installer type and location; from the catalogue, its description, publisher, homepage, licence and release notes. The text is winget's own, in the language of Windows.
Right-click the log for Copy, Select all, Save log..., which writes it to a text file and is handy when something failed and you want to keep the detail, and Clear log.
Every confirmation and message opens in the app's own style, over the window, which dims behind it.
The highlighted button is the one Enter presses, and on every confirmation it is No. Esc and the close button answer No as well. The text can be selected and copied.
The Settings tab, on the right of the strip next to About, is a tab like the others, so the progress bar and the log stay visible while you are in it.
- Theme:
Light,Dark, orSystemto follow Windows (which it keeps following while the window is open). - Tab strip: whether the tabs show their icon, their name, or both. Every tab also has a tooltip saying what it is for.
- Updates: Check for updates and Check at startup at the top, for both entries below them: WinGet Studio and App Installer (winget), each with its version, and an update button when there is a newer one (see Automatic updates). The startup check is on by default and can be turned off: it is one anonymous call to the GitHub API every time the app starts, two where the Microsoft Store does not update winget. The Check for updates button always works regardless.
Its own tab, at the very right end of the strip: what the app does function by function, and links to the source, the release notes, the licence and where to report a bug.
| Keys | Does |
|---|---|
| F5 | rescans the active tab, Updates or Installed; nothing on the others |
| Ctrl+F | jumps to the Install tab with the cursor in the search box |
| Enter | in the search box, searches the Microsoft Store too when MS Store is ticked; in a confirmation, presses the highlighted button (No) |
| Esc | in a confirmation, answers No |
At startup the app checks GitHub for a newer release. If there is one, an Update to vX.Y.Z button appears in the Settings tab, and the log says so. Nothing is downloaded until you ask: the button explains what will be downloaded and from where, and the file is verified against the checksum published with the release.
- A copy installed with the setup runs the new installer, which closes WinGet Studio, updates it and reopens it.
- A portable copy replaces itself and restarts.
- A copy installed with winget is updated with
winget upgrade FedeB2160.WinGetStudio.
If there is no newer release, no network, or you are running from source, the check says nothing at all. You can always ask explicitly with Check for updates, which does report the outcome either way.
The App Installer (winget) entry in Settings shows the installed version of App Installer, the package that carries winget. Who updates it depends on the machine:
- Where the Microsoft Store is available and allowed to update apps, it keeps App Installer up to date on its own, and the entry links to the Store's Downloads and updates page.
- Elsewhere (Windows LTSC and Server, Windows Sandbox, a Store turned off by policy), the startup check also asks GitHub for the latest winget release. If it is newer, an Update to vX.Y.Z button appears: it downloads App Installer and its dependencies from github.com/microsoft/winget-cli (about 300 MB), checks them against the published SHA-256 and installs them. If winget is running somewhere else at that moment, the new version starts when it closes.
See DEVELOPMENT.md: project layout, how the single-file exe is built from the modules, signing, publishing a release, the test suite, and the design decisions worth knowing before changing the code.
Version history is in CHANGELOG.md. Problems that are not bugs, and what to do about them, are in Troubleshooting.
To report a bug, propose a feature or send a pull request, see CONTRIBUTING.md. Security problems are reported privately: SECURITY.md.