devAlice
← Windows

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

ItemwingetscoopChocolatey
OperatorMicrosoft officialCommunityCommunity
Install locationSystem (admin)~/scoop/ (user, no admin)System (admin)
StrengthDesktop GUI apps, official catalogCLI tools, portable, isolatedOldest catalog
WeaknessCLI tool catalog is weakFewer desktop GUI appsUAC prompt every time
PrivilegeAdmin required (usually)User-levelAdmin required
Recommended forDesktop 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 above

If 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 -e

1.4 export / import

# Export current machine's packages
winget export -o packages.json
 
# Import on a new machine
winget import -i packages.json

Restore 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 | iex

Install 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-fonts

2.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 versions

2.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 touch

2.5 export / import

# Export — JSON
scoop export -c > scoop.json
 
# Import on a new machine
scoop import scoop.json

Same 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> -y

UAC consent every time. Recommendation: last resort.

5. Practical Split Table

CategoryManagerExamples
BrowserswingetChrome, Firefox, Edge
Editors/IDEswingetVS Code, Cursor, JetBrains Toolbox
Comms appswingetSlack, Discord, Notion
Git clientswingetGit for Windows, GitHub Desktop
ContainerswingetDocker Desktop
VirtualizationwingetVirtualBox, VMware
Fonts (Nerd)scoopJetBrainsMono-NF, FiraCode-NF
CLI toolsscoopjq, fzf, ripgrep, fd, bat, eza, gh, delta
Shell utilitiesscoopsudo, 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.ps1

Combined with Windows initial setup's setup-windows.ps1, a fresh Windows is ready in under an hour.

Verification

  1. winget --version / scoop --version both work
  2. winget list / scoop list show installed packages
  3. gh --version — scoop-installed tool in PATH
  4. code --version — winget-installed tool in PATH
  5. winget 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 CurrentUser

winget "Failed when searching source"

winget source reset --force
winget source update

scoop 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

Changelog

  • 2026-05-12: First draft. winget vs scoop vs Chocolatey comparison + split table + automation script + six troubleshooting cases.

Comments