Overlay ports

Usually, vcpkg ports are obtained from registries. It is very likely that most of the ports you install come from the official vcpkg registry at https://github.com/Microsoft/vcpkg. vcpkg lets you install ports available to you via the file system, we call these ports, overlay ports.

An overlay port can act as a drop-in replacement for an existing port or as a new port that is otherwise not available in a registry. While resolving package names, overlay ports take priority.

Overlay ports are evaluated in the following order:

When resolving port names, the first location that contains a matching overlay port is selected.

Using an overlay port

A directory can represent a set of overlay ports and can be specified in one of two ways:

  • Single overlay port: <directory>/sqlite3 refers to a single port
  • Directory of overlay ports: <directory> refers to a directory of ports A valid port must contain both vcpkg.json and portfile.cmake.

You can add an overlay port in several ways:

  • Command-line: Add one or multiple --overlay-ports=<directory> options to your vcpkg command
  • Manifest: Populate the "overlay-ports" array in vcpkg-configuration.json
  • Environmental variable: Set VCPKG_OVERLAY_PORTS to a list of directory paths

Example: Overlay Ports Example

Given this directory structure:

Example with multiple overlay port directories

Overlay directory named team-ports contains ports sqlite3, rapidjson and curl. Overlay directory named my-ports contains ports sqlite3 and rapidjson. The vcpkg directory contains the default registry.

Run:

vcpkg install sqlite3 --overlay-ports=my-ports --overlay-ports=team-ports

To install:

  • sqlite3 from my-ports

Run:

vcpkg install sqlite3 rapidjson curl
    --overlay-ports=my-ports/rapidjson
    --overlay-ports=vcpkg/ports/curl
    --overlay-ports=team-ports

To install:

  • sqlite3 from team-ports
  • rapidjson from my-ports
  • curl from `vcpkg/ports

Example: Using overlay ports to use a system package manager dependency

To use a system package manager dependency over a vcpkg one, refer to our blog post.