scoop vs winget — Windows Package Managers Compared and Split
winget for desktop apps, scoop for CLI/portable. Use both — setup and practical split.
Windows package managers don't have a single unified standard like macOS Homebrew. winget (MS official) and scoop (community) each have clear strengths and weaknesses, so usually you use both. This guide covers differences, setup, and a practical split.
Target: Windows 10/11 (Windows initial setup complete).
TL;DR
| Item | winget | scoop | Chocolatey |
|---|---|---|---|
| Operator | Microsoft official | Community | Community |
| Install location | System (admin) | ~/scoop/ (user, no admin) | System (admin) |
| Strength | Desktop GUI apps, official catalog | CLI tools, portable, isolated | Oldest catalog |
| Weakness | CLI tool catalog is weak | Fewer desktop GUI apps | UAC prompt every time |
| Privilege | Admin required (usually) | User-level | Admin required |
| Recommended for | Desktop apps (Chrome, VS Code, etc.) | Dev CLIs (jq, fzf, gh, neovim, etc.) | Legacy catalog only |
Recommendation: winget (desktop) + scoop (CLI). Chocolatey only for things missing from both.
1. winget — Desktop Apps First
1.1 Check Install
Built into Win11 and Win10 21H1+. Verify:
winget --version
# v1.7.x or aboveIf absent, update "App Installer" via Microsoft Store.
1.2 Common Commands
# Search
winget search vscode
# Install
winget install --id Microsoft.VisualStudioCode -e
# Upgrade everything
winget upgrade --all
# List installed
winget list
# Uninstall
winget uninstall --id ...1.3 Recommended winget Packages
# Browsers / editors
winget install --id Google.Chrome -e
winget install --id Mozilla.Firefox -e
winget install --id Microsoft.VisualStudioCode -e
# Comms
winget install --id Notion.Notion -e
winget install --id SlackTechnologies.Slack -e
winget install --id Discord.Discord -e
# Dev
winget install --id Git.Git -e
winget install --id Docker.DockerDesktop -e
winget install --id Microsoft.PowerShell -e
winget install --id JetBrains.Toolbox -e
# Utilities
winget install --id 7zip.7zip -e
winget install --id Anysphere.Cursor -e
winget install --id Tailscale.Tailscale -e1.4 export / import
# Export current machine's packages
winget export -o packages.json
# Import on a new machine
winget import -i packages.jsonRestore all GUI apps in one shot — huge time saver on new PCs.
2. scoop — CLI Tools First
2.1 Install
No admin PowerShell needed:
# Unblock policy once (permanent)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
# Install scoop
irm get.scoop.sh | iexInstall location: ~\scoop\ (user folder). No system changes = clean.
2.2 First-time Setup
# Better search (across non-main buckets)
scoop install scoop-search
# Extra buckets (extras, versions, java, etc.)
scoop bucket add extras
scoop bucket add versions
scoop bucket add java
scoop bucket add nerd-fonts2.3 Common Commands
scoop search jq # search
scoop install jq # install
scoop update # fetch all manifests
scoop update * # upgrade all packages
scoop list # list installed
scoop uninstall jq # uninstall
scoop cleanup * # remove old versions2.4 Recommended scoop Packages
# CLI essentials
scoop install jq # JSON CLI
scoop install fzf # fuzzy finder
scoop install ripgrep # rg, grep replacement
scoop install fd # find replacement
scoop install bat # cat with syntax
scoop install eza # ls replacement
scoop install gh # GitHub CLI
scoop install neovim
scoop install delta # git diff pager
# Fonts
scoop install JetBrainsMono-NF
scoop install FiraCode-NF
# System utilities
scoop install sudo # WSL-style sudo for PowerShell
scoop install which
scoop install grep # GNU grep
scoop install sed # GNU sed
scoop install touch2.5 export / import
# Export — JSON
scoop export -c > scoop.json
# Import on a new machine
scoop import scoop.jsonSame pattern as winget. Both-side machine setup is automatable.
3. Avoiding Conflicts
Installing the same tool via both makes it ambiguous which one runs (depends on PATH order).
Rule: one tool, one manager. Check duplicates with Get-Command git -All.
3.1 Git
- winget Git for Windows = full SSH/GCM/help (recommended)
- scoop git = lighter, portable
- Usually use winget Git (GCM integration).
3.2 Node / Python
- Both can install them, but mise / nvs / pyenv-win is preferred (version managers)
- See mac/dev-toolchain — mise works on Windows too.
3.3 VS Code
- winget only — integrated auto-update
- scoop vscode is portable, no auto-update
4. Chocolatey — When?
Occasionally something missing from both winget and scoop exists (specialized enterprise software, drivers). Chocolatey's catalog is the oldest and broadest.
# Administrator PowerShell
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))choco install <pkg> -yUAC consent every time. Recommendation: last resort.
5. Practical Split Table
| Category | Manager | Examples |
|---|---|---|
| Browsers | winget | Chrome, Firefox, Edge |
| Editors/IDEs | winget | VS Code, Cursor, JetBrains Toolbox |
| Comms apps | winget | Slack, Discord, Notion |
| Git clients | winget | Git for Windows, GitHub Desktop |
| Containers | winget | Docker Desktop |
| Virtualization | winget | VirtualBox, VMware |
| Fonts (Nerd) | scoop | JetBrainsMono-NF, FiraCode-NF |
| CLI tools | scoop | jq, fzf, ripgrep, fd, bat, eza, gh, delta |
| Shell utilities | scoop | sudo, which, neovim |
| Patches / drivers | (manual or Chocolatey) | NVIDIA Studio Driver, etc. |
6. Automation Script (optional)
Automate the first 30 minutes of a new Windows setup. setup.ps1:
# winget — desktop
$wingetApps = @(
"Google.Chrome",
"Microsoft.VisualStudioCode",
"Anysphere.Cursor",
"Git.Git",
"Microsoft.PowerShell",
"Docker.DockerDesktop",
"JetBrains.Toolbox",
"Tailscale.Tailscale",
"AgileBits.1Password",
"AgileBits.1Password.CLI"
)
foreach ($app in $wingetApps) {
winget install --id $app -e --accept-package-agreements --accept-source-agreements
}
# scoop — CLI
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
irm get.scoop.sh | iex
scoop bucket add extras
scoop bucket add nerd-fonts
$scoopApps = @(
"jq", "fzf", "ripgrep", "fd", "bat", "eza", "gh", "delta",
"neovim", "sudo", "JetBrainsMono-NF"
)
foreach ($app in $scoopApps) {
scoop install $app
}Run:
PowerShell -ExecutionPolicy Bypass -File .\setup.ps1Combined with Windows initial setup's
setup-windows.ps1, a fresh Windows is ready in under an hour.
Verification
winget --version/scoop --versionboth workwinget list/scoop listshow installed packagesgh --version— scoop-installed tool in PATHcode --version— winget-installed tool in PATHwinget upgrade --all/scoop update *— both succeed
Troubleshooting
winget missing (Windows 10)
- Microsoft Store → update "App Installer"
- Older than 21H1: update OS
scoop install fails with "running scripts is disabled"
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUserwinget "Failed when searching source"
winget source reset --force
winget source updatescoop package not on PATH
- Open a new terminal — scoop updates PATH after install but existing shells don't see it
- Or
$env:Path = [System.Environment]::GetEnvironmentVariable("Path", "User")
Same tool conflicts
Get-Command foo -All to inspect PATH order. Remove one side and reinstall.
scoop font not applied
- scoop installs fonts per user. Other users/system services won't see them
- For system-wide, use winget or manual install
References
- Windows initial setup — winget basics
- PowerShell 7 setup — pwsh environment
- WSL2 tuning — Linux package managers (apt/dnf)
- winget (official)
- scoop (official)
- Chocolatey
Changelog
- 2026-05-12: First draft. winget vs scoop vs Chocolatey comparison + split table + automation script + six troubleshooting cases.