All vcpkg enterprise features now generally available: versioning, binary caching, manifests and registries

Augustin Popa

We are announcing today that all major vcpkg enterprise features are no longer experimental. The latest vcpkg release makes versioning, binary caching, manifests and registries generally available to any developer, team or enterprise.

We have steadily been adding to vcpkg over the years. What started as a small open source project to migrate developers to newer versions of Visual Studio has expanded into a cross-platform C/C++ library manager with over 1600 libraries that can be used in a wide variety of environments to serve the entire C/C++ ecosystem.

In this blog post, we go over the latest vcpkg product announcements, particularly for those of you who missed them at the Pure Virtual C++ conference earlier this month. We are announcing the general availability of vcpkg versioning and registries, which, combined with our earlier release of manifests and binary caching, comprise our solution for vcpkg in the enterprise space. These features are free and are now on by default in the tool, no longer requiring feature flags to be manually turned on to opt in.

While we believe all developers can benefit from these four features, we believe they will be especially useful to professional developers who previously would have avoided adopting vcpkg without them.

Lastly, we are happy to announce that vcpkg has a new website and mark!

 

Versioning and Registries No Longer Experimental

The vcpkg team has also been expanding the capabilities of the tool in response to popular user feedback. Most recently, we announced four new features:

  1. Binary caching, to save copies of prebuilt library binaries that can be restored on demand from a network file share, NuGet feed, or cloud binary storage solution. With this feature, you can build your dependencies once, and only once, then cache them for faster subsequent acquisition on other machines, containers, or continuous integration runs.
  2. Manifests, making it possible to declare dependencies in a vcpkg.json file that can be maintained in source control and that automatically integrates with MSBuild and CMake projects. Simply run an MSBuild compilation or generate a CMake cache to automatically restore missing dependencies.
  3. Versioning, to set libraries to be acquired at specific versions and lock them there.
  4. Registries, to bring your own libraries to vcpkg, whether they are forks of open source libraries available in the public catalog or other custom libraries (including private organization-only dependencies).

When we announced versioning and registries, we pointed out that the features were considered experimental, as we wanted to take some more time to check the quality and listen to user feedback. Now, we are ready to state that versioning and registries are no longer experimental. While we will continue improving the features described above, we are confident enough to recommend using them in production environments. Please continue to submit feedback to us in the form of bug reports as GitHub Issues and feature suggestions by starting a GitHub Discussion.

 

New vcpkg Website and Mark

We are proud to announce vcpkg.io, our new website!

vcpkg.io website homepage

You can use the website to learn about vcpkg and how to get started, browse our documentation, and even explore available packages on our package search page:

vcpkg.io browse packages page

On the website, you will notice our new, freshly-designed vcpkg product mark!

Image vcpkg product mark

Lovingly referred to by our team as the “potato chip logo”, this mark will be used to identify vcpkg wherever it goes on the web.

 

vcpkg 2021.04.30 and 2021.05.12 Releases

We completed two releases on GitHub for vcpkg in the past few weeks. Our overall port count increased to 1,667, and we updated over 800 ports since our last release. We also added substantial new documentation, including for versioning, registries, manifests, and binary caching. We also turned registries and versioning on by default, so you no longer need to specify a feature flag to use them.

 

We Want Your Feedback!

If you depend on C or C++ libraries for your project, you should give vcpkg a try by visiting our website, vcpkg.io. You can use vcpkg to install libraries from source, whether they are your own or popular open source projects You can follow the project and engage with us on the vcpkg GitHub repo. The features discussed in this post were made possible thanks to your feedback, and we are always interested to hear what you think!

3 comments

Discussion is closed. Login to edit/delete existing comments.

  • Ataru Moroboshi 0

    🔥

    • anonymous 0

      this comment has been deleted.

  • Nicolas Moreaud 0

    Hello, I have some questions about some basic scenarios:
    – When using a manifest to declare dependencies of a project, I read that the dependencies are installed in /vcpkg_installed/.
    With binary caching enabled, if I clone multiple times the same project on my computer, or 2 different projects that share common libraries, do I get multiple (redundant) local copies of the same libs?
    – Is there a way to list all available versions of a specific library?
    – If I want to retrieve specific libraries versions, do all libraries need to be available at the same commit of VCPKG repository? Ex: can I mix an old version of Qt with a recent version of GDAL?
    – Is there an easy way to freeze libraries version when I create a project, in order for the team to work with the same versions?
    – Can we put several versions of the same library into the same binary cache?
    – Can we put several versions of the same library using two vcpkg.json files? (ex: 2 branches of my projects)

Feedback usabilla icon