Introduction
WinGet brings the convenience of command-line package management to Windows, similar to what apt or brew offer on Linux and macOS. Developed by Microsoft as an open-source project, it connects to the Windows Package Manager Community Repository and the Microsoft Store, letting developers script repeatable machine setups.
What WinGet Does
- Installs applications silently from the command line with a single command
- Searches across the community repository and Microsoft Store for packages
- Upgrades all installed applications in one pass
- Exports and imports application lists for reproducible environment setup
- Supports package pinning to prevent specific apps from being upgraded
Architecture Overview
WinGet is a native Windows CLI client that communicates with one or more package sources. The default source is the community-driven winget-pkgs repository hosted on GitHub, which contains YAML manifests describing each package version, installer URL, and hash. WinGet downloads installers directly from publisher-hosted URLs, verifies SHA256 hashes, and runs the appropriate installer type (MSI, MSIX, EXE, or ZIP) with silent flags. A local SQLite database tracks installed packages and their source mappings.
Self-Hosting & Configuration
- Pre-installed on Windows 11; on older builds install the App Installer package from the Microsoft Store
- Configure default sources and behavior via winget settings which opens a JSON settings file
- Add custom package sources pointing to private REST endpoints or local directories
- Create YAML manifests for internal applications using the winget create command
- Use winget configure with DSC (Desired State Configuration) YAML files for declarative machine setup
Key Features
- Silent and unattended installs suitable for scripting and CI pipelines
- Hash verification of every downloaded installer for supply-chain safety
- Configuration files (winget configure) for declarative dev environment provisioning
- Package pinning and version constraints for controlled upgrades
- Integration with Microsoft Store and community repository out of the box
Comparison with Similar Tools
- Chocolatey — community-driven with a larger legacy catalog but requires a separate install and uses its own packaging format
- Scoop — focuses on portable CLI tools without admin rights but has a smaller catalog for GUI apps
- Homebrew (via WSL) — powerful on Linux/macOS but adds WSL overhead on Windows
- Ninite — GUI-only batch installer with no CLI automation or scripting
FAQ
Q: Is WinGet truly open source? A: Yes. Both the client (microsoft/winget-cli) and the package repository (microsoft/winget-pkgs) are MIT-licensed on GitHub.
Q: Do I need administrator rights? A: Some installers require elevation. WinGet prompts for UAC when needed but can install user-scoped packages without admin.
Q: Can I use WinGet in CI/CD pipelines? A: Yes. WinGet runs non-interactively and returns proper exit codes, making it suitable for GitHub Actions or Azure Pipelines.
Q: How do I contribute a package? A: Fork the winget-pkgs repository, create a YAML manifest with the winget create tool, and open a pull request. Automated validation checks the manifest and installer hash.