You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by fg...@apache.org on 2026/04/24 14:02:38 UTC

(nifi-minifi-cpp) 02/02: MINIFICPP-2768 use gcc-toolset-14 on rocky

This is an automated email from the ASF dual-hosted git repository.

fgerlits pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi-minifi-cpp.git

commit f34d739bc5ca4f898310f2354c8ff3a2317aa1d7
Author: Martin Zink <ma...@apache.org>
AuthorDate: Fri Apr 24 12:36:31 2026 +0200

    MINIFICPP-2768 use gcc-toolset-14 on rocky
    
    compiler support changes: gcc 13, clang 17
    removed: expected-lite and other gcc12 workarounds
    
    Signed-off-by: Ferenc Gerlits <fg...@gmail.com>
    
    Closes #2155
---
 .github/workflows/ci.yml                           |    4 +-
 .github/workflows/compiler-support.yml             |    8 +-
 CMakeLists.txt                                     |   10 -
 LICENSE                                            |   28 -
 NOTICE                                             |    1 -
 README.md                                          |    4 +-
 cmake/Bustache.cmake                               |    7 +-
 cmake/Coroutines.cmake                             |   22 -
 cmake/Couchbase.cmake                              |   13 +-
 cmake/CppVersion.cmake                             |    8 +-
 cmake/ExpectedLite.cmake                           |   28 -
 cmake/Protobuf.cmake                               |    4 +-
 cmake/fmt.cmake                                    |    4 +-
 controller/Controller.cpp                          |   12 +-
 controller/Controller.h                            |    2 +-
 controller/tests/ControllerTests.cpp               |    2 +-
 core-framework/CMakeLists.txt                      |    5 +-
 core-framework/common/CMakeLists.txt               |    5 +-
 .../common/include/utils/OptionalUtils.h           |    6 +-
 core-framework/common/include/utils/ParsingUtils.h |   44 +-
 core-framework/common/include/utils/StringUtils.h  |    8 +-
 .../utils/detail/MonadicOperationWrappers.h        |    4 +-
 core-framework/common/include/utils/expected.h     |   62 +-
 core-framework/common/src/utils/ParsingUtils.cpp   |   38 +-
 core-framework/common/src/utils/StringUtils.cpp    |    4 +-
 .../include/core/ConfigurableComponentImpl.h       |   20 +-
 .../core/controller/ControllerServiceBase.h        |    4 +-
 core-framework/include/utils/file/FileUtils.h      |    6 +-
 core-framework/include/utils/file/PathUtils.h      |   12 +-
 core-framework/include/utils/net/DNS.h             |    6 +-
 .../src/core/ConfigurableComponentImpl.cpp         |   42 +-
 core-framework/src/core/Property.cpp               |   18 +-
 core-framework/src/utils/Cron.cpp                  |   12 +-
 core-framework/src/utils/file/FileUtils.cpp        |    4 +-
 core-framework/src/utils/net/DNS.cpp               |   10 +-
 docker/rockylinux/Dockerfile                       |    9 +-
 extension-framework/CMakeLists.txt                 |    5 +-
 .../include/api/core/ProcessContext.h              |    6 +-
 .../cpp-extension-lib/src/core/ProcessContext.cpp  |    4 +-
 extensions/aws/processors/PutKinesisStream.cpp     |   14 +-
 extensions/aws/processors/PutKinesisStream.h       |    4 +-
 extensions/civetweb/processors/ListenHTTP.h        |    4 +-
 extensions/couchbase/CMakeLists.txt                |   15 +-
 .../controllerservices/CouchbaseClusterService.cpp |   26 +-
 .../controllerservices/CouchbaseClusterService.h   |   12 +-
 extensions/couchbase/tests/CMakeLists.txt          |    4 +
 .../couchbase/tests/MockCouchbaseClusterService.h  |    8 +-
 extensions/elasticsearch/PostElasticsearch.cpp     |   24 +-
 extensions/grafana-loki/PushGrafanaLoki.h          |    2 +-
 extensions/grafana-loki/PushGrafanaLokiGrpc.cpp    |    6 +-
 extensions/grafana-loki/PushGrafanaLokiGrpc.h      |    2 +-
 extensions/grafana-loki/PushGrafanaLokiREST.cpp    |    6 +-
 extensions/grafana-loki/PushGrafanaLokiREST.h      |    2 +-
 extensions/kubernetes/MetricsApi.cpp               |    4 +-
 extensions/kubernetes/MetricsApi.h                 |    2 +-
 extensions/kubernetes/MetricsFilter.cpp            |    8 +-
 extensions/kubernetes/MetricsFilter.h              |    2 +-
 .../llamacpp/processors/DefaultLlamaContext.cpp    |    8 +-
 .../llamacpp/processors/DefaultLlamaContext.h      |    2 +-
 extensions/llamacpp/processors/LlamaContext.h      |    2 +-
 .../llamacpp/tests/RunLlamaCppInferenceTests.cpp   |    4 +-
 extensions/mqtt/processors/PublishMQTT.cpp         |    2 +-
 extensions/opc/include/putopc.h                    |    2 +-
 extensions/opc/src/putopc.cpp                      |   24 +-
 extensions/python/types/PyRecordSetReader.cpp      |    2 +-
 extensions/rocksdb-repos/FlowFileLoader.cpp        |    2 +-
 extensions/smb/SmbConnectionControllerService.cpp  |    8 +-
 extensions/smb/SmbConnectionControllerService.h    |    4 +-
 .../utils/MockSmbConnectionControllerService.h     |    6 +-
 extensions/smb/tests/utils/TempSmbShare.h          |    4 +-
 extensions/sql/CMakeLists.txt                      |    2 +-
 extensions/standard-processors/CMakeLists.txt      |    2 -
 .../controllers/JsonTreeReader.cpp                 |   24 +-
 .../controllers/JsonTreeReader.h                   |    2 +-
 .../standard-processors/controllers/XMLReader.cpp  |    4 +-
 .../standard-processors/controllers/XMLReader.h    |    2 +-
 .../standard-processors/modbus/FetchModbusTcp.cpp  |   28 +-
 .../standard-processors/modbus/FetchModbusTcp.h    |    6 +-
 .../modbus/ReadModbusFunctions.cpp                 |   14 +-
 .../modbus/ReadModbusFunctions.h                   |   10 +-
 .../processors/ConvertRecord.cpp                   |    5 +-
 .../standard-processors/processors/InvokeHTTP.cpp  |    6 +-
 .../standard-processors/processors/InvokeHTTP.h    |    2 +-
 .../standard-processors/processors/PutUDP.cpp      |    8 +-
 .../standard-processors/processors/SplitRecord.cpp |    7 +-
 .../standard-processors/processors/SplitRecord.h   |    2 +-
 .../standard-processors/processors/SplitText.cpp   |   22 +-
 .../standard-processors/tests/CMakeLists.txt       |    2 -
 .../tests/integration/InvokeHTTPTests.cpp          |    4 +-
 extensions/standard-processors/utils/JoltUtils.cpp |   88 +-
 extensions/standard-processors/utils/JoltUtils.h   |   14 +-
 .../windows-event-log/ConsumeWindowsEventLog.cpp   |   16 +-
 .../windows-event-log/ConsumeWindowsEventLog.h     |    4 +-
 extensions/windows-event-log/wel/Bookmark.cpp      |   10 +-
 extensions/windows-event-log/wel/Bookmark.h        |    2 +-
 .../windows-event-log/wel/WindowsEventLog.cpp      |    8 +-
 extensions/windows-event-log/wel/WindowsEventLog.h |    2 +-
 libminifi/CMakeLists.txt                           |    5 +-
 libminifi/include/FlowController.h                 |    4 +-
 libminifi/include/SchedulingAgent.h                |    4 +-
 libminifi/include/c2/C2Utils.h                     |    2 +-
 libminifi/include/c2/FlowStatusBuilder.h           |    8 +-
 libminifi/include/core/ProcessContextImpl.h        |   16 +-
 libminifi/include/core/ProcessSession.h            |    2 +-
 .../include/core/controller/ControllerService.h    |    8 +-
 libminifi/include/core/flow/Node.h                 |    2 +-
 libminifi/include/core/state/UpdateController.h    |    2 +-
 .../include/core/state/nodes/ResponseNodeLoader.h  |    2 +-
 libminifi/include/utils/file/AssetManager.h        |    4 +-
 libminifi/src/FlowController.cpp                   |   12 +-
 libminifi/src/SchedulingAgent.cpp                  |   12 +-
 libminifi/src/c2/C2Agent.cpp                       |   18 +-
 libminifi/src/c2/C2Utils.cpp                       |   12 +-
 libminifi/src/c2/FlowStatusBuilder.cpp             |   26 +-
 libminifi/src/core/ProcessContextImpl.cpp          |   22 +-
 libminifi/src/core/ProcessSession.cpp              |    4 +-
 .../src/core/state/nodes/ResponseNodeLoader.cpp    |    4 +-
 libminifi/src/sitetosite/SiteToSiteClient.cpp      |   20 +-
 libminifi/src/utils/file/AssetManager.cpp          |    6 +-
 libminifi/test/libtest/unit/ProvenanceTestHelper.h |    2 +
 libminifi/test/unit/ExpectedTest.cpp               |  177 +-
 libminifi/test/unit/OptionalTest.cpp               |    8 +-
 libminifi/test/unit/ParsingUtilsTests.cpp          |   22 +-
 .../common/include/minifi-cpp/io/StreamCallback.h  |   20 +-
 .../minifi-cpp/controllers/RecordSetReader.h       |    2 +-
 .../minifi-cpp/core/ConfigurableComponent.h        |   20 +-
 .../include/minifi-cpp/core/ProcessContext.h       |   26 +-
 .../include/minifi-cpp/core/ProcessSession.h       |    2 +-
 minifi-api/include/minifi-cpp/core/Property.h      |    8 +-
 .../core/controller/ControllerServiceContext.h     |    4 +-
 thirdparty/bustache/remove_installs.patch          |   49 +
 thirdparty/couchbase/remove-debug-symbols.patch    |   12 -
 thirdparty/couchbase/remove-thirdparty-1.0.2.patch |  172 --
 thirdparty/couchbase/remove-thirdparty.patch       |  218 +-
 .../couchbase/use_fmt_instead_of_spdlog_fmt.patch  | 2641 ++++++++++++++++++++
 .../libstdc++/avoid_bogus_Wrestrict_PR105651.patch |   32 -
 136 files changed, 3437 insertions(+), 1175 deletions(-)

diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 086794bf3..71a4abce3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -12,8 +12,8 @@ env:
   CCACHE_DIR: ${{ GITHUB.WORKSPACE }}/.ccache
 jobs:
   macos_xcode:
-    name: "macOS 14 aarch64"
-    runs-on: macos-14
+    name: "macOS 26 aarch64"
+    runs-on: macos-26
     timeout-minutes: 240
     env:
       MACOS_MINIFI_OPTIONS: >-
diff --git a/.github/workflows/compiler-support.yml b/.github/workflows/compiler-support.yml
index 555aa7a4e..009f318f8 100644
--- a/.github/workflows/compiler-support.yml
+++ b/.github/workflows/compiler-support.yml
@@ -14,8 +14,8 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        platform: [ { id: gcc-12, base_image: gcc:12-bookworm },
-                    { id: gcc-15, base_image: gcc:15-bookworm } ]
+        platform: [ { id: gcc-13, base_image: gcc:13-bookworm },
+                    { id: gcc-15, base_image: gcc:15-trixie } ]
     runs-on: ubuntu-24.04
 
     steps:
@@ -36,8 +36,8 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        platform: [ { id: clang-16, base_image: silkeh/clang:16-bookworm },
-                    { id: clang-20, base_image: silkeh/clang:20-bookworm } ]
+        platform: [ { id: clang-18, base_image: silkeh/clang:18-bookworm },
+                    { id: clang-21, base_image: silkeh/clang:21-trixie } ]
 
     runs-on: ubuntu-24.04
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 4bc5ce888..96257bf09 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -297,9 +297,6 @@ add_library(RapidJSON INTERFACE)
 target_include_directories(RapidJSON SYSTEM INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/rapidjson-48fbd8cd202ca54031fe799db2ad44ffa8e77c13/include")
 target_compile_definitions(RapidJSON INTERFACE RAPIDJSON_HAS_STDSTRING)
 
-include(Coroutines)
-enable_coroutines()
-
 # gsl-lite
 include(GslLite)
 
@@ -320,9 +317,6 @@ target_compile_definitions(gsl-lite INTERFACE ${GslDefinitions})
 # date
 include(Date)
 
-# expected-lite
-include(ExpectedLite)
-
 # magic_enum
 include(MagicEnum)
 
@@ -338,10 +332,6 @@ else()
         list(APPEND MINIFI_CPP_COMPILE_OPTIONS -Werror)
     endif()
     if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
-        if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 12.4)
-            # -Wrestrict may cause build failure in < GCC 12.4  https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104336
-            list(APPEND MINIFI_CPP_COMPILE_OPTIONS -Wno-error=restrict)
-        endif()
         if (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER_EQUAL 15)
             list(APPEND MINIFI_CPP_COMPILE_OPTIONS -Wno-maybe-uninitialized)
             # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118634
diff --git a/LICENSE b/LICENSE
index 9e8c591ec..520e0ea56 100644
--- a/LICENSE
+++ b/LICENSE
@@ -2758,34 +2758,6 @@ SGI C++ Standard Template Library license
 
 --------------------------------------------------------------------------
 
-This project bundles 'expected-lite' under the Boost Software License 1.0
-
-Boost Software License - Version 1.0 - August 17th, 2003
-
-Permission is hereby granted, free of charge, to any person or organization
-obtaining a copy of the software and accompanying documentation covered by
-this license (the "Software") to use, reproduce, display, distribute,
-execute, and transmit the Software, and to prepare derivative works of the
-Software, and to permit third-parties to whom the Software is furnished to
-do so, all subject to the following:
-
-The copyright notices in the Software and this entire statement, including
-the above license grant, this restriction and the following disclaimer,
-must be included in all copies of the Software, in whole or in part, and
-all derivative works of the Software, unless such copies or derivative
-works are solely in the form of machine-executable object code generated by
-a source language processor.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
-SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
-FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
-DEALINGS IN THE SOFTWARE.
-
---------------------------------------------------------------------------
-
 This project bundles 'asio' under the Boost Software License 1.0
 
 Boost Software License - Version 1.0 - August 17th, 2003
diff --git a/NOTICE b/NOTICE
index 43e689722..0ceed4b2a 100644
--- a/NOTICE
+++ b/NOTICE
@@ -51,7 +51,6 @@ This software includes third party software subject to the following copyrights:
 - IANA timezone database - public domain
 - date (HowardHinnant/date) - notices below
 - range-v3 - Eric Niebler and other contributors
-- expected-lite - Copyright (C) 2016-2020 Martin Moene.
 - asio - Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com)
 - TartanLlama/expected - public domain, thanks to Sy Brand
 - libyaml - Copyright (c) 2006-2016 Kirill Simonov, Copyright (c) 2017-2020 Ingy döt Net
diff --git a/README.md b/README.md
index fe9b9ca6e..422c221db 100644
--- a/README.md
+++ b/README.md
@@ -123,8 +123,8 @@ Communicating with Apache NiFi can be done using the Site-to-Site protocol. More
 #### Utilities
 * CMake 3.24 or greater
 * Compiler
-  * g++ 12 or greater
-  * clang 16 or greater
+  * g++ 13 or greater
+  * clang 18 or greater
   * msvc 19.33 or greater
 * bison 3.0.x+ (3.2 has been shown to fail builds)
 * flex 2.6 or greater
diff --git a/cmake/Bustache.cmake b/cmake/Bustache.cmake
index a881a90be..d33796da8 100644
--- a/cmake/Bustache.cmake
+++ b/cmake/Bustache.cmake
@@ -24,14 +24,17 @@ set(BUSTACHE_USE_FMT ON CACHE STRING "" FORCE)
 
 set(PATCH_FILE_1 "${CMAKE_SOURCE_DIR}/thirdparty/bustache/add-append.patch")
 set(PATCH_FILE_2 "${CMAKE_SOURCE_DIR}/thirdparty/bustache/fix-deprecated-literal-operator.patch")
+set(PATCH_FILE_3 "${CMAKE_SOURCE_DIR}/thirdparty/bustache/remove_installs.patch")
 
 set(PC ${Bash_EXECUTABLE}  -c "set -x &&\
             (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_1}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_1}\\\") &&\
-            (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_2}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_2}\\\")")
+            (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_2}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_2}\\\") &&\
+            (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_3}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_3}\\\")")
+
 
 FetchContent_Declare(Bustache
         GIT_REPOSITORY  https://github.com/jamboree/bustache.git
-        GIT_TAG         47096caa8e1f9f7ebe34e3a022dbb822c174011d
+        GIT_TAG         af10816ce3d2ff8577fd27caa2c1005c01d8069b
         PATCH_COMMAND   "${PC}"
         SYSTEM
 )
diff --git a/cmake/Coroutines.cmake b/cmake/Coroutines.cmake
deleted file mode 100644
index e027551e5..000000000
--- a/cmake/Coroutines.cmake
+++ /dev/null
@@ -1,22 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-function(enable_coroutines)
-    if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 11)
-        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcoroutines" PARENT_SCOPE)
-    endif()
-endfunction(enable_coroutines)
diff --git a/cmake/Couchbase.cmake b/cmake/Couchbase.cmake
index 68bab1c6a..2601e8747 100644
--- a/cmake/Couchbase.cmake
+++ b/cmake/Couchbase.cmake
@@ -30,9 +30,14 @@ set(COUCHBASE_CXX_CLIENT_BUILD_TOOLS OFF CACHE BOOL "" FORCE)
 set(COUCHBASE_CXX_CLIENT_POST_LINKED_OPENSSL ON CACHE BOOL "" FORCE)
 set(COUCHBASE_CXX_CLIENT_INSTALL OFF CACHE BOOL "" FORCE)
 
+# Fix for MSVC + ASIO C++20/23 concept evaluation bugs
+if(MSVC)
+    add_compile_definitions(ASIO_DISABLE_CONCEPTS)
+endif()
+
 set(PATCH_FILE_1 "${CMAKE_SOURCE_DIR}/thirdparty/couchbase/remove-thirdparty.patch")
-set(PATCH_FILE_2 "${CMAKE_SOURCE_DIR}/thirdparty/couchbase/remove-debug-symbols.patch")
-set(PATCH_FILE_3 "${CMAKE_SOURCE_DIR}/thirdparty/couchbase/c++23_fixes.patch")
+set(PATCH_FILE_2 "${CMAKE_SOURCE_DIR}/thirdparty/couchbase/c++23_fixes.patch")
+set(PATCH_FILE_3 "${CMAKE_SOURCE_DIR}/thirdparty/couchbase/use_fmt_instead_of_spdlog_fmt.patch")
 
 set(PC ${Bash_EXECUTABLE}  -c "set -x &&\
             (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_1}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_1}\\\") &&\
@@ -40,8 +45,8 @@ set(PC ${Bash_EXECUTABLE}  -c "set -x &&\
             (\\\"${Patch_EXECUTABLE}\\\" -p1 -R -s -f --dry-run -i \\\"${PATCH_FILE_3}\\\" || \\\"${Patch_EXECUTABLE}\\\" -p1 -N -i \\\"${PATCH_FILE_3}\\\")")
 
 FetchContent_Declare(couchbase-cxx-client
-    URL      https://github.com/couchbase/couchbase-cxx-client/releases/download/1.1.0/couchbase-cxx-client-1.1.0.tar.gz
-    URL_HASH SHA256=bd3a7f1492e242b239acd965eed4472cecb0319d40d05480f97cdec705960ba0
+    URL      https://github.com/couchbase/couchbase-cxx-client/archive/refs/tags/1.3.1.tar.gz
+    URL_HASH SHA256=9c497d8ba6f3e4a12376826ae1c172356e16190bb44584f087d7d1a81278dc0f
     PATCH_COMMAND "${PC}"
     SYSTEM
 )
diff --git a/cmake/CppVersion.cmake b/cmake/CppVersion.cmake
index 8b6edee60..613fed759 100644
--- a/cmake/CppVersion.cmake
+++ b/cmake/CppVersion.cmake
@@ -21,21 +21,17 @@ function(set_cpp_version)
             add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/std:c++latest>)
             add_compile_options($<$<COMPILE_LANGUAGE:CXX>:/permissive->)
         else()
-            message(STATUS "The Visual Studio C++ compiler ${CMAKE_CXX_COMPILER} is not supported. Please use Visual Studio 2022 or newer.")
+            message(FATAL_ERROR "The Visual Studio C++ compiler ${CMAKE_CXX_COMPILER} is not supported. Please use Visual Studio 2022 or newer.")
         endif()
         set(CMAKE_CXX_STANDARD 23 PARENT_SCOPE)
     else()
         include(CheckCXXCompilerFlag)
         CHECK_CXX_COMPILER_FLAG("-std=c++23" COMPILER_SUPPORTS_CXX23)
-        CHECK_CXX_COMPILER_FLAG("-std=c++2b" COMPILER_SUPPORTS_CXX2B)
         if(COMPILER_SUPPORTS_CXX23)
             set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++23" PARENT_SCOPE)
             set(CMAKE_CXX_STANDARD 23 PARENT_SCOPE)
-        elseif(COMPILER_SUPPORTS_CXX2B)
-            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++2b" PARENT_SCOPE)
-            set(CMAKE_CXX_STANDARD 23 PARENT_SCOPE)
         else()
-            message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no support for -std=c++23 or -std=c++2b. Please use a more recent C++ compiler version.")
+            message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no support for -std=c++23. Please use a more recent C++ compiler version.")
         endif()
     endif()
 
diff --git a/cmake/ExpectedLite.cmake b/cmake/ExpectedLite.cmake
deleted file mode 100644
index 4ee997a97..000000000
--- a/cmake/ExpectedLite.cmake
+++ /dev/null
@@ -1,28 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-include(FetchContent)
-
-FetchContent_Declare(expected-lite
-    URL      https://github.com/martinmoene/expected-lite/archive/refs/tags/v0.9.0.tar.gz
-    URL_HASH SHA256=e1b3ac812295ef8512c015d8271204105a71957323f8ab4e75f6856d71b8868d
-    SYSTEM
-)
-
-# Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119714
-FetchContent_MakeAvailable(expected-lite)
-target_compile_definitions(expected-lite INTERFACE nsel_CONFIG_SELECT_EXPECTED=nsel_EXPECTED_NONSTD)
diff --git a/cmake/Protobuf.cmake b/cmake/Protobuf.cmake
index eb0a73565..ee5523cd0 100644
--- a/cmake/Protobuf.cmake
+++ b/cmake/Protobuf.cmake
@@ -20,8 +20,8 @@ set(protobuf_BUILD_TESTS OFF CACHE BOOL "" FORCE)
 
 FetchContent_Declare(
     protobuf
-    URL      https://github.com/protocolbuffers/protobuf/archive/refs/tags/v31.1.tar.gz
-    URL_HASH SHA256=c3a0a9ece8932e31c3b736e2db18b1c42e7070cd9b881388b26d01aa71e24ca2
+    URL      https://github.com/protocolbuffers/protobuf/archive/refs/tags/v34.1.tar.gz
+    URL_HASH SHA256=a83103b7ed3afaeedee9a212c8f65825444f58144f5e075b73c83f2b4ff27b62
 )
 FetchContent_MakeAvailable(protobuf)
 
diff --git a/cmake/fmt.cmake b/cmake/fmt.cmake
index 0777eaa5d..910e69bef 100644
--- a/cmake/fmt.cmake
+++ b/cmake/fmt.cmake
@@ -19,8 +19,8 @@
 include(FetchContent)
 
 FetchContent_Declare(Fmt
-        URL  https://github.com/fmtlib/fmt/archive/refs/tags/11.2.0.tar.gz
-        URL_HASH SHA256=bc23066d87ab3168f27cef3e97d545fa63314f5c79df5ea444d41d56f962c6af
+        URL  https://github.com/fmtlib/fmt/archive/refs/tags/12.1.0.tar.gz
+        URL_HASH SHA256=ea7de4299689e12b6dddd392f9896f08fb0777ac7168897a244a6d6085043fea
         OVERRIDE_FIND_PACKAGE
         SYSTEM
         )
diff --git a/controller/Controller.cpp b/controller/Controller.cpp
index 293979ad7..03c5afd40 100644
--- a/controller/Controller.cpp
+++ b/controller/Controller.cpp
@@ -228,31 +228,31 @@ bool getJstacks(const utils::net::SocketData& socket_data, std::ostream &out) {
   return true;
 }
 
-nonstd::expected<void, std::string> getDebugBundle(const utils::net::SocketData& socket_data, const std::filesystem::path& target_dir) {
+std::expected<void, std::string> getDebugBundle(const utils::net::SocketData& socket_data, const std::filesystem::path& target_dir) {
   const auto connection_stream = std::make_unique<utils::net::AsioSocketConnection>(socket_data);
   if (connection_stream->initialize() < 0) {
-    return nonstd::make_unexpected("Could not connect to remote host " + socket_data.host + ":" + std::to_string(socket_data.port));
+    return std::unexpected{"Could not connect to remote host " + socket_data.host + ":" + std::to_string(socket_data.port)};
   }
   io::BufferStream buffer;
   auto op = static_cast<uint8_t>(c2::Operation::transfer);
   buffer.write(&op, 1);
   buffer.write("debug");
   if (io::isError(connection_stream->write(buffer.getBuffer()))) {
-    return nonstd::make_unexpected("Could not write to connection " + socket_data.host + ":" + std::to_string(socket_data.port));
+    return std::unexpected{"Could not write to connection " + socket_data.host + ":" + std::to_string(socket_data.port)};
   }
   connection_stream->read(op);
   size_t bundle_size = 0;
   connection_stream->read(bundle_size);
   if (bundle_size == 0) {
-    return nonstd::make_unexpected("Failed to retrieve debug bundle");
+    return std::unexpected{"Failed to retrieve debug bundle"};
   }
 
   if (std::filesystem::exists(target_dir) && !std::filesystem::is_directory(target_dir)) {
-    return nonstd::make_unexpected("Object specified as the target directory already exists and it is not a directory");
+    return std::unexpected{"Object specified as the target directory already exists and it is not a directory"};
   }
 
   if (!std::filesystem::exists(target_dir) && utils::file::create_dir(target_dir) != 0) {
-    return nonstd::make_unexpected("Failed to create target directory: " + target_dir.string());
+    return std::unexpected{"Failed to create target directory: " + target_dir.string()};
   }
 
   std::ofstream out_file(target_dir / "debug.tar.gz");
diff --git a/controller/Controller.h b/controller/Controller.h
index 0358f2a3c..e2dcd7e86 100644
--- a/controller/Controller.h
+++ b/controller/Controller.h
@@ -37,6 +37,6 @@ bool listConnections(const utils::net::SocketData& socket_data, std::ostream &ou
 bool printManifest(const utils::net::SocketData& socket_data, std::ostream &out);
 bool getJstacks(const utils::net::SocketData& socket_data, std::ostream &out);
 bool getFlowStatus(const utils::net::SocketData& socket_data, const std::string& status_query, std::ostream &out);
-nonstd::expected<void, std::string> getDebugBundle(const utils::net::SocketData& socket_data, const std::filesystem::path& target_dir);
+std::expected<void, std::string> getDebugBundle(const utils::net::SocketData& socket_data, const std::filesystem::path& target_dir);
 
 }  // namespace org::apache::nifi::minifi::controller
diff --git a/controller/tests/ControllerTests.cpp b/controller/tests/ControllerTests.cpp
index a2376de68..6955a13d0 100644
--- a/controller/tests/ControllerTests.cpp
+++ b/controller/tests/ControllerTests.cpp
@@ -164,7 +164,7 @@ class TestUpdateSink : public minifi::state::StateMonitor {
     return {};
   }
 
-  nonstd::expected<void, std::string> applyUpdate(const std::string& /*source*/, const std::string& /*configuration*/, bool /*persist*/ = false,
+  std::expected<void, std::string> applyUpdate(const std::string& /*source*/, const std::string& /*configuration*/, bool /*persist*/ = false,
                                                   const std::optional<std::string>& /*flow_id*/ = std::nullopt) override {
     update_calls++;
     return {};
diff --git a/core-framework/CMakeLists.txt b/core-framework/CMakeLists.txt
index 757d087a8..3dc5a77c5 100644
--- a/core-framework/CMakeLists.txt
+++ b/core-framework/CMakeLists.txt
@@ -15,10 +15,7 @@ file(GLOB SOURCES
 
 add_minifi_library(minifi-core-framework STATIC ${SOURCES})
 target_include_directories(minifi-core-framework PUBLIC include)
-target_link_libraries(minifi-core-framework PUBLIC minifi-api minifi-core-framework-common ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite libsodium range-v3 expected-lite date::date date::tz asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
+target_link_libraries(minifi-core-framework PUBLIC minifi-api minifi-core-framework-common ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite libsodium range-v3 date::date date::tz asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
 if(NOT WIN32)
     target_link_libraries(minifi-core-framework PUBLIC OSSP::libuuid++)
 endif()
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
-    target_link_libraries(minifi-core-framework PUBLIC stdc++fs)
-endif()
diff --git a/core-framework/common/CMakeLists.txt b/core-framework/common/CMakeLists.txt
index 928256c6b..45ad12697 100644
--- a/core-framework/common/CMakeLists.txt
+++ b/core-framework/common/CMakeLists.txt
@@ -13,10 +13,7 @@ file(GLOB SOURCES
 
 add_minifi_library(minifi-core-framework-common STATIC ${SOURCES})
 target_include_directories(minifi-core-framework-common PUBLIC include)
-target_link_libraries(minifi-core-framework-common PUBLIC minifi-api-common ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite libsodium range-v3 expected-lite date::date date::tz asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
+target_link_libraries(minifi-core-framework-common PUBLIC minifi-api-common ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite libsodium range-v3 date::date date::tz asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
 if(NOT WIN32)
     target_link_libraries(minifi-core-framework-common PUBLIC OSSP::libuuid++)
 endif()
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
-    target_link_libraries(minifi-core-framework-common PUBLIC stdc++fs)
-endif()
diff --git a/core-framework/common/include/utils/OptionalUtils.h b/core-framework/common/include/utils/OptionalUtils.h
index 7289b6457..f3963ac83 100644
--- a/core-framework/common/include/utils/OptionalUtils.h
+++ b/core-framework/common/include/utils/OptionalUtils.h
@@ -22,8 +22,8 @@
 #include <type_traits>
 #include <utility>
 #include <iostream>
+#include <expected>
 
-#include "nonstd/expected.hpp"
 #include "utils/GeneralUtils.h"
 #include "minifi-cpp/utils/gsl.h"
 #include "utils/detail/MonadicOperationWrappers.h"
@@ -130,9 +130,9 @@ auto operator|(std::optional<SourceType> o, filter_wrapper<F> f) noexcept(noexce
 }
 
 template<typename T, typename E>
-nonstd::expected<T, E> operator|(std::optional<T> object, to_expected_wrapper<E> e) {
+std::expected<T, E> operator|(std::optional<T> object, to_expected_wrapper<E> e) {
   if (!object) {
-    return nonstd::make_unexpected(e.error);
+    return std::unexpected{e.error};
   }
   return std::move(*object);
 }
diff --git a/core-framework/common/include/utils/ParsingUtils.h b/core-framework/common/include/utils/ParsingUtils.h
index 34307b0ff..33236eda8 100644
--- a/core-framework/common/include/utils/ParsingUtils.h
+++ b/core-framework/common/include/utils/ParsingUtils.h
@@ -23,69 +23,69 @@
 #include "fmt/format.h"
 
 namespace org::apache::nifi::minifi::parsing {
-nonstd::expected<bool, std::error_code> parseBool(std::string_view input);
+std::expected<bool, std::error_code> parseBool(std::string_view input);
 
 template<std::integral T>
-nonstd::expected<T, std::error_code> parseIntegralMinMax(std::string_view input, T minimum, T maximum);
+std::expected<T, std::error_code> parseIntegralMinMax(std::string_view input, T minimum, T maximum);
 template<std::integral T>
-nonstd::expected<T, std::error_code> parseIntegral(std::string_view input);
+std::expected<T, std::error_code> parseIntegral(std::string_view input);
 
 template<class TargetDuration>
-nonstd::expected<TargetDuration, std::error_code> parseDurationMinMax(std::string_view input, TargetDuration minimum, TargetDuration maximum);
+std::expected<TargetDuration, std::error_code> parseDurationMinMax(std::string_view input, TargetDuration minimum, TargetDuration maximum);
 template<class TargetDuration = std::chrono::milliseconds>
-nonstd::expected<TargetDuration, std::error_code> parseDuration(std::string_view input);
+std::expected<TargetDuration, std::error_code> parseDuration(std::string_view input);
 
-nonstd::expected<uint64_t, std::error_code> parseDataSizeMinMax(std::string_view input, uint64_t minimum, uint64_t maximum);
-nonstd::expected<uint64_t, std::error_code> parseDataSize(std::string_view input);
+std::expected<uint64_t, std::error_code> parseDataSizeMinMax(std::string_view input, uint64_t minimum, uint64_t maximum);
+std::expected<uint64_t, std::error_code> parseDataSize(std::string_view input);
 
-nonstd::expected<uint32_t, std::error_code> parseUnixOctalPermissions(std::string_view input);
+std::expected<uint32_t, std::error_code> parseUnixOctalPermissions(std::string_view input);
 
-nonstd::expected<float, std::error_code> parseFloat(std::string_view input);
+std::expected<float, std::error_code> parseFloat(std::string_view input);
 
 template<std::integral T>
-nonstd::expected<T, std::error_code> parseIntegralMinMax(const std::string_view input, const T minimum, const T maximum) {
+std::expected<T, std::error_code> parseIntegralMinMax(const std::string_view input, const T minimum, const T maximum) {
   const auto trimmed_input = utils::string::trim(input);
   T t{};
   const auto [ptr, ec] = std::from_chars(trimmed_input.data(), trimmed_input.data() + trimmed_input.size(), t);
   if (ec != std::errc()) {
-    return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+    return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
   }
   if (ptr != trimmed_input.data() + trimmed_input.size()) {
-    return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+    return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
   }
 
-  if (t < minimum) { return nonstd::make_unexpected(core::ParsingErrorCode::SmallerThanMinimum); }
-  if (t > maximum) { return nonstd::make_unexpected(core::ParsingErrorCode::LargerThanMaximum); }
+  if (t < minimum) { return std::unexpected{core::ParsingErrorCode::SmallerThanMinimum}; }
+  if (t > maximum) { return std::unexpected{core::ParsingErrorCode::LargerThanMaximum}; }
   return t;
 }
 
 template<std::integral T>
-nonstd::expected<T, std::error_code> parseIntegral(const std::string_view input) {
+std::expected<T, std::error_code> parseIntegral(const std::string_view input) {
   return parseIntegralMinMax<T>(input, std::numeric_limits<T>::min(), std::numeric_limits<T>::max());
 }
 
 template<class TargetDuration>
-nonstd::expected<TargetDuration, std::error_code> parseDurationMinMax(const std::string_view input, const TargetDuration minimum, const TargetDuration maximum) {
+std::expected<TargetDuration, std::error_code> parseDurationMinMax(const std::string_view input, const TargetDuration minimum, const TargetDuration maximum) {
   auto duration = utils::timeutils::StringToDuration<std::chrono::milliseconds>(input);
-  if (!duration.has_value()) { return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError); }
+  if (!duration.has_value()) { return std::unexpected{core::ParsingErrorCode::GeneralParsingError}; }
 
-  if (*duration < minimum) { return nonstd::make_unexpected(core::ParsingErrorCode::SmallerThanMinimum); }
-  if (*duration > maximum) { return nonstd::make_unexpected(core::ParsingErrorCode::LargerThanMaximum); }
+  if (*duration < minimum) { return std::unexpected{core::ParsingErrorCode::SmallerThanMinimum}; }
+  if (*duration > maximum) { return std::unexpected{core::ParsingErrorCode::LargerThanMaximum}; }
 
   return *duration;
 }
 
 template<class TargetDuration>
-nonstd::expected<TargetDuration, std::error_code> parseDuration(const std::string_view input) {
+std::expected<TargetDuration, std::error_code> parseDuration(const std::string_view input) {
   return parseDurationMinMax<TargetDuration>(input, TargetDuration::min(), TargetDuration::max());
 }
 
 
 template<typename T>
-nonstd::expected<T, std::error_code> parseEnum(const std::string_view input) {
+std::expected<T, std::error_code> parseEnum(const std::string_view input) {
   std::optional<T> result = magic_enum::enum_cast<T>(input);
   if (!result) {
-    return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+    return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
   }
   return *result;
 }
diff --git a/core-framework/common/include/utils/StringUtils.h b/core-framework/common/include/utils/StringUtils.h
index be9091a91..679f83801 100644
--- a/core-framework/common/include/utils/StringUtils.h
+++ b/core-framework/common/include/utils/StringUtils.h
@@ -430,7 +430,7 @@ bool matchesSequence(std::string_view str, const std::vector<std::string>& patte
 bool splitToValueAndUnit(std::string_view input, int64_t& value, std::string& unit);
 
 
-nonstd::expected<std::optional<char>, std::error_code> parseCharacter(std::string_view input);
+std::expected<std::optional<char>, std::error_code> parseCharacter(std::string_view input);
 
 std::string replaceEscapedCharacters(std::string_view input);
 
@@ -438,14 +438,14 @@ std::string replaceEscapedCharacters(std::string_view input);
 template <typename T> concept arithmetic = std::integral<T> || std::floating_point<T>;
 
 template<arithmetic T>
-nonstd::expected<T, std::error_code> parseNumber(std::string_view input) {
+std::expected<T, std::error_code> parseNumber(std::string_view input) {
   T t{};
   const auto [ptr, ec] = std::from_chars(input.data(), input.data() + input.size(), t);
   if (ec != std::errc()) {
-    return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+    return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
   }
   if (ptr != input.data() + input.size()) {
-    return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+    return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
   }
   return t;
 }
diff --git a/core-framework/common/include/utils/detail/MonadicOperationWrappers.h b/core-framework/common/include/utils/detail/MonadicOperationWrappers.h
index d17aa888b..a2d0a5035 100644
--- a/core-framework/common/include/utils/detail/MonadicOperationWrappers.h
+++ b/core-framework/common/include/utils/detail/MonadicOperationWrappers.h
@@ -104,7 +104,7 @@ detail::value_or_else_wrapper<T&&> valueOrElse(T&& func) noexcept { return {std:
 
 
 /**
- * Converts from std::optional<T> to nonstd::expected<T, E>
+ * Converts from std::optional<T> to std::expected<T, E>
  * The parameter will be used as the unexpected value if the optional is null.
  */
 template<typename E>
@@ -112,7 +112,7 @@ detail::to_expected_wrapper<E> toExpected(E&& e) noexcept { return {std::forward
 
 
 /**
- * Converts from nonstd::expected<T, E> to std::optional<T>
+ * Converts from std::expected<T, E> to std::optional<T>
  * Consuming the expected and discarding the error, if any.
  */
 inline detail::to_optional_wrapper toOptional() noexcept { return {}; }
diff --git a/core-framework/common/include/utils/expected.h b/core-framework/common/include/utils/expected.h
index fb0f3457e..6f07b6899 100644
--- a/core-framework/common/include/utils/expected.h
+++ b/core-framework/common/include/utils/expected.h
@@ -19,8 +19,8 @@
 #include <utility>
 #include <optional>
 #include <iostream>
+#include <expected>
 
-#include "nonstd/expected.hpp"
 #include "utils/detail/MonadicOperationWrappers.h"
 #include "fmt/format.h"
 #include "fmt/std.h"
@@ -32,7 +32,7 @@ template<typename T>
 inline constexpr bool is_expected_v = false;
 
 template<typename V, typename E>
-inline constexpr bool is_expected_v<nonstd::expected<V, E>> = true;
+inline constexpr bool is_expected_v<std::expected<V, E>> = true;
 
 template<typename T>
 concept expected = is_expected_v<std::remove_cvref_t<T>>;
@@ -44,7 +44,7 @@ inline constexpr bool is_valid_unexpected_type_v = std::is_same_v<T, std::remove
 
 // specialization: the type must not be a specialization of std::unexpected
 template<typename E>
-inline constexpr bool is_valid_unexpected_type_v<nonstd::unexpected_type<E>> = false;
+inline constexpr bool is_valid_unexpected_type_v<std::unexpected<E>> = false;
 
 template<typename T>
 concept valid_unexpected_type = is_valid_unexpected_type_v<T>;
@@ -68,24 +68,24 @@ auto operator|(Expected&& object, transform_wrapper<F> f) {
   if constexpr (std::is_void_v<value_type>) {
     using function_return_type = std::remove_cvref_t<std::invoke_result_t<F>>;
     if (!object.has_value()) {
-      return nonstd::expected<function_return_type, error_type>{nonstd::unexpect, std::forward<Expected>(object).error()};
+      return std::expected<function_return_type, error_type>{std::unexpect, std::forward<Expected>(object).error()};
     }
     if constexpr (std::is_void_v<function_return_type>) {
       std::invoke(std::forward<F>(f.function));
-      return nonstd::expected<void, error_type>{};
+      return std::expected<void, error_type>{};
     } else {
-      return nonstd::expected<function_return_type, error_type>{std::invoke(std::forward<F>(f.function))};
+      return std::expected<function_return_type, error_type>{std::invoke(std::forward<F>(f.function))};
     }
   } else {
     using function_return_type = std::remove_cvref_t<std::invoke_result_t<F, decltype(*std::forward<Expected>(object))>>;
     if (!object.has_value()) {
-      return nonstd::expected<function_return_type, error_type>{nonstd::unexpect, std::forward<Expected>(object).error()};
+      return std::expected<function_return_type, error_type>{std::unexpect, std::forward<Expected>(object).error()};
     }
     if constexpr (std::is_void_v<function_return_type>) {
       std::invoke(std::forward<F>(f.function), *std::forward<Expected>(object));
-      return nonstd::expected<void, error_type>{};
+      return std::expected<void, error_type>{};
     } else {
-      return nonstd::expected<function_return_type, error_type>{std::invoke(std::forward<F>(f.function), *std::forward<Expected>(object))};
+      return std::expected<function_return_type, error_type>{std::invoke(std::forward<F>(f.function), *std::forward<Expected>(object))};
     }
   }
 }
@@ -100,7 +100,7 @@ auto operator|(Expected&& object, and_then_wrapper<F> f) {
     if (object.has_value()) {
       return std::invoke(std::forward<F>(f.function));
     } else {
-      return function_return_type{nonstd::unexpect, std::forward<Expected>(object).error()};
+      return function_return_type{std::unexpect, std::forward<Expected>(object).error()};
     }
   } else {
     using function_return_type = std::remove_cvref_t<std::invoke_result_t<F, decltype(*std::forward<Expected>(object))>>;
@@ -108,7 +108,7 @@ auto operator|(Expected&& object, and_then_wrapper<F> f) {
     if (object.has_value()) {
       return std::invoke(std::forward<F>(f.function), *std::forward<Expected>(object));
     } else {
-      return function_return_type{nonstd::unexpect, std::forward<Expected>(object).error()};
+      return function_return_type{std::unexpect, std::forward<Expected>(object).error()};
     }
   }
 }
@@ -188,11 +188,11 @@ auto operator|(Expected&& object, transform_error_wrapper<F> f) {
   using value_type = typename std::remove_cvref_t<Expected>::value_type;
   using transformed_error_type = std::remove_cv_t<std::invoke_result_t<F, decltype(std::forward<Expected>(object).error())>>;
   static_assert(valid_unexpected_type<transformed_error_type>, "transformError expects a function returning a valid unexpected type");
-  using transformed_expected_type = nonstd::expected<value_type, transformed_error_type>;
+  using transformed_expected_type = std::expected<value_type, transformed_error_type>;
   if (object.has_value()) {
     return transformed_expected_type{std::forward<Expected>(object).value()};
   }
-  return transformed_expected_type{nonstd::unexpect, std::invoke(std::forward<F>(f.function), std::forward<Expected>(object).error())};
+  return transformed_expected_type{std::unexpect, std::invoke(std::forward<F>(f.function), std::forward<Expected>(object).error())};
 }
 
 template<expected Expected>
@@ -224,7 +224,7 @@ typename std::remove_cvref_t<Expected>::value_type operator|(Expected object, de
 template<typename F, typename... Args>
 auto try_expression(F&& action, Args&&... args) noexcept {
   using action_return_type = std::remove_cvref_t<std::invoke_result_t<F, Args&&...>>;
-  using return_type = nonstd::expected<action_return_type, std::exception_ptr>;
+  using return_type = std::expected<action_return_type, std::exception_ptr>;
   try {
     if constexpr (std::is_void_v<action_return_type>) {
       std::invoke(std::forward<F>(action), std::forward<Args>(args)...);
@@ -233,40 +233,8 @@ auto try_expression(F&& action, Args&&... args) noexcept {
       return return_type{std::invoke(std::forward<F>(action), std::forward<Args>(args)...)};
     }
   } catch (...) {
-    return return_type{nonstd::unexpect, std::current_exception()};
+    return return_type{std::unexpect, std::current_exception()};
   }
 }
 
 }  // namespace org::apache::nifi::minifi::utils
-
-template <typename T, typename E>
-concept HasStdExpected = requires { typename std::expected<T, E>; };
-
-template <typename T, typename E>
-concept ExpectedTypesDoNotConflict =
-    (!HasStdExpected<T, E> ||
-     !std::same_as<nonstd::expected<T, E>, std::expected<T, E>>);
-
-// based on fmt::formatter<std::expected<T, E>, Char>
-template <typename T, typename E, typename Char>
-requires ExpectedTypesDoNotConflict<T, E> &&
-         (std::is_void_v<T> || fmt::is_formattable<T, Char>::value) &&
-         fmt::is_formattable<E, Char>::value
-struct fmt::formatter<nonstd::expected<T, E>, Char> {
-  constexpr auto parse(auto& ctx) { return ctx.begin(); }
-
-  auto format(const nonstd::expected<T, E>& value, auto& ctx) const {
-    auto out = ctx.out();
-
-    if (value.has_value()) {
-      out = fmt::detail::write<Char>(out, "nonstd::expected(");
-      if constexpr (!std::is_void_v<T>)
-        out = fmt::detail::write_escaped_alternative<Char>(out, *value);
-    } else {
-      out = fmt::detail::write<Char>(out, "nonstd::unexpected(");
-      out = fmt::detail::write_escaped_alternative<Char>(out, value.error());
-    }
-    *out++ = ')';
-    return out;
-  }
-};
diff --git a/core-framework/common/src/utils/ParsingUtils.cpp b/core-framework/common/src/utils/ParsingUtils.cpp
index 1e3fd67e7..922704b95 100644
--- a/core-framework/common/src/utils/ParsingUtils.cpp
+++ b/core-framework/common/src/utils/ParsingUtils.cpp
@@ -20,11 +20,11 @@
 
 namespace org::apache::nifi::minifi::parsing {
 
-nonstd::expected<bool, std::error_code> parseBool(const std::string_view input) {
+std::expected<bool, std::error_code> parseBool(const std::string_view input) {
   if (utils::string::equalsIgnoreCase(input, "true")) { return true; }
   if (utils::string::equalsIgnoreCase(input, "false")) { return false; }
 
-  return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+  return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
 }
 
 namespace {
@@ -56,7 +56,7 @@ std::optional<uint64_t> getUnitMultiplier(const std::string_view unit_str) {
 }
 }  // namespace
 
-nonstd::expected<uint64_t, std::error_code> parseDataSizeMinMax(const std::string_view input, const uint64_t minimum, const uint64_t maximum) {
+std::expected<uint64_t, std::error_code> parseDataSizeMinMax(const std::string_view input, const uint64_t minimum, const uint64_t maximum) {
   const auto trimmed_input = utils::string::trim(input);
   const auto split_pos = trimmed_input.find_first_not_of("0123456789");
 
@@ -67,27 +67,27 @@ nonstd::expected<uint64_t, std::error_code> parseDataSizeMinMax(const std::strin
   const auto num_str = trimmed_input.substr(0, split_pos);
   const std::string unit_str = utils::string::toUpper(std::string{trimmed_input.substr(split_pos, trimmed_input.size() - split_pos)});
 
-  nonstd::expected<uint64_t, std::error_code> num_part = parseIntegral<uint64_t>(num_str);
-  if (!num_part) { return nonstd::make_unexpected(num_part.error()); }
+  std::expected<uint64_t, std::error_code> num_part = parseIntegral<uint64_t>(num_str);
+  if (!num_part) { return std::unexpected{num_part.error()}; }
 
   const auto unit_multiplier = getUnitMultiplier(utils::string::trim(unit_str));
-  if (!unit_multiplier) { return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError); }
+  if (!unit_multiplier) { return std::unexpected{core::ParsingErrorCode::GeneralParsingError}; }
   uint64_t result = *num_part * *unit_multiplier;
   gsl_Assert(unit_multiplier != 0);
   if ((result / *unit_multiplier) != *num_part) {
-    return nonstd::make_unexpected(core::ParsingErrorCode::OverflowError);
+    return std::unexpected{core::ParsingErrorCode::OverflowError};
   }
-  if (result < minimum) { return nonstd::make_unexpected(core::ParsingErrorCode::SmallerThanMinimum); }
-  if (result > maximum) { return nonstd::make_unexpected(core::ParsingErrorCode::LargerThanMaximum); }
+  if (result < minimum) { return std::unexpected{core::ParsingErrorCode::SmallerThanMinimum}; }
+  if (result > maximum) { return std::unexpected{core::ParsingErrorCode::LargerThanMaximum}; }
 
   return result;
 }
 
-nonstd::expected<uint64_t, std::error_code> parseDataSize(const std::string_view input) {
+std::expected<uint64_t, std::error_code> parseDataSize(const std::string_view input) {
   return parseDataSizeMinMax(input, std::numeric_limits<uint64_t>::min(), std::numeric_limits<uint64_t>::max());
 }
 
-nonstd::expected<uint32_t, std::error_code> parseUnixOctalPermissions(const std::string_view input) {
+std::expected<uint32_t, std::error_code> parseUnixOctalPermissions(const std::string_view input) {
   uint32_t result = 0U;
   if (input.size() == 9U) {
     /* Probably rwxrwxrwx formatted */
@@ -95,17 +95,17 @@ nonstd::expected<uint32_t, std::error_code> parseUnixOctalPermissions(const std:
       if (input[i * 3] == 'r') {
         result |= 04 << ((2 - i) * 3);
       } else if (input[i * 3] != '-') {
-        return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+        return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
       }
       if (input[i * 3 + 1] == 'w') {
         result |= 02 << ((2 - i) * 3);
       } else if (input[i * 3 + 1] != '-') {
-        return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+        return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
       }
       if (input[i * 3 + 2] == 'x') {
         result |= 01 << ((2 - i) * 3);
       } else if (input[i * 3 + 2] != '-') {
-        return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+        return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
       }
     }
   } else {
@@ -114,23 +114,23 @@ nonstd::expected<uint32_t, std::error_code> parseUnixOctalPermissions(const std:
       size_t pos = 0U;
       result = std::stoul(std::string{input}, &pos, 8);
       if (pos != input.size()) {
-        return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+        return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
       }
       if ((result & ~static_cast<uint32_t>(0777)) != 0U) {
-        return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+        return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
       }
     } catch (...) {
-        return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+        return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
     }
   }
   return result;
 }
 
-nonstd::expected<float, std::error_code> parseFloat(std::string_view input) {
+std::expected<float, std::error_code> parseFloat(std::string_view input) {
   try {
     return std::stof(std::string{input});
   } catch(const std::exception&) {
-    return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+    return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
   }
 }
 
diff --git a/core-framework/common/src/utils/StringUtils.cpp b/core-framework/common/src/utils/StringUtils.cpp
index eee74742d..e200bdf95 100644
--- a/core-framework/common/src/utils/StringUtils.cpp
+++ b/core-framework/common/src/utils/StringUtils.cpp
@@ -518,7 +518,7 @@ bool splitToValueAndUnit(std::string_view input, int64_t& value, std::string& un
   return true;
 }
 
-nonstd::expected<std::optional<char>, std::error_code> parseCharacter(const std::string_view input) {
+std::expected<std::optional<char>, std::error_code> parseCharacter(const std::string_view input) {
   if (input.empty()) { return std::nullopt; }
   if (input.size() == 1) { return input[0]; }
 
@@ -536,7 +536,7 @@ nonstd::expected<std::optional<char>, std::error_code> parseCharacter(const std:
       default: break;
     }
   }
-  return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+  return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
 }
 
 std::string replaceEscapedCharacters(std::string_view input) {
diff --git a/core-framework/include/core/ConfigurableComponentImpl.h b/core-framework/include/core/ConfigurableComponentImpl.h
index 8b212824e..90725d271 100644
--- a/core-framework/include/core/ConfigurableComponentImpl.h
+++ b/core-framework/include/core/ConfigurableComponentImpl.h
@@ -30,28 +30,28 @@ namespace org::apache::nifi::minifi::core {
 
 class ConfigurableComponentImpl : public virtual ConfigurableComponent {
  public:
-  [[nodiscard]] nonstd::expected<std::string, std::error_code> getProperty(std::string_view name) const override;
-  nonstd::expected<void, std::error_code> setProperty(std::string_view name, std::string value) override;
-  nonstd::expected<void, std::error_code> clearProperty(std::string_view name) override;
+  [[nodiscard]] std::expected<std::string, std::error_code> getProperty(std::string_view name) const override;
+  std::expected<void, std::error_code> setProperty(std::string_view name, std::string value) override;
+  std::expected<void, std::error_code> clearProperty(std::string_view name) override;
 
-  [[nodiscard]] nonstd::expected<std::string, std::error_code> getDynamicProperty(std::string_view name) const override;
-  nonstd::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) override;
+  [[nodiscard]] std::expected<std::string, std::error_code> getDynamicProperty(std::string_view name) const override;
+  std::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) override;
 
   void setSupportedProperties(std::span<const PropertyReference> properties);
   void setSupportedProperties(std::span<const Property> properties);
 
   [[nodiscard]] std::map<std::string, Property, std::less<>> getSupportedProperties() const override;
-  [[nodiscard]] nonstd::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const override;
+  [[nodiscard]] std::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const override;
   [[nodiscard]] std::vector<std::string> getDynamicPropertyKeys() const override;
 
   [[nodiscard]] std::map<std::string, std::string> getDynamicProperties() const override;
 
 
   // for property sequences
-  nonstd::expected<void, std::error_code> appendProperty(std::string_view name, std::string value) override;
-  nonstd::expected<void, std::error_code> appendDynamicProperty(std::string_view name, std::string value) override;
-  [[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
-  [[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> getAllDynamicPropertyValues(std::string_view name) const override;
+  std::expected<void, std::error_code> appendProperty(std::string_view name, std::string value) override;
+  std::expected<void, std::error_code> appendDynamicProperty(std::string_view name, std::string value) override;
+  [[nodiscard]] std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
+  [[nodiscard]] std::expected<std::vector<std::string>, std::error_code> getAllDynamicPropertyValues(std::string_view name) const override;
 
  private:
   std::shared_ptr<logging::Logger> logger_ = logging::LoggerFactory<ConfigurableComponentImpl>::getLogger();
diff --git a/core-framework/include/core/controller/ControllerServiceBase.h b/core-framework/include/core/controller/ControllerServiceBase.h
index 99c7f2a71..63d1813c7 100644
--- a/core-framework/include/core/controller/ControllerServiceBase.h
+++ b/core-framework/include/core/controller/ControllerServiceBase.h
@@ -75,12 +75,12 @@ class ControllerServiceBase : public ControllerServiceApi {
     onEnable();
   }
 
-  [[nodiscard]] nonstd::expected<std::string, std::error_code> getProperty(std::string_view name) const {
+  [[nodiscard]] std::expected<std::string, std::error_code> getProperty(std::string_view name) const {
     gsl_Expects(context_);
     return context_->getProperty(name);
   }
 
-  [[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const {
+  [[nodiscard]] std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const {
     gsl_Expects(context_);
     return context_->getAllPropertyValues(name);
   }
diff --git a/core-framework/include/utils/file/FileUtils.h b/core-framework/include/utils/file/FileUtils.h
index 07d5d610f..f22ea4e51 100644
--- a/core-framework/include/utils/file/FileUtils.h
+++ b/core-framework/include/utils/file/FileUtils.h
@@ -128,11 +128,11 @@ inline std::optional<std::chrono::file_clock::time_point> last_write_time(const
   return std::nullopt;
 }
 
-inline nonstd::expected<void, std::error_code> set_last_write_time(const std::filesystem::path& path, std::chrono::file_clock::time_point new_time) {
+inline std::expected<void, std::error_code> set_last_write_time(const std::filesystem::path& path, std::chrono::file_clock::time_point new_time) {
   std::error_code ec;
   std::filesystem::last_write_time(path, new_time, ec);
   if (ec)
-    return nonstd::make_unexpected(ec);
+    return std::unexpected{ec};
   return {};
 }
 
@@ -600,7 +600,7 @@ struct WindowsFileTimes {
   std::chrono::file_clock::time_point last_write_time;
 };
 
-nonstd::expected<WindowsFileTimes, std::error_code> getWindowsFileTimes(const std::filesystem::path& path);
+std::expected<WindowsFileTimes, std::error_code> getWindowsFileTimes(const std::filesystem::path& path);
 #endif
 
 }  // namespace org::apache::nifi::minifi::utils::file
diff --git a/core-framework/include/utils/file/PathUtils.h b/core-framework/include/utils/file/PathUtils.h
index 04886c1a6..12ca6dd2c 100644
--- a/core-framework/include/utils/file/PathUtils.h
+++ b/core-framework/include/utils/file/PathUtils.h
@@ -43,22 +43,22 @@ inline std::optional<std::filesystem::path> canonicalize(const std::filesystem::
   return result;
 }
 
-inline nonstd::expected<void, std::string> validateRelativeFilePath(const std::filesystem::path& path) {
+inline std::expected<void, std::string> validateRelativeFilePath(const std::filesystem::path& path) {
   if (path.empty()) {
-    return nonstd::make_unexpected("Empty file path");
+    return std::unexpected{"Empty file path"};
   }
   if (!path.is_relative()) {
-    return nonstd::make_unexpected("File path must be a relative path '" + path.string() + "'");
+    return std::unexpected{"File path must be a relative path '" + path.string() + "'"};
   }
   if (!path.has_filename()) {
-    return nonstd::make_unexpected("Filename missing in output path '" + path.string() + "'");
+    return std::unexpected{"Filename missing in output path '" + path.string() + "'"};
   }
   if (path.filename() == "." || path.filename() == "..") {
-    return nonstd::make_unexpected("Invalid filename '" + path.filename().string() + "'");
+    return std::unexpected{"Invalid filename '" + path.filename().string() + "'"};
   }
   for (const auto& segment : path) {
     if (segment == "..") {
-      return nonstd::make_unexpected("Accessing parent directory is forbidden in file path '" + path.string() + "'");
+      return std::unexpected{"Accessing parent directory is forbidden in file path '" + path.string() + "'"};
     }
   }
   return {};
diff --git a/core-framework/include/utils/net/DNS.h b/core-framework/include/utils/net/DNS.h
index da8153b0e..600e424e8 100644
--- a/core-framework/include/utils/net/DNS.h
+++ b/core-framework/include/utils/net/DNS.h
@@ -20,15 +20,15 @@
 #include <string>
 #include <string_view>
 #include <system_error>
+#include <expected>
 
-#include "nonstd/expected.hpp"
 #include "asio/ip/address.hpp"
 
 namespace org::apache::nifi::minifi::utils::net {
 
-nonstd::expected<asio::ip::address, std::error_code> addressFromString(std::string_view ip_address_str);
+std::expected<asio::ip::address, std::error_code> addressFromString(std::string_view ip_address_str);
 
-nonstd::expected<std::string, std::error_code> reverseDnsLookup(const asio::ip::address& ip_address, std::chrono::steady_clock::duration timeout = std::chrono::seconds(5));
+std::expected<std::string, std::error_code> reverseDnsLookup(const asio::ip::address& ip_address, std::chrono::steady_clock::duration timeout = std::chrono::seconds(5));
 
 std::string getMyHostName();
 
diff --git a/core-framework/src/core/ConfigurableComponentImpl.cpp b/core-framework/src/core/ConfigurableComponentImpl.cpp
index db0edab2f..1dd09d1e1 100644
--- a/core-framework/src/core/ConfigurableComponentImpl.cpp
+++ b/core-framework/src/core/ConfigurableComponentImpl.cpp
@@ -40,67 +40,67 @@ void ConfigurableComponentImpl::setSupportedProperties(std::span<const Property>
 }
 
 
-nonstd::expected<std::string, std::error_code> ConfigurableComponentImpl::getProperty(const std::string_view name) const {
+std::expected<std::string, std::error_code> ConfigurableComponentImpl::getProperty(const std::string_view name) const {
   const std::lock_guard<std::mutex> lock(configuration_mutex_);
   const auto it = supported_properties_.find(name);
-  if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+  if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
   const Property& prop = it->second;
   return prop.getValue() | utils::transform([](const std::string_view value_view) -> std::string { return std::string{value_view}; });
 }
 
-nonstd::expected<void, std::error_code> ConfigurableComponentImpl::setProperty(const std::string_view name, std::string value) {
+std::expected<void, std::error_code> ConfigurableComponentImpl::setProperty(const std::string_view name, std::string value) {
   const std::lock_guard<std::mutex> lock(configuration_mutex_);
   const auto it = supported_properties_.find(name);
-  if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+  if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
   Property& prop = it->second;
 
   return prop.setValue(std::move(value));
 }
 
-nonstd::expected<void, std::error_code> ConfigurableComponentImpl::clearProperty(const std::string_view name) {
+std::expected<void, std::error_code> ConfigurableComponentImpl::clearProperty(const std::string_view name) {
   const std::lock_guard<std::mutex> lock(configuration_mutex_);
   const auto it = supported_properties_.find(name);
-  if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+  if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
   Property& prop = it->second;
 
   prop.clearValues();
   return {};
 }
 
-nonstd::expected<void, std::error_code> ConfigurableComponentImpl::appendProperty(const std::string_view name, std::string value) {
+std::expected<void, std::error_code> ConfigurableComponentImpl::appendProperty(const std::string_view name, std::string value) {
   const std::lock_guard<std::mutex> lock(configuration_mutex_);
   const auto it = supported_properties_.find(name);
-  if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+  if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
   Property& prop = it->second;
 
   return prop.appendValue(std::move(value));
 }
 
-nonstd::expected<std::string, std::error_code> ConfigurableComponentImpl::getDynamicProperty(const std::string_view name) const {
+std::expected<std::string, std::error_code> ConfigurableComponentImpl::getDynamicProperty(const std::string_view name) const {
   const std::lock_guard<std::mutex> lock(configuration_mutex_);
   if (!supportsDynamicProperties()) {
-    return nonstd::make_unexpected(PropertyErrorCode::DynamicPropertiesNotSupported);
+    return std::unexpected{PropertyErrorCode::DynamicPropertiesNotSupported};
   }
   const auto it = dynamic_properties_.find(name);
-  if (it == dynamic_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::PropertyNotSet); }
+  if (it == dynamic_properties_.end()) { return std::unexpected{PropertyErrorCode::PropertyNotSet}; }
   const Property& prop = it->second;
   return prop.getValue() | utils::transform([](const std::string_view value_view) -> std::string { return std::string{value_view}; });
 }
 
-nonstd::expected<void, std::error_code> ConfigurableComponentImpl::setDynamicProperty(std::string name, std::string value) {
+std::expected<void, std::error_code> ConfigurableComponentImpl::setDynamicProperty(std::string name, std::string value) {
   const std::lock_guard<std::mutex> lock(configuration_mutex_);
   if (!supportsDynamicProperties()) {
-    return nonstd::make_unexpected(PropertyErrorCode::DynamicPropertiesNotSupported);
+    return std::unexpected{PropertyErrorCode::DynamicPropertiesNotSupported};
   }
   Property& prop = dynamic_properties_[std::move(name)];
   prop.setSupportsExpressionLanguage(true);  // all dynamic properties support EL
   return prop.setValue(std::move(value));
 }
 
-nonstd::expected<void, std::error_code> ConfigurableComponentImpl::appendDynamicProperty(const std::string_view name, std::string value) {
+std::expected<void, std::error_code> ConfigurableComponentImpl::appendDynamicProperty(const std::string_view name, std::string value) {
   const std::lock_guard<std::mutex> lock(configuration_mutex_);
   if (!supportsDynamicProperties()) {
-    return nonstd::make_unexpected(PropertyErrorCode::DynamicPropertiesNotSupported);
+    return std::unexpected{PropertyErrorCode::DynamicPropertiesNotSupported};
   }
   Property& prop = dynamic_properties_[std::string{name}];
   prop.setSupportsExpressionLanguage(true);  // all dynamic properties support EL
@@ -122,20 +122,20 @@ std::map<std::string, std::string> ConfigurableComponentImpl::getDynamicProperti
   return result;
 }
 
-[[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> ConfigurableComponentImpl::getAllPropertyValues(const std::string_view name) const {
+[[nodiscard]] std::expected<std::vector<std::string>, std::error_code> ConfigurableComponentImpl::getAllPropertyValues(const std::string_view name) const {
   std::lock_guard<std::mutex> lock(configuration_mutex_);
 
   const auto it = supported_properties_.find(name);
-  if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+  if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
   const Property& prop = it->second;
   return prop.getAllValues() | utils::transform([](const auto& values) -> std::vector<std::string> { return std::vector<std::string>{values.begin(), values.end()}; });
 }
 
-[[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> ConfigurableComponentImpl::getAllDynamicPropertyValues(const std::string_view name) const {
+[[nodiscard]] std::expected<std::vector<std::string>, std::error_code> ConfigurableComponentImpl::getAllDynamicPropertyValues(const std::string_view name) const {
   std::lock_guard<std::mutex> lock(configuration_mutex_);
 
   const auto it = dynamic_properties_.find(name);
-  if (it == dynamic_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::PropertyNotSet); }
+  if (it == dynamic_properties_.end()) { return std::unexpected{PropertyErrorCode::PropertyNotSet}; }
   const Property& prop = it->second;
   return prop.getAllValues() | utils::transform([](const auto& values) -> std::vector<std::string> { return std::vector<std::string>{values.begin(), values.end()}; });
 }
@@ -149,10 +149,10 @@ std::map<std::string, std::string> ConfigurableComponentImpl::getDynamicProperti
   return supported_properties;
 }
 
-[[nodiscard]] nonstd::expected<Property, std::error_code> ConfigurableComponentImpl::getSupportedProperty(const std::string_view name) const {
+[[nodiscard]] std::expected<Property, std::error_code> ConfigurableComponentImpl::getSupportedProperty(const std::string_view name) const {
   std::lock_guard<std::mutex> lock(configuration_mutex_);
   const auto it = supported_properties_.find(name);
-  if (it == supported_properties_.end()) { return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty); }
+  if (it == supported_properties_.end()) { return std::unexpected{PropertyErrorCode::NotSupportedProperty}; }
   return it->second;
 }
 
diff --git a/core-framework/src/core/Property.cpp b/core-framework/src/core/Property.cpp
index a55159cab..13f83ee56 100644
--- a/core-framework/src/core/Property.cpp
+++ b/core-framework/src/core/Property.cpp
@@ -119,30 +119,30 @@ Property::Property(std::string name, std::string description)
 
 Property::Property() : is_required_(false), is_collection_(false), validator_{&StandardPropertyValidators::ALWAYS_VALID_VALIDATOR}, supports_el_(false), is_transient_(false) {}
 
-nonstd::expected<std::string_view, std::error_code> Property::getValue() const {
+std::expected<std::string_view, std::error_code> Property::getValue() const {
   if (!values_.empty()) { return values_.back(); }
   if (default_value_) { return *default_value_; }
-  return nonstd::make_unexpected(PropertyErrorCode::PropertyNotSet);
+  return std::unexpected{PropertyErrorCode::PropertyNotSet};
 }
 
-nonstd::expected<std::span<const std::string>, std::error_code> Property::getAllValues() const {
+std::expected<std::span<const std::string>, std::error_code> Property::getAllValues() const {
   return std::span{values_};
 }
 
-nonstd::expected<void, std::error_code> Property::setValue(std::string value) {
-  if (!validator_->validate(value)) { return nonstd::make_unexpected(PropertyErrorCode::ValidationFailed); }
+std::expected<void, std::error_code> Property::setValue(std::string value) {
+  if (!validator_->validate(value)) { return std::unexpected{PropertyErrorCode::ValidationFailed}; }
   if (!allowed_values_.empty() && ranges::none_of(allowed_values_, [&](const auto& allowed_value) -> bool { return utils::string::toLower(allowed_value) == utils::string::toLower(value); })) {
-    return nonstd::make_unexpected(PropertyErrorCode::ValidationFailed);
+    return std::unexpected{PropertyErrorCode::ValidationFailed};
   }
   values_.clear();
   values_.push_back(std::move(value));
   return {};
 }
 
-nonstd::expected<void, std::error_code> Property::appendValue(std::string value) {
-  if (!validator_->validate(value)) { return nonstd::make_unexpected(PropertyErrorCode::ValidationFailed); }
+std::expected<void, std::error_code> Property::appendValue(std::string value) {
+  if (!validator_->validate(value)) { return std::unexpected{PropertyErrorCode::ValidationFailed}; }
   if (!allowed_values_.empty() && ranges::none_of(allowed_values_, [&](const auto& allowed_value) -> bool { return utils::string::toLower(allowed_value) == utils::string::toLower(value); })) {
-    return nonstd::make_unexpected(PropertyErrorCode::ValidationFailed);
+    return std::unexpected{PropertyErrorCode::ValidationFailed};
   }
   if (values_.empty() && default_value_) { values_.push_back(*default_value_); }
   values_.push_back(std::move(value));
diff --git a/core-framework/src/utils/Cron.cpp b/core-framework/src/utils/Cron.cpp
index 93dc84b66..af0920166 100644
--- a/core-framework/src/utils/Cron.cpp
+++ b/core-framework/src/utils/Cron.cpp
@@ -46,14 +46,15 @@ namespace org::apache::nifi::minifi::utils {
 namespace {
 
 // https://github.com/HowardHinnant/date/issues/550
-// Due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78714
-// the month parsing with '%b' and the weekday parsing with '%a' is case-sensitive in gcc11
-// This has been fixed in gcc13
+// Due to libstdc++ bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78714
+// the month parsing with '%b' and the weekday parsing with '%a' can be case-sensitive.
+// Normalizing to Title Case prevents parsing failures across all GCC versions.
 std::stringstream getCaseInsensitiveCStream(const std::string& str) {
-#if defined(__GNUC__) && (__GNUC__ < 13)
+#if defined(__GLIBCXX__) || defined(__GLIBCPP__)
   auto patched_str = string::toLower(str);
-  if (!patched_str.empty())
+  if (!patched_str.empty()) {
     patched_str[0] = static_cast<char>(std::toupper(static_cast<unsigned char>(patched_str[0])));
+  }
   auto stream = std::stringstream{patched_str};
 #else
   auto stream = std::stringstream{str};
@@ -62,7 +63,6 @@ std::stringstream getCaseInsensitiveCStream(const std::string& str) {
   return stream;
 }
 
-
 template<class T>
 std::optional<T> fromChars(const std::string& input) {
   T t{};
diff --git a/core-framework/src/utils/file/FileUtils.cpp b/core-framework/src/utils/file/FileUtils.cpp
index 1e8dc61ff..84f5fe3f4 100644
--- a/core-framework/src/utils/file/FileUtils.cpp
+++ b/core-framework/src/utils/file/FileUtils.cpp
@@ -132,11 +132,11 @@ std::chrono::file_clock::time_point fileTimePointFromFileTime(const FILETIME& fi
   return std::chrono::file_clock::time_point{duration};
 }
 
-nonstd::expected<WindowsFileTimes, std::error_code> getWindowsFileTimes(const std::filesystem::path& path) {
+std::expected<WindowsFileTimes, std::error_code> getWindowsFileTimes(const std::filesystem::path& path) {
   WIN32_FILE_ATTRIBUTE_DATA file_attributes;
   auto get_file_attributes_result = GetFileAttributesExW(path.c_str(), GetFileExInfoStandard, &file_attributes);
   if (!get_file_attributes_result)
-    return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(GetLastError()));
+    return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(GetLastError())};
   return WindowsFileTimes{.creation_time = fileTimePointFromFileTime(file_attributes.ftCreationTime),
                           .last_access_time = fileTimePointFromFileTime(file_attributes.ftLastAccessTime),
                           .last_write_time = fileTimePointFromFileTime(file_attributes.ftLastWriteTime)};
diff --git a/core-framework/src/utils/net/DNS.cpp b/core-framework/src/utils/net/DNS.cpp
index 160277dac..726a41ccd 100644
--- a/core-framework/src/utils/net/DNS.cpp
+++ b/core-framework/src/utils/net/DNS.cpp
@@ -25,11 +25,11 @@
 
 namespace org::apache::nifi::minifi::utils::net {
 
-nonstd::expected<asio::ip::address, std::error_code> addressFromString(const std::string_view ip_address_str) {
+std::expected<asio::ip::address, std::error_code> addressFromString(const std::string_view ip_address_str) {
   std::error_code ip_address_from_string_error;
   auto ip_address = asio::ip::make_address(ip_address_str, ip_address_from_string_error);
   if (ip_address_from_string_error)
-    return nonstd::make_unexpected(ip_address_from_string_error);
+    return std::unexpected{ip_address_from_string_error};
   return ip_address;
 }
 
@@ -41,7 +41,7 @@ asio::awaitable<std::tuple<std::error_code, asio::ip::basic_resolver<asio::ip::u
 }
 }  // namespace
 
-nonstd::expected<std::string, std::error_code> reverseDnsLookup(const asio::ip::address& ip_address, std::chrono::steady_clock::duration timeout_duration) {
+std::expected<std::string, std::error_code> reverseDnsLookup(const asio::ip::address& ip_address, std::chrono::steady_clock::duration timeout_duration) {
   asio::io_context io_context;
 
   std::error_code resolve_error;
@@ -54,11 +54,11 @@ nonstd::expected<std::string, std::error_code> reverseDnsLookup(const asio::ip::
   io_context.run();
 
   if (resolve_error)
-    return nonstd::make_unexpected(resolve_error);
+    return std::unexpected{resolve_error};
   if (!results.empty()) {
     return results.begin()->host_name();
   }
-  return nonstd::make_unexpected(std::make_error_code(std::errc::host_unreachable));
+  return std::unexpected{std::make_error_code(std::errc::host_unreachable)};
 }
 
 std::string getMyHostName() {
diff --git a/docker/rockylinux/Dockerfile b/docker/rockylinux/Dockerfile
index 07069e525..d10a82aba 100644
--- a/docker/rockylinux/Dockerfile
+++ b/docker/rockylinux/Dockerfile
@@ -41,7 +41,7 @@ COPY . ${MINIFI_BASE_DIR}
 
 # Install the system dependencies needed for a build
 # ccache is in EPEL
-RUN dnf -y install epel-release && dnf -y install gcc-toolset-12 sudo git which make libarchive ccache ca-certificates perl patch bison flex libtool cmake rpmdevtools && \
+RUN dnf -y install epel-release && dnf -y install gcc-toolset-14 sudo git which make libarchive ccache ca-certificates perl patch bison flex libtool cmake rpmdevtools && \
     if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_ALL=ON\|ENABLE_PYTHON_SCRIPTING=ON\|ENABLE_OPC=ON"; then dnf -y --enablerepo=devel install python3-devel; fi && \
     if echo "$MINIFI_OPTIONS" | grep -q "ENABLE_SFTP=ON" && [ "${DOCKER_SKIP_TESTS}" == "OFF" ]; then dnf -y install java-1.8.0-openjdk maven; fi
 
@@ -52,16 +52,13 @@ RUN cd $MINIFI_BASE_DIR && \
 RUN groupadd -g ${GID} ${USER} && useradd -g ${GID} ${USER} && \
     chown -R ${USER}:${USER} ${MINIFI_BASE_DIR}
 
-# Patching standard header to avoid https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105651
-RUN patch -p1 /opt/rh/gcc-toolset-12/root/usr/include/c++/12/bits/basic_string.tcc ${MINIFI_BASE_DIR}/thirdparty/libstdc++/avoid_bogus_Wrestrict_PR105651.patch
-
 USER ${USER}
 
 # Perform the build
 RUN cd $MINIFI_BASE_DIR && \
     mkdir build && \
     cd build && \
-    source /opt/rh/gcc-toolset-12/enable && \
+    source /opt/rh/gcc-toolset-14/enable && \
     export PATH=/usr/lib64/ccache${PATH:+:${PATH}} && \
     export CCACHE_DIR=${MINIFI_BASE_DIR}/.ccache && \
     cmake -DSTATIC_BUILD= -DSKIP_TESTS=${DOCKER_SKIP_TESTS} ${MINIFI_OPTIONS} -DAWS_ENABLE_UNITY_BUILD=OFF -DCMAKE_BUILD_TYPE="${CMAKE_BUILD_TYPE}" .. && \
@@ -71,7 +68,7 @@ RUN cd $MINIFI_BASE_DIR && \
 RUN if [[ "${DOCKER_CREATE_RPM}" == "ON" ]] ; then  \
         cd $MINIFI_BASE_DIR && \
         cd build && \
-        source /opt/rh/gcc-toolset-12/enable && \
+        source /opt/rh/gcc-toolset-14/enable && \
         cmake -DMINIFI_PACKAGING_TYPE=RPM .. && \
         make -j "$(nproc)" package&& \
         ../packaging/rpm/check_rpm_contents.sh *.rpm expected-rpm-contents.txt; \
diff --git a/extension-framework/CMakeLists.txt b/extension-framework/CMakeLists.txt
index 9bcfd285c..679f937d9 100644
--- a/extension-framework/CMakeLists.txt
+++ b/extension-framework/CMakeLists.txt
@@ -18,13 +18,10 @@ target_link_libraries(minifi-extension-framework PUBLIC minifi-api)
 include(RangeV3)
 include(Asio)
 include(MagicEnum)
-list(APPEND CORE_LIBRARIES ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite range-v3 expected-lite asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
+list(APPEND CORE_LIBRARIES ZLIB::ZLIB concurrentqueue RapidJSON spdlog Threads::Threads gsl-lite range-v3 asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON)
 if(NOT WIN32)
     list(APPEND CORE_LIBRARIES OSSP::libuuid++)
 endif()
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
-    list(APPEND CORE_LIBRARIES stdc++fs)
-endif()
 target_link_libraries(minifi-extension-framework PUBLIC ${CMAKE_DL_LIBS} ${CORE_LIBRARIES})
 if (APPLE)
     target_link_libraries(minifi-extension-framework PUBLIC "-framework CoreFoundation -framework SystemConfiguration")
diff --git a/extension-framework/cpp-extension-lib/include/api/core/ProcessContext.h b/extension-framework/cpp-extension-lib/include/api/core/ProcessContext.h
index 50f5ebaa5..442f9bbf4 100644
--- a/extension-framework/cpp-extension-lib/include/api/core/ProcessContext.h
+++ b/extension-framework/cpp-extension-lib/include/api/core/ProcessContext.h
@@ -18,9 +18,9 @@
 #pragma once
 
 #include <string>
+#include <expected>
 
 #include "minifi-c.h"
-#include "nonstd/expected.hpp"
 #include "minifi-cpp/core/PropertyDefinition.h"
 #include "api/core/FlowFile.h"
 
@@ -30,8 +30,8 @@ class ProcessContext {
  public:
   explicit ProcessContext(MinifiProcessContext* impl): impl_(impl) {}
 
-  nonstd::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile* flow_file = nullptr) const;
-  nonstd::expected<std::string, std::error_code> getProperty(const minifi::core::PropertyReference& property_reference, const FlowFile* flow_file = nullptr) const {
+  std::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile* flow_file = nullptr) const;
+  std::expected<std::string, std::error_code> getProperty(const minifi::core::PropertyReference& property_reference, const FlowFile* flow_file = nullptr) const {
     return getProperty(property_reference.name, flow_file);
   }
 
diff --git a/extension-framework/cpp-extension-lib/src/core/ProcessContext.cpp b/extension-framework/cpp-extension-lib/src/core/ProcessContext.cpp
index 58016d804..958274d7d 100644
--- a/extension-framework/cpp-extension-lib/src/core/ProcessContext.cpp
+++ b/extension-framework/cpp-extension-lib/src/core/ProcessContext.cpp
@@ -21,7 +21,7 @@
 
 namespace org::apache::nifi::minifi::api::core {
 
-nonstd::expected<std::string, std::error_code> ProcessContext::getProperty(std::string_view name, const FlowFile* flow_file) const {
+std::expected<std::string, std::error_code> ProcessContext::getProperty(std::string_view name, const FlowFile* flow_file) const {
   std::optional<std::string> value;
   MinifiStatus status = MinifiProcessContextGetProperty(impl_, utils::toStringView(name), flow_file ? flow_file->get() : MINIFI_NULL,
     [] (void* data, MinifiStringView result) {
@@ -29,7 +29,7 @@ nonstd::expected<std::string, std::error_code> ProcessContext::getProperty(std::
     }, &value);
 
   if (!value) {
-    return nonstd::make_unexpected(utils::make_error_code(status));
+    return std::unexpected{utils::make_error_code(status)};
   }
   return value.value();
 }
diff --git a/extensions/aws/processors/PutKinesisStream.cpp b/extensions/aws/processors/PutKinesisStream.cpp
index 2ce4b7872..432597606 100644
--- a/extensions/aws/processors/PutKinesisStream.cpp
+++ b/extensions/aws/processors/PutKinesisStream.cpp
@@ -53,7 +53,7 @@ void PutKinesisStream::onSchedule(core::ProcessContext& context, core::ProcessSe
   }
 }
 
-nonstd::expected<Aws::Kinesis::Model::PutRecordsRequestEntry, PutKinesisStream::BatchItemError> PutKinesisStream::createEntryFromFlowFile(const core::ProcessContext& context,
+std::expected<Aws::Kinesis::Model::PutRecordsRequestEntry, PutKinesisStream::BatchItemError> PutKinesisStream::createEntryFromFlowFile(const core::ProcessContext& context,
     core::ProcessSession& session,
     const std::shared_ptr<core::FlowFile>& flow_file) const {
   Aws::Kinesis::Model::PutRecordsRequestEntry entry;
@@ -62,7 +62,7 @@ nonstd::expected<Aws::Kinesis::Model::PutRecordsRequestEntry, PutKinesisStream::
   const auto [status, buffer] = session.readBuffer(flow_file);
   if (io::isError(status)) {
     logger_->log_error("Couldn't read content from {}", flow_file->getUUIDStr());
-    return nonstd::make_unexpected(BatchItemError{.error_message = "Failed to read content", .error_code = std::nullopt});
+    return std::unexpected{BatchItemError{.error_message = "Failed to read content", .error_code = std::nullopt}};
   }
   Aws::Utils::ByteBuffer aws_buffer(reinterpret_cast<const unsigned char*>(buffer.data()), buffer.size());
   entry.SetData(aws_buffer);
@@ -122,9 +122,9 @@ void PutKinesisStream::processBatch(StreamBatch& stream_batch, const Aws::Kinesi
   const auto put_record_result = client.PutRecords(stream_batch.request);
   if (!put_record_result.IsSuccess()) {
     ranges::for_each(stream_batch.items, [&](auto& item) {
-      item.result = nonstd::make_unexpected(BatchItemError{
+      item.result = std::unexpected{BatchItemError{
         .error_message = put_record_result.GetError().GetMessage(),
-        .error_code = std::to_string(static_cast<int>(put_record_result.GetError().GetResponseCode()))});
+        .error_code = std::to_string(static_cast<int>(put_record_result.GetError().GetResponseCode()))}};
     });
     return;
   }
@@ -134,9 +134,9 @@ void PutKinesisStream::processBatch(StreamBatch& stream_batch, const Aws::Kinesi
     logger_->log_critical("PutKinesisStream record size ({}) and result size ({}) mismatch in {} cannot tell which record succeeded and which didnt",
         stream_batch.items.size(), result_records.size(), stream_batch.request.GetStreamName());
     ranges::for_each(stream_batch.items, [&](auto& item) {
-      item.result = nonstd::make_unexpected(BatchItemError{
+      item.result = std::unexpected{BatchItemError{
         .error_message = "Record size mismatch",
-        .error_code = std::nullopt});
+        .error_code = std::nullopt}};
     });
     return;
   }
@@ -145,7 +145,7 @@ void PutKinesisStream::processBatch(StreamBatch& stream_batch, const Aws::Kinesi
     auto& [flow_file, result] = stream_batch.items[i];
     const auto& result_record = result_records[i];
     if (!result_record.GetErrorCode().empty()) {
-      result = nonstd::make_unexpected(BatchItemError{.error_message = result_record.GetErrorMessage(), .error_code = result_record.GetErrorCode()});
+      result = std::unexpected{BatchItemError{.error_message = result_record.GetErrorMessage(), .error_code = result_record.GetErrorCode()}};
     } else {
       result = BatchItemResult{.sequence_number = result_record.GetSequenceNumber(), .shard_id = result_record.GetShardId()};
     }
diff --git a/extensions/aws/processors/PutKinesisStream.h b/extensions/aws/processors/PutKinesisStream.h
index a20d60653..524155b28 100644
--- a/extensions/aws/processors/PutKinesisStream.h
+++ b/extensions/aws/processors/PutKinesisStream.h
@@ -108,7 +108,7 @@ class PutKinesisStream : public AwsProcessor {  // NOLINT(cppcoreguidelines-spec
   };
   struct BatchItem {
     std::shared_ptr<core::FlowFile> flow_file;
-    nonstd::expected<BatchItemResult, BatchItemError> result;
+    std::expected<BatchItemResult, BatchItemError> result;
   };
   struct StreamBatch {
     uint64_t batch_size = 0;
@@ -116,7 +116,7 @@ class PutKinesisStream : public AwsProcessor {  // NOLINT(cppcoreguidelines-spec
     Aws::Kinesis::Model::PutRecordsRequest request;
   };
 
-  nonstd::expected<Aws::Kinesis::Model::PutRecordsRequestEntry, BatchItemError> createEntryFromFlowFile(const core::ProcessContext& context,
+  std::expected<Aws::Kinesis::Model::PutRecordsRequestEntry, BatchItemError> createEntryFromFlowFile(const core::ProcessContext& context,
       core::ProcessSession& session,
       const std::shared_ptr<core::FlowFile>& flow_file) const;
 
diff --git a/extensions/civetweb/processors/ListenHTTP.h b/extensions/civetweb/processors/ListenHTTP.h
index 5952d3236..3c10a4c0d 100644
--- a/extensions/civetweb/processors/ListenHTTP.h
+++ b/extensions/civetweb/processors/ListenHTTP.h
@@ -175,7 +175,7 @@ class ListenHTTP : public core::ProcessorImpl {
       FailureReason reason;
       std::promise<void> ret;
     };
-    using Request = std::promise<nonstd::expected<RequestValue, FailureValue>>;
+    using Request = std::promise<std::expected<RequestValue, FailureValue>>;
 
     Handler(std::string base_uri,
             std::optional<std::string> flow_id,
@@ -211,7 +211,7 @@ class ListenHTTP : public core::ProcessorImpl {
       while (dequeueRequest(req)) {
         std::promise<void> req_done_promise;
         auto req_done = req_done_promise.get_future();
-        req.set_value(nonstd::make_unexpected(FailureValue{Handler::FailureReason::PROCESSOR_SHUTDOWN, std::move(req_done_promise)}));
+        req.set_value(std::unexpected{FailureValue{Handler::FailureReason::PROCESSOR_SHUTDOWN, std::move(req_done_promise)}});
         req_done.wait();
       }
     }
diff --git a/extensions/couchbase/CMakeLists.txt b/extensions/couchbase/CMakeLists.txt
index 3c7ac35e1..632c014e3 100644
--- a/extensions/couchbase/CMakeLists.txt
+++ b/extensions/couchbase/CMakeLists.txt
@@ -21,11 +21,7 @@ if (NOT (ENABLE_ALL OR ENABLE_COUCHBASE))
     return()
 endif()
 
-if (WIN32)
-    include(Couchbase_1_0_2)
-else()
-    include(Couchbase)
-endif()
+include(Couchbase)
 
 include(${CMAKE_SOURCE_DIR}/extensions/ExtensionHeader.txt)
 
@@ -33,8 +29,13 @@ file(GLOB SOURCES  "*.cpp" "controllerservices/*.cpp" "processors/*.cpp")
 
 add_minifi_library(minifi-couchbase SHARED ${SOURCES})
 
-target_include_directories(minifi-couchbase PRIVATE BEFORE "${CMAKE_CURRENT_SOURCE_DIR}" "controllerservices" "processors" ${COUCHBASE_INCLUDE_DIR})
-target_link_libraries(minifi-couchbase ${LIBMINIFI} couchbase_cxx_client_static hdr_histogram_static snappy llhttp::llhttp)
+target_include_directories(minifi-couchbase PRIVATE BEFORE "${CMAKE_CURRENT_SOURCE_DIR}" "controllerservices" "processors")
+target_include_directories(minifi-couchbase SYSTEM PRIVATE ${COUCHBASE_INCLUDE_DIR})
+# Demote preprocessor warnings so <ciso646> doesn't break the build
+if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+    target_compile_options(minifi-couchbase PRIVATE -Wno-error=cpp)
+endif()
+target_link_libraries(minifi-couchbase ${LIBMINIFI} couchbase_cxx_client::couchbase_cxx_client_static hdr_histogram_static snappy llhttp::llhttp taocpp::json)
 
 register_extension(minifi-couchbase "COUCHBASE EXTENSIONS" COUCHBASE-EXTENSIONS "This enables Couchbase support" "extensions/couchbase/tests")
 
diff --git a/extensions/couchbase/controllerservices/CouchbaseClusterService.cpp b/extensions/couchbase/controllerservices/CouchbaseClusterService.cpp
index 6c773a463..7c695bca4 100644
--- a/extensions/couchbase/controllerservices/CouchbaseClusterService.cpp
+++ b/extensions/couchbase/controllerservices/CouchbaseClusterService.cpp
@@ -95,20 +95,20 @@ CouchbaseClient::CouchbaseClient(std::string connection_string, std::string user
   return cluster_options;
 }
 
-nonstd::expected<::couchbase::collection, CouchbaseErrorType> CouchbaseClient::getCollection(const CouchbaseCollection& collection) {
+std::expected<::couchbase::collection, CouchbaseErrorType> CouchbaseClient::getCollection(const CouchbaseCollection& collection) {
   auto connection_result = establishConnection();
   if (!connection_result) {
-    return nonstd::make_unexpected(connection_result.error());
+    return std::unexpected{connection_result.error()};
   }
   std::lock_guard<std::mutex> lock(cluster_mutex_);
   return cluster_->bucket(collection.bucket_name).scope(collection.scope_name).collection(collection.collection_name);
 }
 
-nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> CouchbaseClient::upsert(
+std::expected<CouchbaseUpsertResult, CouchbaseErrorType> CouchbaseClient::upsert(
     const CouchbaseCollection& collection, CouchbaseValueType document_type, const std::string& document_id, const std::vector<std::byte>& buffer, const ::couchbase::upsert_options& options) {
   auto collection_result = getCollection(collection);
   if (!collection_result.has_value()) {
-    return nonstd::make_unexpected(collection_result.error());
+    return std::unexpected{collection_result.error()};
   }
 
   std::pair<::couchbase::error, ::couchbase::mutation_result> result;
@@ -126,11 +126,11 @@ nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> CouchbaseClient::ups
     if (getErrorType(upsert_err.ec()) == CouchbaseErrorType::TEMPORARY && upsert_err.ec().value() != static_cast<int>(::couchbase::errc::common::ambiguous_timeout)) {
       logger_->log_error("Failed to upsert document '{}' to collection '{}.{}.{}' due to temporary issue, error code: '{}', message: '{}'", document_id, collection.bucket_name, collection.scope_name,
           collection.collection_name, upsert_err.ec(), upsert_err.message());
-      return nonstd::make_unexpected(CouchbaseErrorType::TEMPORARY);
+      return std::unexpected{CouchbaseErrorType::TEMPORARY};
     }
     logger_->log_error("Failed to upsert document '{}' to collection '{}.{}.{}' with error code: '{}', message: '{}'", document_id, collection.bucket_name, collection.scope_name,
         collection.collection_name, upsert_err.ec(), upsert_err.message());
-    return nonstd::make_unexpected(CouchbaseErrorType::FATAL);
+    return std::unexpected{CouchbaseErrorType::FATAL};
   } else {
     return CouchbaseUpsertResult {
       {
@@ -144,10 +144,10 @@ nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> CouchbaseClient::ups
   }
 }
 
-nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> CouchbaseClient::get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type) {
+std::expected<CouchbaseGetResult, CouchbaseErrorType> CouchbaseClient::get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type) {
   auto collection_result = getCollection(collection);
   if (!collection_result.has_value()) {
-    return nonstd::make_unexpected(collection_result.error());
+    return std::unexpected{collection_result.error()};
   }
 
   ::couchbase::get_options options;
@@ -156,14 +156,14 @@ nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> CouchbaseClient::get(co
   if (get_err.ec()) {
     if (getErrorType(get_err.ec()) == CouchbaseErrorType::TEMPORARY) {
       logger_->log_error("Failed to get document '{}' from collection '{}.{}.{}' due to timeout", document_id, collection.bucket_name, collection.scope_name, collection.collection_name);
-      return nonstd::make_unexpected(CouchbaseErrorType::TEMPORARY);
+      return std::unexpected{CouchbaseErrorType::TEMPORARY};
     }
     logger_->log_error("Failed to get document '{}' from collection '{}.{}.{}' with error code: '{}', message: '{}'", document_id, collection.bucket_name, collection.scope_name,
         collection.collection_name, get_err.ec(), get_err.message());
     if (get_err.cause()) {
       logger_->log_error("... root cause error code: '{}', message: '{}'", get_err.cause()->ec(), get_err.cause()->message());
     }
-    return nonstd::make_unexpected(CouchbaseErrorType::FATAL);
+    return std::unexpected{CouchbaseErrorType::FATAL};
   } else {
     try {
       CouchbaseGetResult result;
@@ -183,7 +183,7 @@ nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> CouchbaseClient::get(co
     } catch (const std::exception& ex) {
       logger_->log_error("Failed to get content for document '{}' from collection '{}.{}.{}' with the following exception: '{}'", document_id, collection.bucket_name, collection.scope_name,
           collection.collection_name, ex.what());
-      return nonstd::make_unexpected(CouchbaseErrorType::FATAL);
+      return std::unexpected{CouchbaseErrorType::FATAL};
     }
   }
 }
@@ -196,7 +196,7 @@ void CouchbaseClient::close() {
   cluster_ = std::nullopt;
 }
 
-nonstd::expected<void, CouchbaseErrorType> CouchbaseClient::establishConnection() {
+std::expected<void, CouchbaseErrorType> CouchbaseClient::establishConnection() {
   std::lock_guard<std::mutex> lock(cluster_mutex_);
   if (cluster_) {
     return {};
@@ -205,7 +205,7 @@ nonstd::expected<void, CouchbaseErrorType> CouchbaseClient::establishConnection(
   auto [connect_err, cluster] = ::couchbase::cluster::connect(connection_string_, cluster_options_).get();
   if (connect_err.ec()) {
     logger_->log_error("Failed to connect to Couchbase cluster with error code: '{}' and message: '{}'", connect_err.ec(), connect_err.message());
-    return nonstd::make_unexpected(getErrorType(connect_err.ec()));
+    return std::unexpected{getErrorType(connect_err.ec())};
   }
 
   cluster_ = std::move(cluster);
diff --git a/extensions/couchbase/controllerservices/CouchbaseClusterService.h b/extensions/couchbase/controllerservices/CouchbaseClusterService.h
index f6cdddc52..3ae92029d 100644
--- a/extensions/couchbase/controllerservices/CouchbaseClusterService.h
+++ b/extensions/couchbase/controllerservices/CouchbaseClusterService.h
@@ -82,15 +82,15 @@ class CouchbaseClient {
   CouchbaseClient& operator=(CouchbaseClient&&) = delete;
   CouchbaseClient& operator=(const CouchbaseClient&) = delete;
 
-  nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type, const std::string& document_id,
+  std::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type, const std::string& document_id,
     const std::vector<std::byte>& buffer, const ::couchbase::upsert_options& options);
-  nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type);
-  nonstd::expected<void, CouchbaseErrorType> establishConnection();
+  std::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type);
+  std::expected<void, CouchbaseErrorType> establishConnection();
   void close();
 
  private:
   ::couchbase::cluster_options buildClusterOptions(std::string username, std::string password, minifi::controllers::SSLContextServiceInterface* ssl_context_service);
-  nonstd::expected<::couchbase::collection, CouchbaseErrorType> getCollection(const CouchbaseCollection& collection);
+  std::expected<::couchbase::collection, CouchbaseErrorType> getCollection(const CouchbaseCollection& collection);
 
   std::string connection_string_;
   std::shared_ptr<core::logging::Logger> logger_;
@@ -140,13 +140,13 @@ class CouchbaseClusterService : public core::controller::ControllerServiceBase,
 
   [[nodiscard]] ControllerServiceHandle* getControllerServiceHandle() override {return this;}
 
-  virtual nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type,
+  virtual std::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type,
       const std::string& document_id, const std::vector<std::byte>& buffer, const ::couchbase::upsert_options& options) {
     gsl_Expects(client_);
     return client_->upsert(collection, document_type, document_id, buffer, options);
   }
 
-  virtual nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type) {
+  virtual std::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType return_type) {
     gsl_Expects(client_);
     return client_->get(collection, document_id, return_type);
   }
diff --git a/extensions/couchbase/tests/CMakeLists.txt b/extensions/couchbase/tests/CMakeLists.txt
index 18caaeff0..d611fd138 100644
--- a/extensions/couchbase/tests/CMakeLists.txt
+++ b/extensions/couchbase/tests/CMakeLists.txt
@@ -29,6 +29,10 @@ FOREACH(testfile ${COUCHBASE_TESTS})
     target_include_directories(${testfilename} PRIVATE BEFORE "${CMAKE_SOURCE_DIR}/extensions/couchbase/")
     target_include_directories(${testfilename} PRIVATE BEFORE "${COUCHBASE_INCLUDE_DIR}")
 
+    # Demote preprocessor warnings so <ciso646> doesn't break the build
+    if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
+        target_compile_options(${testfilename} PRIVATE -Wno-error=cpp)
+    endif()
     createTests("${testfilename}")
     target_link_libraries(${testfilename} Catch2WithMain)
     target_link_libraries(${testfilename} minifi-couchbase)
diff --git a/extensions/couchbase/tests/MockCouchbaseClusterService.h b/extensions/couchbase/tests/MockCouchbaseClusterService.h
index 6566e85d4..e36532b55 100644
--- a/extensions/couchbase/tests/MockCouchbaseClusterService.h
+++ b/extensions/couchbase/tests/MockCouchbaseClusterService.h
@@ -53,7 +53,7 @@ class MockCouchbaseClusterService : public controllers::CouchbaseClusterService
   void onEnable() override {}
   void notifyStop() override {}
 
-  nonstd::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type, const std::string& document_id,
+  std::expected<CouchbaseUpsertResult, CouchbaseErrorType> upsert(const CouchbaseCollection& collection, CouchbaseValueType document_type, const std::string& document_id,
       const std::vector<std::byte>& buffer, const ::couchbase::upsert_options& options) override {
     collection_ = collection;
     upsert_parameters_.document_type = document_type;
@@ -62,19 +62,19 @@ class MockCouchbaseClusterService : public controllers::CouchbaseClusterService
     upsert_parameters_.options = options;
 
     if (upsert_error_) {
-      return nonstd::make_unexpected(*upsert_error_);
+      return std::unexpected{*upsert_error_};
     } else {
       return CouchbaseUpsertResult{{collection_.bucket_name, COUCHBASE_PUT_RESULT_CAS}, COUCHBASE_PUT_RESULT_SEQUENCE_NUMBER, COUCHBASE_PUT_RESULT_PARTITION_UUID, COUCHBASE_PUT_RESULT_PARTITION_ID};
     }
   }
 
-  nonstd::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType document_type) override {
+  std::expected<CouchbaseGetResult, CouchbaseErrorType> get(const CouchbaseCollection& collection, const std::string& document_id, CouchbaseValueType document_type) override {
     collection_ = collection;
     get_parameters_.document_id = document_id;
     get_parameters_.document_type = document_type;
 
     if (get_error_) {
-      return nonstd::make_unexpected(*get_error_);
+      return std::unexpected{*get_error_};
     } else {
       if (document_type == CouchbaseValueType::String) {
         return CouchbaseGetResult{{collection_.bucket_name, COUCHBASE_GET_RESULT_CAS}, COUCHBASE_GET_RESULT_EXPIRY, COUCHBASE_GET_RESULT_CONTENT};
diff --git a/extensions/elasticsearch/PostElasticsearch.cpp b/extensions/elasticsearch/PostElasticsearch.cpp
index b734f4306..bd80eef85 100644
--- a/extensions/elasticsearch/PostElasticsearch.cpp
+++ b/extensions/elasticsearch/PostElasticsearch.cpp
@@ -76,25 +76,25 @@ class ElasticPayload {
     return result;
   }
 
-  static nonstd::expected<ElasticPayload, std::string> parse(core::ProcessSession& session, core::ProcessContext& context, const std::shared_ptr<core::FlowFile>& flow_file) {
+  static std::expected<ElasticPayload, std::string> parse(core::ProcessSession& session, core::ProcessContext& context, const std::shared_ptr<core::FlowFile>& flow_file) {
     auto action = context.getProperty(PostElasticsearch::Action, flow_file.get());
     if (!action || (action != "index" && action != "create" && action != "delete" && action != "update" && action != "upsert"))
-      return nonstd::make_unexpected("Missing or invalid action");
+      return std::unexpected{"Missing or invalid action"};
 
     auto index = context.getProperty(PostElasticsearch::Index, flow_file.get());
     if (!index)
-      return nonstd::make_unexpected("Missing index");
+      return std::unexpected{"Missing index"};
 
     auto id = context.getProperty(PostElasticsearch::Identifier, flow_file.get()) | utils::toOptional();
     if (!id && (action == "delete" || action == "update" || action == "upsert"))
-      return nonstd::make_unexpected("Identifier is required for DELETE,UPDATE and UPSERT actions");
+      return std::unexpected{"Identifier is required for DELETE,UPDATE and UPSERT actions"};
 
     std::optional<rapidjson::Document> payload;
     if (action == "index" || action == "create") {
       payload = rapidjson::Document(rapidjson::kObjectType);
       utils::JsonInputCallback callback(*payload);
       if (session.read(flow_file, std::ref(callback)) < 0) {
-        return nonstd::make_unexpected("invalid flowfile content");
+        return std::unexpected{"invalid flowfile content"};
       }
     }
     if (action == "update" || action == "upsert") {
@@ -102,7 +102,7 @@ class ElasticPayload {
       rapidjson::Document doc_member(rapidjson::kObjectType, &payload->GetAllocator());
       utils::JsonInputCallback callback(doc_member);
       if (session.read(flow_file, std::ref(callback)) < 0) {
-        return nonstd::make_unexpected("invalid flowfile content");
+        return std::unexpected{"invalid flowfile content"};
       }
       if (action == "upsert") {
         action = "update";
@@ -152,21 +152,21 @@ class ElasticPayload {
   std::optional<rapidjson::Document> payload_;
 };
 
-nonstd::expected<rapidjson::Document, std::string> submitRequest(http::HTTPClient& client, const std::string& payload, const size_t expected_items) {
+std::expected<rapidjson::Document, std::string> submitRequest(http::HTTPClient& client, const std::string& payload, const size_t expected_items) {
   client.setPostFields(payload);
   if (!client.submit())
-    return nonstd::make_unexpected("Submit failed");
+    return std::unexpected{"Submit failed"};
   auto response_code = client.getResponseCode();
   if (response_code != 200)
-    return nonstd::make_unexpected("Error occurred: " + std::to_string(response_code) + ", " + client.getResponseBody().data());
+    return std::unexpected{"Error occurred: " + std::to_string(response_code) + ", " + client.getResponseBody().data()};
   rapidjson::Document response;
   rapidjson::ParseResult parse_result = response.Parse<rapidjson::kParseStopWhenDoneFlag>(client.getResponseBody().data());
   if (parse_result.IsError())
-    return nonstd::make_unexpected("Response is not valid json");
+    return std::unexpected{"Response is not valid json"};
   if (!response.HasMember("items"))
-    return nonstd::make_unexpected("Response is invalid");
+    return std::unexpected{"Response is invalid"};
   if (response["items"].Size() != expected_items)
-    return nonstd::make_unexpected("The number of responses dont match the number of requests");
+    return std::unexpected{"The number of responses dont match the number of requests"};
 
   return response;
 }
diff --git a/extensions/grafana-loki/PushGrafanaLoki.h b/extensions/grafana-loki/PushGrafanaLoki.h
index d44669074..35f6bc088 100644
--- a/extensions/grafana-loki/PushGrafanaLoki.h
+++ b/extensions/grafana-loki/PushGrafanaLoki.h
@@ -134,7 +134,7 @@ class PushGrafanaLoki : public core::ProcessorImpl {
   static std::map<std::string, std::string> buildStreamLabelMap(core::ProcessContext& context);
 
   void processBatch(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session);
-  virtual nonstd::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) = 0;
+  virtual std::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) = 0;
   void initializeHttpClient(core::ProcessContext& context);
   void restoreStartPushTime(core::ProcessContext& context);
   virtual void setUpStreamLabels(core::ProcessContext& context) = 0;
diff --git a/extensions/grafana-loki/PushGrafanaLokiGrpc.cpp b/extensions/grafana-loki/PushGrafanaLokiGrpc.cpp
index 932c218d2..53428988f 100644
--- a/extensions/grafana-loki/PushGrafanaLokiGrpc.cpp
+++ b/extensions/grafana-loki/PushGrafanaLokiGrpc.cpp
@@ -109,7 +109,7 @@ void PushGrafanaLokiGrpc::onSchedule(core::ProcessContext& context, core::Proces
   setUpGrpcChannel(url, context);
 }
 
-nonstd::expected<void, std::string> PushGrafanaLokiGrpc::submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) {
+std::expected<void, std::string> PushGrafanaLokiGrpc::submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) {
   logproto::PushRequest current_batch;
   logproto::StreamAdapter *stream = current_batch.add_streams();
   stream->set_labels(stream_labels_);
@@ -135,7 +135,7 @@ nonstd::expected<void, std::string> PushGrafanaLokiGrpc::submitRequest(const std
   }
 
   if (!push_channel_->WaitForConnected(std::chrono::system_clock::now() + connection_timeout_ms_)) {
-    return nonstd::make_unexpected("Timeout waiting for connection to Grafana Loki gRPC server. Please check if the server is running and reachable and the Url value is correct.");
+    return std::unexpected{"Timeout waiting for connection to Grafana Loki gRPC server. Please check if the server is running and reachable and the Url value is correct."};
   }
 
   logproto::PushResponse response;
@@ -148,7 +148,7 @@ nonstd::expected<void, std::string> PushGrafanaLokiGrpc::submitRequest(const std
   if (status.ok()) {
     return {};
   } else {
-    return nonstd::make_unexpected(status.error_message());
+    return std::unexpected{status.error_message()};
   }
 }
 
diff --git a/extensions/grafana-loki/PushGrafanaLokiGrpc.h b/extensions/grafana-loki/PushGrafanaLokiGrpc.h
index 9d9726648..8ba3e0db9 100644
--- a/extensions/grafana-loki/PushGrafanaLokiGrpc.h
+++ b/extensions/grafana-loki/PushGrafanaLokiGrpc.h
@@ -58,7 +58,7 @@ class PushGrafanaLokiGrpc final : public PushGrafanaLoki {
 
  protected:
   void setUpStreamLabels(core::ProcessContext& context) override;
-  nonstd::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) override;
+  std::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) override;
   void setUpGrpcChannel(const std::string& url, core::ProcessContext& context);
 
   std::string stream_labels_;
diff --git a/extensions/grafana-loki/PushGrafanaLokiREST.cpp b/extensions/grafana-loki/PushGrafanaLokiREST.cpp
index 8b421dbb7..fd01e15d4 100644
--- a/extensions/grafana-loki/PushGrafanaLokiREST.cpp
+++ b/extensions/grafana-loki/PushGrafanaLokiREST.cpp
@@ -158,15 +158,15 @@ std::string PushGrafanaLokiREST::createLokiJson(const std::vector<std::shared_pt
   return buffer.GetString();
 }
 
-nonstd::expected<void, std::string> PushGrafanaLokiREST::submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) {
+std::expected<void, std::string> PushGrafanaLokiREST::submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) {
   auto loki_json = createLokiJson(batched_flow_files, session);
   client_.setPostFields(loki_json);
   if (!client_.submit()) {
-    return nonstd::make_unexpected("Submit failed");
+    return std::unexpected{"Submit failed"};
   }
   auto response_code = client_.getResponseCode();
   if (response_code < 200 || response_code >= 300) {
-    return nonstd::make_unexpected("Error occurred: " + std::to_string(response_code));
+    return std::unexpected{"Error occurred: " + std::to_string(response_code)};
   }
   return {};
 }
diff --git a/extensions/grafana-loki/PushGrafanaLokiREST.h b/extensions/grafana-loki/PushGrafanaLokiREST.h
index 93448b09c..62bac0ea5 100644
--- a/extensions/grafana-loki/PushGrafanaLokiREST.h
+++ b/extensions/grafana-loki/PushGrafanaLokiREST.h
@@ -59,7 +59,7 @@ class PushGrafanaLokiREST : public PushGrafanaLoki {
 
  protected:
   std::string createLokiJson(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) const;
-  nonstd::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) override;
+  std::expected<void, std::string> submitRequest(const std::vector<std::shared_ptr<core::FlowFile>>& batched_flow_files, core::ProcessSession& session) override;
   void initializeHttpClient(core::ProcessContext& context);
   void setUpStreamLabels(core::ProcessContext& context) override;
   void setupClientTimeouts(const core::ProcessContext& context);
diff --git a/extensions/kubernetes/MetricsApi.cpp b/extensions/kubernetes/MetricsApi.cpp
index f392079c9..fbcfb7a9c 100644
--- a/extensions/kubernetes/MetricsApi.cpp
+++ b/extensions/kubernetes/MetricsApi.cpp
@@ -32,13 +32,13 @@ using genericClient_unique_ptr = std::unique_ptr<genericClient_t, genericClient_
 
 namespace org::apache::nifi::minifi::kubernetes::metrics {
 
-nonstd::expected<std::string, std::string> podMetricsList(const kubernetes::ApiClient& api_client) {
+std::expected<std::string, std::string> podMetricsList(const kubernetes::ApiClient& api_client) {
   genericClient_unique_ptr genericClient{genericClient_create(api_client.getClient(), "metrics.k8s.io", "v1beta1", "pods")};
   utils::freeing_unique_ptr<char> api_response{Generic_list(genericClient.get())};
   if (api_response) {
     return std::string{api_response.get()};
   } else {
-    return nonstd::make_unexpected("Could not access the Kubernetes API /apis/metrics.k8s.io/v1beta1/pods");
+    return std::unexpected{"Could not access the Kubernetes API /apis/metrics.k8s.io/v1beta1/pods"};
   }
 }
 
diff --git a/extensions/kubernetes/MetricsApi.h b/extensions/kubernetes/MetricsApi.h
index bcbfad65a..f0ff656d1 100644
--- a/extensions/kubernetes/MetricsApi.h
+++ b/extensions/kubernetes/MetricsApi.h
@@ -24,6 +24,6 @@
 
 namespace org::apache::nifi::minifi::kubernetes::metrics {
 
-nonstd::expected<std::string, std::string> podMetricsList(const kubernetes::ApiClient& api_client);
+std::expected<std::string, std::string> podMetricsList(const kubernetes::ApiClient& api_client);
 
 }  // namespace org::apache::nifi::minifi::kubernetes::metrics
diff --git a/extensions/kubernetes/MetricsFilter.cpp b/extensions/kubernetes/MetricsFilter.cpp
index 5538582cb..98a5ff62b 100644
--- a/extensions/kubernetes/MetricsFilter.cpp
+++ b/extensions/kubernetes/MetricsFilter.cpp
@@ -24,16 +24,16 @@
 
 namespace org::apache::nifi::minifi::kubernetes::metrics {
 
-nonstd::expected<std::string, std::string> filter(const std::string& metrics_json, const std::function<bool(const kubernetes::ContainerInfo&)>& filter_function) {
+std::expected<std::string, std::string> filter(const std::string& metrics_json, const std::function<bool(const kubernetes::ContainerInfo&)>& filter_function) {
   rapidjson::Document document;
   rapidjson::ParseResult parse_result = document.Parse<rapidjson::kParseStopWhenDoneFlag>(metrics_json.data());
   if (parse_result.IsError()) {
-    return nonstd::make_unexpected(utils::string::join_pack("Error parsing the metrics received from the Kubernetes API at offset ",
-        std::to_string(parse_result.Offset()), ": ", rapidjson::GetParseError_En(parse_result.Code())));
+    return std::unexpected{utils::string::join_pack("Error parsing the metrics received from the Kubernetes API at offset ",
+        std::to_string(parse_result.Offset()), ": ", rapidjson::GetParseError_En(parse_result.Code()))};
   }
 
   if (!document.HasMember("items") || !document["items"].IsArray()) {
-    return nonstd::make_unexpected("Unexpected JSON received from the Kubernetes API: missing list of 'items'");
+    return std::unexpected{"Unexpected JSON received from the Kubernetes API: missing list of 'items'"};
   }
 
   rapidjson::Value& pods = document["items"];
diff --git a/extensions/kubernetes/MetricsFilter.h b/extensions/kubernetes/MetricsFilter.h
index 3ed60131a..709f0e4f3 100644
--- a/extensions/kubernetes/MetricsFilter.h
+++ b/extensions/kubernetes/MetricsFilter.h
@@ -24,7 +24,7 @@
 
 namespace org::apache::nifi::minifi::kubernetes::metrics {
 
-[[nodiscard]] nonstd::expected<std::string, std::string> filter(
+[[nodiscard]] std::expected<std::string, std::string> filter(
     const std::string& metrics_json,
     const std::function<bool(const kubernetes::ContainerInfo&)>& filter_function);
 
diff --git a/extensions/llamacpp/processors/DefaultLlamaContext.cpp b/extensions/llamacpp/processors/DefaultLlamaContext.cpp
index cc8fb017d..23559fb7c 100644
--- a/extensions/llamacpp/processors/DefaultLlamaContext.cpp
+++ b/extensions/llamacpp/processors/DefaultLlamaContext.cpp
@@ -108,7 +108,7 @@ std::optional<std::string> DefaultLlamaContext::applyTemplate(const std::vector<
   return text;
 }
 
-nonstd::expected<GenerationResult, std::string> DefaultLlamaContext::generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) {
+std::expected<GenerationResult, std::string> DefaultLlamaContext::generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) {
   GenerationResult result{};
   auto start_time = std::chrono::steady_clock::now();
   const llama_vocab * vocab = llama_model_get_vocab(llama_model_);
@@ -121,9 +121,9 @@ nonstd::expected<GenerationResult, std::string> DefaultLlamaContext::generate(co
   while (true) {
     int32_t res = llama_decode(llama_ctx_, batch);
     if (res == 1) {
-      return nonstd::make_unexpected("Could not find a KV slot for the batch (try reducing the size of the batch or increase the context)");
+      return std::unexpected{"Could not find a KV slot for the batch (try reducing the size of the batch or increase the context)"};
     } else if (res < 0) {
-      return nonstd::make_unexpected("Error occurred while executing llama decode");
+      return std::unexpected{"Error occurred while executing llama decode"};
     }
 
     new_token_id = llama_sampler_sample(llama_sampler_, llama_ctx_, -1);
@@ -142,7 +142,7 @@ nonstd::expected<GenerationResult, std::string> DefaultLlamaContext::generate(co
     std::array<char, 128> buf{};
     int32_t len = llama_token_to_piece(vocab, new_token_id, buf.data(), gsl::narrow<int32_t>(buf.size()), 0, true);
     if (len < 0) {
-      return nonstd::make_unexpected("Failed to convert token to text");
+      return std::unexpected{"Failed to convert token to text"};
     }
     gsl_Assert(len < 128);
 
diff --git a/extensions/llamacpp/processors/DefaultLlamaContext.h b/extensions/llamacpp/processors/DefaultLlamaContext.h
index 2d2bdf562..94c3346b2 100644
--- a/extensions/llamacpp/processors/DefaultLlamaContext.h
+++ b/extensions/llamacpp/processors/DefaultLlamaContext.h
@@ -32,7 +32,7 @@ class DefaultLlamaContext : public LlamaContext {
   ~DefaultLlamaContext() override;
 
   std::optional<std::string> applyTemplate(const std::vector<LlamaChatMessage>& messages) override;
-  nonstd::expected<GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) override;
+  std::expected<GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) override;
 
  private:
   const LlamaBackendInitializer& llama_context_initializer_ = LlamaBackendInitializer::get();
diff --git a/extensions/llamacpp/processors/LlamaContext.h b/extensions/llamacpp/processors/LlamaContext.h
index 3c107c2c5..a7cd2eb44 100644
--- a/extensions/llamacpp/processors/LlamaContext.h
+++ b/extensions/llamacpp/processors/LlamaContext.h
@@ -59,7 +59,7 @@ struct GenerationResult {
 class LlamaContext {
  public:
   virtual std::optional<std::string> applyTemplate(const std::vector<LlamaChatMessage>& messages) = 0;
-  virtual nonstd::expected<GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) = 0;
+  virtual std::expected<GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) = 0;
   virtual ~LlamaContext() = default;
 };
 
diff --git a/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp b/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp
index 13754f1f5..9fa893fba 100644
--- a/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp
+++ b/extensions/llamacpp/tests/RunLlamaCppInferenceTests.cpp
@@ -37,9 +37,9 @@ class MockLlamaContext : public processors::LlamaContext {
     return "Test input";
   }
 
-  nonstd::expected<processors::GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) override {
+  std::expected<processors::GenerationResult, std::string> generate(const std::string& input, std::function<void(std::string_view/*token*/)> token_handler) override {
     if (fail_generation_) {
-      return nonstd::make_unexpected("Generation failed");
+      return std::unexpected{"Generation failed"};
     }
     processors::GenerationResult result;
     input_ = input;
diff --git a/extensions/mqtt/processors/PublishMQTT.cpp b/extensions/mqtt/processors/PublishMQTT.cpp
index 24bc72e90..576bf98e6 100644
--- a/extensions/mqtt/processors/PublishMQTT.cpp
+++ b/extensions/mqtt/processors/PublishMQTT.cpp
@@ -65,7 +65,7 @@ void PublishMQTT::onTriggerImpl(core::ProcessContext& context, core::ProcessSess
 
   std::vector<std::shared_ptr<core::FlowFile>> flow_files;
   if (record_converter_) {
-    nonstd::expected<core::RecordSet, std::error_code> record_set;
+    std::expected<core::RecordSet, std::error_code> record_set;
     session.read(original_flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
       record_set = record_converter_->record_set_reader->read(*input_stream);
       return io::IoResult::from(input_stream->size());
diff --git a/extensions/opc/include/putopc.h b/extensions/opc/include/putopc.h
index d98ac23b9..5aba702b8 100644
--- a/extensions/opc/include/putopc.h
+++ b/extensions/opc/include/putopc.h
@@ -118,7 +118,7 @@ class PutOPCProcessor final : public BaseOPCProcessor {
 
  private:
   bool readParentNodeId();
-  nonstd::expected<std::pair<bool, UA_NodeId>, std::string> configureTargetNode(core::ProcessContext& context, core::FlowFile& flow_file) const;
+  std::expected<std::pair<bool, UA_NodeId>, std::string> configureTargetNode(core::ProcessContext& context, core::FlowFile& flow_file) const;
   void updateNode(const UA_NodeId& target_node, const std::string& contentstr, core::ProcessSession& session, const std::shared_ptr<core::FlowFile>& flow_file) const;
   void createNode(const UA_NodeId& target_node, const std::string& contentstr, core::ProcessContext& context, core::ProcessSession& session, const std::shared_ptr<core::FlowFile>& flow_file) const;
 
diff --git a/extensions/opc/src/putopc.cpp b/extensions/opc/src/putopc.cpp
index 1d6247571..e253d6765 100644
--- a/extensions/opc/src/putopc.cpp
+++ b/extensions/opc/src/putopc.cpp
@@ -88,29 +88,29 @@ bool PutOPCProcessor::readParentNodeId() {
   return true;
 }
 
-nonstd::expected<std::pair<bool, UA_NodeId>, std::string> PutOPCProcessor::configureTargetNode(core::ProcessContext& context, core::FlowFile& flow_file) const {
+std::expected<std::pair<bool, UA_NodeId>, std::string> PutOPCProcessor::configureTargetNode(core::ProcessContext& context, core::FlowFile& flow_file) const {
   const auto namespaceidx = context.getProperty(TargetNodeNameSpaceIndex, &flow_file).value_or("");
   if (namespaceidx.empty()) {
-    return nonstd::make_unexpected(fmt::format("Flowfile {} had no target namespace index specified, routing to failure!", flow_file.getUUIDStr()));
+    return std::unexpected{fmt::format("Flowfile {} had no target namespace index specified, routing to failure!", flow_file.getUUIDStr())};
   }
   int32_t nsi = 0;
   try {
     nsi = std::stoi(namespaceidx);
   } catch (const std::exception&) {
-    return nonstd::make_unexpected(fmt::format("Flowfile {} has invalid namespace index ({}), routing to failure!",
-                                   flow_file.getUUIDStr(), namespaceidx));
+    return std::unexpected{fmt::format("Flowfile {} has invalid namespace index ({}), routing to failure!",
+                                   flow_file.getUUIDStr(), namespaceidx)};
   }
 
   const auto target_id_type = context.getProperty(TargetNodeIDType, &flow_file).value_or("");
   if (target_id_type.empty()) {
-    return nonstd::make_unexpected(fmt::format("Flowfile {} has invalid target node id type, routing to failure!",
-                                   flow_file.getUUIDStr()));
+    return std::unexpected{fmt::format("Flowfile {} has invalid target node id type, routing to failure!",
+                                   flow_file.getUUIDStr())};
   }
 
   const auto target_id = context.getProperty(TargetNodeID, &flow_file).value_or("");
   if (target_id.empty()) {
-    return nonstd::make_unexpected(fmt::format("Flowfile {} had target node ID type specified ({}) without ID, routing to failure!",
-                                    flow_file.getUUIDStr(), target_id_type));
+    return std::unexpected{fmt::format("Flowfile {} had target node ID type specified ({}) without ID, routing to failure!",
+                                    flow_file.getUUIDStr(), target_id_type)};
   }
 
   UA_NodeId target_node;
@@ -120,15 +120,15 @@ nonstd::expected<std::pair<bool, UA_NodeId>, std::string> PutOPCProcessor::confi
     try {
       target_node.identifier.numeric = std::stoi(target_id);  // NOLINT(cppcoreguidelines-pro-type-union-access)
     } catch (const std::exception&) {
-      return nonstd::make_unexpected(fmt::format("Flowfile {}: target node ID is not a valid integer: {}. Routing to failure!",
-                                      flow_file.getUUIDStr(), target_id));
+      return std::unexpected{fmt::format("Flowfile {}: target node ID is not a valid integer: {}. Routing to failure!",
+                                      flow_file.getUUIDStr(), target_id)};
     }
   } else if (target_id_type == "String") {
     target_node.identifierType = UA_NODEIDTYPE_STRING;
     target_node.identifier.string = UA_STRING_ALLOC(target_id.c_str());  // NOLINT(cppcoreguidelines-pro-type-union-access)
   } else {
-    return nonstd::make_unexpected(fmt::format("Flowfile {}: target node ID type is invalid: {}. Routing to failure!",
-                                    flow_file.getUUIDStr(), target_id_type));
+    return std::unexpected{fmt::format("Flowfile {}: target node ID type is invalid: {}. Routing to failure!",
+                                    flow_file.getUUIDStr(), target_id_type)};
   }
   return std::make_pair(connection_->exists(target_node), target_node);
 }
diff --git a/extensions/python/types/PyRecordSetReader.cpp b/extensions/python/types/PyRecordSetReader.cpp
index 815d2d642..2e9a25aaa 100644
--- a/extensions/python/types/PyRecordSetReader.cpp
+++ b/extensions/python/types/PyRecordSetReader.cpp
@@ -86,7 +86,7 @@ PyObject* PyRecordSetReader::read(PyRecordSetReader* self, PyObject* args) {
     return nullptr;
   }
 
-  nonstd::expected<core::RecordSet, std::error_code> read_result;
+  std::expected<core::RecordSet, std::error_code> read_result;
   process_session->getSession().read(flow_file, [&record_set_reader, &read_result](const std::shared_ptr<io::InputStream>& input_stream) {
     read_result = record_set_reader->read(*input_stream);
     return io::IoResult::from(input_stream->size());
diff --git a/extensions/rocksdb-repos/FlowFileLoader.cpp b/extensions/rocksdb-repos/FlowFileLoader.cpp
index 07b413739..c43438071 100644
--- a/extensions/rocksdb-repos/FlowFileLoader.cpp
+++ b/extensions/rocksdb-repos/FlowFileLoader.cpp
@@ -50,7 +50,7 @@ std::future<FlowFileLoader::FlowFilePtrVec> FlowFileLoader::load(std::vector<Swa
   // the dummy_future is for the return value of the Worker's lambda, rerunning this lambda
   // depends on run_determinant + result
   // we could create a custom run_determinant to instead determine if/when it should be rerun
-  // based on the lambda's return value (e.g. it could return a nonstd::expected<FlowFilePtrVec, TaskRescheduleInfo>)
+  // based on the lambda's return value (e.g. it could return a std::expected<FlowFilePtrVec, TaskRescheduleInfo>)
   // but then the std::future would also bear this type
   std::future<utils::TaskRescheduleInfo> dummy_future;
   thread_pool_.execute(std::move(task), dummy_future);
diff --git a/extensions/smb/SmbConnectionControllerService.cpp b/extensions/smb/SmbConnectionControllerService.cpp
index 3a9c930a5..a2b212912 100644
--- a/extensions/smb/SmbConnectionControllerService.cpp
+++ b/extensions/smb/SmbConnectionControllerService.cpp
@@ -59,7 +59,7 @@ void SmbConnectionControllerService::notifyStop() {
     logger_->log_error("Error while disconnecting from SMB: {}", disconnection_result.error().message());
 }
 
-nonstd::expected<void, std::error_code> SmbConnectionControllerService::connect() {
+std::expected<void, std::error_code> SmbConnectionControllerService::connect() {
   auto connection_result = WNetAddConnection2A(&net_resource_,
       credentials_ ? credentials_->password.c_str() : nullptr,
       credentials_ ? credentials_->username.c_str() : nullptr,
@@ -67,15 +67,15 @@ nonstd::expected<void, std::error_code> SmbConnectionControllerService::connect(
   if (connection_result == NO_ERROR)
     return {};
 
-  return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(connection_result));
+  return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(connection_result)};
 }
 
-nonstd::expected<void, std::error_code> SmbConnectionControllerService::disconnect() {
+std::expected<void, std::error_code> SmbConnectionControllerService::disconnect() {
   auto disconnection_result = WNetCancelConnection2A(server_path_.c_str(), 0, true);
   if (disconnection_result == NO_ERROR)
     return {};
 
-  return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(disconnection_result));
+  return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(disconnection_result)};
 }
 
 bool SmbConnectionControllerService::isConnected() {
diff --git a/extensions/smb/SmbConnectionControllerService.h b/extensions/smb/SmbConnectionControllerService.h
index 22894badc..f84728974 100644
--- a/extensions/smb/SmbConnectionControllerService.h
+++ b/extensions/smb/SmbConnectionControllerService.h
@@ -84,8 +84,8 @@ class SmbConnectionControllerService : public core::controller::ControllerServic
   virtual std::filesystem::path getPath() const { return server_path_; }
 
  private:
-  nonstd::expected<void, std::error_code> connect();
-  nonstd::expected<void, std::error_code> disconnect();
+  std::expected<void, std::error_code> connect();
+  std::expected<void, std::error_code> disconnect();
   bool isConnected();
 
   struct Credentials {
diff --git a/extensions/smb/tests/utils/MockSmbConnectionControllerService.h b/extensions/smb/tests/utils/MockSmbConnectionControllerService.h
index bc158df48..8698fa3b1 100644
--- a/extensions/smb/tests/utils/MockSmbConnectionControllerService.h
+++ b/extensions/smb/tests/utils/MockSmbConnectionControllerService.h
@@ -73,7 +73,7 @@ class MockSmbConnectionControllerService : public SmbConnectionControllerService
 
   void setPath(std::filesystem::path path) { server_path_ = std::move(path);}
 
-  nonstd::expected<ListSmbExpectedAttributes, std::error_code> addFile(const std::filesystem::path& relative_path,
+  std::expected<ListSmbExpectedAttributes, std::error_code> addFile(const std::filesystem::path& relative_path,
       std::string_view content,
       std::chrono::file_clock::duration age) {
     auto full_path = getPath() / relative_path;
@@ -81,13 +81,13 @@ class MockSmbConnectionControllerService : public SmbConnectionControllerService
     {
       std::ofstream out_file(full_path, std::ios::binary | std::ios::out);
       if (!out_file.is_open())
-        return nonstd::make_unexpected(std::make_error_code(std::errc::bad_file_descriptor));
+        return std::unexpected{std::make_error_code(std::errc::bad_file_descriptor)};
       out_file << content;
     }
     auto current_time = std::chrono::system_clock::now();
     auto last_write_time_error = utils::file::set_last_write_time(full_path, minifi::utils::file::from_sys(current_time) - age);
     if (!last_write_time_error)
-      return nonstd::make_unexpected(std::make_error_code(std::errc::bad_file_descriptor));
+      return std::unexpected{std::make_error_code(std::errc::bad_file_descriptor)};
     auto path = relative_path.parent_path().empty() ? (std::filesystem::path(".") / "").string() : (relative_path.parent_path() / "").string();
     return ListSmbExpectedAttributes{
         .expected_filename = relative_path.filename().string(),
diff --git a/extensions/smb/tests/utils/TempSmbShare.h b/extensions/smb/tests/utils/TempSmbShare.h
index 170261a6e..e43690f0f 100644
--- a/extensions/smb/tests/utils/TempSmbShare.h
+++ b/extensions/smb/tests/utils/TempSmbShare.h
@@ -40,7 +40,7 @@ class TempSmbShare {
       NetShareDel(nullptr, net_name_.data(), 0);
   }
 
-  static nonstd::expected<TempSmbShare, std::error_code> create(std::wstring net_name, std::wstring path) {
+  static std::expected<TempSmbShare, std::error_code> create(std::wstring net_name, std::wstring path) {
     std::wstring remark = L"SMB share to test SMB capabilities of minifi";
     SHARE_INFO_502 share_info = {
         .shi502_netname = net_name.data(),
@@ -59,7 +59,7 @@ class TempSmbShare {
     if (netshare_result == NERR_Success) {
       return TempSmbShare(std::move(net_name), std::move(path));
     }
-    return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(netshare_result));
+    return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(netshare_result)};
   }
 
   std::filesystem::path getPath() const {
diff --git a/extensions/sql/CMakeLists.txt b/extensions/sql/CMakeLists.txt
index b6801df7d..849426f12 100644
--- a/extensions/sql/CMakeLists.txt
+++ b/extensions/sql/CMakeLists.txt
@@ -53,7 +53,7 @@ else()
         CMAKE_COMMAND ""
         UPDATE_COMMAND ""
         INSTALL_COMMAND make install
-        CONFIGURE_COMMAND ./autogen.sh && ./configure --prefix=${IODBC_BYPRODUCT_DIR} --with-pic
+        CONFIGURE_COMMAND bash "-c" "./autogen.sh && ./configure --prefix=${IODBC_BYPRODUCT_DIR} --with-pic CFLAGS='${CMAKE_C_FLAGS} -std=gnu17'"
         STEP_TARGETS build
         BUILD_BYPRODUCTS "${IODBC_BYPRODUCT_DIR}/${IODBC_BYPRODUCT}"
         EXCLUDE_FROM_ALL TRUE
diff --git a/extensions/standard-processors/CMakeLists.txt b/extensions/standard-processors/CMakeLists.txt
index 100bae576..bd16be04f 100644
--- a/extensions/standard-processors/CMakeLists.txt
+++ b/extensions/standard-processors/CMakeLists.txt
@@ -30,8 +30,6 @@ include(Asio)
 include(Jsoncons)
 target_link_libraries(minifi-standard-processors ${LIBMINIFI} Threads::Threads range-v3 asio pugixml jsoncons)
 
-include(Coroutines)
-enable_coroutines()
 
 register_extension(minifi-standard-processors "STANDARD PROCESSORS" STANDARD-PROCESSORS "Provides standard processors" "extensions/standard-processors/tests/")
 
diff --git a/extensions/standard-processors/controllers/JsonTreeReader.cpp b/extensions/standard-processors/controllers/JsonTreeReader.cpp
index c7bd1d5d6..662f31dc1 100644
--- a/extensions/standard-processors/controllers/JsonTreeReader.cpp
+++ b/extensions/standard-processors/controllers/JsonTreeReader.cpp
@@ -29,7 +29,7 @@ namespace org::apache::nifi::minifi::standard {
 
 namespace {
 
-nonstd::expected<core::RecordField, std::error_code> parse(const rapidjson::Value& json_value) {
+std::expected<core::RecordField, std::error_code> parse(const rapidjson::Value& json_value) {
   if (json_value.IsDouble()) {
     return core::RecordField{json_value.GetDouble()};
   }
@@ -47,7 +47,7 @@ nonstd::expected<core::RecordField, std::error_code> parse(const rapidjson::Valu
     for (const auto& element : json_value.GetArray()) {
       auto element_field = parse(element);
       if (!element_field)
-        return nonstd::make_unexpected(element_field.error());
+        return std::unexpected{element_field.error()};
       record_array.push_back(std::move(*element_field));
     }
     return core::RecordField{std::move(record_array)};
@@ -58,33 +58,33 @@ nonstd::expected<core::RecordField, std::error_code> parse(const rapidjson::Valu
       auto element_key = m.name.GetString();
       auto element_field = parse(m.value);
       if (!element_field)
-        return nonstd::make_unexpected(element_field.error());
+        return std::unexpected{element_field.error()};
       record_object.emplace(element_key, std::move(*element_field));
     }
-    // Workaround for GCC 12 false positive -Wfree-nonheap-object https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99098
-#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ <= 12)
+    // Workaround for GCC false positive -Wfree-nonheap-object https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99098
+#if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wfree-nonheap-object"
 #endif
     return core::RecordField{std::move(record_object)};
-#if defined(__GNUC__) && !defined(__clang__) && (__GNUC__ <= 12)
+#if defined(__GNUC__) && !defined(__clang__)
 #pragma GCC diagnostic pop
 #endif
   }
 
-  return nonstd::make_unexpected(std::make_error_code(std::errc::invalid_argument));
+  return std::unexpected{std::make_error_code(std::errc::invalid_argument)};
 }
 
-nonstd::expected<core::Record, std::error_code> parseRecord(rapidjson::Value& record_json) {
+std::expected<core::Record, std::error_code> parseRecord(rapidjson::Value& record_json) {
   core::Record result;
   if (!record_json.IsObject()) {
-    return nonstd::make_unexpected(std::make_error_code(std::errc::invalid_argument));
+    return std::unexpected{std::make_error_code(std::errc::invalid_argument)};
   }
   for (const auto& member : record_json.GetObject()) {
     const auto element_key = member.name.GetString();
     auto element_field = parse(member.value);
     if (!element_field)
-      return nonstd::make_unexpected(element_field.error());
+      return std::unexpected{element_field.error()};
     result.emplace(element_key, std::move(*element_field));
   }
   return result;
@@ -121,7 +121,7 @@ bool readAsArray(const std::string& content, core::RecordSet& record_set) {
   return true;
 }
 
-nonstd::expected<core::RecordSet, std::error_code> JsonTreeReader::read(io::InputStream& input_stream) {
+std::expected<core::RecordSet, std::error_code> JsonTreeReader::read(io::InputStream& input_stream) {
   core::RecordSet record_set{};
   const auto read_result = [&record_set](io::InputStream& input_stream) -> size_t {
     std::string content;
@@ -138,7 +138,7 @@ nonstd::expected<core::RecordSet, std::error_code> JsonTreeReader::read(io::Inpu
     return read_ret;
   }(input_stream);
   if (io::isError(read_result))
-    return nonstd::make_unexpected(std::make_error_code(std::errc::invalid_argument));
+    return std::unexpected{std::make_error_code(std::errc::invalid_argument)};
   return record_set;
 }
 
diff --git a/extensions/standard-processors/controllers/JsonTreeReader.h b/extensions/standard-processors/controllers/JsonTreeReader.h
index 28b41c688..91addd91c 100644
--- a/extensions/standard-processors/controllers/JsonTreeReader.h
+++ b/extensions/standard-processors/controllers/JsonTreeReader.h
@@ -44,7 +44,7 @@ class JsonTreeReader final : public core::RecordSetReaderImpl {
   EXTENSIONAPI static constexpr auto ImplementsApis = std::array{ RecordSetReader::ProvidesApi };
   ADD_COMMON_VIRTUAL_FUNCTIONS_FOR_CONTROLLER_SERVICES
 
-  nonstd::expected<core::RecordSet, std::error_code> read(io::InputStream& input_stream) override;
+  std::expected<core::RecordSet, std::error_code> read(io::InputStream& input_stream) override;
 
   void initialize() override {
     setSupportedProperties(Properties);
diff --git a/extensions/standard-processors/controllers/XMLReader.cpp b/extensions/standard-processors/controllers/XMLReader.cpp
index 88cebe7ba..980ccc721 100644
--- a/extensions/standard-processors/controllers/XMLReader.cpp
+++ b/extensions/standard-processors/controllers/XMLReader.cpp
@@ -182,7 +182,7 @@ void XMLReader::onEnable() {
   expect_records_as_array_ = parseBoolProperty(ExpectRecordsAsArray.name);
 }
 
-nonstd::expected<core::RecordSet, std::error_code> XMLReader::read(io::InputStream& input_stream) {
+std::expected<core::RecordSet, std::error_code> XMLReader::read(io::InputStream& input_stream) {
   core::RecordSet record_set{};
   const auto read_result = [this, &record_set](io::InputStream& input_stream) -> size_t {
     std::string content;
@@ -198,7 +198,7 @@ nonstd::expected<core::RecordSet, std::error_code> XMLReader::read(io::InputStre
     return read_ret;
   }(input_stream);
   if (io::isError(read_result)) {
-    return nonstd::make_unexpected(std::make_error_code(std::errc::invalid_argument));
+    return std::unexpected{std::make_error_code(std::errc::invalid_argument)};
   }
   return record_set;
 }
diff --git a/extensions/standard-processors/controllers/XMLReader.h b/extensions/standard-processors/controllers/XMLReader.h
index 7ad5f3301..1222b7576 100644
--- a/extensions/standard-processors/controllers/XMLReader.h
+++ b/extensions/standard-processors/controllers/XMLReader.h
@@ -69,7 +69,7 @@ class XMLReader final : public core::RecordSetReaderImpl {
   EXTENSIONAPI static constexpr auto ImplementsApis = std::array{ RecordSetReader::ProvidesApi };
   ADD_COMMON_VIRTUAL_FUNCTIONS_FOR_CONTROLLER_SERVICES
 
-  nonstd::expected<core::RecordSet, std::error_code> read(io::InputStream& input_stream) override;
+  std::expected<core::RecordSet, std::error_code> read(io::InputStream& input_stream) override;
 
   void initialize() override {
     setSupportedProperties(Properties);
diff --git a/extensions/standard-processors/modbus/FetchModbusTcp.cpp b/extensions/standard-processors/modbus/FetchModbusTcp.cpp
index 1969d7ea0..ad988de9a 100644
--- a/extensions/standard-processors/modbus/FetchModbusTcp.cpp
+++ b/extensions/standard-processors/modbus/FetchModbusTcp.cpp
@@ -168,16 +168,16 @@ void FetchModbusTcp::processFlowFile(const std::shared_ptr<utils::net::Connectio
   }
 }
 
-nonstd::expected<core::Record, std::error_code> FetchModbusTcp::readModbus(
+std::expected<core::Record, std::error_code> FetchModbusTcp::readModbus(
     const std::shared_ptr<utils::net::ConnectionHandlerBase>& connection_handler,
     const std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>>& address_map) {
-  nonstd::expected<core::Record, std::error_code> result;
+  std::expected<core::Record, std::error_code> result;
   io_context_.restart();
   asio::co_spawn(io_context_,
     sendRequestsAndReadResponses(*connection_handler, address_map),
     [&result](const std::exception_ptr& exception_ptr, auto res) {
       if (exception_ptr) {
-        result = nonstd::make_unexpected(ModbusExceptionCode::InvalidResponse);
+        result = std::unexpected{ModbusExceptionCode::InvalidResponse};
       } else {
         result = std::move(res);
       }
@@ -187,13 +187,13 @@ nonstd::expected<core::Record, std::error_code> FetchModbusTcp::readModbus(
 }
 
 auto FetchModbusTcp::sendRequestsAndReadResponses(utils::net::ConnectionHandlerBase& connection_handler,
-    const std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>>& address_map) -> asio::awaitable<nonstd::expected<core::Record, std::error_code>> {
+    const std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>>& address_map) -> asio::awaitable<std::expected<core::Record, std::error_code>> {
   core::Record result;
   for (const auto& [variable, read_modbus_fn] : address_map) {
     gsl_Expects(read_modbus_fn);
     auto response = co_await sendRequestAndReadResponse(connection_handler, *read_modbus_fn);
     if (!response) {
-      co_return nonstd::make_unexpected(response.error());
+      co_return std::unexpected{response.error()};
     }
     result.emplace(variable, std::move(*response));
   }
@@ -202,19 +202,19 @@ auto FetchModbusTcp::sendRequestsAndReadResponses(utils::net::ConnectionHandlerB
 
 
 auto FetchModbusTcp::sendRequestAndReadResponse(utils::net::ConnectionHandlerBase& connection_handler,
-    const ReadModbusFunction& read_modbus_function) -> asio::awaitable<nonstd::expected<core::RecordField, std::error_code>> {
+    const ReadModbusFunction& read_modbus_function) -> asio::awaitable<std::expected<core::RecordField, std::error_code>> {
   if (auto connection_error = co_await connection_handler.setupUsableSocket(io_context_)) {  // NOLINT (clang tidy doesnt like coroutines)
-    co_return nonstd::make_unexpected(connection_error);
+    co_return std::unexpected{connection_error};
   }
 
   if (auto [write_error, bytes_written] = co_await connection_handler.write(asio::buffer(read_modbus_function.requestBytes())); write_error) {
-    co_return nonstd::make_unexpected(write_error);
+    co_return std::unexpected{write_error};
   }
 
   std::array<std::byte, 7> apu_buffer{};
   asio::mutable_buffer response_apu(apu_buffer.data(), 7);
   if (auto [read_error, bytes_read] = co_await connection_handler.read(response_apu); read_error) {
-    co_return nonstd::make_unexpected(read_error);
+    co_return std::unexpected{read_error};
   }
 
   const auto received_transaction_id = fromBytes<uint16_t>({apu_buffer[0], apu_buffer[1]});
@@ -223,23 +223,23 @@ auto FetchModbusTcp::sendRequestAndReadResponse(utils::net::ConnectionHandlerBas
   const auto unit_id = static_cast<uint8_t>(apu_buffer[6]);
 
   if (received_transaction_id != read_modbus_function.getTransactionId()) {
-    co_return nonstd::make_unexpected(ModbusExceptionCode::InvalidTransactionId);
+    co_return std::unexpected{ModbusExceptionCode::InvalidTransactionId};
   }
   if (received_protocol != 0) {
-    co_return nonstd::make_unexpected(ModbusExceptionCode::IllegalProtocol);
+    co_return std::unexpected{ModbusExceptionCode::IllegalProtocol};
   }
   if (unit_id != read_modbus_function.getUnitId()) {
-    co_return nonstd::make_unexpected(ModbusExceptionCode::InvalidSlaveId);
+    co_return std::unexpected{ModbusExceptionCode::InvalidSlaveId};
   }
   if (received_length + 6 > 260 || received_length <= 1) {
-    co_return nonstd::make_unexpected(ModbusExceptionCode::InvalidResponse);
+    co_return std::unexpected{ModbusExceptionCode::InvalidResponse};
   }
 
   std::array<std::byte, 260-7> pdu_buffer{};
   asio::mutable_buffer response_pdu(pdu_buffer.data(), received_length-1);
   auto [read_error, bytes_read] = co_await connection_handler.read(response_pdu);
   if (read_error) {
-    co_return nonstd::make_unexpected(read_error);
+    co_return std::unexpected{read_error};
   }
 
   const auto pdu_span = std::span<std::byte>(pdu_buffer.data(), received_length-1);
diff --git a/extensions/standard-processors/modbus/FetchModbusTcp.h b/extensions/standard-processors/modbus/FetchModbusTcp.h
index 68fe9cffd..a9cb07966 100644
--- a/extensions/standard-processors/modbus/FetchModbusTcp.h
+++ b/extensions/standard-processors/modbus/FetchModbusTcp.h
@@ -117,11 +117,11 @@ class FetchModbusTcp final : public core::ProcessorImpl {
     core::ProcessSession& session,
     const std::shared_ptr<core::FlowFile>& flow_file);
 
-  nonstd::expected<core::Record, std::error_code> readModbus(const std::shared_ptr<utils::net::ConnectionHandlerBase>& connection_handler,
+  std::expected<core::Record, std::error_code> readModbus(const std::shared_ptr<utils::net::ConnectionHandlerBase>& connection_handler,
       const std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>>& address_map);
-  asio::awaitable<nonstd::expected<core::Record, std::error_code>> sendRequestsAndReadResponses(utils::net::ConnectionHandlerBase& connection_handler,
+  asio::awaitable<std::expected<core::Record, std::error_code>> sendRequestsAndReadResponses(utils::net::ConnectionHandlerBase& connection_handler,
       const std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>>& address_map);
-  asio::awaitable<nonstd::expected<core::RecordField, std::error_code>> sendRequestAndReadResponse(utils::net::ConnectionHandlerBase& connection_handler,
+  asio::awaitable<std::expected<core::RecordField, std::error_code>> sendRequestAndReadResponse(utils::net::ConnectionHandlerBase& connection_handler,
       const ReadModbusFunction& read_modbus_function);
   std::unordered_map<std::string, std::unique_ptr<ReadModbusFunction>> getAddressMap(core::ProcessContext& context, const core::FlowFile& flow_file);
   static std::shared_ptr<core::FlowFile> getOrCreateFlowFile(core::ProcessContext& context, core::ProcessSession& session);
diff --git a/extensions/standard-processors/modbus/ReadModbusFunctions.cpp b/extensions/standard-processors/modbus/ReadModbusFunctions.cpp
index 6ade0dcf3..e92fe517b 100644
--- a/extensions/standard-processors/modbus/ReadModbusFunctions.cpp
+++ b/extensions/standard-processors/modbus/ReadModbusFunctions.cpp
@@ -36,13 +36,13 @@ std::vector<std::byte> ReadModbusFunction::requestBytes() const {
   return request;
 }
 
-[[nodiscard]] auto ReadModbusFunction::getRespBytes(std::span<const std::byte> resp_pdu) const -> nonstd::expected<std::span<const std::byte>, std::error_code> {
+[[nodiscard]] auto ReadModbusFunction::getRespBytes(std::span<const std::byte> resp_pdu) const -> std::expected<std::span<const std::byte>, std::error_code> {
   if (resp_pdu.size() < 2) {
-    return nonstd::make_unexpected(ModbusExceptionCode::MessageTooShort);
+    return std::unexpected{ModbusExceptionCode::MessageTooShort};
   }
 
   if (const auto resp_function_code = resp_pdu.front(); resp_function_code != getFunctionCode()) {
-    return nonstd::make_unexpected(ModbusExceptionCode::UnexpectedResponseFunctionCode);
+    return std::unexpected{ModbusExceptionCode::UnexpectedResponseFunctionCode};
   }
 
   const auto resp_byte_count = static_cast<uint8_t>(resp_pdu[1]);
@@ -50,11 +50,11 @@ std::vector<std::byte> ReadModbusFunction::requestBytes() const {
   constexpr uint8_t unit_id_length = 1;
   const uint8_t expected_resp_pdu_size = resp_byte_count + function_code_length + unit_id_length;
   if (resp_pdu.size() != expected_resp_pdu_size) {
-    return nonstd::make_unexpected(ModbusExceptionCode::UnexpectedResponsePDUSize);
+    return std::unexpected{ModbusExceptionCode::UnexpectedResponsePDUSize};
   }
 
   if (resp_byte_count != expectedByteCount()) {
-    return nonstd::make_unexpected(ModbusExceptionCode::InvalidResponse);
+    return std::unexpected{ModbusExceptionCode::InvalidResponse};
   }
 
   return resp_pdu.subspan(2, resp_pdu.size()-2);
@@ -69,10 +69,10 @@ std::vector<std::byte> ReadModbusFunction::requestBytes() const {
   return result;
 }
 
-[[nodiscard]] nonstd::expected<core::RecordField, std::error_code> ReadCoilStatus::responseToRecordField(const std::span<const std::byte> resp_pdu) const {
+[[nodiscard]] std::expected<core::RecordField, std::error_code> ReadCoilStatus::responseToRecordField(const std::span<const std::byte> resp_pdu) const {
   const auto resp_bytes = getRespBytes(resp_pdu);
   if (!resp_bytes)
-    return nonstd::make_unexpected(resp_bytes.error());
+    return std::unexpected{resp_bytes.error()};
 
 
   std::vector<bool> coils{};
diff --git a/extensions/standard-processors/modbus/ReadModbusFunctions.h b/extensions/standard-processors/modbus/ReadModbusFunctions.h
index cf6be3061..78f6bcf9a 100644
--- a/extensions/standard-processors/modbus/ReadModbusFunctions.h
+++ b/extensions/standard-processors/modbus/ReadModbusFunctions.h
@@ -54,12 +54,12 @@ class ReadModbusFunction {
 
   [[nodiscard]] uint16_t getTransactionId() const { return transaction_id_; }
   [[nodiscard]] uint8_t getUnitId() const { return unit_id_; }
-  [[nodiscard]] virtual nonstd::expected<core::RecordField, std::error_code> responseToRecordField(std::span<const std::byte> resp_pdu) const = 0;
+  [[nodiscard]] virtual std::expected<core::RecordField, std::error_code> responseToRecordField(std::span<const std::byte> resp_pdu) const = 0;
 
   static std::unique_ptr<ReadModbusFunction> parse(uint16_t transaction_id, uint8_t unit_id, const std::string& address);
 
  protected:
-  [[nodiscard]] auto getRespBytes(std::span<const std::byte> resp_pdu) const -> nonstd::expected<std::span<const std::byte>, std::error_code>;
+  [[nodiscard]] auto getRespBytes(std::span<const std::byte> resp_pdu) const -> std::expected<std::span<const std::byte>, std::error_code>;
 
   [[nodiscard]] virtual std::byte getFunctionCode() const = 0;
   [[nodiscard]] virtual std::array<std::byte, 5> rawPdu() const = 0;
@@ -77,7 +77,7 @@ class ReadCoilStatus : public ReadModbusFunction {
         number_of_points_(number_of_points) {
   }
 
-  [[nodiscard]] nonstd::expected<core::RecordField, std::error_code> responseToRecordField(std::span<const std::byte> resp_pdu) const override;
+  [[nodiscard]] std::expected<core::RecordField, std::error_code> responseToRecordField(std::span<const std::byte> resp_pdu) const override;
 
   [[nodiscard]] std::byte getFunctionCode() const override;
   [[nodiscard]] std::array<std::byte, 5> rawPdu() const override;
@@ -120,10 +120,10 @@ class ReadRegisters : public ReadModbusFunction {
     return expectedByteCount() / sizeof(uint16_t);
   }
 
-  [[nodiscard]] nonstd::expected<core::RecordField, std::error_code> responseToRecordField(const std::span<const std::byte> resp_pdu) const override {
+  [[nodiscard]] std::expected<core::RecordField, std::error_code> responseToRecordField(const std::span<const std::byte> resp_pdu) const override {
     const auto resp_bytes = getRespBytes(resp_pdu);
     if (!resp_bytes)
-      return nonstd::make_unexpected(resp_bytes.error());
+      return std::unexpected{resp_bytes.error()};
 
     std::vector<T> holding_registers{};
     for (auto&& register_chunk : ranges::views::chunk(*resp_bytes, std::max(sizeof(T), sizeof(uint16_t)))) {
diff --git a/extensions/standard-processors/processors/ConvertRecord.cpp b/extensions/standard-processors/processors/ConvertRecord.cpp
index 00d864b8c..565bc6741 100644
--- a/extensions/standard-processors/processors/ConvertRecord.cpp
+++ b/extensions/standard-processors/processors/ConvertRecord.cpp
@@ -16,8 +16,9 @@
  */
 #include "ConvertRecord.h"
 
+#include <expected>
+
 #include "core/Resource.h"
-#include "nonstd/expected.hpp"
 #include "utils/GeneralUtils.h"
 #include "utils/ProcessorConfigUtils.h"
 #include "minifi-cpp/utils/gsl.h"
@@ -40,7 +41,7 @@ void ConvertRecord::onTrigger(core::ProcessContext& context, core::ProcessSessio
     return;
   }
 
-  nonstd::expected<core::RecordSet, std::error_code> record_set;
+  std::expected<core::RecordSet, std::error_code> record_set;
   session.read(flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
     record_set = record_converter_->record_set_reader->read(*input_stream);
     return io::IoResult::from(input_stream->size());
diff --git a/extensions/standard-processors/processors/InvokeHTTP.cpp b/extensions/standard-processors/processors/InvokeHTTP.cpp
index e652a00c6..a089cba5c 100644
--- a/extensions/standard-processors/processors/InvokeHTTP.cpp
+++ b/extensions/standard-processors/processors/InvokeHTTP.cpp
@@ -79,16 +79,16 @@ void HttpClientStore::returnClient(http::HTTPClient& client) {
 }  // namespace invoke_http
 
 namespace {
-nonstd::expected<std::string_view, std::error_code> removePerSecSuffix(const std::string_view input) {
+std::expected<std::string_view, std::error_code> removePerSecSuffix(const std::string_view input) {
   const auto trimmed_input = utils::string::trim(input);
   if (trimmed_input.ends_with("/s") || trimmed_input.ends_with("/S")) {
     return trimmed_input.substr(0, trimmed_input.size() - 2);
   }
-  return nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError);
+  return std::unexpected{core::ParsingErrorCode::GeneralParsingError};
 }
 }  // namespace
 
-nonstd::expected<uint64_t, std::error_code> invoke_http::parseDataTransferSpeed(const std::string_view input) {
+std::expected<uint64_t, std::error_code> invoke_http::parseDataTransferSpeed(const std::string_view input) {
   return removePerSecSuffix(input) | utils::andThen(parsing::parseDataSize);
 }
 
diff --git a/extensions/standard-processors/processors/InvokeHTTP.h b/extensions/standard-processors/processors/InvokeHTTP.h
index d63a64387..702804853 100644
--- a/extensions/standard-processors/processors/InvokeHTTP.h
+++ b/extensions/standard-processors/processors/InvokeHTTP.h
@@ -62,7 +62,7 @@ class DataTransferSpeedValidator final : public core::PropertyValidator {
 
 inline constexpr auto DATA_TRANSFER_SPEED_VALIDATOR = DataTransferSpeedValidator{};
 
-nonstd::expected<uint64_t, std::error_code> parseDataTransferSpeed(const std::string_view input);
+std::expected<uint64_t, std::error_code> parseDataTransferSpeed(const std::string_view input);
 
 class HttpClientStore {
  public:
diff --git a/extensions/standard-processors/processors/PutUDP.cpp b/extensions/standard-processors/processors/PutUDP.cpp
index aa4b1eb63..0320891a9 100644
--- a/extensions/standard-processors/processors/PutUDP.cpp
+++ b/extensions/standard-processors/processors/PutUDP.cpp
@@ -76,16 +76,16 @@ void PutUDP::onTrigger(core::ProcessContext& context, core::ProcessSession& sess
 
   asio::io_context io_context;
 
-  const auto resolve_hostname = [&io_context, &hostname, &port]() -> nonstd::expected<udp::resolver::results_type, std::error_code> {
+  const auto resolve_hostname = [&io_context, &hostname, &port]() -> std::expected<udp::resolver::results_type, std::error_code> {
     udp::resolver resolver(io_context);
     std::error_code error_code;
     auto results = resolver.resolve(hostname, port, error_code);
     if (error_code)
-      return nonstd::make_unexpected(error_code);
+      return std::unexpected{error_code};
     return results;
   };
 
-  const auto send_data_to_endpoint = [&io_context, &data, &logger = this->logger_](const udp::resolver::results_type& resolved_query) -> nonstd::expected<void, std::error_code> {
+  const auto send_data_to_endpoint = [&io_context, &data, &logger = this->logger_](const udp::resolver::results_type& resolved_query) -> std::expected<void, std::error_code> {
     std::error_code error;
     for (const auto& resolver_entry : resolved_query) {
       error.clear();
@@ -103,7 +103,7 @@ void PutUDP::onTrigger(core::ProcessContext& context, core::ProcessSession& sess
       logger->log_debug("sending to endpoint {} succeeded", resolver_entry.endpoint());
       return {};
     }
-    return nonstd::make_unexpected(error);
+    return std::unexpected{error};
   };
 
   const auto transfer_to_success = [&session, &flow_file]() -> void {
diff --git a/extensions/standard-processors/processors/SplitRecord.cpp b/extensions/standard-processors/processors/SplitRecord.cpp
index ba501473a..3399610cb 100644
--- a/extensions/standard-processors/processors/SplitRecord.cpp
+++ b/extensions/standard-processors/processors/SplitRecord.cpp
@@ -16,8 +16,9 @@
  */
 #include "SplitRecord.h"
 
+#include <expected>
+
 #include "core/Resource.h"
-#include "nonstd/expected.hpp"
 #include "utils/GeneralUtils.h"
 #include "utils/ProcessorConfigUtils.h"
 #include "minifi-cpp/utils/gsl.h"
@@ -31,7 +32,7 @@ void SplitRecord::onSchedule(core::ProcessContext& context, core::ProcessSession
   };
 }
 
-nonstd::expected<std::size_t, std::string> SplitRecord::readRecordsPerSplit(core::ProcessContext& context, const core::FlowFile& original_flow_file) {
+std::expected<std::size_t, std::string> SplitRecord::readRecordsPerSplit(core::ProcessContext& context, const core::FlowFile& original_flow_file) {
   return context.getProperty(RecordsPerSplit, &original_flow_file)
       | utils::andThen([](const auto& records_per_split_str) {
             return parsing::parseIntegralMinMax<std::size_t>(records_per_split_str, 1, std::numeric_limits<std::size_t>::max());
@@ -54,7 +55,7 @@ void SplitRecord::onTrigger(core::ProcessContext& context, core::ProcessSession&
     return;
   }
 
-  nonstd::expected<core::RecordSet, std::error_code> record_set;
+  std::expected<core::RecordSet, std::error_code> record_set;
   session.read(original_flow_file, [this, &record_set](const std::shared_ptr<io::InputStream>& input_stream) -> io::IoResult {
     record_set = record_converter_->record_set_reader->read(*input_stream);
     return io::IoResult::from(input_stream->size());
diff --git a/extensions/standard-processors/processors/SplitRecord.h b/extensions/standard-processors/processors/SplitRecord.h
index c594024d3..d078ab820 100644
--- a/extensions/standard-processors/processors/SplitRecord.h
+++ b/extensions/standard-processors/processors/SplitRecord.h
@@ -86,7 +86,7 @@ class SplitRecord final : public core::AbstractProcessor<SplitRecord> {
   void onTrigger(core::ProcessContext& context, core::ProcessSession& session) override;
 
  private:
-  static nonstd::expected<std::size_t, std::string> readRecordsPerSplit(core::ProcessContext& context, const core::FlowFile& original_flow_file);
+  static std::expected<std::size_t, std::string> readRecordsPerSplit(core::ProcessContext& context, const core::FlowFile& original_flow_file);
 
   std::optional<core::RecordConverter> record_converter_;
 };
diff --git a/extensions/standard-processors/processors/SplitText.cpp b/extensions/standard-processors/processors/SplitText.cpp
index 3573169a8..203e179e1 100644
--- a/extensions/standard-processors/processors/SplitText.cpp
+++ b/extensions/standard-processors/processors/SplitText.cpp
@@ -135,15 +135,15 @@ class SplitTextFragmentGenerator {
 
   SplitTextFragmentGenerator(const std::shared_ptr<io::InputStream>& stream, const SplitTextConfiguration& split_text_config, size_t buffer_size);
   std::optional<Fragment> readNextFragment();
-  nonstd::expected<Fragment, const char*> readHeaderFragment();
+  std::expected<Fragment, const char*> readHeaderFragment();
   [[nodiscard]] detail::StreamReadState getState() const { return line_reader_.getState(); }
 
  private:
   static void addLineToFragment(Fragment& fragment, const detail::LineReader::LineInfo& line);
   void finalizeFragmentOffset(Fragment& current_fragment);
   [[nodiscard]] bool lineSizeWouldExceedMaxFragmentSize(const detail::LineReader::LineInfo& line, uint64_t fragment_size) const;
-  nonstd::expected<Fragment, const char*> createHeaderFragmentUsingLineCount();
-  nonstd::expected<Fragment, const char*> createHeaderFragmentUsingHeaderMarkerCharacters();
+  std::expected<Fragment, const char*> createHeaderFragmentUsingLineCount();
+  std::expected<Fragment, const char*> createHeaderFragmentUsingHeaderMarkerCharacters();
 
   detail::LineReader line_reader_;
   // In case the read line would exceed the maximum fragment size, we need to buffer it for the next fragment
@@ -201,19 +201,19 @@ bool SplitTextFragmentGenerator::lineSizeWouldExceedMaxFragmentSize(const detail
   return split_text_config_.maximum_fragment_size && fragment_size + line.size + header_fragment_size_ > split_text_config_.maximum_fragment_size.value();
 }
 
-nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::createHeaderFragmentUsingLineCount() {
+std::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::createHeaderFragmentUsingLineCount() {
   Fragment header_fragment;
   for (uint64_t i = 0; i < split_text_config_.header_line_count; ++i) {
     auto line = line_reader_.readNextLine();
     if (!line) {
       if (getState() == detail::StreamReadState::EndOfStream) {
-        return nonstd::make_unexpected("The flow file's line count is less than the specified header line count!");
+        return std::unexpected{"The flow file's line count is less than the specified header line count!"};
       } else {
-        return nonstd::make_unexpected("Error while reading flow file stream!");
+        return std::unexpected{"Error while reading flow file stream!"};
       }
     }
     if (lineSizeWouldExceedMaxFragmentSize(*line, header_fragment.fragment_size)) {
-      return nonstd::make_unexpected("Header line would exceed the maximum fragment size!");
+      return std::unexpected{"Header line would exceed the maximum fragment size!"};
     }
 
     addLineToFragment(header_fragment, *line);
@@ -224,7 +224,7 @@ nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFra
   return header_fragment;
 }
 
-nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::createHeaderFragmentUsingHeaderMarkerCharacters() {
+std::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::createHeaderFragmentUsingHeaderMarkerCharacters() {
   Fragment header_fragment;
   while (auto line = line_reader_.readNextLine(split_text_config_.header_line_marker_characters)) {
     if (line->size < split_text_config_.header_line_marker_characters->size() || !line->matches_starts_with) {
@@ -232,7 +232,7 @@ nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFra
       break;
     }
     if (lineSizeWouldExceedMaxFragmentSize(*line, header_fragment.fragment_size)) {
-      return nonstd::make_unexpected("Header line would exceed the maximum fragment size!");
+      return std::unexpected{"Header line would exceed the maximum fragment size!"};
     }
 
     addLineToFragment(header_fragment, *line);
@@ -243,7 +243,7 @@ nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFra
   return header_fragment;
 }
 
-nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::readHeaderFragment() {
+std::expected<SplitTextFragmentGenerator::Fragment, const char*> SplitTextFragmentGenerator::readHeaderFragment() {
   gsl_Expects(flow_file_offset_ == 0 && (split_text_config_.header_line_count > 0 || split_text_config_.header_line_marker_characters));
   if (split_text_config_.header_line_count > 0) {
     return createHeaderFragmentUsingLineCount();
@@ -356,7 +356,7 @@ void ReadCallback::createFragmentFlowWithoutHeader(const SplitTextFragmentGenera
 
 io::IoResult ReadCallback::operator()(const std::shared_ptr<io::InputStream>& stream) {
   SplitTextFragmentGenerator fragment_generator(stream, split_text_config_, buffer_size_);
-  nonstd::expected<SplitTextFragmentGenerator::Fragment, const char*> header_fragment;
+  std::expected<SplitTextFragmentGenerator::Fragment, const char*> header_fragment;
   std::shared_ptr<core::FlowFile> header_flow;  // cache header flow file to avoid cloning it for each fragment
   if (split_text_config_.header_line_count > 0 || split_text_config_.header_line_marker_characters) {
     header_fragment = fragment_generator.readHeaderFragment();
diff --git a/extensions/standard-processors/tests/CMakeLists.txt b/extensions/standard-processors/tests/CMakeLists.txt
index aecfc84ea..6d87a3433 100644
--- a/extensions/standard-processors/tests/CMakeLists.txt
+++ b/extensions/standard-processors/tests/CMakeLists.txt
@@ -17,9 +17,7 @@
 # under the License.
 #
 
-include(Coroutines)
 include(JoltTests)
-enable_coroutines()
 
 file(GLOB PROCESSOR_UNIT_TESTS  "unit/*.cpp" "unit/modbus/*.cpp")
 file(GLOB PROCESSOR_INTEGRATION_TESTS "integration/*.cpp")
diff --git a/extensions/standard-processors/tests/integration/InvokeHTTPTests.cpp b/extensions/standard-processors/tests/integration/InvokeHTTPTests.cpp
index d4e94b62f..67914def2 100644
--- a/extensions/standard-processors/tests/integration/InvokeHTTPTests.cpp
+++ b/extensions/standard-processors/tests/integration/InvokeHTTPTests.cpp
@@ -388,8 +388,8 @@ TEST_CASE("Data transfer speed parsing") {
   CHECK(processors::invoke_http::parseDataTransferSpeed("10 kB/s") == 10_KiB);
   CHECK(processors::invoke_http::parseDataTransferSpeed("20 MB/s") == 20_MiB);
   CHECK(processors::invoke_http::parseDataTransferSpeed("19 TB/s") == 19_TiB);
-  CHECK(processors::invoke_http::parseDataTransferSpeed("1KBinvalidsuffix") == nonstd::make_unexpected(make_error_code(core::ParsingErrorCode::GeneralParsingError)));
-  CHECK(processors::invoke_http::parseDataTransferSpeed("1KB") == nonstd::make_unexpected(make_error_code(core::ParsingErrorCode::GeneralParsingError)));
+  CHECK(processors::invoke_http::parseDataTransferSpeed("1KBinvalidsuffix") == std::unexpected{make_error_code(core::ParsingErrorCode::GeneralParsingError)});
+  CHECK(processors::invoke_http::parseDataTransferSpeed("1KB") == std::unexpected{make_error_code(core::ParsingErrorCode::GeneralParsingError)});
 }
 
 TEST_CASE("InvokeHTTP: invalid characters are removed from outgoing HTTP headers", "[InvokeHTTP][http][attribute][header][sanitize]") {
diff --git a/extensions/standard-processors/utils/JoltUtils.cpp b/extensions/standard-processors/utils/JoltUtils.cpp
index bf9392527..66406b55b 100644
--- a/extensions/standard-processors/utils/JoltUtils.cpp
+++ b/extensions/standard-processors/utils/JoltUtils.cpp
@@ -51,7 +51,7 @@ bool Spec::Template::check(std::string_view str) {
   return false;
 }
 
-nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Template::parse(It begin, It end) {
+std::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Template::parse(It begin, It end) {
   enum class State {
     Plain,
     Escaped,
@@ -93,10 +93,10 @@ nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Templat
       }
       case State::Escaped: {
         if (!ch) {
-          return nonstd::make_unexpected("Unterminated escape sequence");
+          return std::unexpected{"Unterminated escape sequence"};
         }
         if (ch != '\\' && !isSpecialChar(ch.value())) {
-          return nonstd::make_unexpected(fmt::format("Unknown escape sequence in template '\\{}'", ch.value()));
+          return std::unexpected{fmt::format("Unknown escape sequence in template '\\{}'", ch.value())};
         }
         fragments.back() += ch.value();
         state = State::Plain;
@@ -135,7 +135,7 @@ nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Templat
           target += ch.value();
           state = State::ParentIndex;
         } else {
-          return nonstd::make_unexpected(fmt::format("Expected an index at {}", std::distance(begin, ch_it)));
+          return std::unexpected{fmt::format("Expected an index at {}", std::distance(begin, ch_it))};
         }
         break;
       }
@@ -149,7 +149,7 @@ nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Templat
           references.back().first = std::stoi(target);
           state = State::Plain;
         } else {
-          return nonstd::make_unexpected(fmt::format("Invalid character at {}, expected digit, comma or close parenthesis", std::distance(begin, ch_it)));
+          return std::unexpected{fmt::format("Invalid character at {}, expected digit, comma or close parenthesis", std::distance(begin, ch_it))};
         }
         break;
       }
@@ -159,7 +159,7 @@ nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Templat
           target += ch.value();
           state = State::MatchIndex;
         } else {
-          return nonstd::make_unexpected(fmt::format("Expected an index at {}", std::distance(begin, ch_it)));
+          return std::unexpected{fmt::format("Expected an index at {}", std::distance(begin, ch_it))};
         }
         break;
       }
@@ -170,7 +170,7 @@ nonstd::expected<std::pair<Spec::Template, Spec::It>, std::string> Spec::Templat
           references.back().second = std::stoi(target);
           state = State::Plain;
         } else {
-          return nonstd::make_unexpected(fmt::format("Invalid character at {}, expected digit or close parenthesis", std::distance(begin, ch_it)));
+          return std::unexpected{fmt::format("Invalid character at {}, expected digit or close parenthesis", std::distance(begin, ch_it))};
         }
         break;
       }
@@ -213,7 +213,7 @@ bool Spec::Regex::check(std::string_view str) {
   return false;
 }
 
-nonstd::expected<Spec::Regex, std::string> Spec::Regex::parse(std::string_view str) {
+std::expected<Spec::Regex, std::string> Spec::Regex::parse(std::string_view str) {
   enum class State {
     Plain,
     Escaped
@@ -239,10 +239,10 @@ nonstd::expected<Spec::Regex, std::string> Spec::Regex::parse(std::string_view s
       }
       case State::Escaped: {
         if (!ch) {
-          return nonstd::make_unexpected("Unterminated escape sequence");
+          return std::unexpected{"Unterminated escape sequence"};
         }
         if (ch != '\\' && !isSpecialChar(ch.value())) {
-          return nonstd::make_unexpected(fmt::format("Unknown escape sequence in pattern '\\{}'", ch.value()));
+          return std::unexpected{fmt::format("Unknown escape sequence in pattern '\\{}'", ch.value())};
         }
         fragments.back() += ch.value();
         state = State::Plain;
@@ -312,7 +312,7 @@ std::optional<std::vector<std::string_view>> Spec::Regex::match(std::string_view
 
 namespace {
 
-nonstd::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDestination(const Spec::Context& ctx, Spec::It begin, Spec::It end);
+std::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDestination(const Spec::Context& ctx, Spec::It begin, Spec::It end);
 Spec::Destinations parseDestinations(const Spec::Context& ctx, const rapidjson::Value& val);
 
 Spec::Pattern::Value parseValue(const Spec::Context& ctx, const rapidjson::Value& val);
@@ -460,29 +460,29 @@ std::string parseLiteral(std::string_view str) {
   return result;
 }
 
-nonstd::expected<std::pair<Spec::Path, Spec::It>, std::string> parsePath(const Spec::Context& ctx, Spec::It begin, Spec::It end) {
+std::expected<std::pair<Spec::Path, Spec::It>, std::string> parsePath(const Spec::Context& ctx, Spec::It begin, Spec::It end) {
   auto dst = parseDestination(ctx, begin, end);
   if (!dst) {
-    return nonstd::make_unexpected(std::move(dst.error()));
+    return std::unexpected{std::move(dst.error())};
   }
   Spec::Path result;
   for (auto&& [member, type] : std::move(dst->first)) {
     if (!holds_alternative<Spec::Template>(member)) {
-      return nonstd::make_unexpected(fmt::format("Value reference at {} cannot contain nested value reference path", ctx.path()));
+      return std::unexpected{fmt::format("Value reference at {} cannot contain nested value reference path", ctx.path())};
     }
     result.emplace_back(std::move(std::get<Spec::Template>(member)), type);
   }
   return std::pair<Spec::Path, Spec::It>{result, dst->second};
 }
 
-nonstd::expected<std::pair<Spec::ValueRef, Spec::It>, std::string> parseValueReference(const Spec::Context& ctx, Spec::It begin, Spec::It end, bool greedy_path) {
+std::expected<std::pair<Spec::ValueRef, Spec::It>, std::string> parseValueReference(const Spec::Context& ctx, Spec::It begin, Spec::It end, bool greedy_path) {
   using ResultT = std::pair<Spec::ValueRef, Spec::It>;
   auto it = begin;
   if (it == end) {
-    return nonstd::make_unexpected("Cannot parse value reference from empty string");
+    return std::unexpected{"Cannot parse value reference from empty string"};
   }
   if (*it != '@') {
-    return nonstd::make_unexpected("Value reference must start with '@'");
+    return std::unexpected{"Value reference must start with '@'"};
   }
   ++it;
   if (it == end) {
@@ -522,11 +522,11 @@ nonstd::expected<std::pair<Spec::ValueRef, Spec::It>, std::string> parseValueRef
     auto idx_end = it;
     idx = std::stoull(std::string{idx_begin, idx_end});
     if (it == end) {
-      return nonstd::make_unexpected("Expected ')' in value reference");
+      return std::unexpected{"Expected ')' in value reference"};
     }
     if (*it != ',') {
       if (*it != ')') {
-        return nonstd::make_unexpected("Expected ')' in value reference");
+        return std::unexpected{"Expected ')' in value reference"};
       }
       ++it;
       return ResultT{{idx, {}}, it};
@@ -535,15 +535,15 @@ nonstd::expected<std::pair<Spec::ValueRef, Spec::It>, std::string> parseValueRef
     ++it;
   }
   if (it == end) {
-    return nonstd::make_unexpected("Expected member accessor in value reference");
+    return std::unexpected{"Expected member accessor in value reference"};
   }
   auto path = parsePath(ctx, it, end);
   if (!path) {
-    return nonstd::make_unexpected(fmt::format("Invalid path in value reference: {}", path.error()));
+    return std::unexpected{fmt::format("Invalid path in value reference: {}", path.error())};
   }
   it = path->second;
   if (it == end || *it != ')') {
-    return nonstd::make_unexpected("Expected ')' in value reference");
+    return std::unexpected{"Expected ')' in value reference"};
   }
   ++it;
   return ResultT{{idx, std::move(path->first)}, it};
@@ -661,13 +661,13 @@ std::unique_ptr<Spec::Pattern> parseMap(const Spec::Context& ctx, const rapidjso
   return map;
 }
 
-nonstd::expected<std::pair<Spec::MatchingIndex, Spec::It>, std::string> parseMatchingIndex(Spec::It begin, Spec::It end) {
+std::expected<std::pair<Spec::MatchingIndex, Spec::It>, std::string> parseMatchingIndex(Spec::It begin, Spec::It end) {
   auto it = begin;
   if (it == end) {
-    return nonstd::make_unexpected("Empty matching index");
+    return std::unexpected{"Empty matching index"};
   }
   if (*it != '#') {
-    return nonstd::make_unexpected("Matching must start with a '#'");
+    return std::unexpected{"Matching must start with a '#'"};
   }
   ++it;
   auto idx_begin = it;
@@ -678,7 +678,7 @@ nonstd::expected<std::pair<Spec::MatchingIndex, Spec::It>, std::string> parseMat
 }
 
 // dot-delimited list of templates and value references
-nonstd::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDestination(const Spec::Context& ctx, Spec::It begin, Spec::It end) {
+std::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDestination(const Spec::Context& ctx, Spec::It begin, Spec::It end) {
   Spec::Destination result;
   Spec::MemberType type = Spec::MemberType::FIELD;
   auto ch_it = begin;
@@ -688,10 +688,10 @@ nonstd::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDesti
   while (!isEnd()) {
     if (auto match_idx = parseMatchingIndex(ch_it, end)) {
       if (type != Spec::MemberType::INDEX) {
-        return nonstd::make_unexpected("Matching index can only be used in index context, e.g. apple[#2]");
+        return std::unexpected{"Matching index can only be used in index context, e.g. apple[#2]"};
       }
       if (!ctx.find(match_idx->first)) {
-        return nonstd::make_unexpected(fmt::format("Invalid matching index at {} to ancestor {}", ctx.path(), match_idx->first));
+        return std::unexpected{fmt::format("Invalid matching index at {} to ancestor {}", ctx.path(), match_idx->first)};
       }
       Spec::Destination::value_type result_element{match_idx->first, type};
       result.push_back(result_element);
@@ -705,11 +705,11 @@ nonstd::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDesti
       result.push_back({std::move(templ->first), type});
       ch_it = templ->second;
     } else {
-      return nonstd::make_unexpected(fmt::format("Could not parse neither value reference or template in {} at {}", ctx.path(), std::distance(begin, ch_it)));
+      return std::unexpected{fmt::format("Could not parse neither value reference or template in {} at {}", ctx.path(), std::distance(begin, ch_it))};
     }
     if (type == Spec::MemberType::INDEX) {
       if (ch_it == end || *ch_it != ']') {
-        return nonstd::make_unexpected(fmt::format("Expected closing index ']' in {} at {}", ctx.path(), std::distance(begin, ch_it)));
+        return std::unexpected{fmt::format("Expected closing index ']' in {} at {}", ctx.path(), std::distance(begin, ch_it))};
       }
       ++ch_it;
     }
@@ -719,14 +719,14 @@ nonstd::expected<std::pair<Spec::Destination, Spec::It>, std::string> parseDesti
       } else if (*ch_it == '[') {
         type = Spec::MemberType::INDEX;
       } else {
-        return nonstd::make_unexpected(fmt::format("Unexpected destination delimiter '{}' in {} at {}", *ch_it, ctx.path(), std::distance(begin, ch_it)));
+        return std::unexpected{fmt::format("Unexpected destination delimiter '{}' in {} at {}", *ch_it, ctx.path(), std::distance(begin, ch_it))};
       }
       ++ch_it;
       if (ch_it == end) {
         if (type == Spec::MemberType::FIELD) {
-          return nonstd::make_unexpected(fmt::format("Unterminated member in {} at {}", ctx.path(), std::distance(begin, ch_it)));
+          return std::unexpected{fmt::format("Unterminated member in {} at {}", ctx.path(), std::distance(begin, ch_it))};
         } else {
-          return nonstd::make_unexpected(fmt::format("Unterminated indexed member in {} at {}", ctx.path(), std::distance(begin, ch_it)));
+          return std::unexpected{fmt::format("Unterminated indexed member in {} at {}", ctx.path(), std::distance(begin, ch_it))};
         }
       }
     }
@@ -807,7 +807,7 @@ std::pair<std::string, std::string> toString(const Spec::Context& ctx, const Spe
   return {raw, result};
 }
 
-nonstd::expected<std::reference_wrapper<const rapidjson::Value>, std::string> resolvePath(const Spec::Context& ctx, std::string_view root_path, const rapidjson::Value& root, const Spec::Path& path);
+std::expected<std::reference_wrapper<const rapidjson::Value>, std::string> resolvePath(const Spec::Context& ctx, std::string_view root_path, const rapidjson::Value& root, const Spec::Path& path);
 
 Spec::Pattern::Value parseValue(const Spec::Context& ctx, const rapidjson::Value& val) {
   if (val.IsObject()) {
@@ -953,7 +953,7 @@ void putValue(const Spec::Context& ctx, const Spec::Destinations& destinations,
   }
 }
 
-nonstd::expected<std::reference_wrapper<const rapidjson::Value>, std::string> resolvePath(const Spec::Context& ctx, std::string_view root_path, const rapidjson::Value& root, const Spec::Path& path) {
+std::expected<std::reference_wrapper<const rapidjson::Value>, std::string> resolvePath(const Spec::Context& ctx, std::string_view root_path, const rapidjson::Value& root, const Spec::Path& path) {
   std::string full_path{root_path};
   std::reference_wrapper<const rapidjson::Value> result = std::ref(root);
   for (auto& [templ, type] : path) {
@@ -961,20 +961,20 @@ nonstd::expected<std::reference_wrapper<const rapidjson::Value>, std::string> re
     if (type == Spec::MemberType::FIELD) {
       full_path += "." + member;
       if (!result.get().IsObject()) {
-        return nonstd::make_unexpected(fmt::format("Expected object at {}", full_path));
+        return std::unexpected{fmt::format("Expected object at {}", full_path)};
       }
       if (!result.get().HasMember(member)) {
-        return nonstd::make_unexpected(fmt::format("Object does not have member '{}' at {}", member, full_path));
+        return std::unexpected{fmt::format("Object does not have member '{}' at {}", member, full_path)};
       }
       result = result.get()[member];
     } else if (type == Spec::MemberType::INDEX) {
       size_t idx = std::stoull(member);
       full_path += "[" + member + "]";
       if (!result.get().IsArray()) {
-        return nonstd::make_unexpected(fmt::format("Expected array at {}", full_path));
+        return std::unexpected{fmt::format("Expected array at {}", full_path)};
       }
       if (result.get().Size() <= idx) {
-        return nonstd::make_unexpected(fmt::format("Array of size {} does not have item at index {}  at {}", result.get().Size(), idx, full_path));
+        return std::unexpected{fmt::format("Array of size {} does not have item at index {}  at {}", result.get().Size(), idx, full_path)};
       }
       result = result.get()[gsl::narrow<rapidjson::SizeType>(idx)];
     }
@@ -984,17 +984,17 @@ nonstd::expected<std::reference_wrapper<const rapidjson::Value>, std::string> re
 
 }  // namespace
 
-nonstd::expected<Spec, std::string> Spec::parse(std::string_view str, std::shared_ptr<core::logging::Logger> logger) {
+std::expected<Spec, std::string> Spec::parse(std::string_view str, std::shared_ptr<core::logging::Logger> logger) {
   rapidjson::Document doc;
   rapidjson::ParseResult res = doc.Parse(str.data(), str.length());
   if (!res) {
-    return nonstd::make_unexpected(fmt::format("{} at {}", rapidjson::GetParseError_En(res.Code()), res.Offset()));
+    return std::unexpected{fmt::format("{} at {}", rapidjson::GetParseError_En(res.Code()), res.Offset())};
   }
   try {
     Spec::Context ctx{.matches = {"root"}, .logger = std::move(logger)};
     return Spec{parseMap(ctx, doc)};
   } catch (const std::exception& ex) {
-    return nonstd::make_unexpected(ex.what());
+    return std::unexpected{ex.what()};
   }
 }
 
@@ -1129,13 +1129,13 @@ void Spec::Pattern::process(const Context& ctx, const rapidjson::Value &input, r
   }
 }
 
-nonstd::expected<rapidjson::Document, std::string> Spec::process(const rapidjson::Value &input, std::shared_ptr<core::logging::Logger> logger) const {
+std::expected<rapidjson::Document, std::string> Spec::process(const rapidjson::Value &input, std::shared_ptr<core::logging::Logger> logger) const {
   rapidjson::Document output;
   try {
     value_->process(Context{.matches = {"root"}, .node = &input, .logger = std::move(logger)}, input, output);
     return output;
   } catch (const std::exception& ex) {
-    return nonstd::make_unexpected(ex.what());
+    return std::unexpected{ex.what()};
   }
 }
 
diff --git a/extensions/standard-processors/utils/JoltUtils.h b/extensions/standard-processors/utils/JoltUtils.h
index 62bbaa50a..06f105a8b 100644
--- a/extensions/standard-processors/utils/JoltUtils.h
+++ b/extensions/standard-processors/utils/JoltUtils.h
@@ -100,17 +100,17 @@ class Spec {
 
     // checks if the string is definitely a template (i.e. has an unescaped '&' char)
     static bool check(std::string_view str);
-    static nonstd::expected<Template, std::string> parse(std::string_view str) {
+    static std::expected<Template, std::string> parse(std::string_view str) {
       if (auto res = parse(str.begin(), str.end())) {
         if (res->second != str.end()) {
-          return nonstd::make_unexpected("Failed to fully parse template");
+          return std::unexpected{"Failed to fully parse template"};
         }
         return {std::move(res->first)};
       } else {
-        return nonstd::make_unexpected(std::move(res.error()));
+        return std::unexpected{std::move(res.error())};
       }
     }
-    static nonstd::expected<std::pair<Template, It>, std::string> parse(It begin, It end);
+    static std::expected<std::pair<Template, It>, std::string> parse(It begin, It end);
 
     std::string eval(const Context& ctx) const;
 
@@ -140,7 +140,7 @@ class Spec {
     }
     // checks if the string is definitely a regex (i.e. has an unescaped '*' char)
     static bool check(std::string_view str);
-    static nonstd::expected<Regex, std::string> parse(std::string_view str);
+    static std::expected<Regex, std::string> parse(std::string_view str);
 
     std::optional<std::vector<std::string_view>> match(std::string_view str) const;
 
@@ -194,9 +194,9 @@ class Spec {
     std::map<std::string, Destinations> defaults;  // #thing: a.b
   };
 
-  static nonstd::expected<Spec, std::string> parse(std::string_view str, std::shared_ptr<core::logging::Logger> logger = {});
+  static std::expected<Spec, std::string> parse(std::string_view str, std::shared_ptr<core::logging::Logger> logger = {});
 
-  nonstd::expected<rapidjson::Document, std::string> process(const rapidjson::Value& input, std::shared_ptr<core::logging::Logger> logger = {}) const;
+  std::expected<rapidjson::Document, std::string> process(const rapidjson::Value& input, std::shared_ptr<core::logging::Logger> logger = {}) const;
 
  private:
   explicit Spec(std::unique_ptr<Pattern> value): value_(std::move(value)) {}
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
index 236d2abc6..9b96d8b88 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.cpp
@@ -430,7 +430,7 @@ void ConsumeWindowsEventLog::substituteXMLPercentageItems(pugi::xml_document& do
   doc.traverse(treeWalker);
 }
 
-nonstd::expected<std::string, std::string> ConsumeWindowsEventLog::renderEventAsXml(EVT_HANDLE event_handle) {
+std::expected<std::string, std::string> ConsumeWindowsEventLog::renderEventAsXml(EVT_HANDLE event_handle) {
   logger_->log_trace("Rendering an event");
   WCHAR stackBuffer[4096];
   DWORD size = sizeof(stackBuffer);
@@ -441,32 +441,32 @@ nonstd::expected<std::string, std::string> ConsumeWindowsEventLog::renderEventAs
   DWORD propertyCount = 0;
   if (!EvtRender(nullptr, event_handle, EvtRenderEventXml, size, buf.get(), &used, &propertyCount)) {
     if (ERROR_INSUFFICIENT_BUFFER != GetLastError()) {
-      return nonstd::make_unexpected(fmt::format("EvtRender failed due to {}", wel::getLastError()));
+      return std::unexpected{fmt::format("EvtRender failed due to {}", wel::getLastError())};
     }
     if (used > max_buffer_size_) {
-      return nonstd::make_unexpected(fmt::format("Dropping event because it couldn't be rendered within {} bytes.", max_buffer_size_));
+      return std::unexpected{fmt::format("Dropping event because it couldn't be rendered within {} bytes.", max_buffer_size_)};
     }
     size = used;
     buf.reset((LPWSTR) malloc(size));
     if (!buf) {
-      return nonstd::make_unexpected("malloc failed");
+      return std::unexpected{"malloc failed"};
     }
     if (!EvtRender(nullptr, event_handle, EvtRenderEventXml, size, buf.get(), &used, &propertyCount)) {
-      return nonstd::make_unexpected(fmt::format("EvtRender failed due to {}", wel::getLastError()));
+      return std::unexpected{fmt::format("EvtRender failed due to {}", wel::getLastError())};
     }
   }
   logger_->log_trace("Event rendered with size {}", used);
   return utils::to_string(std::wstring{buf.get()});
 }
 
-nonstd::expected<wel::ProcessedEvent, std::string> ConsumeWindowsEventLog::processEvent(EVT_HANDLE event_handle) {
+std::expected<wel::ProcessedEvent, std::string> ConsumeWindowsEventLog::processEvent(EVT_HANDLE event_handle) {
   auto event_as_xml = renderEventAsXml(event_handle);
   if (!event_as_xml)
-    return nonstd::make_unexpected(event_as_xml.error());
+    return std::unexpected{event_as_xml.error()};
 
   pugi::xml_document doc;
   if (!doc.load_string(event_as_xml->c_str()))
-    return nonstd::make_unexpected("Invalid XML produced");
+    return std::unexpected{"Invalid XML produced"};
 
   wel::ProcessedEvent result;
 
diff --git a/extensions/windows-event-log/ConsumeWindowsEventLog.h b/extensions/windows-event-log/ConsumeWindowsEventLog.h
index cbf6fc706..f6368454f 100644
--- a/extensions/windows-event-log/ConsumeWindowsEventLog.h
+++ b/extensions/windows-event-log/ConsumeWindowsEventLog.h
@@ -216,10 +216,10 @@ class ConsumeWindowsEventLog : public core::ProcessorImpl {
   void createAndCommitFlowFile(const wel::ProcessedEvent& processed_event, core::ProcessSession& session) const;
   wel::WindowsEventLogProvider& getEventLogProvider(const std::string& name);
   wel::HeaderNames createHeaderNames(const std::optional<std::string>& event_header_property) const;
-  nonstd::expected<wel::ProcessedEvent, std::string> processEvent(EVT_HANDLE event_handle);
+  std::expected<wel::ProcessedEvent, std::string> processEvent(EVT_HANDLE event_handle);
   void substituteXMLPercentageItems(pugi::xml_document& doc);
   std::function<std::string(const std::string&)> userIdToUsernameFunction() const;
-  nonstd::expected<std::string, std::string> renderEventAsXml(EVT_HANDLE event_handle);
+  std::expected<std::string, std::string> renderEventAsXml(EVT_HANDLE event_handle);
   bool commitAndSaveBookmark(const std::wstring& bookmarkXml, core::ProcessContext& context, core::ProcessSession& session, core::StateManager* state_manager);
   std::tuple<size_t, std::wstring> processEventLogs(core::ProcessSession& session, EVT_HANDLE event_query_results);
   std::unique_ptr<wel::Bookmark> createBookmark(const core::ProcessContext& context, core::StateManager* state_manager) const;
diff --git a/extensions/windows-event-log/wel/Bookmark.cpp b/extensions/windows-event-log/wel/Bookmark.cpp
index 2adc364c2..1c83221d7 100644
--- a/extensions/windows-event-log/wel/Bookmark.cpp
+++ b/extensions/windows-event-log/wel/Bookmark.cpp
@@ -138,9 +138,9 @@ bool Bookmark::saveBookmark(EVT_HANDLE event_handle) {
   return saveBookmarkXml(*bookmark_xml);
 }
 
-nonstd::expected<std::wstring, std::string> Bookmark::getNewBookmarkXml(EVT_HANDLE hEvent) {
+std::expected<std::wstring, std::string> Bookmark::getNewBookmarkXml(EVT_HANDLE hEvent) {
   if (!EvtUpdateBookmark(hBookmark_.get(), hEvent)) {
-    return nonstd::make_unexpected(fmt::format("EvtUpdateBookmark failed due to {}", wel::getLastError()));
+    return std::unexpected{fmt::format("EvtUpdateBookmark failed due to {}", wel::getLastError())};
   }
   // Render the bookmark as an XML string that can be persisted.
   logger_->log_trace("Rendering new bookmark");
@@ -149,17 +149,17 @@ nonstd::expected<std::wstring, std::string> Bookmark::getNewBookmarkXml(EVT_HAND
   DWORD propertyCount{};
   bool event_render_succeeded_without_buffer = EvtRender(nullptr, hBookmark_.get(), EvtRenderBookmark, bufferSize, nullptr, &bufferUsed, &propertyCount);
   if (event_render_succeeded_without_buffer)
-    return nonstd::make_unexpected("EvtRender failed to determine the required buffer size.");
+    return std::unexpected{"EvtRender failed to determine the required buffer size."};
 
   if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
-    return nonstd::make_unexpected(fmt::format("EvtRender failed due to {}", wel::getLastError()));
+    return std::unexpected{fmt::format("EvtRender failed due to {}", wel::getLastError())};
   }
 
   bufferSize = bufferUsed;
   std::vector<wchar_t> buf(bufferSize / 2 + 1);
 
   if (!EvtRender(nullptr, hBookmark_.get(), EvtRenderBookmark, bufferSize, buf.data(), &bufferUsed, &propertyCount)) {
-    return nonstd::make_unexpected(fmt::format("EvtRender failed due to {}", wel::getLastError()));
+    return std::unexpected{fmt::format("EvtRender failed due to {}", wel::getLastError())};
   }
 
   return std::wstring(buf.data());
diff --git a/extensions/windows-event-log/wel/Bookmark.h b/extensions/windows-event-log/wel/Bookmark.h
index ff9002f17..827351dfc 100644
--- a/extensions/windows-event-log/wel/Bookmark.h
+++ b/extensions/windows-event-log/wel/Bookmark.h
@@ -46,7 +46,7 @@ class Bookmark {
   void setStateManager(core::StateManager* state_manager) { state_manager_ = state_manager; }
   bool isValid() const noexcept;
   /* non-owning */ EVT_HANDLE getBookmarkHandleFromXML();
-  nonstd::expected<std::wstring, std::string> getNewBookmarkXml(EVT_HANDLE hEvent);
+  std::expected<std::wstring, std::string> getNewBookmarkXml(EVT_HANDLE hEvent);
   bool saveBookmarkXml(const std::wstring& bookmarkXml);
 
  private:
diff --git a/extensions/windows-event-log/wel/WindowsEventLog.cpp b/extensions/windows-event-log/wel/WindowsEventLog.cpp
index d929534e3..c5d4b4470 100644
--- a/extensions/windows-event-log/wel/WindowsEventLog.cpp
+++ b/extensions/windows-event-log/wel/WindowsEventLog.cpp
@@ -167,7 +167,7 @@ std::string WindowsEventLogProvider::getEventDataImpl(EVT_FORMAT_MESSAGE_FLAGS f
   return utils::to_string(std::wstring{buffer.get()});
 }
 
-nonstd::expected<std::string, std::error_code> WindowsEventLogProvider::getEventMessage(EVT_HANDLE event_handle) const {
+std::expected<std::string, std::error_code> WindowsEventLogProvider::getEventMessage(EVT_HANDLE event_handle) const {
   std::string returnValue;
   WCHAR stack_buffer[4096];
   DWORD num_chars_in_buffer = sizeof(stack_buffer) / sizeof(stack_buffer[0]);
@@ -182,17 +182,17 @@ nonstd::expected<std::string, std::error_code> WindowsEventLogProvider::getEvent
   DWORD status = GetLastError();
 
   if (status != ERROR_INSUFFICIENT_BUFFER)
-    return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(status));
+    return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(status)};
 
   num_chars_in_buffer = num_chars_used;
   buffer.reset((LPWSTR) malloc(num_chars_in_buffer * sizeof(WCHAR)));
   if (!buffer)
-    return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(ERROR_OUTOFMEMORY));
+    return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(ERROR_OUTOFMEMORY)};
   if (EvtFormatMessage(provider_handle_.get(), event_handle, 0, 0, nullptr,
                        EvtFormatMessageEvent, num_chars_in_buffer,
                        buffer.get(), &num_chars_used))
     return utils::to_string(std::wstring{buffer.get()});
-  return nonstd::make_unexpected(utils::OsUtils::windowsErrorToErrorCode(GetLastError()));
+  return std::unexpected{utils::OsUtils::windowsErrorToErrorCode(GetLastError())};
 }
 
 namespace {
diff --git a/extensions/windows-event-log/wel/WindowsEventLog.h b/extensions/windows-event-log/wel/WindowsEventLog.h
index 95ac9bc50..634d4f441 100644
--- a/extensions/windows-event-log/wel/WindowsEventLog.h
+++ b/extensions/windows-event-log/wel/WindowsEventLog.h
@@ -92,7 +92,7 @@ class WindowsEventLogProvider {
   WindowsEventLogProvider() : provider_handle_(nullptr) {}
   explicit WindowsEventLogProvider(EVT_HANDLE provider_handle) : provider_handle_(provider_handle) {}
 
-  nonstd::expected<std::string, std::error_code> getEventMessage(EVT_HANDLE event_handle) const;
+  std::expected<std::string, std::error_code> getEventMessage(EVT_HANDLE event_handle) const;
   [[nodiscard]] std::string getEventData(EVT_FORMAT_MESSAGE_FLAGS field, const std::string& key, EVT_HANDLE event_handle) const;
 
  private:
diff --git a/libminifi/CMakeLists.txt b/libminifi/CMakeLists.txt
index fba4b84c0..85a7da3f8 100644
--- a/libminifi/CMakeLists.txt
+++ b/libminifi/CMakeLists.txt
@@ -83,13 +83,10 @@ endif()
 include(RangeV3)
 include(Asio)
 include(MagicEnum)
-list(APPEND LIBMINIFI_LIBRARIES minifi-core-framework yaml-cpp ZLIB::ZLIB concurrentqueue RapidJSON spdlog::spdlog Threads::Threads gsl-lite libsodium range-v3 expected-lite asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON fmt::fmt)
+list(APPEND LIBMINIFI_LIBRARIES minifi-core-framework yaml-cpp ZLIB::ZLIB concurrentqueue RapidJSON spdlog::spdlog Threads::Threads gsl-lite libsodium range-v3 asio magic_enum OpenSSL::Crypto OpenSSL::SSL CURL::libcurl RapidJSON fmt::fmt)
 if(NOT WIN32)
     list(APPEND LIBMINIFI_LIBRARIES OSSP::libuuid++)
 endif()
-if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS 9)
-    list(APPEND LIBMINIFI_LIBRARIES stdc++fs)
-endif()
 target_link_libraries(core-minifi ${CMAKE_DL_LIBS} ${LIBMINIFI_LIBRARIES})
 if (APPLE)
     target_link_libraries(core-minifi "-framework CoreFoundation -framework SystemConfiguration")
diff --git a/libminifi/include/FlowController.h b/libminifi/include/FlowController.h
index ddeafba51..5473dd6d0 100644
--- a/libminifi/include/FlowController.h
+++ b/libminifi/include/FlowController.h
@@ -98,7 +98,7 @@ class FlowController : public core::controller::ForwardingControllerServiceProvi
   int16_t resume() override;
   // Unload the current flow, clean the root process group and all its children
   int16_t stop() override;
-  nonstd::expected<void, std::string> applyUpdate(const std::string &source, const std::string &configuration, bool persist, const std::optional<std::string>& flow_id) override;
+  std::expected<void, std::string> applyUpdate(const std::string &source, const std::string &configuration, bool persist, const std::optional<std::string>& flow_id) override;
   int16_t drainRepositories() override {
     return -1;
   }
@@ -120,7 +120,7 @@ class FlowController : public core::controller::ForwardingControllerServiceProvi
   // first it will validate the payload with the current root node config for flowController
   // like FlowController id/name is the same and new version is greater than the current version
   // after that, it will apply the configuration
-  nonstd::expected<void, std::string> applyConfiguration(const std::string &source, const std::string &configurePayload, const std::optional<std::string>& flow_id = std::nullopt);
+  std::expected<void, std::string> applyConfiguration(const std::string &source, const std::string &configurePayload, const std::optional<std::string>& flow_id = std::nullopt);
 
   std::string getName() const override {
     return root_wrapper_.getName();
diff --git a/libminifi/include/SchedulingAgent.h b/libminifi/include/SchedulingAgent.h
index f1e3b892b..d5cab7af5 100644
--- a/libminifi/include/SchedulingAgent.h
+++ b/libminifi/include/SchedulingAgent.h
@@ -86,10 +86,10 @@ class SchedulingAgent {
 
   bool processorYields(core::Processor* processor) const;
 
-  nonstd::expected<void, std::exception_ptr> triggerAndCommit(core::Processor* processor,
+  std::expected<void, std::exception_ptr> triggerAndCommit(core::Processor* processor,
       const std::shared_ptr<core::ProcessContext>& process_context,
       const std::shared_ptr<core::ProcessSessionFactory>& session_factory);
-  nonstd::expected<bool, std::exception_ptr> trigger(core::Processor* processor,
+  std::expected<bool, std::exception_ptr> trigger(core::Processor* processor,
       const std::shared_ptr<core::ProcessContext>& process_context,
       const std::shared_ptr<core::ProcessSession>& process_session);
 
diff --git a/libminifi/include/c2/C2Utils.h b/libminifi/include/c2/C2Utils.h
index 7389e489e..4911cc5aa 100644
--- a/libminifi/include/c2/C2Utils.h
+++ b/libminifi/include/c2/C2Utils.h
@@ -36,6 +36,6 @@ inline constexpr const char* CONTROLLER_SOCKET_METRICS_PUBLISHER = "ControllerSo
 
 bool isC2Enabled(const std::shared_ptr<Configure>& configuration);
 bool isControllerSocketEnabled(const std::shared_ptr<Configure>& configuration);
-nonstd::expected<std::shared_ptr<io::BufferStream>, std::string> createDebugBundleArchive(const std::map<std::string, std::unique_ptr<io::InputStream>>& files);
+std::expected<std::shared_ptr<io::BufferStream>, std::string> createDebugBundleArchive(const std::map<std::string, std::unique_ptr<io::InputStream>>& files);
 
 }  // namespace org::apache::nifi::minifi::c2
diff --git a/libminifi/include/c2/FlowStatusBuilder.h b/libminifi/include/c2/FlowStatusBuilder.h
index 63ccd6255..7770d68f8 100644
--- a/libminifi/include/c2/FlowStatusBuilder.h
+++ b/libminifi/include/c2/FlowStatusBuilder.h
@@ -40,14 +40,14 @@ class FlowStatusBuilder {
   void addProcessorStatus(core::Processor* processor, rapidjson::Value& processor_status_list, rapidjson::Document::AllocatorType& allocator,
     const std::unordered_set<FlowStatusQueryOption>& options);
   core::Processor* findProcessor(const std::string& processor_id);
-  nonstd::expected<void, std::string> addProcessorStatuses(rapidjson::Value& processor_status_list, rapidjson::Document::AllocatorType& allocator,
+  std::expected<void, std::string> addProcessorStatuses(rapidjson::Value& processor_status_list, rapidjson::Document::AllocatorType& allocator,
     const std::string& identifier, const std::unordered_set<FlowStatusQueryOption>& options);
   static void addConnectionStatus(Connection* connection, rapidjson::Value& connection_status_list, rapidjson::Document::AllocatorType& allocator,
     const std::unordered_set<FlowStatusQueryOption>& options);
-  nonstd::expected<void, std::string> addConnectionStatuses(rapidjson::Value& connection_status_list, rapidjson::Document::AllocatorType& allocator,
+  std::expected<void, std::string> addConnectionStatuses(rapidjson::Value& connection_status_list, rapidjson::Document::AllocatorType& allocator,
     const std::string& identifier, const std::unordered_set<FlowStatusQueryOption>& options);
-  nonstd::expected<void, std::string> addInstanceStatus(rapidjson::Value& instance_status, rapidjson::Document::AllocatorType& allocator, const std::unordered_set<FlowStatusQueryOption>& options);
-  nonstd::expected<void, std::string> addSystemDiagnosticsStatus(rapidjson::Value& system_diagnostics_status, rapidjson::Document::AllocatorType& allocator,
+  std::expected<void, std::string> addInstanceStatus(rapidjson::Value& instance_status, rapidjson::Document::AllocatorType& allocator, const std::unordered_set<FlowStatusQueryOption>& options);
+  std::expected<void, std::string> addSystemDiagnosticsStatus(rapidjson::Value& system_diagnostics_status, rapidjson::Document::AllocatorType& allocator,
     const std::unordered_set<FlowStatusQueryOption>& options);
 
   std::mutex root_mutex_;
diff --git a/libminifi/include/core/ProcessContextImpl.h b/libminifi/include/core/ProcessContextImpl.h
index 32ab936e5..9466e69df 100644
--- a/libminifi/include/core/ProcessContextImpl.h
+++ b/libminifi/include/core/ProcessContextImpl.h
@@ -65,14 +65,14 @@ class ProcessContextImpl : public core::VariableRegistryImpl, public virtual Pro
   bool hasNonEmptyProperty(std::string_view name) const override;
 
   bool isRunning() const override;
-  nonstd::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile*) const override;
-  nonstd::expected<void, std::error_code> setProperty(std::string_view name, std::string value) override;
-  nonstd::expected<void, std::error_code> clearProperty(std::string_view name) override;
-  nonstd::expected<std::string, std::error_code> getDynamicProperty(std::string_view name, const FlowFile*) const override;
-  nonstd::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) override;
-  nonstd::expected<std::string, std::error_code> getRawProperty(std::string_view name) const override;
-  nonstd::expected<std::string, std::error_code> getRawDynamicProperty(std::string_view name) const override;
-  [[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
+  std::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile*) const override;
+  std::expected<void, std::error_code> setProperty(std::string_view name, std::string value) override;
+  std::expected<void, std::error_code> clearProperty(std::string_view name) override;
+  std::expected<std::string, std::error_code> getDynamicProperty(std::string_view name, const FlowFile*) const override;
+  std::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) override;
+  std::expected<std::string, std::error_code> getRawProperty(std::string_view name) const override;
+  std::expected<std::string, std::error_code> getRawDynamicProperty(std::string_view name) const override;
+  [[nodiscard]] std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
   bool hasIncomingConnections() const override;
 
   void addAutoTerminatedRelationship(const core::Relationship& relationship) override;
diff --git a/libminifi/include/core/ProcessSession.h b/libminifi/include/core/ProcessSession.h
index 0abc13a02..72494dd1b 100644
--- a/libminifi/include/core/ProcessSession.h
+++ b/libminifi/include/core/ProcessSession.h
@@ -57,7 +57,7 @@ class ProcessSessionImpl : public ReferenceContainerImpl, public virtual Process
   void commit() override;
   void rollback() override;
 
-  nonstd::expected<void, std::string> rollbackNoThrow() noexcept override;
+  std::expected<void, std::string> rollbackNoThrow() noexcept override;
 
   std::shared_ptr<provenance::ProvenanceReporter> getProvenanceReporter() override {
     return provenance_report_;
diff --git a/libminifi/include/core/controller/ControllerService.h b/libminifi/include/core/controller/ControllerService.h
index a4c26f547..8133c4dd8 100644
--- a/libminifi/include/core/controller/ControllerService.h
+++ b/libminifi/include/core/controller/ControllerService.h
@@ -52,8 +52,8 @@ class ControllerService : public ConfigurableComponentImpl, public CoreComponent
   class ControllerServiceContextImpl : public ControllerServiceContext {
    public:
     explicit ControllerServiceContextImpl(ControllerService& impl): impl_(impl) {}
-    [[nodiscard]] nonstd::expected<std::string, std::error_code> getProperty(std::string_view name) const override;
-    [[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
+    [[nodiscard]] std::expected<std::string, std::error_code> getProperty(std::string_view name) const override;
+    [[nodiscard]] std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const override;
 
    private:
     ControllerService& impl_;
@@ -146,11 +146,11 @@ inline void ControllerService::ControllerServiceDescriptorImpl::setSupportedProp
   impl_.setSupportedProperties(properties);
 }
 
-inline nonstd::expected<std::string, std::error_code> ControllerService::ControllerServiceContextImpl::getProperty(std::string_view name) const {
+inline std::expected<std::string, std::error_code> ControllerService::ControllerServiceContextImpl::getProperty(std::string_view name) const {
   return impl_.getProperty(name);
 }
 
-inline nonstd::expected<std::vector<std::string>, std::error_code> ControllerService::ControllerServiceContextImpl::getAllPropertyValues(std::string_view name) const {
+inline std::expected<std::vector<std::string>, std::error_code> ControllerService::ControllerServiceContextImpl::getAllPropertyValues(std::string_view name) const {
   return impl_.getAllPropertyValues(name);
 }
 
diff --git a/libminifi/include/core/flow/Node.h b/libminifi/include/core/flow/Node.h
index f127288b7..c237211c4 100644
--- a/libminifi/include/core/flow/Node.h
+++ b/libminifi/include/core/flow/Node.h
@@ -24,7 +24,7 @@
 #include <string>
 #include <memory>
 #include <utility>
-#include "nonstd/expected.hpp"
+#include <expected>
 #include "utils/StringUtils.h"
 #include "minifi-cpp/utils/gsl.h"
 
diff --git a/libminifi/include/core/state/UpdateController.h b/libminifi/include/core/state/UpdateController.h
index 652f43f8d..bed22a5b6 100644
--- a/libminifi/include/core/state/UpdateController.h
+++ b/libminifi/include/core/state/UpdateController.h
@@ -159,7 +159,7 @@ class StateMonitor : public StateController {
   /**
    * Apply an update with the provided string.
    */
-  virtual nonstd::expected<void, std::string> applyUpdate(const std::string & source, const std::string &configuration,
+  virtual std::expected<void, std::string> applyUpdate(const std::string & source, const std::string &configuration,
                                                           bool persist = false, const std::optional<std::string>& flow_id = std::nullopt) = 0;
   /**
    * Returns uptime for this module.
diff --git a/libminifi/include/core/state/nodes/ResponseNodeLoader.h b/libminifi/include/core/state/nodes/ResponseNodeLoader.h
index fd606a609..d4c4240af 100644
--- a/libminifi/include/core/state/nodes/ResponseNodeLoader.h
+++ b/libminifi/include/core/state/nodes/ResponseNodeLoader.h
@@ -55,7 +55,7 @@ class ResponseNodeLoaderImpl : public ResponseNodeLoader {
  private:
   void initializeComponentMetrics();
   std::vector<SharedResponseNode> getComponentMetricsNodes(const std::string& metrics_class) const;
-  nonstd::expected<SharedResponseNode, std::string> getSystemMetricsNode(const std::string& clazz);
+  std::expected<SharedResponseNode, std::string> getSystemMetricsNode(const std::string& clazz);
   std::vector<SharedResponseNode> getResponseNodes(const std::string& clazz);
   void initializeRepositoryMetrics(const SharedResponseNode& response_node) const;
   void initializeQueueMetrics(const SharedResponseNode& response_node) const;
diff --git a/libminifi/include/utils/file/AssetManager.h b/libminifi/include/utils/file/AssetManager.h
index e90561c2e..7d7d41036 100644
--- a/libminifi/include/utils/file/AssetManager.h
+++ b/libminifi/include/utils/file/AssetManager.h
@@ -53,8 +53,8 @@ class AssetManager {
  public:
   explicit AssetManager(const Configure& configuration);
 
-  nonstd::expected<void, std::string> sync(const AssetLayout& layout,
-      const std::function<nonstd::expected<void, std::string>(std::string_view /*url*/, const std::filesystem::path& /*tmp_path*/)>& fetch);
+  std::expected<void, std::string> sync(const AssetLayout& layout,
+      const std::function<std::expected<void, std::string>(std::string_view /*url*/, const std::filesystem::path& /*tmp_path*/)>& fetch);
 
   std::string hash() const;
 
diff --git a/libminifi/src/FlowController.cpp b/libminifi/src/FlowController.cpp
index a9eaa280c..a6b199b98 100644
--- a/libminifi/src/FlowController.cpp
+++ b/libminifi/src/FlowController.cpp
@@ -107,20 +107,20 @@ FlowController::~FlowController() {
   logger_->log_trace("Destroying FlowController");
 }
 
-nonstd::expected<void, std::string> FlowController::applyConfiguration(const std::string &source, const std::string &configurePayload, const std::optional<std::string>& flow_id) {
+std::expected<void, std::string> FlowController::applyConfiguration(const std::string &source, const std::string &configurePayload, const std::optional<std::string>& flow_id) {
   std::unique_ptr<core::ProcessGroup> newRoot;
   try {
     newRoot = updateFromPayload(source, configurePayload, flow_id);
   } catch (const std::exception& ex) {
     logger_->log_error("Invalid configuration payload, type: {}, what: {}", typeid(ex).name(), ex.what());
-    return nonstd::make_unexpected(fmt::format("Invalid configuration payload, type: {}, what: {}", typeid(ex).name(), ex.what()));
+    return std::unexpected{fmt::format("Invalid configuration payload, type: {}, what: {}", typeid(ex).name(), ex.what())};
   } catch (...) {
     logger_->log_error("Invalid configuration payload, type: {}", getCurrentExceptionTypeName());
-    return nonstd::make_unexpected(fmt::format("Invalid configuration payload, type: {}", getCurrentExceptionTypeName()));
+    return std::unexpected{fmt::format("Invalid configuration payload, type: {}", getCurrentExceptionTypeName())};
   }
 
   if (newRoot == nullptr)
-    return nonstd::make_unexpected("Could not create root process group");
+    return std::unexpected{"Could not create root process group"};
 
   logger_->log_info("Starting to reload Flow Controller with flow control name {}, version {}", newRoot->getName(), newRoot->getVersion());
 
@@ -163,7 +163,7 @@ nonstd::expected<void, std::string> FlowController::applyConfiguration(const std
   }
 
   if (!started) {
-    return nonstd::make_unexpected("Failed to start flow");
+    return std::unexpected{"Failed to start flow"};
   }
   return {};
 }
@@ -379,7 +379,7 @@ std::vector<std::string> FlowController::getSupportedConfigurationFormats() cons
   return flow_configuration_->getSupportedFormats();
 }
 
-nonstd::expected<void, std::string> FlowController::applyUpdate(const std::string &source, const std::string &configuration, bool persist, const std::optional<std::string>& flow_id) {
+std::expected<void, std::string> FlowController::applyUpdate(const std::string &source, const std::string &configuration, bool persist, const std::optional<std::string>& flow_id) {
   auto result = applyConfiguration(source, configuration, flow_id);
   if (result) {
     if (persist) {
diff --git a/libminifi/src/SchedulingAgent.cpp b/libminifi/src/SchedulingAgent.cpp
index aed4c2a8d..1a58263ef 100644
--- a/libminifi/src/SchedulingAgent.cpp
+++ b/libminifi/src/SchedulingAgent.cpp
@@ -62,7 +62,7 @@ bool SchedulingAgent::processorYields(core::Processor* processor) const {
   return false;
 }
 
-nonstd::expected<void, std::exception_ptr> SchedulingAgent::triggerAndCommit(core::Processor* processor,
+std::expected<void, std::exception_ptr> SchedulingAgent::triggerAndCommit(core::Processor* processor,
     const std::shared_ptr<core::ProcessContext>& process_context,
     const std::shared_ptr<core::ProcessSessionFactory>& session_factory) {
   gsl_Expects(processor);
@@ -92,17 +92,17 @@ nonstd::expected<void, std::exception_ptr> SchedulingAgent::triggerAndCommit(cor
     logger_->log_warn("Caught Exception during SchedulingAgent::onTrigger of processor {} (uuid: {}), type: {}, what: {}",
         processor->getName(), processor->getUUIDStr(), typeid(exception).name(), exception.what());
     processor->yield(admin_yield_duration_);
-    return nonstd::make_unexpected(std::current_exception());
+    return std::unexpected{std::current_exception()};
   } catch (...) {
     logger_->log_warn("Caught Exception during SchedulingAgent::onTrigger of processor {} (uuid: {}), type: {}",
         processor->getName(), processor->getUUIDStr(), getCurrentExceptionTypeName());
     processor->yield(admin_yield_duration_);
-    return nonstd::make_unexpected(std::current_exception());
+    return std::unexpected{std::current_exception()};
   }
   return {};
 }
 
-nonstd::expected<bool, std::exception_ptr> SchedulingAgent::trigger(core::Processor* processor,
+std::expected<bool, std::exception_ptr> SchedulingAgent::trigger(core::Processor* processor,
     const std::shared_ptr<core::ProcessContext>& process_context,
     const std::shared_ptr<core::ProcessSession>& process_session) {
   gsl_Expects(processor);
@@ -130,12 +130,12 @@ nonstd::expected<bool, std::exception_ptr> SchedulingAgent::trigger(core::Proces
     logger_->log_warn("Caught Exception during SchedulingAgent::onTrigger of processor {} (uuid: {}), type: {}, what: {}",
         processor->getName(), processor->getUUIDStr(), typeid(exception).name(), exception.what());
     processor->yield(admin_yield_duration_);
-    return nonstd::make_unexpected(std::current_exception());
+    return std::unexpected{std::current_exception()};
   } catch (...) {
     logger_->log_warn("Caught Exception during SchedulingAgent::onTrigger of processor {} (uuid: {}), type: {}",
         processor->getName(), processor->getUUIDStr(), getCurrentExceptionTypeName());
     processor->yield(admin_yield_duration_);
-    return nonstd::make_unexpected(std::current_exception());
+    return std::unexpected{std::current_exception()};
   }
   return true;
 }
diff --git a/libminifi/src/c2/C2Agent.cpp b/libminifi/src/c2/C2Agent.cpp
index ec8ab6842..ba96745ba 100644
--- a/libminifi/src/c2/C2Agent.cpp
+++ b/libminifi/src/c2/C2Agent.cpp
@@ -321,14 +321,14 @@ struct C2DebugBundleError : public C2TransferError {
   using C2TransferError::C2TransferError;
 };
 
-nonstd::expected<void, std::string> fetchAssetAsFile(C2Protocol& protocol, const std::string& url, const std::filesystem::path& file_path, const std::shared_ptr<core::logging::Logger>& logger) {
+std::expected<void, std::string> fetchAssetAsFile(C2Protocol& protocol, const std::string& url, const std::filesystem::path& file_path, const std::shared_ptr<core::logging::Logger>& logger) {
   if (utils::file::create_dir(file_path.parent_path()) != 0) {
-    return nonstd::make_unexpected(fmt::format("Failed to create directory '{}'", file_path.parent_path().string()));
+    return std::unexpected{fmt::format("Failed to create directory '{}'", file_path.parent_path().string())};
   }
 
   std::ofstream file{file_path, std::ofstream::binary};
   if (!file) {
-    return nonstd::make_unexpected(fmt::format("Failed to open file to write '{}'", file_path.string()));
+    return std::unexpected{fmt::format("Failed to open file to write '{}'", file_path.string())};
   }
   bool success = protocol.fetch(url, [&] (std::span<const char> chunk) {
     file.write(chunk.data(), gsl::narrow<std::streamsize>(chunk.size()));
@@ -343,7 +343,7 @@ nonstd::expected<void, std::string> fetchAssetAsFile(C2Protocol& protocol, const
     } else {
       logger->log_info("Successfully removed partial asset file '{}'", file_path.string());
     }
-    return nonstd::make_unexpected(fmt::format("Failed to fetch asset from '{}'", url));
+    return std::unexpected{fmt::format("Failed to fetch asset from '{}'", url)};
   }
   return {};
 }
@@ -801,12 +801,12 @@ void C2Agent::handle_sync(const org::apache::nifi::minifi::c2::C2ContentResponse
       send_error(fmt::format("Malformed request, 'resourceList[{}]' is not an object", resource_idx));
       return;
     }
-    auto get_member_str = [&] (const char* key) -> nonstd::expected<std::string_view, std::string> {
+    auto get_member_str = [&] (const char* key) -> std::expected<std::string_view, std::string> {
       if (!resource.HasMember(key)) {
-        return nonstd::make_unexpected(fmt::format("Malformed request, 'resourceList[{}]' has no member '{}'", resource_idx, key));
+        return std::unexpected{fmt::format("Malformed request, 'resourceList[{}]' has no member '{}'", resource_idx, key)};
       }
       if (!resource[key].IsString()) {
-        return nonstd::make_unexpected(fmt::format("Malformed request, 'resourceList[{}].{}' is not a string", resource_idx, key));
+        return std::unexpected{fmt::format("Malformed request, 'resourceList[{}].{}' is not a string", resource_idx, key)};
       }
       return std::string_view{resource[key].GetString(), resource[key].GetStringLength()};
     };
@@ -855,10 +855,10 @@ void C2Agent::handle_sync(const org::apache::nifi::minifi::c2::C2ContentResponse
     });
   }
 
-  auto result = asset_manager_->sync(asset_layout, [&] (std::string_view url, const std::filesystem::path& file_path) -> nonstd::expected<void, std::string> {
+  auto result = asset_manager_->sync(asset_layout, [&] (std::string_view url, const std::filesystem::path& file_path) -> std::expected<void, std::string> {
     auto resolved_url = resolveUrl(std::string{url});
     if (!resolved_url) {
-      return nonstd::make_unexpected("Couldn't resolve url");
+      return std::unexpected{"Couldn't resolve url"};
     }
     return fetchAssetAsFile(*protocol_, resolved_url.value(), file_path, logger_);
   });
diff --git a/libminifi/src/c2/C2Utils.cpp b/libminifi/src/c2/C2Utils.cpp
index 00a8f6d9e..d6f998295 100644
--- a/libminifi/src/c2/C2Utils.cpp
+++ b/libminifi/src/c2/C2Utils.cpp
@@ -34,29 +34,29 @@ bool isControllerSocketEnabled(const std::shared_ptr<Configure>& configuration)
   return utils::string::toBool(controller_socket_enable_str).value_or(false);
 }
 
-nonstd::expected<std::shared_ptr<io::BufferStream>, std::string> createDebugBundleArchive(const std::map<std::string, std::unique_ptr<io::InputStream>>& files) {
+std::expected<std::shared_ptr<io::BufferStream>, std::string> createDebugBundleArchive(const std::map<std::string, std::unique_ptr<io::InputStream>>& files) {
   auto stream_provider = core::ClassLoader::getDefaultClassLoader().instantiate<io::ArchiveStreamProvider>(
       "ArchiveStreamProvider", "ArchiveStreamProvider");
   if (!stream_provider) {
-    return nonstd::make_unexpected("Couldn't instantiate archiver provider");
+    return std::unexpected{"Couldn't instantiate archiver provider"};
   }
   auto bundle = std::make_shared<io::BufferStream>();
   auto archiver = stream_provider->createWriteStream(9, "gzip", bundle, nullptr);
   if (!archiver) {
-    return nonstd::make_unexpected("Couldn't instantiate archiver");
+    return std::unexpected{"Couldn't instantiate archiver"};
   }
   for (const auto& [filename, stream] : files) {
     size_t file_size = stream->size();
     if (!archiver->newEntry({filename, file_size})) {
-      return nonstd::make_unexpected("Couldn't initialize archive entry for '" + filename + "'");
+      return std::unexpected{"Couldn't initialize archive entry for '" + filename + "'"};
     }
     if (gsl::narrow<int64_t>(file_size) != minifi::internal::pipe(*stream, *archiver).toI64()) {
       // we have touched the input streams, they cannot be reused
-      return nonstd::make_unexpected("Error while writing file '" + filename + "' into the debug bundle");
+      return std::unexpected{"Error while writing file '" + filename + "' into the debug bundle"};
     }
   }
   if (!archiver->finish()) {
-    return nonstd::make_unexpected("Failed to complete debug bundle archive");
+    return std::unexpected{"Failed to complete debug bundle archive"};
   }
   return bundle;
 }
diff --git a/libminifi/src/c2/FlowStatusBuilder.cpp b/libminifi/src/c2/FlowStatusBuilder.cpp
index b4bcb8986..7512c31a1 100644
--- a/libminifi/src/c2/FlowStatusBuilder.cpp
+++ b/libminifi/src/c2/FlowStatusBuilder.cpp
@@ -109,7 +109,7 @@ core::Processor* FlowStatusBuilder::findProcessor(const std::string& processor_i
   return nullptr;
 }
 
-nonstd::expected<void, std::string> FlowStatusBuilder::addProcessorStatuses(rapidjson::Value& processor_status_list, rapidjson::Document::AllocatorType& allocator,
+std::expected<void, std::string> FlowStatusBuilder::addProcessorStatuses(rapidjson::Value& processor_status_list, rapidjson::Document::AllocatorType& allocator,
     const std::string& identifier, const std::unordered_set<FlowStatusQueryOption>& options) {
   static const std::unordered_set<FlowStatusQueryOption> valid_options = {
     FlowStatusQueryOption::health,
@@ -120,14 +120,14 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addProcessorStatuses(rapi
   for (const auto& option : options) {
     if (!valid_options.contains(option)) {
       logger_->log_error("Unable to get processorStatus: Invalid query option for processor status '{}'", magic_enum::enum_name(option));
-      return nonstd::make_unexpected(fmt::format("Unable to get processorStatus: Invalid query option for processor status '{}'", magic_enum::enum_name(option)));
+      return std::unexpected{fmt::format("Unable to get processorStatus: Invalid query option for processor status '{}'", magic_enum::enum_name(option))};
     }
   }
 
   std::lock_guard<std::mutex> guard(root_mutex_);
   if (identifier.empty()) {
     logger_->log_error("Unable to get processorStatus: Query is incomplete");
-    return nonstd::make_unexpected("Unable to get processorStatus: Query is incomplete");
+    return std::unexpected{"Unable to get processorStatus: Query is incomplete"};
   } else if (identifier == "all") {
     for (const auto processor : processors_) {
       addProcessorStatus(processor, processor_status_list, allocator, options);
@@ -136,7 +136,7 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addProcessorStatuses(rapi
     auto processor = findProcessor(identifier);
     if (!processor) {
       logger_->log_error("Unable to get processorStatus: No processor with key '{}' to report status on", identifier);
-      return nonstd::make_unexpected(fmt::format("Unable to get processorStatus: No processor with key '{}' to report status on", identifier));
+      return std::unexpected{fmt::format("Unable to get processorStatus: No processor with key '{}' to report status on", identifier)};
     }
     addProcessorStatus(processor, processor_status_list, allocator, options);
   }
@@ -164,18 +164,18 @@ void FlowStatusBuilder::addConnectionStatus(Connection* connection, rapidjson::V
   connection_status_list.PushBack(connection_status, allocator);
 }
 
-nonstd::expected<void, std::string> FlowStatusBuilder::addConnectionStatuses(rapidjson::Value& connection_status_list, rapidjson::Document::AllocatorType& allocator,
+std::expected<void, std::string> FlowStatusBuilder::addConnectionStatuses(rapidjson::Value& connection_status_list, rapidjson::Document::AllocatorType& allocator,
     const std::string& identifier, const std::unordered_set<FlowStatusQueryOption>& options) {
   for (const auto& option : options) {
     if (option != FlowStatusQueryOption::health) {
       logger_->log_error("Unable to get connectionStatus: Invalid query option for connection status '{}'", magic_enum::enum_name(option));
-      return nonstd::make_unexpected(fmt::format("Unable to get connectionStatus: Invalid query option for connection status '{}'", magic_enum::enum_name(option)));
+      return std::unexpected{fmt::format("Unable to get connectionStatus: Invalid query option for connection status '{}'", magic_enum::enum_name(option))};
     }
   }
   std::lock_guard<std::mutex> guard(root_mutex_);
   if (identifier.empty()) {
     logger_->log_error("Unable to get connectionStatus: Query is incomplete");
-    return nonstd::make_unexpected("Unable to get connectionStatus: Query is incomplete");
+    return std::unexpected{"Unable to get connectionStatus: Query is incomplete"};
   }
 
   if (identifier == "all") {
@@ -187,14 +187,14 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addConnectionStatuses(rap
       addConnectionStatus(connection_map_[identifier], connection_status_list, allocator, options);
     } else {
       logger_->log_error("Unable to get connectionStatus: No connection with key '{}' to report status on", identifier);
-      return nonstd::make_unexpected(fmt::format("Unable to get connectionStatus: No connection with key '{}' to report status on", identifier));
+      return std::unexpected{fmt::format("Unable to get connectionStatus: No connection with key '{}' to report status on", identifier)};
     }
   }
 
   return {};
 }
 
-nonstd::expected<void, std::string> FlowStatusBuilder::addInstanceStatus(rapidjson::Value& instance_status, rapidjson::Document::AllocatorType& allocator,
+std::expected<void, std::string> FlowStatusBuilder::addInstanceStatus(rapidjson::Value& instance_status, rapidjson::Document::AllocatorType& allocator,
    const std::unordered_set<FlowStatusQueryOption>& options) {
   static const std::unordered_set<FlowStatusQueryOption> valid_options = {
     FlowStatusQueryOption::health,
@@ -205,7 +205,7 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addInstanceStatus(rapidjs
   for (const auto& option : options) {
     if (!valid_options.contains(option)) {
       logger_->log_error("Unable to get instance: Invalid query option for instance status '{}'", magic_enum::enum_name(option));
-      return nonstd::make_unexpected(fmt::format("Unable to get instance: Invalid query option for instance status '{}'", magic_enum::enum_name(option)));
+      return std::unexpected{fmt::format("Unable to get instance: Invalid query option for instance status '{}'", magic_enum::enum_name(option))};
     }
   }
 
@@ -273,7 +273,7 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addInstanceStatus(rapidjs
   return {};
 }
 
-nonstd::expected<void, std::string> FlowStatusBuilder::addSystemDiagnosticsStatus(rapidjson::Value& system_diagnostics_status, rapidjson::Document::AllocatorType& allocator,
+std::expected<void, std::string> FlowStatusBuilder::addSystemDiagnosticsStatus(rapidjson::Value& system_diagnostics_status, rapidjson::Document::AllocatorType& allocator,
     const std::unordered_set<FlowStatusQueryOption>& options) {
   static const std::unordered_set<FlowStatusQueryOption> valid_options = {
     FlowStatusQueryOption::processorstats,
@@ -284,7 +284,7 @@ nonstd::expected<void, std::string> FlowStatusBuilder::addSystemDiagnosticsStatu
   for (const auto& option : options) {
     if (!valid_options.contains(option)) {
       logger_->log_error("Unable to get systemDiagnostics: Invalid query option for system diagnostics '{}'", magic_enum::enum_name(option));
-      return nonstd::make_unexpected(fmt::format("Unable to get systemDiagnostics: Invalid query option for system diagnostics '{}'", magic_enum::enum_name(option)));
+      return std::unexpected{fmt::format("Unable to get systemDiagnostics: Invalid query option for system diagnostics '{}'", magic_enum::enum_name(option))};
     }
   }
 
@@ -350,7 +350,7 @@ rapidjson::Document FlowStatusBuilder::buildFlowStatus(const std::vector<FlowSta
 
   auto allocator = doc.GetAllocator();
 
-  auto handleError = [&doc, &allocator](const nonstd::expected<void, std::string>& result) {
+  auto handleError = [&doc, &allocator](const std::expected<void, std::string>& result) {
     if (result) {
       return;
     }
diff --git a/libminifi/src/core/ProcessContextImpl.cpp b/libminifi/src/core/ProcessContextImpl.cpp
index 34846cc8a..841b74ca5 100644
--- a/libminifi/src/core/ProcessContextImpl.cpp
+++ b/libminifi/src/core/ProcessContextImpl.cpp
@@ -32,7 +32,7 @@ class StandardProcessorInfo : public ProcessorInfo {
   [[nodiscard]] utils::Identifier getUUID() const override {return proc_.getUUID();}
   [[nodiscard]] std::shared_ptr<state::FlowIdentifier> getFlowIdentifier() const override {return proc_.getFlowIdentifier();}
   [[nodiscard]] std::map<std::string, core::Property, std::less<>> getSupportedProperties() const override {return proc_.getSupportedProperties();}
-  [[nodiscard]] nonstd::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const override {return proc_.getSupportedProperty(name);}
+  [[nodiscard]] std::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const override {return proc_.getSupportedProperty(name);}
 
  private:
   Processor& proc_;
@@ -99,10 +99,10 @@ uint8_t ProcessContextImpl::getMaxConcurrentTasks() const { return processor_.ge
 
 void ProcessContextImpl::yield() { processor_.yield(); }
 
-nonstd::expected<std::string, std::error_code> ProcessContextImpl::getProperty(const std::string_view name, const FlowFile* flow_file) const {
+std::expected<std::string, std::error_code> ProcessContextImpl::getProperty(const std::string_view name, const FlowFile* flow_file) const {
   const auto property = getProcessorInfo().getSupportedProperty(name);
   if (!property) {
-    return nonstd::make_unexpected(PropertyErrorCode::NotSupportedProperty);
+    return std::unexpected{PropertyErrorCode::NotSupportedProperty};
   }
 
   if (!property->supportsExpressionLanguage()) {
@@ -116,22 +116,22 @@ nonstd::expected<std::string, std::error_code> ProcessContextImpl::getProperty(c
   expression::Parameters p(this, flow_file);
   auto result = cached_expressions_[std::string{name}](p).asString();
   if (!property->getValidator().validate(result)) {
-    return nonstd::make_unexpected(PropertyErrorCode::ValidationFailed);
+    return std::unexpected{PropertyErrorCode::ValidationFailed};
   }
   return result;
 }
 
-nonstd::expected<void, std::error_code> ProcessContextImpl::setProperty(const std::string_view name, std::string value) {
+std::expected<void, std::error_code> ProcessContextImpl::setProperty(const std::string_view name, std::string value) {
   cached_expressions_.erase(std::string{name});
   return getProcessor().setProperty(name, std::move(value));
 }
 
-nonstd::expected<void, std::error_code> ProcessContextImpl::clearProperty(const std::string_view name) {
+std::expected<void, std::error_code> ProcessContextImpl::clearProperty(const std::string_view name) {
   cached_expressions_.erase(std::string{name});
   return getProcessor().clearProperty(name);
 }
 
-nonstd::expected<std::string, std::error_code> ProcessContextImpl::getDynamicProperty(const std::string_view name, const FlowFile* flow_file) const {
+std::expected<std::string, std::error_code> ProcessContextImpl::getDynamicProperty(const std::string_view name, const FlowFile* flow_file) const {
   if (!cached_dynamic_expressions_.contains(name)) {
     auto expression_str = getProcessor().getDynamicProperty(name);
     if (!expression_str) { return expression_str; }
@@ -141,20 +141,20 @@ nonstd::expected<std::string, std::error_code> ProcessContextImpl::getDynamicPro
   return cached_dynamic_expressions_[std::string{name}](p).asString();
 }
 
-nonstd::expected<std::string, std::error_code> ProcessContextImpl::getRawProperty(const std::string_view name) const {
+std::expected<std::string, std::error_code> ProcessContextImpl::getRawProperty(const std::string_view name) const {
   return getProcessor().getProperty(name);
 }
 
-nonstd::expected<std::string, std::error_code> ProcessContextImpl::getRawDynamicProperty(const std::string_view name) const {
+std::expected<std::string, std::error_code> ProcessContextImpl::getRawDynamicProperty(const std::string_view name) const {
   return getProcessor().getDynamicProperty(name);
 }
 
-nonstd::expected<void, std::error_code> ProcessContextImpl::setDynamicProperty(std::string name, std::string value) {
+std::expected<void, std::error_code> ProcessContextImpl::setDynamicProperty(std::string name, std::string value) {
   cached_dynamic_expressions_.erase(name);
   return getProcessor().setDynamicProperty(std::move(name), std::move(value));
 }
 
-[[nodiscard]] nonstd::expected<std::vector<std::string>, std::error_code> ProcessContextImpl::getAllPropertyValues(std::string_view name) const {
+[[nodiscard]] std::expected<std::vector<std::string>, std::error_code> ProcessContextImpl::getAllPropertyValues(std::string_view name) const {
   return getProcessor().getAllPropertyValues(name);
 }
 
diff --git a/libminifi/src/core/ProcessSession.cpp b/libminifi/src/core/ProcessSession.cpp
index 662f2b00e..a86f80e67 100644
--- a/libminifi/src/core/ProcessSession.cpp
+++ b/libminifi/src/core/ProcessSession.cpp
@@ -1041,12 +1041,12 @@ void ProcessSessionImpl::rollback() {
   }
 }
 
-nonstd::expected<void, std::string> ProcessSessionImpl::rollbackNoThrow() noexcept {
+std::expected<void, std::string> ProcessSessionImpl::rollbackNoThrow() noexcept {
   try {
     rollback();
     return {};
   } catch(const std::exception& exception) {
-    return nonstd::make_unexpected(exception.what());
+    return std::unexpected{exception.what()};
   } catch(...) {
     logger_->log_critical("Caught unknown exception during rollback, type: {}, terminating", getCurrentExceptionTypeName());
     std::terminate();
diff --git a/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp b/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp
index dc8f5211c..76a73f0b5 100644
--- a/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp
+++ b/libminifi/src/core/state/nodes/ResponseNodeLoader.cpp
@@ -99,7 +99,7 @@ void ResponseNodeLoaderImpl::initializeComponentMetrics() {
   }
 }
 
-nonstd::expected<SharedResponseNode, std::string> ResponseNodeLoaderImpl::getSystemMetricsNode(const std::string& clazz) {
+std::expected<SharedResponseNode, std::string> ResponseNodeLoaderImpl::getSystemMetricsNode(const std::string& clazz) {
   std::lock_guard<std::mutex> guard(system_metrics_mutex_);
   if (system_metrics_.contains(clazz)) {
     return system_metrics_.at(clazz);
@@ -108,7 +108,7 @@ nonstd::expected<SharedResponseNode, std::string> ResponseNodeLoaderImpl::getSys
   std::shared_ptr ptr = core::ClassLoader::getDefaultClassLoader().instantiate(clazz, clazz);
   auto response_node = std::dynamic_pointer_cast<ResponseNode>(ptr);
   if (!response_node) {
-    return nonstd::make_unexpected("Instantiated class '" + clazz + "' is not a ResponseNode!");
+    return std::unexpected{"Instantiated class '" + clazz + "' is not a ResponseNode!"};
   }
   system_metrics_.emplace(clazz, gsl::make_not_null(response_node));
   return system_metrics_.at(clazz);
diff --git a/libminifi/src/sitetosite/SiteToSiteClient.cpp b/libminifi/src/sitetosite/SiteToSiteClient.cpp
index c5bd28850..8d934ac09 100644
--- a/libminifi/src/sitetosite/SiteToSiteClient.cpp
+++ b/libminifi/src/sitetosite/SiteToSiteClient.cpp
@@ -562,7 +562,7 @@ bool SiteToSiteClient::sendPacket(const DataPacket& packet) {
 std::expected<void, std::string> SiteToSiteClient::readFlowFileHeaderData(io::InputStream& stream, const std::string& transaction_id_str, SiteToSiteClient::ReceiveFlowFileHeaderResult& result) {
   uint32_t num_attributes = 0;
   if (const auto ret = stream.read(num_attributes); ret == 0 || io::isError(ret) || num_attributes > MAX_NUM_ATTRIBUTES) {
-    return std::unexpected(fmt::format("Site2Site failed to read number of attributes with return code {}, or number of attributes is invalid: {}", ret, num_attributes));
+    return std::unexpected{fmt::format("Site2Site failed to read number of attributes with return code {}, or number of attributes is invalid: {}", ret, num_attributes)};
   }
 
   logger_->log_debug("Site2Site transaction {} receives {} attributes", transaction_id_str, num_attributes);
@@ -570,11 +570,11 @@ std::expected<void, std::string> SiteToSiteClient::readFlowFileHeaderData(io::In
     std::string key;
     std::string value;
     if (const auto ret = stream.read(key, true); ret == 0 || io::isError(ret)) {
-      return std::unexpected(fmt::format("Site2Site transaction {} failed to read attribute key", transaction_id_str));
+      return std::unexpected{fmt::format("Site2Site transaction {} failed to read attribute key", transaction_id_str)};
     }
 
     if (const auto ret = stream.read(value, true); ret == 0 || io::isError(ret)) {
-      return std::unexpected(fmt::format("Site2Site transaction {} failed to read attribute value for key {}", transaction_id_str, key));
+      return std::unexpected{fmt::format("Site2Site transaction {} failed to read attribute value for key {}", transaction_id_str, key)};
     }
 
     result.attributes[key] = value;
@@ -583,7 +583,7 @@ std::expected<void, std::string> SiteToSiteClient::readFlowFileHeaderData(io::In
 
   uint64_t len = 0;
   if (const auto ret = stream.read(len); ret == 0 || io::isError(ret)) {
-    return std::unexpected(fmt::format("Site2Site transaction {} failed to read flow file data size", transaction_id_str));
+    return std::unexpected{fmt::format("Site2Site transaction {} failed to read flow file data size", transaction_id_str)};
   }
 
   result.flow_file_data_size = len;
@@ -596,16 +596,16 @@ std::expected<SiteToSiteClient::ReceiveFlowFileHeaderResult, std::string> SiteTo
   }
 
   if (peer_state_ != PeerState::READY) {
-    return std::unexpected("Peer state is not ready");
+    return std::unexpected{"Peer state is not ready"};
   }
 
   const auto transaction_id_str = transaction->getUUIDStr();
   if (transaction->getState() != TransactionState::TRANSACTION_STARTED && transaction->getState() != TransactionState::DATA_EXCHANGED) {
-    return std::unexpected(fmt::format("Site2Site transaction {} is not at started or exchanged state", transaction_id_str));
+    return std::unexpected{fmt::format("Site2Site transaction {} is not at started or exchanged state", transaction_id_str)};
   }
 
   if (transaction->getDirection() != TransferDirection::RECEIVE) {
-    return std::unexpected(fmt::format("Site2Site transaction {} direction is wrong", transaction_id_str));
+    return std::unexpected{fmt::format("Site2Site transaction {} direction is wrong", transaction_id_str)};
   }
 
   ReceiveFlowFileHeaderResult result;
@@ -618,7 +618,7 @@ std::expected<SiteToSiteClient::ReceiveFlowFileHeaderResult, std::string> SiteTo
     // if we already have transferred a flow file before, check to see whether another one is available
     auto response = readResponse(transaction);
     if (!response) {
-      return std::unexpected("Failed to read response");
+      return std::unexpected{"Failed to read response"};
     }
     if (response->code == ResponseCode::CONTINUE_TRANSACTION) {
       logger_->log_debug("Site2Site transaction {} peer indicate continue transaction", transaction_id_str);
@@ -629,7 +629,7 @@ std::expected<SiteToSiteClient::ReceiveFlowFileHeaderResult, std::string> SiteTo
       result.eof = true;
       return result;
     } else {
-      return std::unexpected(fmt::format("Site2Site transaction {} peer indicate wrong response code {}", transaction_id_str, magic_enum::enum_underlying(response->code)));
+      return std::unexpected{fmt::format("Site2Site transaction {} peer indicate wrong response code {}", transaction_id_str, magic_enum::enum_underlying(response->code))};
     }
   }
 
@@ -640,7 +640,7 @@ std::expected<SiteToSiteClient::ReceiveFlowFileHeaderResult, std::string> SiteTo
   }
 
   if (auto ret = readFlowFileHeaderData(stream, transaction_id_str, result); !ret.has_value()) {
-    return std::unexpected(fmt::format("Site2Site transaction {} failed to read flow file header data: {}", transaction_id_str, ret.error()));
+    return std::unexpected{fmt::format("Site2Site transaction {} failed to read flow file header data: {}", transaction_id_str, ret.error())};
   }
 
   if (result.flow_file_data_size > 0 || !result.attributes.empty()) {
diff --git a/libminifi/src/utils/file/AssetManager.cpp b/libminifi/src/utils/file/AssetManager.cpp
index dc1793033..73e4a11ff 100644
--- a/libminifi/src/utils/file/AssetManager.cpp
+++ b/libminifi/src/utils/file/AssetManager.cpp
@@ -119,9 +119,9 @@ std::string AssetManager::hash() const {
   return state_.digest.empty() ? "null" : state_.digest;
 }
 
-nonstd::expected<void, std::string> AssetManager::sync(
+std::expected<void, std::string> AssetManager::sync(
     const AssetLayout& layout,
-    const std::function<nonstd::expected<void, std::string>(std::string_view /*url*/, const std::filesystem::path& /*tmp_path*/)>& fetch) {
+    const std::function<std::expected<void, std::string>(std::string_view /*url*/, const std::filesystem::path& /*tmp_path*/)>& fetch) {
   logger_->log_info("Synchronizing assets");
   std::lock_guard lock(mtx_);
   AssetLayout new_state{
@@ -182,7 +182,7 @@ nonstd::expected<void, std::string> AssetManager::sync(
   persist();
 
   if (!new_asset_errors.empty()) {
-    return nonstd::make_unexpected(new_asset_errors);
+    return std::unexpected{new_asset_errors};
   }
 
   return {};
diff --git a/libminifi/test/libtest/unit/ProvenanceTestHelper.h b/libminifi/test/libtest/unit/ProvenanceTestHelper.h
index 4da9cea14..6b6d3cbae 100644
--- a/libminifi/test/libtest/unit/ProvenanceTestHelper.h
+++ b/libminifi/test/libtest/unit/ProvenanceTestHelper.h
@@ -46,6 +46,8 @@ class TestRepositoryBase : public T_BaseRepository {
     : T_BaseRepository("repo_name", "./dir", 1s, TEST_MAX_REPOSITORY_STORAGE_SIZE, 0ms) {
   }
 
+  virtual ~TestRepositoryBase() = default;
+
   bool initialize(const std::shared_ptr<org::apache::nifi::minifi::Configure> &) override {
     return true;
   }
diff --git a/libminifi/test/unit/ExpectedTest.cpp b/libminifi/test/unit/ExpectedTest.cpp
index 978ce1cb6..11bc0e9ec 100644
--- a/libminifi/test/unit/ExpectedTest.cpp
+++ b/libminifi/test/unit/ExpectedTest.cpp
@@ -18,6 +18,7 @@
 #define EXTENSION_LIST ""  // NOLINT(cppcoreguidelines-macro-usage)
 #include <memory>
 #include <string_view>
+#include "fmt/std.h"
 #include "unit/TestBase.h"
 #include "unit/Catch.h"
 #include "utils/expected.h"
@@ -34,129 +35,129 @@ TEST_CASE("expected transform", "[expected][transform]") {
   auto ret_void = [](int) {};
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = e | utils::transform(mul2);
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = e | utils::transform(mul2);
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::transform(mul2);
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::transform(mul2);  // NOLINT(performance-move-const-arg)
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::transform(mul2);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::transform(mul2);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::transform(mul2);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::transform(mul2);  // NOLINT(performance-move-const-arg)
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = e | utils::transform(ret_void);
     REQUIRE(ret);
     STATIC_REQUIRE(
-        (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+        (std::is_same_v<decltype(ret), std::expected<void, int>>));
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = e | utils::transform(ret_void);
     REQUIRE(ret);
     STATIC_REQUIRE(
-        (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+        (std::is_same_v<decltype(ret), std::expected<void, int>>));
   }
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::transform(ret_void);
     REQUIRE(ret);
     STATIC_REQUIRE(
-        (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+        (std::is_same_v<decltype(ret), std::expected<void, int>>));
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::transform(ret_void);  // NOLINT(performance-move-const-arg)
     REQUIRE(ret);
     STATIC_REQUIRE(
-        (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+        (std::is_same_v<decltype(ret), std::expected<void, int>>));
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::transform(ret_void);
     REQUIRE(!ret);
     STATIC_REQUIRE(
-        (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+        (std::is_same_v<decltype(ret), std::expected<void, int>>));
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::transform(ret_void);
     REQUIRE(!ret);
     STATIC_REQUIRE(
-        (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+        (std::is_same_v<decltype(ret), std::expected<void, int>>));
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::transform(ret_void);
     REQUIRE(!ret);
     STATIC_REQUIRE(
-        (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+        (std::is_same_v<decltype(ret), std::expected<void, int>>));
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::transform(ret_void);  // NOLINT(performance-move-const-arg)
     REQUIRE(!ret);
     STATIC_REQUIRE(
-        (std::is_same_v<decltype(ret), nonstd::expected<void, int>>));
+        (std::is_same_v<decltype(ret), std::expected<void, int>>));
   }
 
 
   // mapping functions which return references
   {
-    nonstd::expected<int, int> e(42);
+    std::expected<int, int> e(42);
     auto ret = e | utils::transform([](int& i) -> int& { return i; });
     REQUIRE(ret);
     REQUIRE(*ret == 42);
@@ -164,116 +165,116 @@ TEST_CASE("expected transform", "[expected][transform]") {
 }
 
 TEST_CASE("expected andThen", "[expected][andThen]") {
-  auto succeed = [](int) { return nonstd::expected<int, int>(21 * 2); };
-  auto fail = [](int) { return nonstd::expected<int, int>(nonstd::unexpect, 17); };
+  auto succeed = [](int) { return std::expected<int, int>(21 * 2); };
+  auto fail = [](int) { return std::expected<int, int>(std::unexpect, 17); };
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = e | utils::andThen(succeed);
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = e | utils::andThen(succeed);
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::andThen(succeed);
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::andThen(succeed);  // NOLINT(performance-move-const-arg)
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = e | utils::andThen(fail);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 17);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = e | utils::andThen(fail);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 17);
   }
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::andThen(fail);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 17);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::andThen(fail);  // NOLINT(performance-move-const-arg)
     REQUIRE(!ret);
     REQUIRE(ret.error() == 17);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::andThen(succeed);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::andThen(succeed);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::andThen(succeed);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::andThen(succeed);  // NOLINT(performance-move-const-arg)
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::andThen(fail);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::andThen(fail);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::andThen(fail);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::andThen(fail);  // NOLINT(performance-move-const-arg)
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
@@ -282,66 +283,66 @@ TEST_CASE("expected andThen", "[expected][andThen]") {
 
 TEST_CASE("expected orElse", "[expected][orElse]") {
   using eptr = std::unique_ptr<int>;
-  auto succeed = [](int) { return nonstd::expected<int, int>(21 * 2); };
-  auto succeedptr = [](eptr) { return nonstd::expected<int, eptr>(21*2); };
-  auto fail =    [](int) { return nonstd::expected<int, int>(nonstd::unexpect, 17); };
-  auto efail =   [](eptr e) { *e = 17; return nonstd::expected<int, eptr>(nonstd::unexpect, std::move(e)); };
+  auto succeed = [](int) { return std::expected<int, int>(21 * 2); };
+  auto succeedptr = [](eptr) { return std::expected<int, eptr>(21*2); };
+  auto fail =    [](int) { return std::expected<int, int>(std::unexpect, 17); };
+  auto efail =   [](eptr e) { *e = 17; return std::expected<int, eptr>(std::unexpect, std::move(e)); };
   auto failvoid = [](int) {};
   auto failvoidptr = [](const eptr&) { /* don't consume */};
   auto consumeptr = [](eptr) {};
   auto make_u_int = [](int n) { return std::make_unique<int>(n); };
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = e | utils::orElse(succeed);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = e | utils::orElse(succeed);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::orElse(succeed);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    nonstd::expected<int, eptr> e = 21;
+    std::expected<int, eptr> e = 21;
     auto ret = std::move(e) | utils::orElse(succeedptr);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::orElse(succeed);  // NOLINT(performance-move-const-arg)
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = e | utils::orElse(fail);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = e | utils::orElse(fail);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::orElse(fail);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
@@ -349,119 +350,119 @@ TEST_CASE("expected orElse", "[expected][orElse]") {
 
 
   {
-    nonstd::expected<int, eptr> e = 21;
+    std::expected<int, eptr> e = 21;
     auto ret = std::move(e) | utils::orElse(efail);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::orElse(fail);  // NOLINT(performance-move-const-arg)
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::orElse(succeed);
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::orElse(succeed);
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::orElse(succeed);
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    nonstd::expected<int, eptr> e(nonstd::unexpect, make_u_int(21));
+    std::expected<int, eptr> e(std::unexpect, make_u_int(21));
     auto ret = std::move(e) | utils::orElse(succeedptr);
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::orElse(succeed);  // NOLINT(performance-move-const-arg)
     REQUIRE(ret);
     REQUIRE(*ret == 42);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::orElse(fail);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 17);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::orElse(failvoid);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::orElse(fail);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 17);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = e | utils::orElse(failvoid);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::orElse(fail);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 17);
   }
 
   {
-    nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::orElse(failvoid);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
   }
 
   {
-    nonstd::expected<int, eptr> e(nonstd::unexpect, make_u_int(21));
+    std::expected<int, eptr> e(std::unexpect, make_u_int(21));
     auto ret = std::move(e) | utils::orElse(failvoidptr);
     REQUIRE(!ret);
     REQUIRE(*ret.error() == 21);
   }
 
   {
-    nonstd::expected<int, eptr> e(nonstd::unexpect, make_u_int(21));
+    std::expected<int, eptr> e(std::unexpect, make_u_int(21));
     auto ret = std::move(e) | utils::orElse(consumeptr);
     REQUIRE(!ret);
     REQUIRE(ret.error() == nullptr);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::orElse(fail);  // NOLINT(performance-move-const-arg)
     REQUIRE(!ret);
     REQUIRE(ret.error() == 17);
   }
 
   {
-    const nonstd::expected<int, int> e(nonstd::unexpect, 21);
+    const std::expected<int, int> e(std::unexpect, 21);
     auto ret = std::move(e) | utils::orElse(failvoid);  // NOLINT(performance-move-const-arg)
     REQUIRE(!ret);
     REQUIRE(ret.error() == 21);
@@ -470,7 +471,7 @@ TEST_CASE("expected orElse", "[expected][orElse]") {
 
 TEST_CASE("expected valueOrElse", "[expected][valueOrElse]") {
   using namespace std::literals;  // NOLINT
-  nonstd::expected<int, std::string> ex{nonstd::unexpect, "hello"};
+  std::expected<int, std::string> ex{std::unexpect, "hello"};
   REQUIRE(42 == (ex | utils::valueOrElse([] { return 42; })));
   REQUIRE_THROWS_AS(ex | utils::valueOrElse([]{ throw std::exception(); }), std::exception);
   REQUIRE(gsl::narrow<int>("hello"sv.size()) == (ex | utils::valueOrElse([](const std::string& err) { return gsl::narrow<int>(err.size()); })));
@@ -486,63 +487,63 @@ TEST_CASE("expected transformError", "[expected][transformError]") {
   auto mul2 = [](int a) { return a * 2; };
 
   {
-    nonstd::expected<int, int> e = nonstd::make_unexpected(21);
+    std::expected<int, int> e = std::unexpected{21};
     auto ret = e | utils::transformError(mul2);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 42);
   }
 
   {
-    nonstd::expected<size_t, std::string> e = nonstd::make_unexpected("sajt");
+    std::expected<size_t, std::string> e = std::unexpected{"sajt"};
     auto ret = e | utils::transformError([](const std::string& error) -> size_t { return error.length(); });
     REQUIRE(!ret);
     REQUIRE(ret.error() == 4);
   }
 
   {
-    const nonstd::expected<int, int> e = nonstd::make_unexpected(21);
+    const std::expected<int, int> e = std::unexpected{21};
     auto ret = e | utils::transformError(mul2);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 42);
   }
 
   {
-    nonstd::expected<int, int> e = nonstd::make_unexpected(21);
+    std::expected<int, int> e = std::unexpected{21};
     auto ret = std::move(e) | utils::transformError(mul2);
     REQUIRE(!ret);
     REQUIRE(ret.error() == 42);
   }
 
   {
-    const nonstd::expected<int, int> e = nonstd::make_unexpected(21);
+    const std::expected<int, int> e = std::unexpected{21};
     auto ret = std::move(e) | utils::transformError(mul2);  // NOLINT(performance-move-const-arg)
     REQUIRE(!ret);
     REQUIRE(ret.error() == 42);
   }
 
   {
-    nonstd::expected<int, int> e = 21;
+    std::expected<int, int> e = 21;
     auto ret = e | utils::transformError(mul2);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = e | utils::transformError(mul2);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    const auto mutable_rvalue_fn = []{ return nonstd::expected<int, int>{21}; };
+    const auto mutable_rvalue_fn = []{ return std::expected<int, int>{21}; };
     auto ret = mutable_rvalue_fn() | utils::transformError(mul2);
     REQUIRE(ret);
     REQUIRE(*ret == 21);
   }
 
   {
-    const nonstd::expected<int, int> e = 21;
+    const std::expected<int, int> e = 21;
     auto ret = std::move(e) | utils::transformError(mul2);  // NOLINT(performance-move-const-arg)
     REQUIRE(ret);
     REQUIRE(*ret == 21);
@@ -550,8 +551,8 @@ TEST_CASE("expected transformError", "[expected][transformError]") {
 }
 
 TEST_CASE("expected toOptional") {
-  nonstd::expected<int, std::string> unexpected{nonstd::unexpect, "hello"};
-  nonstd::expected<int, std::string> expected{5};
+  std::expected<int, std::string> unexpected{std::unexpect, "hello"};
+  std::expected<int, std::string> expected{5};
 
   std::optional<int> res1 = std::move(unexpected) | utils::toOptional();
   std::optional<int> res2 = std::move(expected) | utils::toOptional();
@@ -561,8 +562,8 @@ TEST_CASE("expected toOptional") {
 }
 
 TEST_CASE("expected orThrow") {
-  nonstd::expected<int, std::string> unexpected{nonstd::unexpect, "hello"};
-  nonstd::expected<int, std::string> expected{5};
+  std::expected<int, std::string> unexpected{std::unexpect, "hello"};
+  std::expected<int, std::string> expected{5};
 
 
   REQUIRE_THROWS_MATCHES(std::move(unexpected) | utils::orThrow("should throw"),
@@ -572,8 +573,8 @@ TEST_CASE("expected orThrow") {
 }
 
 TEST_CASE("This fails to compile with std::expected on GCC 15.1 due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119714") {
-  nonstd::expected<int, std::string> a;
-  nonstd::expected<int, std::string> b;
+  std::expected<int, std::string> a;
+  std::expected<int, std::string> b;
 
   CHECK(a == b);
 }
diff --git a/libminifi/test/unit/OptionalTest.cpp b/libminifi/test/unit/OptionalTest.cpp
index 570222311..9c332467c 100644
--- a/libminifi/test/unit/OptionalTest.cpp
+++ b/libminifi/test/unit/OptionalTest.cpp
@@ -82,10 +82,10 @@ TEST_CASE("optional toExpected") {
   std::optional<int> opt_with_value = 5;
   std::optional<int> opt_without_value = std::nullopt;
 
-  nonstd::expected<int, std::error_code> expected_from_value_ec = opt_with_value | utils::toExpected(std::make_error_code(std::io_errc::stream));
-  nonstd::expected<int, std::error_code> expected_from_null_opt_ec = opt_without_value | utils::toExpected(std::make_error_code(std::io_errc::stream));
-  nonstd::expected<int, int> expected_from_value_int = opt_with_value | utils::toExpected(9);
-  nonstd::expected<int, int> expected_from_null_opt_int = opt_without_value | utils::toExpected(9);
+  std::expected<int, std::error_code> expected_from_value_ec = opt_with_value | utils::toExpected(std::make_error_code(std::io_errc::stream));
+  std::expected<int, std::error_code> expected_from_null_opt_ec = opt_without_value | utils::toExpected(std::make_error_code(std::io_errc::stream));
+  std::expected<int, int> expected_from_value_int = opt_with_value | utils::toExpected(9);
+  std::expected<int, int> expected_from_null_opt_int = opt_without_value | utils::toExpected(9);
 
   CHECK(expected_from_value_ec == 5);
   CHECK(expected_from_value_int == 5);
diff --git a/libminifi/test/unit/ParsingUtilsTests.cpp b/libminifi/test/unit/ParsingUtilsTests.cpp
index 1783ccffb..ea5ad048a 100644
--- a/libminifi/test/unit/ParsingUtilsTests.cpp
+++ b/libminifi/test/unit/ParsingUtilsTests.cpp
@@ -32,26 +32,26 @@ TEST_CASE("Test boolean parsing") {
 
 TEST_CASE("Test integral parsing") {
   CHECK(8000U == parseIntegral<uint64_t>("8000"));
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseIntegral<uint64_t>("8000 banana"));
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseIntegral<uint64_t>("-8000"));
+  CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseIntegral<uint64_t>("8000 banana"));
+  CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseIntegral<uint64_t>("-8000"));
 
 
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::LargerThanMaximum) == parseIntegralMinMax<uint64_t>("10", 3, 8));
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::SmallerThanMinimum) == parseIntegralMinMax<uint64_t>("2", 3, 8));
+  CHECK(std::unexpected{core::ParsingErrorCode::LargerThanMaximum} == parseIntegralMinMax<uint64_t>("10", 3, 8));
+  CHECK(std::unexpected{core::ParsingErrorCode::SmallerThanMinimum} == parseIntegralMinMax<uint64_t>("2", 3, 8));
 
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseIntegral<int16_t>("90000"));
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseIntegral<int16_t>("-90000"));
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseIntegral<int16_t>("8000 banana"));
+  CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseIntegral<int16_t>("90000"));
+  CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseIntegral<int16_t>("-90000"));
+  CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseIntegral<int16_t>("8000 banana"));
 }
 
 TEST_CASE("Test data size parsing") {
   CHECK(8000U == parseDataSize("8000"));
   CHECK(8192000U == parseDataSize("8000 kB"));
 
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::GeneralParsingError) == parseDataSize("8000 banana"));
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::LargerThanMaximum) == parseDataSizeMinMax("9 MB", 3000, 8000));
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::SmallerThanMinimum) == parseDataSizeMinMax("0 GB", 3000, 8000));
-  CHECK(nonstd::make_unexpected(core::ParsingErrorCode::OverflowError) == parseDataSize("20000 PB"));
+  CHECK(std::unexpected{core::ParsingErrorCode::GeneralParsingError} == parseDataSize("8000 banana"));
+  CHECK(std::unexpected{core::ParsingErrorCode::LargerThanMaximum} == parseDataSizeMinMax("9 MB", 3000, 8000));
+  CHECK(std::unexpected{core::ParsingErrorCode::SmallerThanMinimum} == parseDataSizeMinMax("0 GB", 3000, 8000));
+  CHECK(std::unexpected{core::ParsingErrorCode::OverflowError} == parseDataSize("20000 PB"));
 }
 
 TEST_CASE("Test Permissions Parsing") {
diff --git a/minifi-api/common/include/minifi-cpp/io/StreamCallback.h b/minifi-api/common/include/minifi-cpp/io/StreamCallback.h
index 7063c7146..ec4fcf59e 100644
--- a/minifi-api/common/include/minifi-cpp/io/StreamCallback.h
+++ b/minifi-api/common/include/minifi-cpp/io/StreamCallback.h
@@ -40,8 +40,8 @@ class IoResult {
 
   virtual ~IoResult() = default;
 
-  static IoResult error() { return IoResult(nonstd::make_unexpected(MINIFI_IO_ERROR)); }
-  static IoResult cancelled() { return IoResult(nonstd::make_unexpected(MINIFI_IO_CANCEL)); }
+  static IoResult error() { return IoResult(std::unexpected{MINIFI_IO_ERROR}); }
+  static IoResult cancelled() { return IoResult(std::unexpected{MINIFI_IO_CANCEL}); }
   static IoResult zero() { return IoResult(0U); }
 
   template <typename T>
@@ -51,7 +51,7 @@ class IoResult {
 
     if constexpr (std::is_same_v<T, int64_t>) {
       if (val < 0) {
-        return IoResult(nonstd::make_unexpected(static_cast<MinifiIoStatus>(val)));
+        return IoResult(std::unexpected{static_cast<MinifiIoStatus>(val)});
       }
     } else if constexpr (std::is_same_v<T, size_t>) {
       if (isError(val)) {
@@ -75,12 +75,12 @@ class IoResult {
 
   uint64_t operator*() const { return *result_; }
 
-  nonstd::expected<uint64_t, MinifiIoStatus> inner() const { return result_; }
+  std::expected<uint64_t, MinifiIoStatus> inner() const { return result_; }
 
  private:
-  explicit IoResult(nonstd::expected<uint64_t, MinifiIoStatus> result) : result_(std::move(result)) {}
+  explicit IoResult(std::expected<uint64_t, MinifiIoStatus> result) : result_(std::move(result)) {}
 
-  nonstd::expected<uint64_t, MinifiIoStatus> result_;
+  std::expected<uint64_t, MinifiIoStatus> result_;
 };
 
 class ReadWriteResult {
@@ -95,8 +95,8 @@ class ReadWriteResult {
       : result_(ReadWrite{.bytes_read = bytes_read, .bytes_written = bytes_written}) {}
 
   static ReadWriteResult zero() { return ReadWriteResult(ReadWrite{.bytes_read = 0, .bytes_written = 0}); };
-  static ReadWriteResult error() { return ReadWriteResult(nonstd::make_unexpected(MINIFI_IO_ERROR)); }
-  static ReadWriteResult cancelled() { return ReadWriteResult(nonstd::make_unexpected(MINIFI_IO_CANCEL)); }
+  static ReadWriteResult error() { return ReadWriteResult(std::unexpected{MINIFI_IO_ERROR}); }
+  static ReadWriteResult cancelled() { return ReadWriteResult(std::unexpected{MINIFI_IO_CANCEL}); }
 
   virtual ~ReadWriteResult() = default;
 
@@ -111,9 +111,9 @@ class ReadWriteResult {
     uint64_t bytes_read;
     uint64_t bytes_written;
   };
-  explicit ReadWriteResult(nonstd::expected<ReadWrite, MinifiIoStatus> result) : result_(std::move(result)) {}
+  explicit ReadWriteResult(std::expected<ReadWrite, MinifiIoStatus> result) : result_(std::move(result)) {}
 
-  nonstd::expected<ReadWrite, MinifiIoStatus> result_;
+  std::expected<ReadWrite, MinifiIoStatus> result_;
 };
 
 using OutputStreamCallback = std::function<IoResult(const std::shared_ptr<OutputStream>& output_stream)>;
diff --git a/minifi-api/include/minifi-cpp/controllers/RecordSetReader.h b/minifi-api/include/minifi-cpp/controllers/RecordSetReader.h
index db7c26737..536491272 100644
--- a/minifi-api/include/minifi-cpp/controllers/RecordSetReader.h
+++ b/minifi-api/include/minifi-cpp/controllers/RecordSetReader.h
@@ -35,7 +35,7 @@ class RecordSetReader : public controller::ControllerServiceHandle {
     .version = MINIFI_VERSION_STR
   };
 
-  virtual nonstd::expected<RecordSet, std::error_code> read(io::InputStream& input_stream) = 0;
+  virtual std::expected<RecordSet, std::error_code> read(io::InputStream& input_stream) = 0;
 };
 
 }  // namespace org::apache::nifi::minifi::core
diff --git a/minifi-api/include/minifi-cpp/core/ConfigurableComponent.h b/minifi-api/include/minifi-cpp/core/ConfigurableComponent.h
index 1c9196a9e..377903754 100644
--- a/minifi-api/include/minifi-cpp/core/ConfigurableComponent.h
+++ b/minifi-api/include/minifi-cpp/core/ConfigurableComponent.h
@@ -35,26 +35,26 @@ class ConfigurableComponent : public virtual CoreComponent {
   virtual void initialize() {};
   virtual bool canEdit() = 0;
 
-  [[nodiscard]] virtual nonstd::expected<std::string, std::error_code> getProperty(std::string_view name) const = 0;
-  virtual nonstd::expected<void, std::error_code> setProperty(std::string_view name, std::string value) = 0;
-  virtual nonstd::expected<void, std::error_code> appendProperty(std::string_view name, std::string value) = 0;
-  virtual nonstd::expected<void, std::error_code> clearProperty(std::string_view name) = 0;
+  [[nodiscard]] virtual std::expected<std::string, std::error_code> getProperty(std::string_view name) const = 0;
+  virtual std::expected<void, std::error_code> setProperty(std::string_view name, std::string value) = 0;
+  virtual std::expected<void, std::error_code> appendProperty(std::string_view name, std::string value) = 0;
+  virtual std::expected<void, std::error_code> clearProperty(std::string_view name) = 0;
 
-  [[nodiscard]] virtual nonstd::expected<std::string, std::error_code> getDynamicProperty(std::string_view name) const = 0;
-  virtual nonstd::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) = 0;
-  virtual nonstd::expected<void, std::error_code> appendDynamicProperty(std::string_view name, std::string value) = 0;
+  [[nodiscard]] virtual std::expected<std::string, std::error_code> getDynamicProperty(std::string_view name) const = 0;
+  virtual std::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) = 0;
+  virtual std::expected<void, std::error_code> appendDynamicProperty(std::string_view name, std::string value) = 0;
 
   [[nodiscard]] virtual std::vector<std::string> getDynamicPropertyKeys() const = 0;
   [[nodiscard]] virtual std::map<std::string, std::string> getDynamicProperties() const = 0;
 
-  [[nodiscard]] virtual nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
-  [[nodiscard]] virtual nonstd::expected<std::vector<std::string>, std::error_code> getAllDynamicPropertyValues(std::string_view name) const = 0;
+  [[nodiscard]] virtual std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
+  [[nodiscard]] virtual std::expected<std::vector<std::string>, std::error_code> getAllDynamicPropertyValues(std::string_view name) const = 0;
 
   [[nodiscard]] virtual bool supportsDynamicProperties() const = 0;
   [[nodiscard]] virtual bool supportsDynamicRelationships() const = 0;
 
   [[nodiscard]] virtual std::map<std::string, Property, std::less<>> getSupportedProperties() const = 0;
-  [[nodiscard]] virtual nonstd::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const = 0;
+  [[nodiscard]] virtual std::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const = 0;
 };
 
 }  // namespace org::apache::nifi::minifi::core
diff --git a/minifi-api/include/minifi-cpp/core/ProcessContext.h b/minifi-api/include/minifi-cpp/core/ProcessContext.h
index cc5ec9e5d..6fa663a7a 100644
--- a/minifi-api/include/minifi-cpp/core/ProcessContext.h
+++ b/minifi-api/include/minifi-cpp/core/ProcessContext.h
@@ -38,7 +38,7 @@ class ProcessorInfo {
   [[nodiscard]] virtual utils::Identifier getUUID() const = 0;
   [[nodiscard]] virtual std::shared_ptr<state::FlowIdentifier> getFlowIdentifier() const = 0;
   [[nodiscard]] virtual std::map<std::string, core::Property, std::less<>> getSupportedProperties() const = 0;
-  [[nodiscard]] virtual nonstd::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const = 0;
+  [[nodiscard]] virtual std::expected<Property, std::error_code> getSupportedProperty(std::string_view name) const = 0;
 
   virtual ~ProcessorInfo() = default;
 };
@@ -50,29 +50,29 @@ class ProcessContext : public virtual core::VariableRegistry, public virtual uti
   virtual const ProcessorInfo& getProcessorInfo() const = 0;
   virtual Processor& getProcessor() const = 0;
 
-  virtual nonstd::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile* flow_file = nullptr) const = 0;
-  nonstd::expected<std::string, std::error_code> getProperty(const Property& property, const FlowFile* flow_file = nullptr) const { return getProperty(property.getName(), flow_file); }
-  nonstd::expected<std::string, std::error_code> getProperty(const PropertyReference& property_reference, const FlowFile* flow_file = nullptr) const {
+  virtual std::expected<std::string, std::error_code> getProperty(std::string_view name, const FlowFile* flow_file = nullptr) const = 0;
+  std::expected<std::string, std::error_code> getProperty(const Property& property, const FlowFile* flow_file = nullptr) const { return getProperty(property.getName(), flow_file); }
+  std::expected<std::string, std::error_code> getProperty(const PropertyReference& property_reference, const FlowFile* flow_file = nullptr) const {
     return getProperty(property_reference.name, flow_file);
   }
 
-  virtual nonstd::expected<std::string, std::error_code> getRawProperty(std::string_view name) const = 0;
+  virtual std::expected<std::string, std::error_code> getRawProperty(std::string_view name) const = 0;
 
-  virtual nonstd::expected<void, std::error_code> setProperty(std::string_view name, std::string value) = 0;
-  nonstd::expected<void, std::error_code> setProperty(const Property& property, std::string value) { return setProperty(property.getName(), std::move(value)); };
-  nonstd::expected<void, std::error_code> setProperty(const PropertyReference& property_reference, std::string value) { return setProperty(property_reference.name, std::move(value)); };
+  virtual std::expected<void, std::error_code> setProperty(std::string_view name, std::string value) = 0;
+  std::expected<void, std::error_code> setProperty(const Property& property, std::string value) { return setProperty(property.getName(), std::move(value)); };
+  std::expected<void, std::error_code> setProperty(const PropertyReference& property_reference, std::string value) { return setProperty(property_reference.name, std::move(value)); };
 
-  virtual nonstd::expected<void, std::error_code> clearProperty(std::string_view name) = 0;
+  virtual std::expected<void, std::error_code> clearProperty(std::string_view name) = 0;
 
-  virtual nonstd::expected<std::string, std::error_code> getDynamicProperty(std::string_view name, const FlowFile* flow_file = nullptr) const = 0;
-  virtual nonstd::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) = 0;
+  virtual std::expected<std::string, std::error_code> getDynamicProperty(std::string_view name, const FlowFile* flow_file = nullptr) const = 0;
+  virtual std::expected<void, std::error_code> setDynamicProperty(std::string name, std::string value) = 0;
 
-  virtual nonstd::expected<std::string, std::error_code> getRawDynamicProperty(std::string_view name) const = 0;
+  virtual std::expected<std::string, std::error_code> getRawDynamicProperty(std::string_view name) const = 0;
 
   virtual std::vector<std::string> getDynamicPropertyKeys() const = 0;
   virtual std::map<std::string, std::string> getDynamicProperties(const FlowFile* flow_file = nullptr) const = 0;
 
-  [[nodiscard]] virtual nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
+  [[nodiscard]] virtual std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
 
   virtual void addAutoTerminatedRelationship(const core::Relationship& relationship) = 0;
 
diff --git a/minifi-api/include/minifi-cpp/core/ProcessSession.h b/minifi-api/include/minifi-cpp/core/ProcessSession.h
index d751515a0..5b77d8422 100644
--- a/minifi-api/include/minifi-cpp/core/ProcessSession.h
+++ b/minifi-api/include/minifi-cpp/core/ProcessSession.h
@@ -44,7 +44,7 @@ class ProcessSession : public virtual ReferenceContainer {
   virtual void commit() = 0;
   virtual void rollback() = 0;
 
-  virtual nonstd::expected<void, std::string> rollbackNoThrow() noexcept = 0;
+  virtual std::expected<void, std::string> rollbackNoThrow() noexcept = 0;
   virtual std::shared_ptr<provenance::ProvenanceReporter> getProvenanceReporter() = 0;
   virtual void flushContent() = 0;
   virtual std::shared_ptr<core::FlowFile> get() = 0;
diff --git a/minifi-api/include/minifi-cpp/core/Property.h b/minifi-api/include/minifi-cpp/core/Property.h
index 8d1225494..d802b7221 100644
--- a/minifi-api/include/minifi-cpp/core/Property.h
+++ b/minifi-api/include/minifi-cpp/core/Property.h
@@ -61,10 +61,10 @@ class Property final {
   std::vector<std::string> getAllowedTypes() const;
   std::string getDescription() const;
   const PropertyValidator& getValidator() const;
-  [[nodiscard]] nonstd::expected<std::span<const std::string>, std::error_code> getAllValues() const;
-  [[nodiscard]] nonstd::expected<std::string_view, std::error_code> getValue() const;
-  nonstd::expected<void, std::error_code> setValue(std::string value);
-  nonstd::expected<void, std::error_code> appendValue(std::string value);
+  [[nodiscard]] std::expected<std::span<const std::string>, std::error_code> getAllValues() const;
+  [[nodiscard]] std::expected<std::string_view, std::error_code> getValue() const;
+  std::expected<void, std::error_code> setValue(std::string value);
+  std::expected<void, std::error_code> appendValue(std::string value);
   void clearValues();
   bool getRequired() const;
   bool isSensitive() const;
diff --git a/minifi-api/include/minifi-cpp/core/controller/ControllerServiceContext.h b/minifi-api/include/minifi-cpp/core/controller/ControllerServiceContext.h
index ee906e856..843034fde 100644
--- a/minifi-api/include/minifi-cpp/core/controller/ControllerServiceContext.h
+++ b/minifi-api/include/minifi-cpp/core/controller/ControllerServiceContext.h
@@ -28,8 +28,8 @@ class ControllerServiceContext {
  public:
   virtual ~ControllerServiceContext() = default;
 
-  [[nodiscard]] virtual nonstd::expected<std::string, std::error_code> getProperty(std::string_view name) const = 0;
-  [[nodiscard]] virtual nonstd::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
+  [[nodiscard]] virtual std::expected<std::string, std::error_code> getProperty(std::string_view name) const = 0;
+  [[nodiscard]] virtual std::expected<std::vector<std::string>, std::error_code> getAllPropertyValues(std::string_view name) const = 0;
 };
 
 }  // namespace org::apache::nifi::minifi::core::controller
diff --git a/thirdparty/bustache/remove_installs.patch b/thirdparty/bustache/remove_installs.patch
new file mode 100644
index 000000000..af6eb5ec7
--- /dev/null
+++ b/thirdparty/bustache/remove_installs.patch
@@ -0,0 +1,49 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index efb1cbc..b1f2e71 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -58,43 +58,7 @@ add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
+ 
+ include(GNUInstallDirs)
+ 
+-# Install the library and headers.
+-install(
+-  TARGETS
+-    ${PROJECT_NAME}
+-  EXPORT
+-    ${PROJECT_NAME}-targets
+-  LIBRARY DESTINATION
+-    ${CMAKE_INSTALL_LIBDIR}
+-  RUNTIME DESTINATION
+-    ${CMAKE_INSTALL_BINDIR}
+-  ARCHIVE DESTINATION
+-    ${CMAKE_INSTALL_LIBDIR}
+-  INCLUDES DESTINATION
+-    include
+-  PUBLIC_HEADER DESTINATION
+-    include
+-)
+-
+-# Install version, config and target files.
+-install(
+-  EXPORT 
+-    ${PROJECT_NAME}-targets
+-  FILE
+-    ${PROJECT_NAME}-targets.cmake
+-  NAMESPACE
+-    ${PROJECT_NAME}::
+-  DESTINATION
+-    ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}
+-)
+-
+-# Install the `include` directory
+-install(
+-  DIRECTORY
+-    include/${PROJECT_NAME}
+-  DESTINATION
+-    include
+-)
++# removed installs
+ 
+ # Quick `config-version.cmake` creation
+ include(CMakePackageConfigHelpers)
diff --git a/thirdparty/couchbase/remove-debug-symbols.patch b/thirdparty/couchbase/remove-debug-symbols.patch
deleted file mode 100644
index bc7e4052e..000000000
--- a/thirdparty/couchbase/remove-debug-symbols.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index 6c69b32..497e2f6 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -58,7 +58,6 @@ include(cmake/Sanitizers.cmake)
- # allow for static analysis options
- include(cmake/StaticAnalyzers.cmake)
- 
--include(cmake/Backtrace.cmake)
- enable_sanitizers(project_options)
- 
- if(COUCHBASE_CXX_CLIENT_MASTER_PROJECT)
diff --git a/thirdparty/couchbase/remove-thirdparty-1.0.2.patch b/thirdparty/couchbase/remove-thirdparty-1.0.2.patch
deleted file mode 100644
index 732576f14..000000000
--- a/thirdparty/couchbase/remove-thirdparty-1.0.2.patch
+++ /dev/null
@@ -1,172 +0,0 @@
-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)
diff --git a/thirdparty/couchbase/remove-thirdparty.patch b/thirdparty/couchbase/remove-thirdparty.patch
index 942e5fc27..13a97b409 100644
--- a/thirdparty/couchbase/remove-thirdparty.patch
+++ b/thirdparty/couchbase/remove-thirdparty.patch
@@ -1,27 +1,17 @@
+Subject: [PATCH] removed spdlog and asio thirdparty libs (since we already provide those)
+---
+Index: cmake/ThirdPartyDependencies.cmake
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
 diff --git a/cmake/ThirdPartyDependencies.cmake b/cmake/ThirdPartyDependencies.cmake
-index af373ce..30cf2b6 100644
---- a/cmake/ThirdPartyDependencies.cmake
-+++ b/cmake/ThirdPartyDependencies.cmake
-@@ -1,232 +1,141 @@
- # NOTE: This file MUST be in sync with couchbase-sdk-cxx-black-duck-manifest.yaml
- 
- include(cmake/CPM.cmake)
- 
- set(CPM_USE_LOCAL_PACKAGES OFF)
- 
- # 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()
- 
+--- a/cmake/ThirdPartyDependencies.cmake	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/cmake/ThirdPartyDependencies.cmake	(date 1776166918688)
+@@ -18,27 +18,6 @@
+
+ include(cmake/OpenSSL.cmake)
+
 -if(NOT TARGET spdlog::spdlog)
 -  # https://github.com/gabime/spdlog/releases
 -  cpmaddpackage(
@@ -32,145 +22,37 @@ index af373ce..30cf2b6 100644
 -    GITHUB_REPOSITORY
 -    "gabime/spdlog"
 -    EXCLUDE_FROM_ALL ON
+-    SYSTEM NO
 -    OPTIONS
 -    "SPDLOG_INSTALL OFF"
 -    "BUILD_SHARED_LIBS OFF"
 -    "CMAKE_C_VISIBILITY_PRESET hidden"
 -    "CMAKE_CXX_VISIBILITY_PRESET hidden"
 -    "CMAKE_POSITION_INDEPENDENT_CODE ON"
--    "NO_CMAKE_SYSTEM_PATH ON"
--    "NO_CMAKE_INSTALL_PREFIX ON"
--    "NO_CMAKE_SYSTEM_PACKAGE_REGISTRY ON"
 -    "SPDLOG_BUILD_SHARED OFF"
 -    "SPDLOG_FMT_EXTERNAL OFF")
 -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")
- endif()
- 
- if(NOT TARGET hdr_histogram_static)
-   # https://github.com/HdrHistogram/HdrHistogram_c/releases
-   cpmaddpackage(
-     NAME
-     hdr_histogram
-     GIT_TAG
-     0.11.8
-     VERSION
-     0.11.8
-     GITHUB_REPOSITORY
-     "HdrHistogram/HdrHistogram_c"
-     EXCLUDE_FROM_ALL ON
-     OPTIONS
-     "CMAKE_C_VISIBILITY_PRESET hidden"
-     "CMAKE_CXX_VISIBILITY_PRESET hidden"
-     "CMAKE_POSITION_INDEPENDENT_CODE ON"
-     "HDR_LOG_REQUIRED OFF"
-     "HDR_HISTOGRAM_BUILD_SHARED OFF"
-     "HDR_HISTOGRAM_BUILD_PROGRAMS OFF")
- endif()
- 
- if(NOT TARGET llhttp::llhttp)
-   # https://github.com/nodejs/llhttp/releases
-   cpmaddpackage(
-     NAME
-     llhttp
-     GIT_TAG
-     release/v9.2.1
-     VERSION
-     9.2.1
-     GITHUB_REPOSITORY
-     "nodejs/llhttp"
-     EXCLUDE_FROM_ALL ON
-     OPTIONS
-     "CMAKE_C_VISIBILITY_PRESET hidden"
-     "CMAKE_CXX_VISIBILITY_PRESET hidden"
-     "CMAKE_POSITION_INDEPENDENT_CODE ON"
-     "BUILD_SHARED_LIBS OFF"
-     "BUILD_STATIC_LIBS ON")
- endif()
- 
- if(NOT TARGET snappy)
-   # https://github.com/google/snappy/releases
-   cpmaddpackage(
-     NAME
-     snappy
-     GIT_TAG
-     1.2.2
-     VERSION
-     1.2.2
-     GITHUB_REPOSITORY
-     "google/snappy"
-     EXCLUDE_FROM_ALL ON
-     OPTIONS
-     "SNAPPY_INSTALL OFF"
-     "CMAKE_C_VISIBILITY_PRESET hidden"
-     "CMAKE_CXX_VISIBILITY_PRESET hidden"
-     "CMAKE_POSITION_INDEPENDENT_CODE ON"
-     "BUILD_SHARED_LIBS OFF"
-     "SNAPPY_BUILD_TESTS OFF"
-     "SNAPPY_BUILD_BENCHMARKS OFF")
- endif()
- if(NOT MSVC)
-   # https://github.com/google/snappy/pull/156
-   target_compile_options(snappy PRIVATE -Wno-sign-compare)
- endif()
- 
- if(NOT TARGET taocpp::json)
-   # https://github.com/taocpp/json/releases
-   cpmaddpackage(
-     NAME
-     json
-     GIT_TAG
-     1.0.0-beta.14
-     VERSION
-     1.0.0-beta.14
-     GITHUB_REPOSITORY
-     "taocpp/json"
-     OPTIONS
-     "CMAKE_C_VISIBILITY_PRESET hidden"
-     "CMAKE_CXX_VISIBILITY_PRESET hidden"
-     "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"
+ if(COUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY)
+   if(NOT TARGET opentelemetry)
+     # Disable curl HTTP client to avoid curl downloading and linking to BoringSSL
+@@ -196,103 +175,7 @@
      "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
+-    asio-1-34-2
 -    VERSION
--    1.31.0
+-    1.34.2
 -    GITHUB_REPOSITORY
 -    "chriskohlhoff/asio"
--    EXCLUDE_FROM_ALL ON)
+-    EXCLUDE_FROM_ALL ON
+-    SYSTEM NO)
 -endif()
 -
 -# ASIO doesn't use CMake, we have to configure it manually. Extra notes for using on Windows:
@@ -183,8 +65,17 @@ index af373ce..30cf2b6 100644
 -  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)
+-  target_compile_definitions(asio PUBLIC ASIO_STANDALONE=1 ASIO_NO_DEPRECATED=1 ASIO_SEPARATE_COMPILATION=1)
+-  target_link_libraries(asio PRIVATE Threads::Threads)
+-  if(COUCHBASE_CXX_CLIENT_STATIC_BORINGSSL)
+-    target_link_libraries(asio PUBLIC $<TARGET_OBJECTS:ssl> $<TARGET_OBJECTS:crypto>)
+-    # Add BoringSSL include directories before asio's own include directories.
+-    target_include_directories(
+-      asio BEFORE PRIVATE $<BUILD_INTERFACE:$<TARGET_PROPERTY:ssl,INTERFACE_INCLUDE_DIRECTORIES>>
+-                          $<BUILD_INTERFACE:$<TARGET_PROPERTY:crypto,INTERFACE_INCLUDE_DIRECTORIES>>)
+-  elseif(NOT COUCHBASE_CXX_CLIENT_POST_LINKED_OPENSSL)
+-    target_link_libraries(asio PRIVATE OpenSSL::SSL OpenSSL::Crypto)
+-  endif()
 -  set_target_properties(
 -    asio
 -    PROPERTIES C_VISIBILITY_PRESET hidden
@@ -196,17 +87,39 @@ index af373ce..30cf2b6 100644
 -    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})
+-        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})
+-          string(
+-            REGEX
+-            REPLACE "^([0-9]+)"
+-                    ${verMajor}
+-                    ver
+-                    ${ver})
 -        endif("${verMajor}" MATCHES "10")
 -        # Remove all remaining '.' characters.
--        string(REPLACE "." "" ver ${ver})
+-        string(
+-          REPLACE "."
+-                  ""
+-                  ver
+-                  ${ver})
 -        # Prepend each digit with a zero.
--        string(REGEX REPLACE "([0-9A-Z])" "0\\1" ver ${ver})
+-        string(
+-          REGEX
+-          REPLACE "([0-9A-Z])"
+-                  "0\\1"
+-                  ver
+-                  ${ver})
 -        set(${version} "0x${ver}")
 -      endif()
 -    endmacro()
@@ -219,19 +132,20 @@ index af373ce..30cf2b6 100644
 -    message(STATUS "Set _WIN32_WINNT=${_WIN32_WINNT}")
 -
 -    target_compile_definitions(asio INTERFACE _WIN32_WINNT=${_WIN32_WINNT} WIN32_LEAN_AND_MEAN)
+-    target_compile_options(asio INTERFACE /bigobj)
 -  endif()
 -
 -  add_library(asio::asio ALIAS asio)
 -endif()
--
++# MINIFICPP PATCH: removed asio and splog declare_system_library
+
  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)
+@@ -302,7 +185,5 @@
  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(asio)
  declare_system_library(taocpp::json)
+ declare_system_library(snappy)
diff --git a/thirdparty/couchbase/use_fmt_instead_of_spdlog_fmt.patch b/thirdparty/couchbase/use_fmt_instead_of_spdlog_fmt.patch
new file mode 100644
index 000000000..b0951e65d
--- /dev/null
+++ b/thirdparty/couchbase/use_fmt_instead_of_spdlog_fmt.patch
@@ -0,0 +1,2641 @@
+Subject: [PATCH] use fmt instead of spdlog/fmt
+---
+Index: core/operations/management/eventing_upsert_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_upsert_function.cxx b/core/operations/management/eventing_upsert_function.cxx
+--- a/core/operations/management/eventing_upsert_function.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_upsert_function.cxx	(date 1776177013947)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/contrib/traits.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/fmt/key_value_status_code.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/fmt/key_value_status_code.hxx b/core/fmt/key_value_status_code.hxx
+--- a/core/fmt/key_value_status_code.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/fmt/key_value_status_code.hxx	(date 1776177013919)
+@@ -19,7 +19,7 @@
+
+ #include "core/error_context/key_value_status_code.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ /**
+  * Helper for fmtlib to format @ref couchbase::core::key_value_status_code objects.
+Index: test/test_transaction_examples.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/test_transaction_examples.cxx b/test/test_transaction_examples.cxx
+--- a/test/test_transaction_examples.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/test_transaction_examples.cxx	(date 1776177013913)
+@@ -21,7 +21,7 @@
+ #include <couchbase/codec/codec_flags.hxx>
+ #include <couchbase/codec/tao_json_serializer.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json.hpp>
+ #include <tao/json/to_string.hpp>
+
+Index: core/fmt/key_value_extended_error_info.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/fmt/key_value_extended_error_info.hxx b/core/fmt/key_value_extended_error_info.hxx
+--- a/core/fmt/key_value_extended_error_info.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/fmt/key_value_extended_error_info.hxx	(date 1776177013911)
+@@ -19,7 +19,7 @@
+
+ #include "core/error_context/key_value_extended_error_info.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ /**
+  * Helper for fmtlib to format @ref couchbase::key_value_extended_error_info objects.
+Index: core/fmt/key_value_error_map_attribute.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/fmt/key_value_error_map_attribute.hxx b/core/fmt/key_value_error_map_attribute.hxx
+--- a/core/fmt/key_value_error_map_attribute.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/fmt/key_value_error_map_attribute.hxx	(date 1776177014144)
+@@ -19,7 +19,7 @@
+
+ #include "core/error_context/key_value_error_map_attribute.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::key_value_error_map_attribute> {
+Index: core/operations/management/search_index_upsert.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_upsert.cxx b/core/operations/management/search_index_upsert.cxx
+--- a/core/operations/management/search_index_upsert.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_upsert.cxx	(date 1776177014126)
+@@ -22,7 +22,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/columnar/query_component.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/columnar/query_component.cxx b/core/columnar/query_component.cxx
+--- a/core/columnar/query_component.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/columnar/query_component.cxx	(date 1776177014044)
+@@ -34,8 +34,8 @@
+ #include <asio/io_context.hpp>
+ #include <asio/steady_timer.hpp>
+ #include <gsl/util>
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+ #include <tl/expected.hpp>
+
+Index: core/operations/management/analytics_link_utils.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_link_utils.hxx b/core/operations/management/analytics_link_utils.hxx
+--- a/core/operations/management/analytics_link_utils.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_link_utils.hxx	(date 1776177014124)
+@@ -19,7 +19,7 @@
+
+ #include "core/utils/url_codec.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <string>
+Index: test/test_unit_connection_string.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/test_unit_connection_string.cxx b/test/test_unit_connection_string.cxx
+--- a/test/test_unit_connection_string.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/test_unit_connection_string.cxx	(date 1776177014011)
+@@ -22,7 +22,7 @@
+
+ #include <couchbase/build_config.hxx>
+
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/ranges.h>
+
+ TEST_CASE("unit: connection string", "[unit]")
+ {
+Index: core/operations/management/search_index_control_plan_freeze.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_control_plan_freeze.cxx b/core/operations/management/search_index_control_plan_freeze.cxx
+--- a/core/operations/management/search_index_control_plan_freeze.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_control_plan_freeze.cxx	(date 1776177014021)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/impl/query_error_context.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/query_error_context.cxx b/core/impl/query_error_context.cxx
+--- a/core/impl/query_error_context.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/query_error_context.cxx	(date 1776177013926)
+@@ -17,7 +17,7 @@
+
+ #include "core/error_context/query_error_context.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/to_string.hpp>
+
+ #include <couchbase/fmt/retry_reason.hxx>
+Index: core/operations/management/analytics_get_pending_mutations.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_get_pending_mutations.cxx b/core/operations/management/analytics_get_pending_mutations.cxx
+--- a/core/operations/management/analytics_get_pending_mutations.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_get_pending_mutations.cxx	(date 1776177013875)
+@@ -20,7 +20,7 @@
+ #include "core/utils/json.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/view_index_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/view_index_drop.cxx b/core/operations/management/view_index_drop.cxx
+--- a/core/operations/management/view_index_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/view_index_drop.cxx	(date 1776177013996)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/eventing_resume_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_resume_function.cxx b/core/operations/management/eventing_resume_function.cxx
+--- a/core/operations/management/eventing_resume_function.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_resume_function.cxx	(date 1776177013969)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/columnar/columnar_agent_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/columnar/columnar_agent_config.cxx b/core/columnar/columnar_agent_config.cxx
+--- a/core/columnar/columnar_agent_config.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/columnar/columnar_agent_config.cxx	(date 1776177014156)
+@@ -17,8 +17,8 @@
+
+ #include "agent_config.hxx"
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: test/utils/test_data.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/utils/test_data.cxx b/test/utils/test_data.cxx
+--- a/test/utils/test_data.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/utils/test_data.cxx	(date 1776177013894)
+@@ -17,8 +17,8 @@
+
+ #include "core/mcbp/big_endian.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/core.h>
++#include <fmt/ranges.h>
+
+ #include <chrono>
+ #include <filesystem>
+Index: core/operations/management/search_index_get_stats.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_get_stats.cxx b/core/operations/management/search_index_get_stats.cxx
+--- a/core/operations/management/search_index_get_stats.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_get_stats.cxx	(date 1776177014053)
+@@ -20,7 +20,7 @@
+ #include "core/utils/json.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: test/utils/wait_until.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/utils/wait_until.cxx b/test/utils/wait_until.cxx
+--- a/test/utils/wait_until.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/utils/wait_until.cxx	(date 1776177013870)
+@@ -34,7 +34,7 @@
+ #include "core/topology/collections_manifest_fmt.hxx"
+ #include "core/utils/json.hxx"
+
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tao/json/value.hpp>
+
+ namespace test::utils
+Index: core/operations/management/analytics_dataset_create.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_dataset_create.cxx b/core/operations/management/analytics_dataset_create.cxx
+--- a/core/operations/management/analytics_dataset_create.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_dataset_create.cxx	(date 1776177014167)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/search_index_control_ingest.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_control_ingest.cxx b/core/operations/management/search_index_control_ingest.cxx
+--- a/core/operations/management/search_index_control_ingest.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_control_ingest.cxx	(date 1776177013872)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/group_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/group_drop.cxx b/core/operations/management/group_drop.cxx
+--- a/core/operations/management/group_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/group_drop.cxx	(date 1776177013868)
+@@ -19,7 +19,7 @@
+
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::operations::management
+ {
+Index: core/operations/management/analytics_dataverse_create.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_dataverse_create.cxx b/core/operations/management/analytics_dataverse_create.cxx
+--- a/core/operations/management/analytics_dataverse_create.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_dataverse_create.cxx	(date 1776177013965)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/eventing_pause_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_pause_function.cxx b/core/operations/management/eventing_pause_function.cxx
+--- a/core/operations/management/eventing_pause_function.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_pause_function.cxx	(date 1776177014023)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/impl/date_range.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/date_range.cxx b/core/impl/date_range.cxx
+--- a/core/impl/date_range.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/date_range.cxx	(date 1776177013922)
+@@ -17,8 +17,8 @@
+
+ #include <couchbase/date_range.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <ctime>
+Index: core/operations/management/analytics_dataset_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_dataset_drop.cxx b/core/operations/management/analytics_dataset_drop.cxx
+--- a/core/operations/management/analytics_dataset_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_dataset_drop.cxx	(date 1776177014132)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/sasl/oauthbearer/oauthbearer.cc
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/sasl/oauthbearer/oauthbearer.cc b/core/sasl/oauthbearer/oauthbearer.cc
+--- a/core/sasl/oauthbearer/oauthbearer.cc	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/sasl/oauthbearer/oauthbearer.cc	(date 1776177014176)
+@@ -16,7 +16,7 @@
+
+ #include "oauthbearer.h"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::sasl::mechanism::oauthbearer
+ {
+Index: core/operations/management/search_index_get.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_get.cxx b/core/operations/management/search_index_get.cxx
+--- a/core/operations/management/search_index_get.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_get.cxx	(date 1776177013905)
+@@ -22,7 +22,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/search_index_get_documents_count.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_get_documents_count.cxx b/core/operations/management/search_index_get_documents_count.cxx
+--- a/core/operations/management/search_index_get_documents_count.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_get_documents_count.cxx	(date 1776177013866)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/bucket_describe.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/bucket_describe.cxx b/core/operations/management/bucket_describe.cxx
+--- a/core/operations/management/bucket_describe.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/bucket_describe.cxx	(date 1776177014152)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <algorithm>
+Index: core/impl/date_range_query.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/date_range_query.cxx b/core/impl/date_range_query.cxx
+--- a/core/impl/date_range_query.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/date_range_query.cxx	(date 1776177013915)
+@@ -21,8 +21,8 @@
+
+ #include <couchbase/error_codes.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+ #include <tao/json/type.hpp>
+
+ #include <chrono>
+Index: core/operations/management/analytics_link_connect.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_link_connect.cxx b/core/operations/management/analytics_link_connect.cxx
+--- a/core/operations/management/analytics_link_connect.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_link_connect.cxx	(date 1776177014122)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/protocol/hello_feature_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/hello_feature_fmt.hxx b/core/protocol/hello_feature_fmt.hxx
+--- a/core/protocol/hello_feature_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/hello_feature_fmt.hxx	(date 1776177014063)
+@@ -19,7 +19,7 @@
+
+ #include "hello_feature.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::protocol::hello_feature> {
+Index: core/operations/management/view_index_get_all.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/view_index_get_all.cxx b/core/operations/management/view_index_get_all.cxx
+--- a/core/operations/management/view_index_get_all.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/view_index_get_all.cxx	(date 1776177014148)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/impl/scope.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/scope.cxx b/core/impl/scope.cxx
+--- a/core/impl/scope.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/scope.cxx	(date 1776177013917)
+@@ -34,7 +34,7 @@
+ #include <couchbase/collection.hxx>
+ #include <couchbase/scope.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <memory>
+ #include <utility>
+Index: core/operations/management/scope_get_all.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/scope_get_all.cxx b/core/operations/management/scope_get_all.cxx
+--- a/core/operations/management/scope_get_all.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/scope_get_all.cxx	(date 1776177013885)
+@@ -22,7 +22,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/protocol/magic_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/magic_fmt.hxx b/core/protocol/magic_fmt.hxx
+--- a/core/protocol/magic_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/magic_fmt.hxx	(date 1776177014061)
+@@ -19,7 +19,7 @@
+
+ #include "magic.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::protocol::magic> {
+Index: core/impl/numeric_range.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/numeric_range.cxx b/core/impl/numeric_range.cxx
+--- a/core/impl/numeric_range.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/numeric_range.cxx	(date 1776177014097)
+@@ -17,7 +17,7 @@
+
+ #include <couchbase/numeric_range.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ namespace couchbase
+ {
+Index: core/operations/management/analytics_link_get_all.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_link_get_all.cxx b/core/operations/management/analytics_link_get_all.cxx
+--- a/core/operations/management/analytics_link_get_all.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_link_get_all.cxx	(date 1776177013852)
+@@ -24,7 +24,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/scope_create.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/scope_create.cxx b/core/operations/management/scope_create.cxx
+--- a/core/operations/management/scope_create.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/scope_create.cxx	(date 1776177014109)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/impl/search.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/search.cxx b/core/impl/search.cxx
+--- a/core/impl/search.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/search.cxx	(date 1776177013924)
+@@ -29,7 +29,7 @@
+ #include <couchbase/match_none_query.hxx>
+ #include <utility>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::impl
+ {
+Index: core/impl/expiry.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/expiry.cxx b/core/impl/expiry.cxx
+--- a/core/impl/expiry.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/expiry.cxx	(date 1776177013828)
+@@ -18,8 +18,8 @@
+ #include <couchbase/error_codes.hxx>
+ #include <couchbase/expiry.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <cstdint>
+Index: tools/utils.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/utils.hxx b/tools/utils.hxx
+--- a/tools/utils.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/utils.hxx	(date 1776177014136)
+@@ -26,8 +26,8 @@
+
+ #include <CLI/CLI.hpp>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <cstdint>
+Index: core/protocol/client_response.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/client_response.hxx b/core/protocol/client_response.hxx
+--- a/core/protocol/client_response.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/client_response.hxx	(date 1776177014140)
+@@ -34,7 +34,7 @@
+ #include <couchbase/cas.hxx>
+
+ #include <gsl/assert>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <cmath>
+ #include <cstring>
+Index: core/operations/management/analytics_dataverse_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_dataverse_drop.cxx b/core/operations/management/analytics_dataverse_drop.cxx
+--- a/core/operations/management/analytics_dataverse_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_dataverse_drop.cxx	(date 1776177013850)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: tools/cbc.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/cbc.cxx b/tools/cbc.cxx
+--- a/tools/cbc.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/cbc.cxx	(date 1776177013900)
+@@ -29,7 +29,7 @@
+
+ #include "core/meta/version.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ auto
+ main(int argc, const char** argv) -> int
+Index: core/operations/management/query_index_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/query_index_drop.cxx b/core/operations/management/query_index_drop.cxx
+--- a/core/operations/management/query_index_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/query_index_drop.cxx	(date 1776177013877)
+@@ -21,7 +21,7 @@
+ #include "core/utils/keyspace.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/operations/management/bucket_flush.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/bucket_flush.cxx b/core/operations/management/bucket_flush.cxx
+--- a/core/operations/management/bucket_flush.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/bucket_flush.cxx	(date 1776177013936)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::operations::management
+ {
+Index: tools/get.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/get.cxx b/tools/get.cxx
+--- a/tools/get.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/get.cxx	(date 1776177014158)
+@@ -29,7 +29,7 @@
+ #include <couchbase/read_preference.hxx>
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tao/json.hpp>
+
+ #include <couchbase/fmt/cas.hxx>
+Index: core/operations/management/query_index_create.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/query_index_create.cxx b/core/operations/management/query_index_create.cxx
+--- a/core/operations/management/query_index_create.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/query_index_create.cxx	(date 1776177014120)
+@@ -21,7 +21,7 @@
+ #include "core/utils/keyspace.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/operations/management/analytics_index_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_index_drop.cxx b/core/operations/management/analytics_index_drop.cxx
+--- a/core/operations/management/analytics_index_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_index_drop.cxx	(date 1776177013898)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/change_password.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/change_password.cxx b/core/operations/management/change_password.cxx
+--- a/core/operations/management/change_password.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/change_password.cxx	(date 1776177013994)
+@@ -19,7 +19,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::operations::management
+ {
+Index: core/operations/management/eventing_drop_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_drop_function.cxx b/core/operations/management/eventing_drop_function.cxx
+--- a/core/operations/management/eventing_drop_function.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_drop_function.cxx	(date 1776177014162)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/impl/best_effort_retry_strategy.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/best_effort_retry_strategy.cxx b/core/impl/best_effort_retry_strategy.cxx
+--- a/core/impl/best_effort_retry_strategy.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/best_effort_retry_strategy.cxx	(date 1776177013890)
+@@ -21,7 +21,7 @@
+ #include <couchbase/retry_reason.hxx>
+ #include <couchbase/retry_request.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <chrono>
+Index: tools/pillowfight.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/pillowfight.cxx b/tools/pillowfight.cxx
+--- a/tools/pillowfight.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/pillowfight.cxx	(date 1776177013889)
+@@ -31,8 +31,8 @@
+ #include <asio/steady_timer.hpp>
+ #include <gsl/util>
+ #include <hdr/hdr_histogram.h>
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/std.h>
++#include <fmt/chrono.h>
++#include <fmt/std.h>
+ #include <tao/json.hpp>
+
+ #include <couchbase/fmt/cas.hxx>
+Index: tools/utils.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/utils.cxx b/tools/utils.cxx
+--- a/tools/utils.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/utils.cxx	(date 1776177013956)
+@@ -87,7 +87,7 @@
+ #endif
+
+ #include <spdlog/details/os.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <spdlog/spdlog.h>
+ #include <tao/json/value.hpp>
+
+Index: core/operations/management/view_index_get.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/view_index_get.cxx b/core/operations/management/view_index_get.cxx
+--- a/core/operations/management/view_index_get.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/view_index_get.cxx	(date 1776177013831)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: tools/query.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/query.cxx b/tools/query.cxx
+--- a/tools/query.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/query.cxx	(date 1776177014058)
+@@ -31,7 +31,7 @@
+ #include <couchbase/fmt/query_status.hxx>
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ #include <tao/json.hpp>
+ #include <tao/json/type.hpp>
+Index: core/query_context.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/query_context.hxx b/core/query_context.hxx
+--- a/core/query_context.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/query_context.hxx	(date 1776177014099)
+@@ -16,7 +16,7 @@
+  */
+ #pragma once
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <optional>
+ #include <string>
+Index: core/key_value_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/key_value_config.cxx b/core/key_value_config.cxx
+--- a/core/key_value_config.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/key_value_config.cxx	(date 1776177014056)
+@@ -15,8 +15,8 @@
+
+ #include "key_value_config.hxx"
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core
+ {
+Index: core/operations/management/search_index_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_drop.cxx b/core/operations/management/search_index_drop.cxx
+--- a/core/operations/management/search_index_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_drop.cxx	(date 1776177013928)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/impl/error.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/error.cxx b/core/impl/error.cxx
+--- a/core/impl/error.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/error.cxx	(date 1776177013836)
+@@ -43,7 +43,7 @@
+ #include <couchbase/error_codes.hxx>
+ #include <couchbase/error_context.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include "core/transactions/internal/exceptions_internal_fmt.hxx"
+Index: tools/version.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/version.cxx b/tools/version.cxx
+--- a/tools/version.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/version.cxx	(date 1776177014111)
+@@ -21,7 +21,7 @@
+
+ #include <core/meta/version.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+ #include <tao/json.hpp>
+
+ namespace
+Index: core/impl/dns_srv_tracker.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/dns_srv_tracker.cxx b/core/impl/dns_srv_tracker.cxx
+--- a/core/impl/dns_srv_tracker.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/dns_srv_tracker.cxx	(date 1776177014165)
+@@ -31,7 +31,7 @@
+ #include <asio/bind_executor.hpp>
+ #include <asio/io_context.hpp>
+ #include <asio/post.hpp>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <functional>
+ #include <memory>
+Index: core/operations/management/bucket_get.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/bucket_get.cxx b/core/operations/management/bucket_get.cxx
+--- a/core/operations/management/bucket_get.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/bucket_get.cxx	(date 1776177014128)
+@@ -22,7 +22,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: tools/beam.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/beam.cxx b/tools/beam.cxx
+--- a/tools/beam.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/beam.cxx	(date 1776177013896)
+@@ -25,8 +25,8 @@
+ #include <couchbase/cluster.hxx>
+ #include <couchbase/codec/tao_json_serializer.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/chrono.h>
++#include <fmt/ranges.h>
+
+ #include <couchbase/fmt/cas.hxx>
+ #include <couchbase/fmt/error.hxx>
+Index: core/http_component.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/http_component.cxx b/core/http_component.cxx
+--- a/core/http_component.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/http_component.cxx	(date 1776177014138)
+@@ -25,7 +25,7 @@
+ #include <couchbase/build_config.hxx>
+
+ #include <asio/error.hpp>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tl/expected.hpp>
+
+ #include <memory>
+Index: core/protocol/frame_info_id_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/frame_info_id_fmt.hxx b/core/protocol/frame_info_id_fmt.hxx
+--- a/core/protocol/frame_info_id_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/frame_info_id_fmt.hxx	(date 1776177013967)
+@@ -19,7 +19,7 @@
+
+ #include "frame_info_id.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::protocol::request_frame_info_id> {
+Index: tools/analytics.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/analytics.cxx b/tools/analytics.cxx
+--- a/tools/analytics.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/analytics.cxx	(date 1776177013985)
+@@ -30,7 +30,7 @@
+
+ #include <asio/io_context.hpp>
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tao/json.hpp>
+
+ #include <regex>
+Index: core/operations/management/collection_create.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/collection_create.cxx b/core/operations/management/collection_create.cxx
+--- a/core/operations/management/collection_create.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/collection_create.cxx	(date 1776177013892)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/impl/collection.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/collection.cxx b/core/impl/collection.cxx
+--- a/core/impl/collection.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/collection.cxx	(date 1776177013958)
+@@ -94,7 +94,7 @@
+ #include <couchbase/unlock_options.hxx>
+ #include <couchbase/upsert_options.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <cstdint>
+Index: examples/async_game_server.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/async_game_server.cxx b/examples/async_game_server.cxx
+--- a/examples/async_game_server.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/async_game_server.cxx	(date 1776177013934)
+@@ -19,7 +19,7 @@
+ #include <couchbase/codec/tao_json_serializer.hxx>
+ #include <couchbase/logger.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <couchbase/fmt/error.hxx>
+
+Index: core/protocol/server_opcode_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/server_opcode_fmt.hxx b/core/protocol/server_opcode_fmt.hxx
+--- a/core/protocol/server_opcode_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/server_opcode_fmt.hxx	(date 1776177014084)
+@@ -19,7 +19,7 @@
+
+ #include "server_opcode.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::protocol::server_opcode> {
+Index: examples/bulk_transactional_get_replace.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/bulk_transactional_get_replace.cxx b/examples/bulk_transactional_get_replace.cxx
+--- a/examples/bulk_transactional_get_replace.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/bulk_transactional_get_replace.cxx	(date 1776177013864)
+@@ -19,8 +19,8 @@
+ #include <couchbase/codec/tao_json_serializer.hxx>
+ #include <couchbase/transactions.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/chrono.h>
++#include <fmt/format.h>
+ #include <tao/json/to_string.hpp>
+
+ #include <couchbase/fmt/error.hxx>
+Index: core/collections_component.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/collections_component.cxx b/core/collections_component.cxx
+--- a/core/collections_component.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/collections_component.cxx	(date 1776177014150)
+@@ -42,7 +42,7 @@
+ #include <asio/error.hpp>
+ #include <asio/io_context.hpp>
+ #include <asio/steady_timer.hpp>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+ #include <tao/pegtl/parse_error.hpp>
+ #include <tl/expected.hpp>
+Index: examples/bulk_base_api.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/bulk_base_api.cxx b/examples/bulk_base_api.cxx
+--- a/examples/bulk_base_api.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/bulk_base_api.cxx	(date 1776177013999)
+@@ -18,8 +18,8 @@
+ #include <couchbase/cluster.hxx>
+ #include <couchbase/codec/tao_json_serializer.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/chrono.h>
++#include <fmt/format.h>
+ #include <tao/json/to_string.hpp>
+
+ #include <couchbase/fmt/error.hxx>
+Index: examples/distributed_mutex.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/distributed_mutex.cxx b/examples/distributed_mutex.cxx
+--- a/examples/distributed_mutex.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/distributed_mutex.cxx	(date 1776177014094)
+@@ -19,8 +19,8 @@
+ #include <couchbase/cluster.hxx>
+ #include <couchbase/codec/tao_json_serializer.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/chrono.h>
++#include <fmt/format.h>
+
+ #include <couchbase/fmt/error_context.hxx>
+
+Index: examples/minimal.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/minimal.cxx b/examples/minimal.cxx
+--- a/examples/minimal.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/minimal.cxx	(date 1776177014038)
+@@ -19,7 +19,7 @@
+ #include <couchbase/codec/tao_json_serializer.hxx>
+ #include <couchbase/logger.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <couchbase/fmt/error.hxx>
+
+Index: core/document_id_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/document_id_fmt.hxx b/core/document_id_fmt.hxx
+--- a/core/document_id_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/document_id_fmt.hxx	(date 1776177014065)
+@@ -19,7 +19,7 @@
+
+ #include "document_id.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::document_id> {
+Index: examples/bulk_transactional_api.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/examples/bulk_transactional_api.cxx b/examples/bulk_transactional_api.cxx
+--- a/examples/bulk_transactional_api.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/examples/bulk_transactional_api.cxx	(date 1776177013847)
+@@ -19,8 +19,8 @@
+ #include <couchbase/codec/tao_json_serializer.hxx>
+ #include <couchbase/transactions.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/chrono.h>
++#include <fmt/format.h>
+ #include <tao/json/to_string.hpp>
+
+ #include <couchbase/fmt/error.hxx>
+Index: core/impl/fail_fast_retry_strategy.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/fail_fast_retry_strategy.cxx b/core/impl/fail_fast_retry_strategy.cxx
+--- a/core/impl/fail_fast_retry_strategy.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/fail_fast_retry_strategy.cxx	(date 1776177013971)
+@@ -20,7 +20,7 @@
+ #include <couchbase/retry_reason.hxx>
+ #include <couchbase/retry_request.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+
+ #include <memory>
+ #include <string>
+Index: core/bucket.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/bucket.cxx b/core/bucket.cxx
+--- a/core/bucket.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/bucket.cxx	(date 1776177014174)
+@@ -55,7 +55,7 @@
+ #include <asio/post.hpp>
+ #include <asio/ssl/context.hpp>
+ #include <gsl/span>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <chrono>
+Index: core/impl/key_value_error_context.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/key_value_error_context.cxx b/core/impl/key_value_error_context.cxx
+--- a/core/impl/key_value_error_context.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/key_value_error_context.cxx	(date 1776177014016)
+@@ -17,7 +17,7 @@
+
+ #include "core/error_context/key_value_error_context.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/to_string.hpp>
+
+ #include "core/fmt/key_value_error_map_attribute.hxx"
+Index: core/topology/configuration_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/topology/configuration_fmt.hxx b/core/topology/configuration_fmt.hxx
+--- a/core/topology/configuration_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/topology/configuration_fmt.hxx	(date 1776177014105)
+@@ -22,7 +22,7 @@
+ #include "core/service_type_fmt.hxx"
+ #include "core/utils/join_strings.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::topology::configuration::node> {
+Index: core/transactions/async_attempt_context.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/async_attempt_context.cxx b/core/transactions/async_attempt_context.cxx
+--- a/core/transactions/async_attempt_context.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/async_attempt_context.cxx	(date 1776177013977)
+@@ -18,7 +18,7 @@
+ #include <couchbase/scope.hxx>
+ #include <couchbase/transactions/async_attempt_context.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::transactions
+ {
+Index: core/protocol/client_opcode_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/protocol/client_opcode_fmt.hxx b/core/protocol/client_opcode_fmt.hxx
+--- a/core/protocol/client_opcode_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/protocol/client_opcode_fmt.hxx	(date 1776177014050)
+@@ -19,7 +19,7 @@
+
+ #include "client_opcode.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::protocol::client_opcode> {
+Index: core/transactions/exceptions_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/exceptions_fmt.hxx b/core/transactions/exceptions_fmt.hxx
+--- a/core/transactions/exceptions_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/exceptions_fmt.hxx	(date 1776177013940)
+@@ -18,7 +18,7 @@
+
+ #include "exceptions.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::transactions::external_exception> {
+Index: core/topology/capabilities_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/topology/capabilities_fmt.hxx b/core/topology/capabilities_fmt.hxx
+--- a/core/topology/capabilities_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/topology/capabilities_fmt.hxx	(date 1776177013855)
+@@ -19,7 +19,7 @@
+
+ #include "capabilities.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::bucket_capability> {
+Index: core/transactions/attempt_context.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/attempt_context.cxx b/core/transactions/attempt_context.cxx
+--- a/core/transactions/attempt_context.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/attempt_context.cxx	(date 1776177014154)
+@@ -18,7 +18,7 @@
+ #include <couchbase/scope.hxx>
+ #include <couchbase/transactions/attempt_context.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::transactions
+ {
+Index: core/topology/collections_manifest_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/topology/collections_manifest_fmt.hxx b/core/topology/collections_manifest_fmt.hxx
+--- a/core/topology/collections_manifest_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/topology/collections_manifest_fmt.hxx	(date 1776177014006)
+@@ -21,7 +21,7 @@
+
+ #include "core/utils/join_strings.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <vector>
+
+Index: core/seed_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/seed_config.cxx b/core/seed_config.cxx
+--- a/core/seed_config.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/seed_config.cxx	(date 1776177014088)
+@@ -15,8 +15,8 @@
+
+ #include "seed_config.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/core.h>
++#include <fmt/ranges.h>
+
+ namespace couchbase::core
+ {
+Index: core/retry_orchestrator.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/retry_orchestrator.cxx b/core/retry_orchestrator.cxx
+--- a/core/retry_orchestrator.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/retry_orchestrator.cxx	(date 1776177013963)
+@@ -21,7 +21,7 @@
+
+ #include <couchbase/fmt/retry_reason.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ namespace couchbase::core
+ {
+Index: core/transactions/result_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/result_fmt.hxx b/core/transactions/result_fmt.hxx
+--- a/core/transactions/result_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/result_fmt.hxx	(date 1776177014178)
+@@ -18,7 +18,7 @@
+
+ #include "result.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::transactions::result> {
+Index: core/document_id.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/document_id.cxx b/core/document_id.cxx
+--- a/core/document_id.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/document_id.cxx	(date 1776177014103)
+@@ -20,7 +20,7 @@
+ #include "core/utils/binary.hxx"
+ #include "core/utils/unsigned_leb128.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <cstddef>
+Index: core/websocket_codec.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/websocket_codec.cxx b/core/websocket_codec.cxx
+--- a/core/websocket_codec.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/websocket_codec.cxx	(date 1776177013887)
+@@ -20,7 +20,7 @@
+ #include "core/platform/random.h"
+
+ #include <llhttp.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <array>
+Index: core/transactions/transaction_links.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/transaction_links.hxx b/core/transactions/transaction_links.hxx
+--- a/core/transactions/transaction_links.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/transaction_links.hxx	(date 1776177014101)
+@@ -18,7 +18,7 @@
+
+ #include <couchbase/codec/encoded_value.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <optional>
+Index: core/service_type_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/service_type_fmt.hxx b/core/service_type_fmt.hxx
+--- a/core/service_type_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/service_type_fmt.hxx	(date 1776177013920)
+@@ -19,7 +19,7 @@
+
+ #include "service_type.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::service_type> {
+Index: core/mcbp/operation_queue.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/mcbp/operation_queue.cxx b/core/mcbp/operation_queue.cxx
+--- a/core/mcbp/operation_queue.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/mcbp/operation_queue.cxx	(date 1776177014032)
+@@ -23,7 +23,7 @@
+
+ #include <couchbase/error_codes.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+ #include <iterator>
+Index: core/management/rbac_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/management/rbac_fmt.hxx b/core/management/rbac_fmt.hxx
+--- a/core/management/rbac_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/management/rbac_fmt.hxx	(date 1776177014042)
+@@ -19,7 +19,7 @@
+
+ #include "rbac.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::management::rbac::auth_domain> {
+Index: core/agent_group_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/agent_group_config.cxx b/core/agent_group_config.cxx
+--- a/core/agent_group_config.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/agent_group_config.cxx	(date 1776177013860)
+@@ -15,7 +15,7 @@
+
+ #include "agent_group_config.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: core/transactions/internal/exceptions_internal_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/internal/exceptions_internal_fmt.hxx b/core/transactions/internal/exceptions_internal_fmt.hxx
+--- a/core/transactions/internal/exceptions_internal_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/internal/exceptions_internal_fmt.hxx	(date 1776177013953)
+@@ -16,7 +16,7 @@
+
+ #pragma once
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::transactions::error_class> {
+Index: core/transactions/internal/atr_cleanup_entry.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/internal/atr_cleanup_entry.hxx b/core/transactions/internal/atr_cleanup_entry.hxx
+--- a/core/transactions/internal/atr_cleanup_entry.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/internal/atr_cleanup_entry.hxx	(date 1776177014142)
+@@ -21,7 +21,7 @@
+ #include "core/transactions/transaction_get_result.hxx"
+ #include "logging.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <memory>
+Index: core/crud_component.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/crud_component.cxx b/core/crud_component.cxx
+--- a/core/crud_component.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/crud_component.cxx	(date 1776177014113)
+@@ -43,7 +43,7 @@
+ #include <gsl/span_ext>
+ #include <gsl/util>
+ #include <snappy.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+ #include <tl/expected.hpp>
+
+Index: core/cluster_agent_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/cluster_agent_config.cxx b/core/cluster_agent_config.cxx
+--- a/core/cluster_agent_config.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/cluster_agent_config.cxx	(date 1776177014034)
+@@ -15,7 +15,7 @@
+
+ #include "cluster_agent_config.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: core/transactions/internal/doc_record_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/internal/doc_record_fmt.hxx b/core/transactions/internal/doc_record_fmt.hxx
+--- a/core/transactions/internal/doc_record_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/internal/doc_record_fmt.hxx	(date 1776177014025)
+@@ -17,7 +17,7 @@
+
+ #include "doc_record.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::transactions::doc_record> {
+Index: core/transactions/internal/client_record.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/internal/client_record.hxx b/core/transactions/internal/client_record.hxx
+--- a/core/transactions/internal/client_record.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/internal/client_record.hxx	(date 1776177014051)
+@@ -15,7 +15,7 @@
+  */
+ #pragma once
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+ #include <vector>
+Index: core/app_telemetry_meter.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/app_telemetry_meter.cxx b/core/app_telemetry_meter.cxx
+--- a/core/app_telemetry_meter.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/app_telemetry_meter.cxx	(date 1776177014160)
+@@ -22,7 +22,7 @@
+ #include "utils/json.hxx"
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/to_string.hpp>
+ #include <tao/json/value.hpp>
+
+Index: core/transactions/internal/logging.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/transactions/internal/logging.hxx b/core/transactions/internal/logging.hxx
+--- a/core/transactions/internal/logging.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/transactions/internal/logging.hxx	(date 1776177013907)
+@@ -17,7 +17,7 @@
+
+ #include <core/logger/logger.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+
+ namespace couchbase::core::transactions
+ {
+Index: core/diagnostics_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/diagnostics_fmt.hxx b/core/diagnostics_fmt.hxx
+--- a/core/diagnostics_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/diagnostics_fmt.hxx	(date 1776177014048)
+@@ -19,7 +19,7 @@
+
+ #include "diagnostics.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::diag::cluster_state> {
+Index: core/error_context/key_value_json.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/error_context/key_value_json.hxx b/core/error_context/key_value_json.hxx
+--- a/core/error_context/key_value_json.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/error_context/key_value_json.hxx	(date 1776177014172)
+@@ -22,7 +22,7 @@
+
+ #include "key_value_error_context.hxx"
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+ #include <tao/json/forward.hpp>
+
+ namespace tao::json
+Index: core/error_context/query_public_json.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/error_context/query_public_json.hxx b/core/error_context/query_public_json.hxx
+--- a/core/error_context/query_public_json.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/error_context/query_public_json.hxx	(date 1776177013841)
+@@ -21,7 +21,7 @@
+
+ #include <couchbase/fmt/retry_reason.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+ #include <tao/json/forward.hpp>
+
+ namespace tao::json
+Index: core/mcbp/packet.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/mcbp/packet.cxx b/core/mcbp/packet.cxx
+--- a/core/mcbp/packet.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/mcbp/packet.cxx	(date 1776177014163)
+@@ -23,7 +23,7 @@
+ #include "core/fmt/key_value_status_code.hxx"
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <iterator>
+
+Index: core/origin.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/origin.cxx b/core/origin.cxx
+--- a/core/origin.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/origin.cxx	(date 1776177013982)
+@@ -21,8 +21,8 @@
+ #include "core/utils/connection_string.hxx"
+ #include "topology/configuration.hxx"
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+
+ #include <tao/json.hpp>
+
+Index: core/meta/version.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/meta/version.cxx b/core/meta/version.cxx
+--- a/core/meta/version.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/meta/version.cxx	(date 1776177014046)
+@@ -32,7 +32,7 @@
+ #include <hdr/hdr_histogram_version.h>
+ #include <llhttp.h>
+ #include <snappy-stubs-public.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <spdlog/version.h>
+ #ifdef COUCHBASE_CXX_CLIENT_BUILD_OPENTELEMETRY
+ #include <opentelemetry/version.h>
+Index: core/core_sdk_shim.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/core_sdk_shim.cxx b/core/core_sdk_shim.cxx
+--- a/core/core_sdk_shim.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/core_sdk_shim.cxx	(date 1776177014036)
+@@ -15,7 +15,7 @@
+
+ #include "core_sdk_shim.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: core/error_context/subdocument_json.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/error_context/subdocument_json.hxx b/core/error_context/subdocument_json.hxx
+--- a/core/error_context/subdocument_json.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/error_context/subdocument_json.hxx	(date 1776177014030)
+@@ -21,7 +21,7 @@
+
+ #include <couchbase/fmt/retry_reason.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+ #include <tao/json/forward.hpp>
+
+ #include "key_value_json.hxx"
+Index: core/config_profiles.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/config_profiles.cxx b/core/config_profiles.cxx
+--- a/core/config_profiles.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/config_profiles.cxx	(date 1776177014013)
+@@ -20,7 +20,7 @@
+ #include "cluster_options.hxx"
+ #include "core/config_profile.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <chrono>
+ #include <mutex>
+Index: core/app_telemetry_reporter.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/app_telemetry_reporter.cxx b/core/app_telemetry_reporter.cxx
+--- a/core/app_telemetry_reporter.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/app_telemetry_reporter.cxx	(date 1776177014003)
+@@ -33,8 +33,8 @@
+ #include <asio/steady_timer.hpp>
+ #include <llhttp.h>
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+ #include <tao/json/to_string.hpp>
+ #include <tao/json/value.hpp>
+
+Index: core/agent_config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/agent_config.cxx b/core/agent_config.cxx
+--- a/core/agent_config.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/agent_config.cxx	(date 1776177013988)
+@@ -15,7 +15,7 @@
+
+ #include "agent_config.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: core/sasl/error_fmt.h
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/sasl/error_fmt.h b/core/sasl/error_fmt.h
+--- a/core/sasl/error_fmt.h	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/sasl/error_fmt.h	(date 1776177014029)
+@@ -19,7 +19,7 @@
+
+ #include "error.h"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::sasl::error> {
+Index: core/error_context/analytics_json.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/error_context/analytics_json.hxx b/core/error_context/analytics_json.hxx
+--- a/core/error_context/analytics_json.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/error_context/analytics_json.hxx	(date 1776177013858)
+@@ -22,7 +22,7 @@
+
+ #include <couchbase/error_codes.hxx>
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/forward.hpp>
+ #include <tao/json/value.hpp>
+
+Index: core/utils/join_strings.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/utils/join_strings.hxx b/core/utils/join_strings.hxx
+--- a/core/utils/join_strings.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/utils/join_strings.hxx	(date 1776177014008)
+@@ -17,7 +17,7 @@
+
+ #pragma once
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <sstream>
+
+Index: core/operations/management/analytics_link_disconnect.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_link_disconnect.cxx b/core/operations/management/analytics_link_disconnect.cxx
+--- a/core/operations/management/analytics_link_disconnect.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_link_disconnect.cxx	(date 1776177013952)
+@@ -21,7 +21,7 @@
+ #include "core/utils/name_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/utils/url_codec.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/utils/url_codec.cxx b/core/utils/url_codec.cxx
+--- a/core/utils/url_codec.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/utils/url_codec.cxx	(date 1776177013904)
+@@ -17,7 +17,7 @@
+
+ #include "url_codec.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <cctype>
+ #include <climits>
+Index: core/operations/management/group_get.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/group_get.cxx b/core/operations/management/group_get.cxx
+--- a/core/operations/management/group_get.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/group_get.cxx	(date 1776177013930)
+@@ -21,7 +21,7 @@
+ #include "core/utils/json.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/scope_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/scope_drop.cxx b/core/operations/management/scope_drop.cxx
+--- a/core/operations/management/scope_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/scope_drop.cxx	(date 1776177014027)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: test/test_unit_metrics.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/test_unit_metrics.cxx b/test/test_unit_metrics.cxx
+--- a/test/test_unit_metrics.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/test_unit_metrics.cxx	(date 1776177014130)
+@@ -21,7 +21,7 @@
+ #include "core/tracing/constants.hxx"
+
+ #include <couchbase/error_codes.hxx>
+-#include <spdlog/fmt/bundled/printf.h>
++#include <fmt/printf.h>
+
+ TEST_CASE("unit: metric attributes encoding", "[unit]")
+ {
+Index: core/design_document_namespace_fmt.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/design_document_namespace_fmt.hxx b/core/design_document_namespace_fmt.hxx
+--- a/core/design_document_namespace_fmt.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/design_document_namespace_fmt.hxx	(date 1776177013902)
+@@ -19,7 +19,7 @@
+
+ #include "design_document_namespace.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ template<>
+ struct fmt::formatter<couchbase::core::design_document_namespace> {
+Index: core/operations/management/collection_update.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/collection_update.cxx b/core/operations/management/collection_update.cxx
+--- a/core/operations/management/collection_update.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/collection_update.cxx	(date 1776177014115)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/operations/management/search_index_analyze_document.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_analyze_document.cxx b/core/operations/management/search_index_analyze_document.cxx
+--- a/core/operations/management/search_index_analyze_document.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_analyze_document.cxx	(date 1776177013932)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/view_index_upsert.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/view_index_upsert.cxx b/core/operations/management/view_index_upsert.cxx
+--- a/core/operations/management/view_index_upsert.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/view_index_upsert.cxx	(date 1776177013909)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: test/test_integration_tracer.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/test_integration_tracer.cxx b/test/test_integration_tracer.cxx
+--- a/test/test_integration_tracer.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/test_integration_tracer.cxx	(date 1776177013879)
+@@ -25,7 +25,7 @@
+
+ #include <catch2/catch_message.hpp>
+ #include <catch2/generators/catch_generators.hpp>
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/ranges.h>
+
+ class test_span : public couchbase::tracing::request_span
+ {
+Index: test/test_integration_examples.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/test/test_integration_examples.cxx b/test/test_integration_examples.cxx
+--- a/test/test_integration_examples.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/test/test_integration_examples.cxx	(date 1776177013961)
+@@ -34,8 +34,8 @@
+ #include <couchbase/query_string_query.hxx>
+ #include <couchbase/term_facet.hxx>
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/ranges.h>
++#include <fmt/chrono.h>
++#include <fmt/ranges.h>
+ #include <tao/json.hpp>
+ #include <tao/json/contrib/traits.hpp>
+
+Index: core/io/http_parser.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/io/http_parser.cxx b/core/io/http_parser.cxx
+--- a/core/io/http_parser.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/io/http_parser.cxx	(date 1776177013973)
+@@ -18,7 +18,7 @@
+ #include "http_parser.hxx"
+
+ #include <llhttp.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <algorithm>
+
+Index: core/impl/crypto.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/impl/crypto.cxx b/core/impl/crypto.cxx
+--- a/core/impl/crypto.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/impl/crypto.cxx	(date 1776177014018)
+@@ -24,7 +24,7 @@
+ #include "core/utils/binary.hxx"
+
+ #include "include_ssl/rand.h"
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+
+ namespace couchbase::crypto::internal
+ {
+Index: core/operations/management/bucket_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/bucket_drop.cxx b/core/operations/management/bucket_drop.cxx
+--- a/core/operations/management/bucket_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/bucket_drop.cxx	(date 1776177014080)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ namespace couchbase::core::operations::management
+ {
+Index: core/operations/management/search_index_control_query.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_control_query.cxx b/core/operations/management/search_index_control_query.cxx
+--- a/core/operations/management/search_index_control_query.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_control_query.cxx	(date 1776177013839)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/utils/keyspace.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/utils/keyspace.hxx b/core/utils/keyspace.hxx
+--- a/core/utils/keyspace.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/utils/keyspace.hxx	(date 1776177013950)
+@@ -17,7 +17,7 @@
+
+ #pragma once
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <string>
+
+Index: core/io/config_tracker.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/io/config_tracker.cxx b/core/io/config_tracker.cxx
+--- a/core/io/config_tracker.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/io/config_tracker.cxx	(date 1776177013975)
+@@ -29,7 +29,7 @@
+ #include "mcbp_session.hxx"
+
+ #include <asio/steady_timer.hpp>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ namespace couchbase::core::io
+ {
+Index: core/io/mcbp_command.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/io/mcbp_command.hxx b/core/io/mcbp_command.hxx
+--- a/core/io/mcbp_command.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/io/mcbp_command.hxx	(date 1776177013883)
+@@ -38,7 +38,7 @@
+ #include <couchbase/error_codes.hxx>
+
+ #include <asio/steady_timer.hpp>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ #include <functional>
+ #include <utility>
+Index: core/operations/management/collection_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/collection_drop.cxx b/core/operations/management/collection_drop.cxx
+--- a/core/operations/management/collection_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/collection_drop.cxx	(date 1776177014146)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ #include <regex>
+Index: core/io/http_session.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/io/http_session.hxx b/core/io/http_session.hxx
+--- a/core/io/http_session.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/io/http_session.hxx	(date 1776177014107)
+@@ -36,7 +36,7 @@
+ #include "core/tls_context_provider.hxx"
+
+ #include <asio.hpp>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ #include <memory>
+ #include <optional>
+Index: core/operations/management/eventing_get_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_get_function.cxx b/core/operations/management/eventing_get_function.cxx
+--- a/core/operations/management/eventing_get_function.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_get_function.cxx	(date 1776177013833)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: tools/config.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/config.cxx b/tools/config.cxx
+--- a/tools/config.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/config.cxx	(date 1776177014040)
+@@ -26,7 +26,7 @@
+
+ #include <couchbase/cluster.hxx>
+
+-#include <spdlog/fmt/bundled/format.h>
++#include <fmt/format.h>
+ #include <tao/json.hpp>
+ #include <tao/json/from_string.hpp>
+
+Index: core/operations/management/analytics_link_drop.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/analytics_link_drop.cxx b/core/operations/management/analytics_link_drop.cxx
+--- a/core/operations/management/analytics_link_drop.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/analytics_link_drop.cxx	(date 1776177014134)
+@@ -21,7 +21,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: tools/remove.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/remove.cxx b/tools/remove.cxx
+--- a/tools/remove.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/remove.cxx	(date 1776177013881)
+@@ -24,7 +24,7 @@
+ #include <couchbase/codec/tao_json_serializer.hxx>
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tao/json.hpp>
+
+ #include <couchbase/fmt/cas.hxx>
+Index: core/logger/logger.hxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/logger/logger.hxx b/core/logger/logger.hxx
+--- a/core/logger/logger.hxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/logger/logger.hxx	(date 1776177013845)
+@@ -29,7 +29,7 @@
+
+ #include "level.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <spdlog/fwd.h>
+
+ #include <memory>
+Index: tools/sysinfo.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/sysinfo.cxx b/tools/sysinfo.cxx
+--- a/tools/sysinfo.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/sysinfo.cxx	(date 1776177014060)
+@@ -19,8 +19,8 @@
+
+ #include "system_metrics_reporter.hxx"
+
+-#include <spdlog/fmt/bundled/chrono.h>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/chrono.h>
++#include <fmt/core.h>
+ #include <tao/json.hpp>
+
+ #include <array>
+Index: core/io/dns_client.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/io/dns_client.cxx b/core/io/dns_client.cxx
+--- a/core/io/dns_client.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/io/dns_client.cxx	(date 1776177013862)
+@@ -28,7 +28,7 @@
+ #include <asio/read.hpp>
+ #include <asio/write.hpp>
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+
+ #include <chrono>
+ #include <memory>
+Index: tools/key_generator.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/key_generator.cxx b/tools/key_generator.cxx
+--- a/tools/key_generator.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/key_generator.cxx	(date 1776177013991)
+@@ -20,7 +20,7 @@
+ #include "core/topology/configuration.hxx"
+
+ #include <optional>
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+
+ #include <gsl/assert>
+ #include <gsl/span>
+Index: tools/upsert.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/tools/upsert.cxx b/tools/upsert.cxx
+--- a/tools/upsert.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/tools/upsert.cxx	(date 1776177013938)
+@@ -27,7 +27,7 @@
+ #include <couchbase/replicate_to.hxx>
+
+ #include <spdlog/fmt/bin_to_hex.h>
+-#include <spdlog/fmt/bundled/chrono.h>
++#include <fmt/chrono.h>
+ #include <tao/json.hpp>
+
+ #include <couchbase/fmt/cas.hxx>
+Index: core/operations/management/eventing_deploy_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_deploy_function.cxx b/core/operations/management/eventing_deploy_function.cxx
+--- a/core/operations/management/eventing_deploy_function.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_deploy_function.cxx	(date 1776177014054)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/search_index_get_all.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/search_index_get_all.cxx b/core/operations/management/search_index_get_all.cxx
+--- a/core/operations/management/search_index_get_all.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/search_index_get_all.cxx	(date 1776177014117)
+@@ -22,7 +22,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+
+ namespace couchbase::core::operations::management
+Index: core/operations/management/eventing_undeploy_function.cxx
+IDEA additional info:
+Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
+<+>UTF-8
+===================================================================
+diff --git a/core/operations/management/eventing_undeploy_function.cxx b/core/operations/management/eventing_undeploy_function.cxx
+--- a/core/operations/management/eventing_undeploy_function.cxx	(revision fb3f860843c3ca594f2676225dcc95ed8d6c1375)
++++ b/core/operations/management/eventing_undeploy_function.cxx	(date 1776177013979)
+@@ -20,7 +20,7 @@
+ #include "core/utils/url_codec.hxx"
+ #include "error_utils.hxx"
+
+-#include <spdlog/fmt/bundled/core.h>
++#include <fmt/core.h>
+ #include <tao/json/value.hpp>
+ 
+ namespace couchbase::core::operations::management
diff --git a/thirdparty/libstdc++/avoid_bogus_Wrestrict_PR105651.patch b/thirdparty/libstdc++/avoid_bogus_Wrestrict_PR105651.patch
deleted file mode 100644
index 8ac0a762b..000000000
--- a/thirdparty/libstdc++/avoid_bogus_Wrestrict_PR105651.patch
+++ /dev/null
@@ -1,32 +0,0 @@
-From 50dd920299f8f905f47475bf77c299d9a84512b8 Mon Sep 17 00:00:00 2001
-From: Jason Merrill <ja...@redhat.com>
-Date: Thu, 18 Aug 2022 23:53:16 -0400
-Subject: [PATCH] libstdc++: avoid bogus -Wrestrict [PR105651]
-To: gcc-patches@gcc.gnu.org
-
-	PR tree-optimization/105651
-
-libstdc++-v3/ChangeLog:
-
-	* include/bits/basic_string.tcc (_M_replace): Add an assert
-	to avoid -Wrestrict false positive.
----
- libstdc++-v3/include/bits/basic_string.tcc | 3 +++
- 1 file changed, 3 insertions(+)
-
-diff --git a/libstdc++-v3/include/bits/basic_string.tcc b/libstdc++-v3/include/bits/basic_string.tcc
-index 4563c61429a..0d5c4d6191e 100644
---- a/libstdc++-v3/include/bits/basic_string.tcc
-+++ b/libstdc++-v3/include/bits/basic_string.tcc
-@@ -529,6 +529,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
- 		    {
- 		      const size_type __nleft = (__p + __len1) - __s;
- 		      this->_S_move(__p, __s, __nleft);
-+		      // Tell the middle-end that the copy can't overlap
-+		      // (PR105651).
-+		      if (__len2 < __nleft) __builtin_unreachable ();
- 		      this->_S_copy(__p + __nleft, __p + __len2,
- 				    __len2 - __nleft);
- 		    }
---
-2.31.1