How to Update Asio to the Latest Version: A Complete Guide

Updating Asio to the latest version requires checking your current release in include/asio/version.hpp, fetching the newest Git tag (e.g., asio-1_40_0), and rebuilding your project with the updated headers.

The Asio library—hosted at chriskohlhoff/asio—is a header-only C++ networking library distributed primarily through Git tags. Because it ships as single headers rather than compiled binaries, updating involves replacing the source files and ensuring your build system recognizes the new version macros.

Check Your Current Asio Version

Before updating, determine which version your project currently uses by inspecting the ASIO_VERSION macro defined in include/asio/version.hpp.

// include/asio/version.hpp
#define ASIO_VERSION 103801   // Represents version 1.38.1

The macro encodes the version as a six-digit integer where the first two digits are the major version, the next two are the minor version, and the last two represent the patch level. You can print this at compile time to confirm your baseline:

#include <asio/version.hpp>
#include <iostream>

int main() {
    std::cout << "Current Asio version: " << ASIO_VERSION << std::endl;
    return 0;
}

Update Methods for Different Workflows

Update via Git Submodule

If you embed Asio as a Git submodule (common in third_party/ directories), navigate to the submodule directory and checkout the latest tag.


# From your project root

cd asio
git fetch --tags
git checkout asio-1_40_0  # Replace with the newest tag

cd ..
git add asio
git commit -m "Update Asio to 1.40.0"

Alternatively, update to the remote's latest commit:

git submodule update --remote --checkout asio

Update via Direct Source Clone

For projects that clone Asio directly into a third_party or vendor folder:

cd third_party/asio
git fetch --tags
git checkout asio-1_40_0
cd -

After checking out the tag, re-run your build configuration to ensure the new headers are included in your include path.

Update via Package Manager

If you use vcpkg, simply request the latest version:

vcpkg install asio

For Conan, specify the desired version in your install command:

conan install . -o asio:version=1.40.0

Package managers automatically handle the download and placement of include/asio.hpp and supporting headers.

Verify the Update with Compile-Time Checks

After updating, confirm the new version is active by adding a static assertion that guards against accidental downgrades:

#include <asio/version.hpp>

static_assert(ASIO_VERSION >= 103900, "Asio 1.40.0 or newer required");

The value 103900 corresponds to version 1.40.0. Replace this threshold with the hexadecimal-encoded version of your target release.

Integrate with CMake FetchContent

Modern CMake projects can automate updates using FetchContent to pull specific tags directly from the upstream repository:

include(FetchContent)

FetchContent_Declare(
  asio
  GIT_REPOSITORY https://github.com/chriskohlhoff/asio.git
  GIT_TAG        asio-1_40_0  # Update to the latest tag

)

FetchContent_MakeAvailable(asio)

target_include_directories(your_target PRIVATE ${asio_SOURCE_DIR}/include)

This approach eliminates manual Git commands and ensures consistent versioning across development environments.

Summary

  • Version detection: Inspect ASIO_VERSION in include/asio/version.hpp to identify your current release.
  • Git workflow: Fetch the latest tag (format asio-1_40_0) and checkout the specific version you need.
  • Package managers: Use vcpkg install asio or Conan version constraints for automated updates.
  • Verification: Use static_assert on ASIO_VERSION to enforce minimum version requirements at compile time.
  • CMake integration: Use FetchContent_Declare with the upstream Git URL to manage Asio as a dependency.

Frequently Asked Questions

How do I check which Asio version I have installed?

Check the ASIO_VERSION macro defined in include/asio/version.hpp. This six-digit integer encodes the major, minor, and patch numbers—for example, 103801 represents version 1.38.1.

What is the difference between Asio and Boost.Asio?

Asio is the standalone version maintained in chriskohlhoff/asio, while Boost.Asio is the version distributed within the Boost libraries. Both share the same source code, but the standalone version uses standard C++ headers instead of Boost dependencies. Updating procedures differ: Boost.Asio updates with your Boost distribution, while standalone Asio updates via Git tags or package managers.

Can I use CMake FetchContent to update Asio automatically?

Yes. Use FetchContent_Declare with the GitHub repository URL and specify the desired GIT_TAG (e.g., asio-1_40_0). This downloads the headers automatically and makes them available through ${asio_SOURCE_DIR}/include without manual Git operations.

Do I need to rebuild my project after updating Asio?

Yes. Because Asio is header-only, you must recompile all translation units that include asio.hpp or any other Asio headers. The compiler needs to process the updated macros and implementation details from the new version files.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →