diff --git a/cmake/ThirdPartyDependencies.cmake b/cmake/ThirdPartyDependencies.cmake
index f02af02..f83c181 100644
--- a/cmake/ThirdPartyDependencies.cmake
+++ b/cmake/ThirdPartyDependencies.cmake
@@ -3,73 +3,30 @@
 include(cmake/CPM.cmake)
 
 # https://cmake.org/cmake/help/v3.28/policy/CMP0063.html
 set(CMAKE_POLICY_DEFAULT_CMP0063 NEW)
 
 function(declare_system_library target)
   message(STATUS "Declaring system library ${target}")
   get_target_property(target_aliased_name ${target} ALIASED_TARGET)
   if(target_aliased_name)
     set(target ${target_aliased_name})
   endif()
   set_target_properties(${target} PROPERTIES INTERFACE_SYSTEM_INCLUDE_DIRECTORIES
                                              $<TARGET_PROPERTY:${target},INTERFACE_INCLUDE_DIRECTORIES>)
 endfunction()
 
-if(NOT TARGET fmt::fmt)
-  # https://github.com/fmtlib/fmt/releases
-  cpmaddpackage(
-    NAME
-    fmt
-    GIT_TAG
-    11.0.1
-    VERSION
-    11.0.1
-    GITHUB_REPOSITORY
-    "fmtlib/fmt"
-    EXCLUDE_FROM_ALL ON
-    OPTIONS
-    "FMT_INSTALL OFF"
-    # Unicode support for MSVC enabled in CompilerWarnings.cmake
-    "FMT_UNICODE OFF"
-    "FMT_DOC OFF"
-    "BUILD_SHARED_LIBS OFF"
-    "CMAKE_C_VISIBILITY_PRESET hidden"
-    "CMAKE_CXX_VISIBILITY_PRESET hidden"
-    "CMAKE_POSITION_INDEPENDENT_CODE ON")
-endif()
-
-if(NOT TARGET spdlog::spdlog)
-  # https://github.com/gabime/spdlog/releases
-  cpmaddpackage(
-    NAME
-    spdlog
-    VERSION
-    1.14.1
-    GITHUB_REPOSITORY
-    "gabime/spdlog"
-    EXCLUDE_FROM_ALL ON
-    OPTIONS
-    "SPDLOG_INSTALL OFF"
-    "BUILD_SHARED_LIBS OFF"
-    "CMAKE_C_VISIBILITY_PRESET hidden"
-    "CMAKE_CXX_VISIBILITY_PRESET hidden"
-    "CMAKE_POSITION_INDEPENDENT_CODE ON"
-    "SPDLOG_BUILD_SHARED OFF"
-    "SPDLOG_FMT_EXTERNAL ON")
-endif()
-
 if(NOT TARGET Microsoft.GSL::GSL)
   # https://github.com/microsoft/GSL/releases
   cpmaddpackage(
     NAME
     gsl
     VERSION
     4.0.0
     GITHUB_REPOSITORY
     "microsoft/gsl"
     EXCLUDE_FROM_ALL ON
     OPTIONS
     "GSL_INSTALL OFF"
     "CMAKE_C_VISIBILITY_PRESET hidden"
     "CMAKE_CXX_VISIBILITY_PRESET hidden"
     "CMAKE_POSITION_INDEPENDENT_CODE ON")
@@ -159,93 +116,24 @@ if(NOT TARGET taocpp::json)
     "CMAKE_POSITION_INDEPENDENT_CODE ON"
     "BUILD_SHARED_LIBS OFF"
     "PEGTL_INSTALL ${COUCHBASE_CXX_CLIENT_INSTALL}"
     "PEGTL_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/pegtl"
     "PEGTL_INSTALL_DOC_DIR ${CMAKE_INSTALL_DATAROOTDIR}/doc/tao/pegtl"
     "PEGTL_BUILD_TESTS OFF"
     "PEGTL_BUILD_EXAMPLES OFF"
     "PEGTL_USE_BOOST_FILESYSTEM OFF"
     "TAOCPP_JSON_INSTALL ${COUCHBASE_CXX_CLIENT_INSTALL}"
     "TAOCPP_JSON_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/taocpp-json"
     "TAOCPP_JSON_INSTALL_DOC_DIR ${CMAKE_INSTALL_DATAROOTDIR}/doc/tao/json"
     "TAOCPP_JSON_BUILD_TESTS OFF"
     "TAOCPP_JSON_BUILD_EXAMPLES OFF")
 endif()
 
-
-if(NOT TARGET asio::asio)
-  # https://github.com/chriskohlhoff/asio/tags
-  cpmaddpackage(
-    NAME
-    asio
-    GIT_TAG
-    asio-1-31-0
-    VERSION
-    1.31.0
-    GITHUB_REPOSITORY
-    "chriskohlhoff/asio"
-    EXCLUDE_FROM_ALL ON)
-endif()
-
-# ASIO doesn't use CMake, we have to configure it manually. Extra notes for using on Windows:
-#
-# 1) If _WIN32_WINNT is not set, ASIO assumes _WIN32_WINNT=0x0501, i.e. Windows XP target, which is definitely not the
-# platform which most users target.
-#
-# 2) WIN32_LEAN_AND_MEAN is defined to make Winsock2 work.
-if(asio_ADDED)
-  add_library(asio STATIC ${asio_SOURCE_DIR}/asio/src/asio.cpp ${asio_SOURCE_DIR}/asio/src/asio_ssl.cpp)
-
-  target_include_directories(asio SYSTEM PUBLIC ${asio_SOURCE_DIR}/asio/include)
-  target_compile_definitions(asio PRIVATE ASIO_STANDALONE=1 ASIO_NO_DEPRECATED=1 ASIO_SEPARATE_COMPILATION=1)
-  target_link_libraries(asio PRIVATE Threads::Threads OpenSSL::SSL OpenSSL::Crypto)
-  set_target_properties(
-    asio
-    PROPERTIES C_VISIBILITY_PRESET hidden
-               CXX_VISIBILITY_PRESET hidden
-               POSITION_INDEPENDENT_CODE TRUE)
-
-  if(WIN32)
-    # macro see @ https://stackoverflow.com/a/40217291/1746503
-    macro(get_win32_winnt version)
-      if(CMAKE_SYSTEM_VERSION)
-        set(ver ${CMAKE_SYSTEM_VERSION})
-        string(REGEX MATCH "^([0-9]+).([0-9])" ver ${ver})
-        string(REGEX MATCH "^([0-9]+)" verMajor ${ver})
-        # Check for Windows 10, b/c we'll need to convert to hex 'A'.
-        if("${verMajor}" MATCHES "10")
-          set(verMajor "A")
-          string(REGEX REPLACE "^([0-9]+)" ${verMajor} ver ${ver})
-        endif("${verMajor}" MATCHES "10")
-        # Remove all remaining '.' characters.
-        string(REPLACE "." "" ver ${ver})
-        # Prepend each digit with a zero.
-        string(REGEX REPLACE "([0-9A-Z])" "0\\1" ver ${ver})
-        set(${version} "0x${ver}")
-      endif()
-    endmacro()
-
-    if(NOT DEFINED _WIN32_WINNT)
-      get_win32_winnt(ver)
-      set(_WIN32_WINNT ${ver})
-    endif()
-
-    message(STATUS "Set _WIN32_WINNT=${_WIN32_WINNT}")
-
-    target_compile_definitions(asio INTERFACE _WIN32_WINNT=${_WIN32_WINNT} WIN32_LEAN_AND_MEAN)
-  endif()
-
-  add_library(asio::asio ALIAS asio)
-endif()
-
 add_library(jsonsl OBJECT ${PROJECT_SOURCE_DIR}/third_party/jsonsl/jsonsl.c)
 set_target_properties(jsonsl PROPERTIES C_VISIBILITY_PRESET hidden POSITION_INDEPENDENT_CODE TRUE)
 target_include_directories(jsonsl SYSTEM PUBLIC ${PROJECT_SOURCE_DIR}/third_party/jsonsl)
 
 declare_system_library(snappy)
 declare_system_library(llhttp::llhttp)
 declare_system_library(hdr_histogram_static)
 declare_system_library(Microsoft.GSL::GSL)
-declare_system_library(spdlog::spdlog)
-declare_system_library(fmt::fmt)
-declare_system_library(asio)
 declare_system_library(taocpp::json)
