diff --git a/.gitignore b/.gitignore
index 27676e3..9dc3fde 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,7 +7,6 @@
 !subprojects/metrics-ipmi-blobs/
 !subprojects/ncsid/
 !subprojects/nemora-postd/
-!subprojects/fmt.wrap
 !subprojects/googletest.wrap
 !subprojects/phosphor-dbus-interfaces.wrap
 !subprojects/phosphor-logging.wrap
diff --git a/subprojects/dhcp-done/dhcp-done.cpp b/subprojects/dhcp-done/dhcp-done.cpp
index 00c0e3b..d6c5c96 100644
--- a/subprojects/dhcp-done/dhcp-done.cpp
+++ b/subprojects/dhcp-done/dhcp-done.cpp
@@ -12,12 +12,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-#include <fmt/format.h>
-
 #include <sdeventplus/event.hpp>
 #include <sdeventplus/source/io.hpp>
 #include <stdplus/fd/create.hpp>
 #include <stdplus/fd/ops.hpp>
+#include <stdplus/print.hpp>
 
 using namespace std::string_view_literals;
 
@@ -48,7 +47,7 @@
 {
     if (argc != 2)
     {
-        fmt::print(stderr, "Invalid parameter count\n");
+        stdplus::println(stderr, "Invalid parameter count");
         return 1;
     }
 
@@ -64,7 +63,7 @@
     }
     else
     {
-        fmt::print(stderr, "Invalid parameter\n");
+        stdplus::println(stderr, "Invalid parameter");
         return 1;
     }
 
@@ -84,7 +83,7 @@
     }
     catch (const std::exception& e)
     {
-        fmt::print(stderr, "Failed: {}\n", e.what());
+        stdplus::println(stderr, "Failed: {}", e.what());
         return 1;
     }
 }
diff --git a/subprojects/fmt.wrap b/subprojects/fmt.wrap
deleted file mode 100644
index 6847ae5..0000000
--- a/subprojects/fmt.wrap
+++ /dev/null
@@ -1,3 +0,0 @@
-[wrap-git]
-url = https://github.com/fmtlib/fmt
-revision = HEAD
diff --git a/subprojects/ncsid/src/meson.build b/subprojects/ncsid/src/meson.build
index 8b01470..6a85c68 100644
--- a/subprojects/ncsid/src/meson.build
+++ b/subprojects/ncsid/src/meson.build
@@ -14,21 +14,7 @@
 
 ncsid_headers = include_directories('.')
 
-fmt_dep = dependency('fmt', required: false)
-if not fmt_dep.found()
-  fmt_proj = import('cmake').subproject(
-    'fmt',
-    cmake_options: [
-      '-DCMAKE_POSITION_INDEPENDENT_CODE=ON',
-      '-DMASTER_PROJECT=OFF'
-    ],
-    required: false)
-  assert(fmt_proj.found(), 'fmtlib is required')
-  fmt_dep = fmt_proj.dependency('fmt')
-endif
-
 ncsid_deps = [
-  fmt_dep,
   dependency('sdbusplus', fallback: ['sdbusplus', 'sdbusplus_dep']),
   dependency('stdplus', fallback: ['stdplus', 'stdplus_dep']),
 ]
diff --git a/subprojects/ncsid/src/ncsi_state_machine.cpp b/subprojects/ncsid/src/ncsi_state_machine.cpp
index b2e0286..2ca4906 100644
--- a/subprojects/ncsid/src/ncsi_state_machine.cpp
+++ b/subprojects/ncsid/src/ncsi_state_machine.cpp
@@ -19,10 +19,11 @@
 #include "platforms/nemora/portable/ncsi_fsm.h"
 
 #include <arpa/inet.h>
-#include <fmt/printf.h>
 #include <netinet/ether.h>
 #include <unistd.h>
 
+#include <stdplus/print.hpp>
+
 #include <chrono>
 #include <cstdint>
 #include <cstdlib>
@@ -48,9 +49,10 @@
     {
         if (line_rep_count > 0)
         {
-            fmt::print(stderr, "... Repeated {} times ...\n", line_rep_count);
+            stdplus::println(stderr, "... Repeated {} times ...",
+                             line_rep_count);
         }
-        fmt::print(stderr, "{}", line);
+        stdplus::print(stderr, "{}", line);
         last_line = std::move(line);
         last_line_time = now;
         line_rep_count = 0;
@@ -61,7 +63,7 @@
     }
 }
 
-#define CPRINTF(...) do_log(fmt::sprintf(__VA_ARGS__))
+#define CPRINT(...) do_log(std::format(__VA_ARGS__))
 
 #ifdef NCSID_VERBOSE_LOGGING
 #define DEBUG_PRINTF printf
@@ -131,7 +133,7 @@
 
 StateMachine::~StateMachine()
 {
-    CPRINTF("[NCSI stopping]\n");
+    CPRINT("[NCSI stopping]\n");
 }
 
 size_t StateMachine::poll_l2_config()
@@ -200,7 +202,7 @@
                            NCSI_LINK_STATUS_UP;
         if (!link_up_ || new_link_up != *link_up_)
         {
-            CPRINTF("[NCSI link %s]\n", new_link_up ? "up" : "down");
+            CPRINT("[NCSI link {}]\n", new_link_up ? "up" : "down");
             link_up_ = new_link_up;
         }
     }
@@ -214,8 +216,8 @@
             bool new_hostless = ncsi_fsm_is_nic_hostless(&ncsi_state_);
             if (!hostless_ || new_hostless != *hostless_)
             {
-                CPRINTF("[NCSI nic %s]\n",
-                        new_hostless ? "hostless" : "hostfull");
+                CPRINT("[NCSI nic {}]\n",
+                       new_hostless ? "hostless" : "hostfull");
                 net_config_->set_nic_hostless(new_hostless);
                 hostless_ = new_hostless;
             }
@@ -241,27 +243,27 @@
             if (!ncsi_buf_.len)
             {
                 network_debug_.ncsi.rx_error.timeout_count++;
-                CPRINTF("[NCSI timeout in state %s]\n", state_string);
+                CPRINT("[NCSI timeout in state {}]\n", state_string);
             }
             else
             {
                 network_debug_.ncsi.rx_error.undersized_count++;
-                CPRINTF("[NCSI undersized response in state %s]\n",
-                        state_string);
+                CPRINT("[NCSI undersized response in state {}]\n",
+                       state_string);
             }
             break;
         case NCSI_RESPONSE_NACK:
             network_debug_.ncsi.rx_error.nack_count++;
-            CPRINTF(
-                "[NCSI nack in state %s. Response: 0x%04x Reason: 0x%04x]\n",
+            CPRINT(
+                "[NCSI nack in state {}. Response: {:#04x} Reason: {:#04x}]\n",
                 state_string, ntohs(response->response_code),
                 ntohs(response->reason_code));
             break;
         case NCSI_RESPONSE_UNEXPECTED_TYPE:
             network_debug_.ncsi.rx_error.unexpected_type_count++;
-            CPRINTF("[NCSI unexpected response in state %s. Response type: "
-                    "0x%02x]\n",
-                    state_string, response->hdr.control_packet_type);
+            CPRINT(
+                "[NCSI unexpected response in state {}. Response type: {:#02x}]\n",
+                state_string, response->hdr.control_packet_type);
             break;
         case NCSI_RESPONSE_UNEXPECTED_SIZE:
         {
@@ -281,24 +283,24 @@
                     response->hdr.control_packet_type & (~NCSI_RESPONSE));
             }
             network_debug_.ncsi.rx_error.unexpected_size_count++;
-            CPRINTF("[NCSI unexpected response size in state %s."
-                    " Expected %d]\n",
-                    state_string, expected_size);
+            CPRINT("[NCSI unexpected response size in state {}."
+                   " Expected {}]\n",
+                   state_string, expected_size);
         }
         break;
         case NCSI_RESPONSE_OEM_FORMAT_ERROR:
             network_debug_.ncsi.rx_error.unexpected_type_count++;
-            CPRINTF("[NCSI OEM format error]\n");
+            CPRINT("[NCSI OEM format error]\n");
             break;
         case NCSI_RESPONSE_UNEXPECTED_PARAMS:
-            CPRINTF("[NCSI OEM Filter MAC or TCP/IP Config Mismatch]\n");
+            CPRINT("[NCSI OEM Filter MAC or TCP/IP Config Mismatch]\n");
             break;
         default:
             /* NCSI_RESPONSE_ACK and NCSI_RESPONSE_NONE are not errors and need
              * not be handled here, so this branch is just to complete the
              * switch.
              */
-            CPRINTF("[NCSI OK]\n");
+            CPRINT("[NCSI OK]\n");
             break;
     }
 }
@@ -343,10 +345,10 @@
 {
     if (!net_config_ || !sock_io_)
     {
-        CPRINTF("StateMachine configuration incomplete: "
-                "net_config_: <%p>, sock_io_: <%p>",
-                reinterpret_cast<void*>(net_config_),
-                reinterpret_cast<void*>(sock_io_));
+        CPRINT("StateMachine configuration incomplete: "
+               "net_config_: <{}>, sock_io_: <{}>",
+               reinterpret_cast<void*>(net_config_),
+               reinterpret_cast<void*>(sock_io_));
         return;
     }
 
diff --git a/subprojects/ncsid/src/net_config.cpp b/subprojects/ncsid/src/net_config.cpp
index 97c6a43..4e52cc8 100644
--- a/subprojects/ncsid/src/net_config.cpp
+++ b/subprojects/ncsid/src/net_config.cpp
@@ -14,7 +14,6 @@
 
 #include "net_config.h"
 
-#include <fmt/format.h>
 #include <sys/types.h>
 #include <sys/wait.h>
 #include <unistd.h>
@@ -22,6 +21,7 @@
 #include <sdbusplus/bus.hpp>
 #include <stdplus/fd/create.hpp>
 #include <stdplus/fd/ops.hpp>
+#include <stdplus/print.hpp>
 #include <stdplus/util/string.hpp>
 
 #include <cstdio>
@@ -92,7 +92,7 @@
 {
     if (mac == nullptr)
     {
-        fmt::print(stderr, "mac is nullptr\n");
+        stdplus::println(stderr, "mac is nullptr");
         return -1;
     }
 
@@ -114,14 +114,14 @@
         }
         catch (const sdbusplus::exception::SdBusError& ex)
         {
-            fmt::print(stderr, "Failed to get MACAddress: {}\n", ex.what());
+            stdplus::println(stderr, "Failed to get MACAddress: {}", ex.what());
             return -1;
         }
 
         if (parse_mac(mac_string, mac) < 0)
         {
-            fmt::print(stderr, "Failed to parse MAC Address `{}`\n",
-                       mac_string);
+            stdplus::println(stderr, "Failed to parse MAC Address `{}`",
+                             mac_string);
             return -1;
         }
 
@@ -154,8 +154,8 @@
     }
     catch (const std::exception& ex)
     {
-        fmt::print(stderr, "Failed to set MAC Addr `{}` writing file: {}\n",
-                   std::get<std::string>(mac_value), ex.what());
+        stdplus::println(stderr, "Failed to set MAC Addr `{}` writing file: {}",
+                         std::get<std::string>(mac_value), ex.what());
         return -1;
     }
 
@@ -165,8 +165,8 @@
     }
     catch (const sdbusplus::exception::SdBusError& ex)
     {
-        fmt::print(stderr, "Failed to set MAC Addr `{}`: {}\n",
-                   std::get<std::string>(mac_value), ex.what());
+        stdplus::println(stderr, "Failed to set MAC Addr `{}`: {}",
+                         std::get<std::string>(mac_value), ex.what());
         return -1;
     }
 
@@ -215,7 +215,8 @@
     }
     catch (const sdbusplus::exception::SdBusError& ex)
     {
-        fmt::print(stderr, "Failed to set systemd nic status: {}\n", ex.what());
+        stdplus::println(stderr, "Failed to set systemd nic status: {}",
+                         ex.what());
         return 1;
     }
 }
diff --git a/subprojects/ncsid/src/platforms/nemora/portable/ncsi_fsm.c b/subprojects/ncsid/src/platforms/nemora/portable/ncsi_fsm.c
index 5b5344c..ab04111 100644
--- a/subprojects/ncsid/src/platforms/nemora/portable/ncsi_fsm.c
+++ b/subprojects/ncsid/src/platforms/nemora/portable/ncsi_fsm.c
@@ -150,7 +150,7 @@
       if (1 != get_capabilities_response->channel_count &&
           2 != get_capabilities_response->channel_count) {
         /* TODO: Return Error
-        CPRINTF("[NCSI Unsupported channel count %d]\n",
+        CPRINT("[NCSI Unsupported channel count {}]\n",
                 get_capabilities_response->channel_count);
           */
         ncsi_fsm_fail(ncsi_state, network_debug);
@@ -639,7 +639,7 @@
         break;
       }
       // TODO: report this error.
-      // CPRINTF("[NCSI Link Status down 0x%08lx]\n", link_status);
+      // CPRINT("[NCSI Link Status down {:#08x}]\n", link_status);
     }
     if (ncsi_fsm_retry_test(network_debug)) {
       GO_TO_STATE(state_variable, NCSI_STATE_TEST_BEGIN);
