Logo from chocolatey.org

For those who don’t already know, Chocolatey is a package manager for Windows, similar to the Advanced Packaging Tool (APT) in Debian Linux. Chocolatey is designed for complete applications rather than developer libraries. For that there is a separate tool called NuGet.

This greatly simplifies the process of installing and managing software on Windows machines. The tool also integrates with a number of configuration management tools such as Puppet.

The list of applications available includes many common tools used by developers including:

  • PuTTY
  • Python
  • 7-Zip
  • VLC Media Player
  • VirtualBox

Installation

In a PowerShell v3+ prompt with administrator privileges, Chocolatey can be installed with the following:

PS> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
PS> iwr https://chocolatey.org/install.ps1 -UseBasicParsing | iex

Chocolatey will then be available from newly launched PowerShell and command prompts.

Basic Usage

Install packages with:

> choco install PACKAGE_NAME [PACKAGE_NAME...]
# Shorthand command
> cinst PACKAGE_NAME [PACKAGE_NAME...]

Uninstall packages with:

> choco uninstall PACKAGE_NAME [PACKAGE_NAME...]
# Shorthand command
> cuninst PACKAGE_NAME [PACKAGE_NAME...]

Upgrade packages with:

> choco upgrade PACKAGE_NAME|all
# Shorthand command
> cup PACKAGE_NAME|all

Installing a list of packages

You can install a list of packages using choco install by specifying packages.config as the package name. This is an XML file in the following format:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="putty" />
  <package id="thunderbird" version="45.3.0" />
  <package id="chocolateytestpackage" version="0.1" source="https://example.com/" />
  <package id="alloptions" version="0.1.1"
           source="https://somewhere/api/v2/" installArguments=""
           packageParameters="" forceX86="false" allowMultipleVersions="false"
           ignoreDependencies="false"
           />
</packages>

There isn’t currently a way to generate this XML automatically from the list of installed packages though. So I created a small Python script to do this by calling choco list --localonly. The script requires Jinja for the XML template which can be installed with:

pip install jinja

Conclusions

From my initial experience, Chocolatey seems to work pretty well. I was able to convert many of the manually installed applications on my machine to ‘Chocolatey’ installs by re-installing these with choco install.

Unfortunately, some of the more advanced features such as the ability to automatically synchronise with “Programs and Features” (prevents choco getting out of sync when using software such as web browser that automatically update) are only available in the paid versions though which start at $8/month. Hopefully some of these features will be brought to the open source version in future.