Chocolatey vs. Scoop: Package Managers for Windows
Tags: powershell, windows, chocolatey, scoop
Published: 2020-07-29 01:01:16


Collect them all! Install [Winget], [Chocolatey] and [Scoop]. (I just put the "vs." in there as [clickbait](https://en.wikipedia.org/wiki/Clickbait).) They make installing and managing software on Windows so much easier. They are different tools, though, and I suggest that their usage depends on the scenario.

<!-- more -->

In the Linux world, there are `apt`, `yum`, `dnf`, `pacman`, and many others. In Mac and Linux, there is `brew`. For Windows, there are three: `winget`, `choco` and `scoop`. They manage software from the PowerShell command-line.

## [Winget]: the command-line version of the Microsoft Store

[<img src="https://www.bowmanjd.com/chocolatey-scoop-winget/winget.png" width="200" height="200" alt="Winget icon">][winget]

[Winget] serves similar functions as Scoop or Chocolatey, but the catalog of packages is a bit different. It has a winget-specific [community repository](https://github.com/microsoft/winget-pkgs) as do Scoop and Chocolatey. But it also has the Microsoft Store. Any free and "E" for everyone package should be installable via a simple `winget install packagename` (in some cases, you may want to be more specific with the package id. This can be obtained using `winget search`.

## [Chocolatey]: conventional install locations, as Admin

[![Chocolatey logo](https://www.bowmanjd.com/chocolatey-scoop-winget/chocolatey.svg)][chocolatey]

[Chocolatey] can install from [a community repository](https://chocolatey.org/packages) with thousands of packages. In general, installing one of these packages, such as [Google Chrome](https://chocolatey.org/packages/GoogleChrome), will require elevated Admin privileges, and will install it where you would expect (likely `C:\Program Files\` or `C:\Program Files (x86)\`). The applications will have shortcuts in your start menu, and possibly on your desktop.

[Chocolatey]'s repository is huge and mature. If [winget] is unable to install your app, try to `choco install` it -- you might be pleasantly surprised.

## [Scoop]: non-Admin by default, installs in user directory

[<img src="https://www.bowmanjd.com/chocolatey-scoop-winget/scoop.jpg" width="460" height="460" alt="Scoop icon">][scoop]

[Scoop] is designed for developers who have an affinity for Unix. By default, it installs packages to `~/scoop/` and this is both a strength and a confusion point. Apps will not by default show in the start menu, and if plugins or addons expect to find the installation in a certain directory (looking at you, OBS Studio!), there will be some inconvenience and tedious setup.

If you do not have Admin access to your system (for instance, this is a shared server with Remote Desktop access), then Scoop is the right choice.

Scoop also seems natural for installing command-line tools that you might miss from Unix-like systems, such as Linux or Mac. While some of these tools may be available through Chocolatey or even winget, the Scoop ecosystem is designed with such tools in mind.

The Scoop wiki has a [nice write-up](https://github.com/ScoopInstaller/Scoop/wiki/Chocolatey-and-Winget-Comparison) discussing Scoop and Chocolatey and Winget.

## Installation of each tool

### Prerequisite for Scoop and Chocolatey: Enable execution of PowerShell scripts

For both [Scoop] and [Chocolatey], you will need to set the PowerShell Execution Policy to something more permissive than "Restricted." Here is my suggestion: be strict with the scope of LocalMachine, and only slightly more permissive with the CurrentUser scope. So, first launch PowerShell as Admin (I use ⊞-x then select "Windows PowerShell (Admin)") and run

```powershell
Set-ExecutionPolicy AllSigned
Set-ExecutionPolicy RemoteSigned -scope CurrentUser
```

The first line means that all scripts and configuration files _on this computer_ must be signed by a trusted publisher, even if you write them yourself. This is pretty strict.

The second line means that all scripts and configuration files _downloaded from the Internet_ must be signed by a trusted publisher, but scripts you write yourself will work, _for the current user_. This policy will "win" when you are logged in.

### Winget installation

The easiest way to install [Winget] is through the Microsoft Store, installing the [App Installer](https://www.microsoft.com/p/app-installer/9nblggh4nns1) package.

The [Winget repo also has instructions for manually updating Winget](https://github.com/microsoft/winget-cli#manually-update).

### Chocolatey installation

In an Admin-level PowerShell window, the following should work, provided you have set the ExecutionPolicy as above:

```powershell
iwr -useb chocolatey.org/install.ps1 | iex
```

See [the detailed installation docs](https://chocolatey.org/install#individual) if you have issues with the above.

### Scoop installation

In any PowerShell window, no Admin necessary, the following will install Scoop, provided you have set the ExecutionPolicy as detailed at the beginning of the article:

```powershell
iwr -useb get.scoop.sh | iex
```

See [the detailed installation docs](https://github.com/lukesampson/scoop/wiki/Quick-Start#installing-scoop) for more info.

### Scoop buckets

I often install the extras bucket immediately:

```powershell
scoop bucket add extras
```

A bucket is a set of apps that can be searched and installed. To see all the known community buckets:

```powershell
scoop bucket known
```

Then add the ones you like!

## Usage of the various tools

### Chocolatey search

```powershell
choco search ditto
```

### Chocolatey install package

```powershell
choco install ditto
```

### Chocolatey upgrade all currently installed packages

```powershell
choco upgrade all
```

### Chocolatey help

```powershell
choco -help
```

### Scoop search

```powershell
scoop search sudo
```

### Scoop install package

```powershell
scoop install sudo
```

### Scoop upgrade all currently installed packages

```powershell
scoop update *
```

### Scoop help

```powershell
scoop help
```

### Winget search

```powershell
winget search filezilla
```

### Winget install package

```powershell
winget install filezilla
```

### Winget upgrade all currently installed packages

```powershell
winget upgrade --all
```

### Winget help

```powershell
winget -?
```

Enjoy and experiment!

[chocolatey]: https://chocolatey.org/
[scoop]: https://scoop.sh/
[winget]: https://github.com/microsoft/winget-cli