I moved out of Windows completely more than a decade ago. Basically, I was considering Windows as slow (hard drive format required every year), insecure (malware present in every pendrive I got from my friends), and unstable (frequent BSODs without any reason). It was also costly – over 100 euros was pretty much for a student’s pocket and I have to save for a while to afford the BOX version of Windows.
Conversely, Linux was almost the complete opposite. Blazing fast, secure, (mostly) stable, and open-source! It was even possible to get CDs with Ubuntu distro delivered for free. Additionally, the installation of software was so straightforward – either by a dedicated market or package managers. Linux was way ahead of Windows, although it lacked the software variety that Windows offered.
Fortunately for Windows, things started to change as it adopted several useful solutions from Linux. It not only got a dedicated software market (Microsoft Store) but also its own package manager. It works exactly as we can expect and are acquainted with.
Using Windows Package Manager (aka winget) can really save time when we need to install a bunch of programs at once. It is also much easier to update existing installations than downloading them from the website and clicking through the installation wizard.
Of course, Windows Package Manager is not perfect and it has its quirks. Nevertheless, it has potential and was one of the reasons I started using Windows again.
Installation of winget
Unfortunately, winget does not come preinstalled with Windows and it has to be installed i.e. by using the Microsoft Store first.
How to use that?
It is pretty intuitive to use WPM. Just type
winget to see what commands are available.
Windows Package Manager v1.4.10173
Copyright (c) Microsoft Corporation. All rights reserved.
The winget command line utility enables installing applications and other packages from the command line.
usage: winget [<command>] [<options>]
The following commands are available:
install Installs the given package
show Shows information about a package
source Manage sources of packages
search Find and show basic info of packages
list Display installed packages
upgrade Shows and performs available upgrades
uninstall Uninstalls the given package
hash Helper to hash installer files
validate Validates a manifest file
settings Open settings or set administrator settings
features Shows the status of experimental features
export Exports a list of the installed packages
import Installs all the packages in a file
For more details on a specific command, pass it the help argument. [-?]
The following options are available:
-v,--version Display the version of the tool
--info Display general info of the tool
-?,--help Shows help about the selected command
--wait Prompts the user to press any key before exiting
--verbose,--verbose-logs Enables verbose logging for WinGet
--disable-interactivity Disable interactive prompts
More help can be found at: https://aka.ms/winget-command-help
Let’s pretend we need to install a Wireshark app. To see what is available, we can search the “wireshark” term:
winget search wireshark
We should see the list of available packages:
C:\Users\dawid>winget search wireshark
Name Id Version Source
Wireshark WiresharkFoundation.Wireshark 220.127.116.11 winget
Alternatively, use this cool site: https://winstall.app/apps, where you can quickly find WPM packages.
To install that package, just use the package name:
winget install wireshark
or the id:
winget install WiresharkFoundation.Wireshark
If you run the command line with the admin rights, the package will install in the background, without the need to go through any installation wizard. Awesome!
C:\Users\dawid>winget install wireshark
Found Wireshark [WiresharkFoundation.Wireshark] Version 18.104.22.168
This application is licensed to you by its owner.
Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
██████████████████████████████ 75.1 MB / 75.1 MB
Successfully verified installer hash
Starting package install...
To upgrade, or uninstall that package, just use these intuitive commands. For example, to see all upgradable items, just type:
Then, it is possible to upgrade a particular program with:
winget upgrade <id name>
You can upgrade all programs by simply using
winget upgrade -h --all
What is currently available?
Of course, not every program already installed on my machine was available in the repository. Still, lots of things I need are there. Below you can see the list I personally use.
winget install --id=7zip.7zip -e
winget install --id=AdGuard.AdGuard -e
winget install --id=Cryptomator.Cryptomator -e
winget install --id=Amazon.SendToKindle -e
winget install --id=Garmin.Express -e
winget install --id=calibre.calibre -e
winget install --id=Obsidian.Obsidian -e
winget install --id=Google.Drive -e
winget install --id=UnifiedIntents.UnifiedRemote -e
winget install --id=Adobe.Acrobat.Reader.64-bit -e
winget install --id=Logitech.OptionsPlus -e
winget install --id=Google.EarthPro -e
winget install --id=evernote.evernote -e
winget install --id=Yubico.Authenticator -e
winget install --id=Yubico.YubikeyManager -e
winget install --id=Microsoft.WindowsTerminal -e
winget install --id=QL-Win.QuickLook -e
winget install --id=Oracle.JavaRuntimeEnvironment -e
winget install --id=ShareX.ShareX -e
winget install --id=Ghisler.TotalCommander -e
winget install --id=Wox.Wox -e
winget install --id=th-ch.YouTubeMusic -e
winget install --id=OBSProject.OBSStudio -v "undefined" -e
winget install --id=VideoLAN.VLC -e
winget install --id=GIMP.GIMP -e
winget install --id=Google.Chrome -e
winget install --id=Brave.Brave -e
winget install --id=Opera.Opera -e
winget install --id=OpenWhisperSystems.Signal -e
winget install --id=WhatsApp.WhatsApp -e
winget install --id=Microsoft.Skype -e
winget install --id=Zoom.Zoom -e
winget install --id=EpicGames.EpicGamesLauncher -e
winget install --id=Valve.Steam -e
winget install --id=Amazon.Games -e
: IDE / TOOLS
winget install --id=JetBrains.IntelliJIDEA.Ultimate -e
winget install --id=Microsoft.VisualStudioCode -e
winget install --id=Notepad++.Notepad++ -e
winget install --id=PostgreSQL.pgAdmin -e
winget install --id=GitHub.Atom -e
winget install --id=Git.Git -e
winget install --id=Docker.DockerDesktop -e
winget install --id=Oracle.JDK.19 -e
winget install --id=Python.Python.3.12 -e
winget install --id=PuTTY.PuTTY -e
winget install --id=WinSCP.WinSCP -e
winget install --id=OpenJS.NodeJS.LTS -e
winget install --id=GitHub.GitHubDesktop -e
winget install --id=Toinane.Colorpicker -e
winget install --id=ClockworkMod.UniversalADBDriver -e
winget install --id=Rufus.Rufus -e
winget install --id=WiresharkFoundation.Wireshark -e
You can see what programs from your machine are available and export that configuration at the same time:
winget export -o path/to/your/exportfile.json
To import the above config, just use the
winget import -i path/to/your/exportfile.json
Pretty efficient and simple!
Did I mention any quirks?
Exactly as in Linux package managers, some packages can be outdated comparing the latest versions available. I have also encountered 404 errors temporarily when using WPM:
Nevertheless, these are rather minor disadvantages. By the way, we can also publish our own packages in the Windows Package Manager repository.
Is Windows not that bad?
Windows Package Manager is yet another feature introduced to Windows that made it closer to Linux. I really appreciate it. Together with a couple of other features (like WSL2) it is also possible to be pretty performant on that system. I have seen that many people are unaware of WPM and this tool can be handy in many situations. We can have scripts that will install groups of software automatically, export the configuration of the existing setup and import that with ease. One of the most tedious tasks to do after a fresh setup is gone!