WinGet is the Windows Package Manager. This project includes a CLI (Command Line Interface), PowerShell modules, and a COM (Component Object Model) API (Application Programming Interface).
What exactly is WinGet and where does it come from?
WinGet is Microsoft's official, open-source Windows Package Manager, included in modern versions of Windows 10 and Windows 11 via the App Installer. Think of it as apt or yum for Windows – it lets you perform everything from searching and installing to upgrading and uninstalling software through simple command-line instructions.
Can I script WinGet installations and updates?
Yes – one of WinGet's strongest features is scripting. You can run winget install or winget upgrade with multiple package names in a single command, and include silent install switches (--silent, -h) to automate the process. Many users combine this with tools like Windows Task Scheduler or config management systems for fully automated setups.
Can WinGet install Microsoft Store apps, and how?
Yes. Since version 1.8, WinGet supports installing apps from the Microsoft Store using the -s msstore source. You can also use winget download to fetch store apps offline for deployment later.
Is WinGet secure and enterprise-ready?
WinGet uses SmartScreen, static analysis, SHA-256 hash validation, and digital signing checks to ensure a high level of trust in downloaded packages. It also supports custom or private repositories, making it suitable for internal enterprise deployments.
How do I perform system-wide installs for all users?
WinGet supports machine-wide installations with either --global or -g. This installs software for every user on the computer – but requires administrator privileges.
Features
- HTTP Proxy support
- WinGet Configuration Mixed Elevation Mode support via COM
- WinGet Package Icon support via COM
- PowerShell Modules work on ARM64
- Control Characters shouldn't be allowed in user generated content
- Downloading MSStore packages
- Extracting archives using tar.exe
- V2 Index
What's New
- Bump version to 1.28 by @florelis in #5787
- Move to latest 7.4 PS SDK by @JohnMcPMS in #5811
- Enable MultiProcessorCompilation by @Trenly in #5804
- Remove mention of WinGet Insider program from the README by @florelis in #5832
- Ignore ReleaseStatic outputs and clean intermediates by @JohnMcPMS in #5848
- Make Repair-WGPM a COM-aware cmdlet and rework version retrieval by @JohnMcPMS in #5842
- Unregister signal handler by @JohnMcPMS in #5861
- Support associating export units with packages in subdirectories of install location by @JohnMcPMS in #5859
- Send host geo to sandbox by @JohnMcPMS in #5873
- Update C++ nuget package references using new scripts by @JohnMcPMS in #5877
- Update platform toolset by @florelis in #5882
- Extract event log for potential crash info by @JohnMcPMS in #5807
- Update CODEOWNERS to include winget-developers by @florelis in #5891
- Fixes for VS2026 by @florelis in #5896
- Additional logging limitations and control by @JohnMcPMS in #5888
- Use hybrid CRT linkage instead of full static by @JohnMcPMS in #5913
- Enable source reference to get thread globals for off-thread logging by @JohnMcPMS in #5780
- Fix JSON, missing closing brace by @doterik in #5924
- Test host for in-proc COM module validation by @JohnMcPMS in #5910
- Add sleep to allow background threads to quiesce by @JohnMcPMS in #5933
- Allow suppressing configuration output on test by @Trenly in #5794
- Enable Explicit toggling for sources (i.e. Enable/Disable) by @dkbennett in #5904
- Fix fuzz build by @JohnMcPMS in #5932
- Normalize directory separators when adding packages to path by @Trenly in #5796
- Add sleep to another inproc test by @JohnMcPMS in #5935
- Don't build inproc testbed for fuzzing by @JohnMcPMS in #5937
- Create schema 1.12.0 folder by @Trenly in #5944
- Fix names of 1.12 Schemas by @Trenly in #5945
- Fix Font feature property name by @Trenly in #5946
- Add check to ensure vcpkg triplets match across projects by @florelis in #5950
- Update release notes for v1.28 by @florelis in #5957
- Details output option for list by @JohnMcPMS in #5939
- PowerShell Repair enhancements by @AmelBawa-msft in #5711
- Allow inproc callers to disable termination signal handlers by @JohnMcPMS in #5958
- Add manifest version to WinGetUtilInterop by @msftrubengu in #5964
- Fixes for updating winget from winget by @JohnMcPMS in #5972
- Diagnostics and fix for pipeline test failures by @JohnMcPMS in #5975
- Escape caller in user agent header by @JohnMcPMS in #5998
- Add DSC resource list to manifest by @JohnMcPMS in #5997
- Add command builder with escaped user input by @AmelBawa-msft in #5982
- Add missing closing brace in settings.export.schema.0.1.json by @DuckDuckStudio in #6004
- Turn off PWSH UT build in Fuzzing and ReleaseStatic for all platforms by @AmelBawa-msft in #6005
- Remove experimental feature gate on source edit by @dkbennett in #6006
- Update ReleaseNotes by @florelis in #6007
- Make list details stable (1.28) by @JohnMcPMS in #6021
- Move to IReference rather than custom enum for optional bool (1.28) by @JohnMcPMS in #6024
- Apply latest localization patch (1.28) by @florelis in #6025



