What’s New in vcpkg (March 2024)

This blog post summarizes changes to the vcpkg package manager as part of the 2024.03.19 and 2024.03.25 releases as well as changes to vcpkg documentation throughout March. This month’s vcpkg release includes an arm64ec platform expression, more flexibility when mixing static and dynamic libraries, diagnostics improvements, a change in the binary caching ABI calculation, and bug fixes.
Some stats for this period:

There are now 2,415 total libraries available in the vcpkg public registry.
21 new ports were added to the open-source registry. A port is a versioned recipe for building a package from source, such as a C or C++ library.
405 updates were made to existing ports. As always, we validate each change to a port by building all other ports that depend on or are depended by the library that is being updated for our 13 main triplets.
32 contributors submitted PRs, issues, or participated in discussions in the main repo.
The main vcpkg repo has over 5,900 forks and 21,200 stars on GitHub.

 
vcpkg changelog (2024.03.19 + 2024.03.25 releases)
Several improvements to diagnostics output. For example:
# Before
.\vcpkg.exe install zlib:x64-windows[core]
<unknown>:1:17: error: expected eof on expression: zlib:x64-windows[core]
^
vcpkg install <port name> <port name>…
vcpkg install zlib zlib:x64-windows curl boost

# After
.\vcpkg.exe install zlib:x64-windows[core]
error: expected the end of input parsing a package spec; did you mean zlib[core]:x64-windows instead?
on expression: zlib:x64-windows[core]
^

Added an arm64ec platform expression to assist with creating triplets targeting arm64ec (PR: Microsoft/vcpkg-tool#1352, thanks @autoantwort!).
Removed the warning about the default triplet change that was implemented in a previous release (PR: Microsoft/vcpkg-tool#1351).
DLLs can now be used in static triplets if BuildPolicy::DLLS_IN_STATIC_LIBRARY is turned on. Those DLLs should still have CRT and architecture checked. Static libraries can also now be in dynamic triplets if their CRT linkage matches (PR: Microsoft/vcpkg-tool#1358).
New behavior: vcpkg will output a message with the path to the compiler it is using in certain cases where there is ambiguity about the compiler version (PR: Microsoft/vcpkg-tool#1328).
Installing ports with –only-downloads will no longer affect the ABI calculation used by the binary caching feature (PR: Microsoft/vcpkg-tool#1363).

Bug fixes:

Fixed a bug that could cause a vcpkg command to exit prematurely if a ‘)’ character was present in certain path assignments (PR: Microsoft/vcpkg-tool#1354, thanks @jcbrill!).
Fixed a bug preventing certain versioning schemes from working with the versioning overrides feature (PR: Microsoft/vcpkg-tool#1329).
Fixed a regression that broke binary caching for the Meson tool port (PR: Microsoft/vcpkg#37585).
Fixed a crash that could occur when running vcpkg install against a manifest with a non-existent port and version override. (PR: Microsoft/vcpkg#36994, thanks @dforsten!).
Various other minor bugfixes.

 
Documentation changes

New articles:

Added Default Features section to versioning troubleshooting guide.
Unified some manifest mode articles and fixed links.
Changed CMakePresets.json sample files to use schema version 1.
Various minor improvements throughout the docs.

If you have any suggestions for our documentation, please submit an issue in our GitHub repo or use the button “This page” at the bottom of a particular article.

 
Total ports available for tested triplets

triplet
ports available

x64-windows
2,273

x86-windows
2,189

x64-windows-static
2,162

x64-windows-static-md
2,190

arm64-windows
1,851

x64-uwp
1,259

arm64-uwp
1,225

x64-linux
2,231

x64-osx
2,079

arm64-osx
2,045

arm-neon-android
1,553

x64-android
1,611

arm64-android
1,582

While vcpkg supports a much larger variety of target platforms and architectures (as community triplets), the list above is validated exhaustively to ensure updated ports don’t break other ports in the catalog.
 
Thank you to our contributors
vcpkg couldn’t be where it is today without contributions from our open-source community. Thank you for your continued support! The following people contributed to the vcpkg, vcpkg-tool, or vcpkg-docs repos in this release:

jiayuehua (84 commits)
dg0yt (32 commits)
Neumann-A (13 commits)
waywardmonkeys (8 commits)
Thomas1664 (8 commits)
miyanyan (7 commits)
SchaichAlonso (4 commits)
Be-ing (3 commits)
Osyotr (3 commits)
AenBleidd (3 commits)
RT2Code (3 commits)
autoantwort (3 commits)
moritz-h (2 commits)
omarhogni (2 commits)
xiaozhuai (2 commits)
coryan (2 commits)
Honeybunch (1 commit)
DragonJoker (1 commit)
horenmar (1 commit)
Tradias (1 commit)
fran6co (1 commit)
yurybura (1 commit)
eao197 (1 commit)
chausner (1 commit)
VelocityRa (1 commit)
dforsten (1 commit)
jcbrill (1 commit)

 
Is your company looking for a better C/C++ dependency management experience?
We are partnering with companies to help them get started with vcpkg and overcome any initial hurdles. We have also been making product and documentation changes based on feedback we receive from these partnerships. If you are interested in trying out vcpkg or just have some thoughts to share with us, feel free to reach out at vcpkg@microsoft.com.
 
Learn more
You can find the full 2024.03.19 release notes on GitHub for the main repo. Recent updates to the vcpkg tool can be viewed on the vcpkg-tool Releases page. To contribute to documentation, visit the vcpkg-docs repo. If you’re new to vcpkg or curious about how a package manager can make your life easier as a C/C++ developer, check out the vcpkg website – vcpkg.io.
If you would like to contribute to vcpkg and its library catalog, or want to give us feedback on anything, check out our GitHub repo. Please report bugs or request updates to ports in our issue tracker or join more general discussion in our discussion forum.