Package Managers on Windows¶
Historically, Windows hasn’t been the most developer-friendly operating system when it comes to installing software quickly and centrally. For years, the default workflow was finding an .exe or .msi on a website, downloading it, and clicking through a setup wizard. Today, however, the ecosystem has matured. We now have solid options: WinGet, Microsoft’s official package manager, and community-driven alternatives like Chocolatey and Scoop.
Installing software on Windows from the terminal: Scoop and WinGet as primary package managers.¶
Comparison¶
To get the most out of these tools, it’s important to understand their key differences:
Both WinGet and Chocolatey require administrator permissions, as they install software globally (for all users). Scoop, on the other hand, installs in user space (
~/scoop) and requires no elevated privileges.Chocolatey and Scoop require enabling PowerShell script execution; WinGet does not, since it is native to the system.
WinGet and Chocolatey include third-party software that may not be open source, while Scoop focuses exclusively on open-source software and development tools.
Scoop avoids popup interactions, enabling silent, unattended installation.
Which one to choose?¶
WinGet: Best for Microsoft software or anything that needs deep system integration (registry entries, Start Menu, file type associations).
Chocolatey: Suited for third-party software with a wide catalog:
choco install <package>
However, if most of your tools are open source or development-focused, Chocolatey adds little over Scoop—and still requires admin rights—so it falls outside my usual workflow.
Scoop: The natural choice for open-source software and development tools. It will feel familiar if you are coming from Linux or macOS.
Most of the tools I use daily are open source and development-oriented, so Scoop covers the vast majority. For the rest, I rely on WinGet.
Working with Scoop¶
To install Scoop, run the following in PowerShell:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
Scoop organizes software into “buckets” (repositories). The main bucket is available right after installation, but you can add others as needed. Essential commands:
# Install packages
scoop install 7zip git
# Search for a package
scoop search <name>
# List installed apps and check update status
scoop list
scoop status
# Update everything
scoop update *
Why I Also Use WinGet¶
Even though Scoop is my primary tool, there are specific cases where WinGet is the right choice:
LibreOffice: WinGet registers it in the system as a file-type handler (
.odt,.ods, etc.), which Scoop intentionally skips to avoid touching global registry entries.Zed: Zed’s built-in auto-update works correctly when installed via WinGet. Installed through Scoop, Zed updates itself to the system’s default path, ignoring Scoop’s directory structure, which removes the managed executable and makes the editor impossible to launch.
zoxide: The developer explicitly recommends installing it via WinGet on Windows.
To update everything installed through WinGet:
winget upgrade --all
Pinning Versions¶
Some software is better left unpinned from automatic updates: Teams, OneDrive, Visual Studio Community, and Microsoft Visual C++ redistributables are typical examples, since their updates can break dependencies or work environments. In WinGet, use pin:
# List pinned packages
winget pin list
# Pin to the current version
winget pin add --id Microsoft.Teams
# Pin to a specific version
winget pin add --id Microsoft.Teams --version 1.2.3
# Block all updates
winget pin add --id Microsoft.Teams --blocking
Nota
When running winget upgrade --all, pinned packages are skipped. To explicitly include them, use winget upgrade --all --include-pinned.
In Scoop, the equivalent is hold:
scoop hold <app>
scoop unhold <app>
Tips for Developers¶
Windows Developer Mode¶
Enable it under Settings > Privacy & security > For developers. This allows tools like Scoop to create symbolic links (mklink) without administrator permissions, which is required for Scoop to manage its internal structure correctly.
PowerShell Profiles¶
The profile for Windows PowerShell (v5.1) and PowerShell Core (v7+) are located in different paths:
Windows PowerShell (v5.1):
%USERPROFILE%\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1PowerShell Core (v7+):
%USERPROFILE%\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
If you customize aliases, functions, or initialize tools like zoxide, make sure to configure both profiles.
Conclusion¶
My usual workflow is: Scoop for CLI tools and open-source software, and WinGet for GUI applications that need system integration or when the project itself recommends it. Chocolatey stays out of the picture because Scoop already covers everything I need in that category—without the extra admin requirements.
References¶
WinGet Official Documentation. Microsoft.
Scoop.sh. Community.
Chocolatey Software. Chocolatey Software, Inc.
Allow mklink for a non-admin user. Stack Overflow.