← back to posts

Winget: The Windows Package Manager You Should Be Using

If you’ve ever used apt on Ubuntu, brew on macOS, or choco on Windows, you already understand the appeal of a package manager. Type a command, get software — no browser, no wizard, no “next, next, finish.” Winget is Microsoft’s answer: a first-party, built-in package manager for Windows 10 and Windows 11.


What Is Winget?

Winget (Windows Package Manager) is an open-source CLI tool developed by Microsoft. Introduced in 2020, it is now pre-installed on Windows 11 and recent Windows 10 builds. It lets you install, upgrade, search, and remove software directly from your terminal using a centralized package catalog hosted on GitHub.

The package repository — microsoft/winget-pkgs — is community-driven and contains over 5,000+ packages, including popular developer tools, browsers, IDEs, utilities, and more.

Winget in action — install, search, and upgrade apps from the terminal


Winget vs. Other Package Managers

FeatureWingetChocolateyScoopHomebrew (WSL)
Built into Windows✅ Yes❌ No❌ No❌ No
Open source✅ YesPartial✅ Yes✅ Yes
Package count5,000+9,000+3,000+7,000+
Installs system-wide✅ Yes✅ YesUser-onlyUser-only
GUI available✅ WinGet UI
Official Microsoft support✅ Yes

Choose winget when:

  • You want a zero-setup, built-in solution
  • You manage Windows machines at scale (integrates with Intune / MDM)
  • You want to script app installs for a new PC setup
  • You prefer official Microsoft tooling

Consider alternatives when:

  • You need a larger package catalog → Chocolatey
  • You want portable, isolated installs without admin rights → Scoop
  • You’re already inside a WSL/Linux environment → Homebrew

Installation

Windows 11: Winget is pre-installed. Verify by opening any terminal and running:

1
winget --version

winget version

Windows 10: Install via the Microsoft Store — search for App Installer, or grab the latest release from the winget-cli releases page.


Core Commands

Search for a Package

1
winget search <query>

Example:

1
winget search vscode
Name                    Id                         Version   Source
-----------------------------------------------------------------------
Visual Studio Code      Microsoft.VisualStudioCode 1.88.0    winget
VSCodium                VSCodium.VSCodium          1.88.0    winget

Searching for packages with winget search


Install a Package

1
winget install <id or name>

Examples:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# Install by package ID (recommended — avoids ambiguity)
winget install Microsoft.VisualStudioCode

# Install a specific version
winget install Microsoft.VisualStudioCode --version 1.85.0

# Silent install — no prompts, no UI
winget install Microsoft.VisualStudioCode --silent

# Install to a custom directory
winget install Git.Git --location "D:\Tools\Git"

# Accept license agreements automatically
winget install Git.Git --accept-package-agreements --accept-source-agreements

Installing with winget install


Upgrade Packages

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# List all upgradable packages
winget upgrade

# Upgrade a specific package
winget upgrade Microsoft.VisualStudioCode

# Upgrade everything at once
winget upgrade --all

# Upgrade all silently
winget upgrade --all --silent

Upgrading all apps at once with winget upgrade –all


Uninstall a Package

1
winget uninstall <id or name>

Example:

1
winget uninstall Microsoft.VisualStudioCode

Uninstall with winget uninstall


Show Package Details

Get detailed info about a package before installing:

1
winget show Git.Git

Outputs the publisher, license, description, homepage, install type, and available versions.

Show Information about package with winget show


List Installed Packages

1
2
3
4
5
# List all installed apps (including ones not installed via winget)
winget list

# Filter by name
winget list --name git

Winget scans all software installed on your system — not just packages it manages — making it a useful inventory tool.

List all packages with winget list


Export and Import Package Lists

One of winget’s most powerful features: export your entire app list and restore it on any machine.

Export:

1
winget export -o packages.json

Import:

1
winget import -i packages.json

The exported JSON looks like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
{
  "$schema": "https://aka.ms/winget-packages.schema.2.0.json",
  "Sources": [
    {
      "Packages": [
        { "PackageIdentifier": "Microsoft.VisualStudioCode" },
        { "PackageIdentifier": "Git.Git" },
        { "PackageIdentifier": "Microsoft.WindowsTerminal" }
      ],
      "SourceDetails": {
        "Name": "winget",
        "Type": "Microsoft.PreIndexed.Package"
      }
    }
  ]
}

This is ideal for setting up a new PC or keeping a consistent dev environment across machines.


Useful Flags Reference

FlagDescription
--silent / -hSuppress install UI and prompts
--versionTarget a specific version
--idMatch by exact package ID
-eExact match (combine with --id)
--sourceSpecify source (winget, msstore)
--locationCustom install directory
--accept-package-agreementsAuto-accept license agreements
--accept-source-agreementsAuto-accept source terms
--interactiveForce interactive install mode
--logWrite install log to a file
--forceRe-install even if already installed

Real-World Example: Bootstrap a Dev Machine

Here’s a PowerShell script to set up a complete dev environment in one shot:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$apps = @(
    "Git.Git",
    "Microsoft.VisualStudioCode",
    "Microsoft.WindowsTerminal",
    "OpenJS.NodeJS.LTS",
    "Microsoft.DotNet.SDK.8",
    "Docker.DockerDesktop",
    "Postman.Postman",
    "Google.Chrome",
    "Mozilla.Firefox"
)

foreach ($app in $apps) {
    Write-Host "Installing $app..."
    winget install --id $app -e --silent --accept-package-agreements --accept-source-agreements
}

Write-Host "Dev environment ready."

Save as setup.ps1 and run it on any fresh Windows install. Combine with winget export / winget import to keep machines in sync.


Managing Sources

Winget supports multiple package sources. By default it uses the winget community catalog and the Microsoft Store.

1
2
3
4
5
6
7
8
# List configured sources
winget source list

# Add a custom source
winget source add --name mysource --arg https://example.com/repo

# Reset sources to defaults
winget source reset --force

Tips

  • Use --id with -e (exact match) to avoid ambiguity: winget install --id Git.Git -e
  • Schedule winget upgrade --all --silent as a Windows Task to keep apps updated automatically
  • Browse available packages at winget.run — it generates install commands for you
  • winget list shows ALL installed software on the machine, not just winget-managed packages — useful for auditing

Conclusion

Winget makes Windows feel like a first-class developer platform. It’s built in, actively maintained by Microsoft, and backed by a large community package catalog. Whether you’re bootstrapping a new machine, keeping software current, or scripting repeatable environments, winget is the right tool — and it’s already on your system.

Start with winget search to explore what’s available, and replace your next manual installer download with a single command.