A few years ago, Microsoft, under Sundar Pichai’s leadership, changed its stance on open source and started to embrace Linux ideas. The package manager concept was one of them.
For a long time, Windows did not have a package manager. Some people made a 3rd party one called Chocolatey, but it often contained outdated packages and broken install scripts, and its website was confusing. It became popular, but it was not supported by Microsoft. It is still popular, because it has been around and has more packages than the new Winget package manager.
For most people, the install process in Windows is: Go online, download the installer, run the installer, reboot if necessary, run the app. This process is actually quite a bit time consuming and tedious, particularly if you use a lot of software, like most developers do.
Windows now has its own package manager under the hood, called winget
which can install some apps from the App Store, as well as other common software packages. Publishers can offer alternative download locations as well.
winget install "IntelliJ IDEA Community Edition"
Find an app and all of its possible sources using search
. It searches just like you would in the App. Some apps have multiple sources. As you can see on the right, the top item is from the ‘msstore’ (Microsoft Store).
C:\Users\rjamd>winget search "vivaldi"
Name Id Version Match Source
------------------------------------------------------------------------------------
Vivaldi Browser XP99GVQDX7JPR4 Unknown msstore
Vivaldi Vivaldi.Vivaldi 7.1.3570.50 ProductCode: vivaldi winget
Vivaldi (Snapshot) Vivaldi.Vivaldi.Snapshot 7.2.3597.3 ProductCode: vivaldi winget
Use ID’s to install a specific package, if your package name is ambiguous:
winget install --id=Microsoft.VisualStudioCode -e
winget install --id=XP99GVQDX7JPR4
You cannot install multiple packages in the same call to winget, but you can use the import
command to use a list of packages in a file. In order to create that file, you need to use the export
command to generate the list file. For more info on this, see Importing Multiple Packages.
winget import my_install_list.json
Alternately, you can create multiple calls to winget in the same command using semicolons:
winget install --id=Microsoft.VisualStudioCode -e ; winget install --id=Brave.Brave -e ; winget install --id=Microsoft.Teams -e ; winget install --id=Microsoft.Skype -e ; winget install --id=Discord.Discord -e ; winget install --id=Notion.Notion -e ; winget install --id=Greenshot.Greenshot -e
Packages that have multiple sources can be differentiated using the -s
Caveat: some publishers don’t let you install their Store versions using Winget.
An interesting side note, while I referred to it as the “Microsoft App Store”, Microsoft is not legally allowed to call it the “App Store” because Apple won a patent lawsuit. They own the phrase “App Store”, which is an utterly ridiculous legal ruling.
Importing Multiple Packages
To install multiple packages, use the import command:
winget import "my-install-list.json"
The file follows a specific format. You can generate a file using the export command and then model your file after that. The file follows this general format:
{
"$schema" : "https://aka.ms/winget-packages.schema.2.0.json",
"CreationDate" : "2025-02-16T21:09:20.399-00:00",
"Sources" :
[
{
"Packages" :
[
{
"PackageIdentifier" : "7zip.7zip"
},
{
"PackageIdentifier" : "KDE.Krita"
},
],
"SourceDetails" :
{
"Argument" : "https://cdn.winget.microsoft.com/cache",
"Identifier" : "Microsoft.Winget.Source_8wekyb3d8bbwe",
"Name" : "winget",
"Type" : "Microsoft.PreIndexed.Package"
}
},
{
"Packages" :
[
{
"PackageIdentifier" : "XPFFTQ032PTPHF"
},
{
"PackageIdentifier" : "XPDC2RH70K22MN"
},
{
"PackageIdentifier" : "9NW33J738BL0"
},
{
"PackageIdentifier" : "9P8LTPGCBZXD"
},
{
"PackageIdentifier" : "9P53S4T9ZNJ5"
}
],
"SourceDetails" :
{
"Argument" : "https://storeedgefd.dsx.mp.microsoft.com/v9.0",
"Identifier" : "StoreEdgeFD",
"Name" : "msstore",
"Type" : "Microsoft.Rest"
}
}
],
"WinGetVersion" : "1.9.25200"
}
The first “packages” block is for items that are hosted by the app publishers, while the second block is for Microsoft Store Apps.
When I found out about winget, I immediately spent 3 hours getting AI to create a PowerShell script to install all of my apps, instead of using the built-in import and export options. I didn’t realize these existed. Now, I hope you do and you don’t make the same mistake as me!
Sample file download:
Leave a Smart Comment