diff --git a/chassis_state_manager.cpp b/chassis_state_manager.cpp
index bfa8ff8..189f2de 100644
--- a/chassis_state_manager.cpp
+++ b/chassis_state_manager.cpp
@@ -6,9 +6,6 @@
 #include "xyz/openbmc_project/Common/error.hpp"
 #include "xyz/openbmc_project/State/Shutdown/Power/error.hpp"
 
-#include <fmt/format.h>
-#include <fmt/printf.h>
-
 #include <cereal/archives/json.hpp>
 #include <org/freedesktop/UPower/Device/client.hpp>
 #include <phosphor-logging/elog-errors.hpp>
@@ -22,6 +19,7 @@
 #include <xyz/openbmc_project/State/Decorator/PowerSystemInputs/server.hpp>
 
 #include <filesystem>
+#include <format>
 #include <fstream>
 
 namespace phosphor
@@ -76,10 +74,10 @@
 {
     systemdTargetTable = {
         // Use the hard off target to ensure we shutdown immediately
-        {Transition::Off, fmt::format(CHASSIS_STATE_HARD_POWEROFF_TGT_FMT, id)},
-        {Transition::On, fmt::format(CHASSIS_STATE_POWERON_TGT_FMT, id)},
+        {Transition::Off, std::format(CHASSIS_STATE_HARD_POWEROFF_TGT_FMT, id)},
+        {Transition::On, std::format(CHASSIS_STATE_POWERON_TGT_FMT, id)},
         {Transition::PowerCycle,
-         fmt::format(CHASSIS_STATE_POWERCYCLE_TGT_FMT, id)}};
+         std::format(CHASSIS_STATE_POWERCYCLE_TGT_FMT, id)}};
 }
 
 // TODO - Will be rewritten once sdbusplus client bindings are in place
@@ -98,7 +96,7 @@
     powerSysInputsPropChangeSignal = std::make_unique<sdbusplus::bus::match_t>(
         bus,
         sdbusplus::bus::match::rules::propertiesChangedNamespace(
-            fmt::format(
+            std::format(
                 "/xyz/openbmc_project/power/power_supplies/chassis{}/psus", id),
             decoratorServer::PowerSystemInputs::interface),
         [this](auto& msg) { this->powerSysInputsChangeEvent(msg); });
@@ -142,12 +140,12 @@
 
                     // Reset host sensors since system is off now
                     // Ensure Power Leds are off.
-                    startUnit(fmt::format(CHASSIS_BLACKOUT_TGT_FMT, id));
+                    startUnit(std::format(CHASSIS_BLACKOUT_TGT_FMT, id));
 
                     setStateChangeTime();
                     // Generate file indicating AC loss occurred
                     std::string chassisLostPowerFileFmt =
-                        fmt::sprintf(CHASSIS_LOST_POWER_FILE, id);
+                        std::format(CHASSIS_LOST_POWER_FILE, id);
                     fs::create_directories(BASE_FILE_DIR);
                     fs::path chassisPowerLossFile{chassisLostPowerFileFmt};
                     std::ofstream outfile(chassisPowerLossFile);
@@ -222,7 +220,7 @@
             info("power status transitioned from {START_PWR_STATE} to Good and "
                  "chassis power is off, calling APR",
                  "START_PWR_STATE", initialPowerStatus);
-            restartUnit(fmt::format(AUTO_POWER_RESTORE_SVC_FMT, this->id));
+            restartUnit(std::format(AUTO_POWER_RESTORE_SVC_FMT, this->id));
         }
     }
 }
@@ -556,7 +554,7 @@
         return 0;
     }
 
-    if ((newStateUnit == fmt::format(CHASSIS_STATE_POWEROFF_TGT_FMT, id)) &&
+    if ((newStateUnit == std::format(CHASSIS_STATE_POWEROFF_TGT_FMT, id)) &&
         (newStateResult == "done") &&
         (!stateActive(systemdTargetTable[Transition::On])))
     {
@@ -577,13 +575,10 @@
         // This file is used to indicate to chassis related systemd services
         // that the chassis is already on and they should skip running.
         // Once the chassis state is back to on we can clear this file.
-        auto size = std::snprintf(nullptr, 0, CHASSIS_ON_FILE, 0);
-        size++; // null
-        std::unique_ptr<char[]> chassisFile(new char[size]);
-        std::snprintf(chassisFile.get(), size, CHASSIS_ON_FILE, 0);
-        if (std::filesystem::exists(chassisFile.get()))
+        auto chassisFile = std::format(CHASSIS_ON_FILE, 0);
+        if (std::filesystem::exists(chassisFile))
         {
-            std::filesystem::remove(chassisFile.get());
+            std::filesystem::remove(chassisFile);
         }
     }
 
@@ -654,7 +649,7 @@
 
 fs::path Chassis::serializePOH()
 {
-    fs::path path{fmt::format(POH_COUNTER_PERSIST_PATH, id)};
+    fs::path path{std::format(POH_COUNTER_PERSIST_PATH, id)};
     std::ofstream os(path.c_str(), std::ios::binary);
     cereal::JSONOutputArchive oarchive(os);
     oarchive(pohCounter());
@@ -663,7 +658,7 @@
 
 bool Chassis::deserializePOH(uint32_t& pohCounter)
 {
-    fs::path path{fmt::format(POH_COUNTER_PERSIST_PATH, id)};
+    fs::path path{std::format(POH_COUNTER_PERSIST_PATH, id)};
     try
     {
         if (fs::exists(path))
@@ -710,7 +705,7 @@
 
 void Chassis::serializeStateChangeTime()
 {
-    fs::path path{fmt::format(CHASSIS_STATE_CHANGE_PERSIST_PATH, id)};
+    fs::path path{std::format(CHASSIS_STATE_CHANGE_PERSIST_PATH, id)};
     std::ofstream os(path.c_str(), std::ios::binary);
     cereal::JSONOutputArchive oarchive(os);
 
@@ -720,7 +715,7 @@
 
 bool Chassis::deserializeStateChangeTime(uint64_t& time, PowerState& state)
 {
-    fs::path path{fmt::format(CHASSIS_STATE_CHANGE_PERSIST_PATH, id)};
+    fs::path path{std::format(CHASSIS_STATE_CHANGE_PERSIST_PATH, id)};
 
     try
     {
diff --git a/chassis_state_manager_main.cpp b/chassis_state_manager_main.cpp
index af572f1..aecf9a9 100644
--- a/chassis_state_manager_main.cpp
+++ b/chassis_state_manager_main.cpp
@@ -2,7 +2,6 @@
 
 #include "chassis_state_manager.hpp"
 
-#include <fmt/format.h>
 #include <getopt.h>
 
 #include <sdbusplus/bus.hpp>
@@ -10,6 +9,7 @@
 #include <cstdlib>
 #include <exception>
 #include <filesystem>
+#include <format>
 #include <iostream>
 
 constexpr auto LEGACY_POH_COUNTER_PERSIST_PATH =
@@ -55,9 +55,9 @@
 
         fs::path legacyPohPath{LEGACY_POH_COUNTER_PERSIST_PATH};
         fs::path legacyStateChangePath{LEGACY_STATE_CHANGE_PERSIST_PATH};
-        fs::path newPohPath{fmt::format(POH_COUNTER_PERSIST_PATH, chassisId)};
+        fs::path newPohPath{std::format(POH_COUNTER_PERSIST_PATH, chassisId)};
         fs::path newStateChangePath{
-            fmt::format(CHASSIS_STATE_CHANGE_PERSIST_PATH, chassisId)};
+            std::format(CHASSIS_STATE_CHANGE_PERSIST_PATH, chassisId)};
         if (fs::exists(legacyPohPath))
         {
             fs::rename(legacyPohPath, newPohPath);
diff --git a/discover_system_state.cpp b/discover_system_state.cpp
index 92d0e76..0a20bb3 100644
--- a/discover_system_state.cpp
+++ b/discover_system_state.cpp
@@ -6,8 +6,6 @@
 #include "xyz/openbmc_project/Common/error.hpp"
 #include "xyz/openbmc_project/Control/Power/RestorePolicy/server.hpp"
 
-#include <fmt/format.h>
-#include <fmt/printf.h>
 #include <getopt.h>
 #include <systemd/sd-bus.h>
 
diff --git a/host_check.cpp b/host_check.cpp
index d866085..c3e37c8 100644
--- a/host_check.cpp
+++ b/host_check.cpp
@@ -13,6 +13,7 @@
 
 #include <cstdio>
 #include <cstdlib>
+#include <format>
 #include <fstream>
 #include <iostream>
 #include <ranges>
@@ -195,11 +196,8 @@
             info("Host is running!");
             // Create file for host instance and create in filesystem to
             // indicate to services that host is running
-            auto size = std::snprintf(nullptr, 0, HOST_RUNNING_FILE, 0);
-            size++; // null
-            std::unique_ptr<char[]> buf(new char[size]);
-            std::snprintf(buf.get(), size, HOST_RUNNING_FILE, 0);
-            std::ofstream outfile(buf.get());
+            std::string hostFile = std::format(HOST_RUNNING_FILE, 0);
+            std::ofstream outfile(hostFile);
             outfile.close();
             return true;
         }
diff --git a/host_reset_recovery.cpp b/host_reset_recovery.cpp
index a8d3842..3040ebf 100644
--- a/host_reset_recovery.cpp
+++ b/host_reset_recovery.cpp
@@ -11,6 +11,7 @@
 #include <xyz/openbmc_project/State/Boot/Progress/client.hpp>
 
 #include <cstdlib>
+#include <format>
 #include <fstream>
 #include <string>
 
@@ -114,12 +115,9 @@
 // completed and the phosphor-chassis-state-manager code has processed it.
 bool isChassisTargetComplete()
 {
-    auto size = std::snprintf(nullptr, 0, CHASSIS_ON_FILE, 0);
-    size++; // null
-    std::unique_ptr<char[]> buf(new char[size]);
-    std::snprintf(buf.get(), size, CHASSIS_ON_FILE, 0);
+    auto chassisFile = std::format(CHASSIS_ON_FILE, 0);
 
-    std::ifstream f(buf.get());
+    std::ifstream f(chassisFile);
     return !f.good();
 }
 
diff --git a/host_state_manager.cpp b/host_state_manager.cpp
index dd631dc..cf8105f 100644
--- a/host_state_manager.cpp
+++ b/host_state_manager.cpp
@@ -5,7 +5,6 @@
 #include "host_check.hpp"
 #include "utils.hpp"
 
-#include <fmt/format.h>
 #include <stdio.h>
 #include <systemd/sd-bus.h>
 
@@ -23,6 +22,7 @@
 #include <xyz/openbmc_project/State/Host/error.hpp>
 
 #include <filesystem>
+#include <format>
 #include <fstream>
 #include <iostream>
 #include <map>
@@ -87,32 +87,32 @@
 void Host::createSystemdTargetMaps()
 {
     stateTargetTable = {
-        {HostState::Off, fmt::format("obmc-host-stop@{}.target", id)},
-        {HostState::Running, fmt::format("obmc-host-startmin@{}.target", id)},
-        {HostState::Quiesced, fmt::format("obmc-host-quiesce@{}.target", id)},
+        {HostState::Off, std::format("obmc-host-stop@{}.target", id)},
+        {HostState::Running, std::format("obmc-host-startmin@{}.target", id)},
+        {HostState::Quiesced, std::format("obmc-host-quiesce@{}.target", id)},
         {HostState::DiagnosticMode,
-         fmt::format("obmc-host-diagnostic-mode@{}.target", id)}};
+         std::format("obmc-host-diagnostic-mode@{}.target", id)}};
 
     transitionTargetTable = {
-        {Transition::Off, fmt::format("obmc-host-shutdown@{}.target", id)},
-        {Transition::On, fmt::format("obmc-host-start@{}.target", id)},
-        {Transition::Reboot, fmt::format("obmc-host-reboot@{}.target", id)},
+        {Transition::Off, std::format("obmc-host-shutdown@{}.target", id)},
+        {Transition::On, std::format("obmc-host-start@{}.target", id)},
+        {Transition::Reboot, std::format("obmc-host-reboot@{}.target", id)},
 // Some systems do not support a warm reboot so just map the reboot
 // requests to our normal cold reboot in that case
 #if ENABLE_WARM_REBOOT
         {Transition::GracefulWarmReboot,
-         fmt::format("obmc-host-warm-reboot@{}.target", id)},
+         std::format("obmc-host-warm-reboot@{}.target", id)},
         {Transition::ForceWarmReboot,
-         fmt::format("obmc-host-force-warm-reboot@{}.target", id)}
+         std::format("obmc-host-force-warm-reboot@{}.target", id)}
     };
 #else
         {Transition::GracefulWarmReboot,
-         fmt::format("obmc-host-reboot@{}.target", id)},
+         std::format("obmc-host-reboot@{}.target", id)},
         {Transition::ForceWarmReboot,
-         fmt::format("obmc-host-reboot@{}.target", id)}
+         std::format("obmc-host-reboot@{}.target", id)}
     };
 #endif
-    hostCrashTarget = fmt::format("obmc-host-crash@{}.target", id);
+    hostCrashTarget = std::format("obmc-host-crash@{}.target", id);
 }
 
 const std::string& Host::getTarget(HostState state)
@@ -298,13 +298,10 @@
         // This file is used to indicate to host related systemd services
         // that the host is already running and they should skip running.
         // Once the host state is back to running we can clear this file.
-        auto size = std::snprintf(nullptr, 0, HOST_RUNNING_FILE, 0);
-        size++; // null
-        std::unique_ptr<char[]> hostFile(new char[size]);
-        std::snprintf(hostFile.get(), size, HOST_RUNNING_FILE, 0);
-        if (std::filesystem::exists(hostFile.get()))
+        std::string hostFile = std::format(HOST_RUNNING_FILE, 0);
+        if (std::filesystem::exists(hostFile))
         {
-            std::filesystem::remove(hostFile.get());
+            std::filesystem::remove(hostFile);
         }
     }
     else if ((newStateUnit == getTarget(server::Host::HostState::Quiesced)) &&
@@ -366,7 +363,7 @@
 
 fs::path Host::serialize()
 {
-    fs::path path{fmt::format(HOST_STATE_PERSIST_PATH, id)};
+    fs::path path{std::format(HOST_STATE_PERSIST_PATH, id)};
     std::ofstream os(path.c_str(), std::ios::binary);
     cereal::JSONOutputArchive oarchive(os);
     oarchive(*this);
@@ -375,7 +372,7 @@
 
 bool Host::deserialize()
 {
-    fs::path path{fmt::format(HOST_STATE_PERSIST_PATH, id)};
+    fs::path path{std::format(HOST_STATE_PERSIST_PATH, id)};
     try
     {
         if (fs::exists(path))
diff --git a/host_state_manager_main.cpp b/host_state_manager_main.cpp
index 484d6e5..e036ff5 100644
--- a/host_state_manager_main.cpp
+++ b/host_state_manager_main.cpp
@@ -2,7 +2,6 @@
 
 #include "host_state_manager.hpp"
 
-#include <fmt/format.h>
 #include <getopt.h>
 
 #include <sdbusplus/bus.hpp>
@@ -10,6 +9,7 @@
 #include <cstdlib>
 #include <exception>
 #include <filesystem>
+#include <format>
 #include <iostream>
 
 constexpr auto LEGACY_HOST_STATE_PERSIST_PATH =
@@ -53,7 +53,7 @@
         // exist, rename it to the new file format of host0.
 
         fs::path legacyPath{LEGACY_HOST_STATE_PERSIST_PATH};
-        fs::path newPath{fmt::format(HOST_STATE_PERSIST_PATH, hostId)};
+        fs::path newPath{std::format(HOST_STATE_PERSIST_PATH, hostId)};
         if (fs::exists(legacyPath))
         {
             fs::rename(legacyPath, newPath);
diff --git a/meson.build b/meson.build
index 26ffb74..cd01c3a 100644
--- a/meson.build
+++ b/meson.build
@@ -75,10 +75,10 @@
     'BASE_FILE_DIR', '/run/openbmc/')
 
 conf.set_quoted(
-    'CHASSIS_LOST_POWER_FILE', '/run/openbmc/chassis@%d-lost-power')
+    'CHASSIS_LOST_POWER_FILE', '/run/openbmc/chassis@{}-lost-power')
 
 conf.set_quoted(
-    'HOST_RUNNING_FILE', '/run/openbmc/host@%d-on')
+    'HOST_RUNNING_FILE', '/run/openbmc/host@{}-on')
 
 conf.set_quoted(
     'CHASSIS_ON_FILE', '/run/openbmc/chassis@%d-on')
@@ -95,7 +95,6 @@
 phosphorlogging = dependency('phosphor-logging')
 phosphordbusinterfaces = dependency('phosphor-dbus-interfaces')
 libgpiod = dependency('libgpiod', version : '>=1.4.1')
-fmt = dependency('fmt')
 
 if cpp.has_header('CLI/CLI.hpp')
     CLI11 = declare_dependency()
@@ -129,7 +128,6 @@
             'utils.cpp',
             dependencies: [
                 cereal,
-                fmt,
                 libgpiod,
                 phosphordbusinterfaces,
                 phosphorlogging,
@@ -160,7 +158,6 @@
             'utils.cpp',
             dependencies: [
                 cereal,
-                fmt,
                 libgpiod,
                 nlohmann_json_dep,
                 phosphordbusinterfaces,
@@ -176,7 +173,6 @@
             'chassis_check_power_status.cpp',
             'utils.cpp',
             dependencies: [
-                fmt,
                 libgpiod,
                 phosphordbusinterfaces,
                 phosphorlogging,
@@ -191,7 +187,6 @@
             'bmc_state_manager_main.cpp',
             'utils.cpp',
             dependencies: [
-                fmt,
                 libgpiod,
                 phosphordbusinterfaces,
                 phosphorlogging,
@@ -208,7 +203,6 @@
             'utils.cpp',
             dependencies: [
                 cereal,
-                fmt,
                 libgpiod,
                 phosphorlogging,
                 sdbusplus,
@@ -264,7 +258,7 @@
             'secure_boot_check.cpp',
             'utils.cpp',
             dependencies: [
-            fmt, sdbusplus,
+            sdbusplus,
             phosphorlogging, libgpiod
             ],
     implicit_include_directories: true,
diff --git a/utils.cpp b/utils.cpp
index 332ddc0..e4f7121 100644
--- a/utils.cpp
+++ b/utils.cpp
@@ -2,8 +2,6 @@
 
 #include "utils.hpp"
 
-#include <fmt/format.h>
-#include <fmt/printf.h>
 #include <gpiod.h>
 
 #include <phosphor-logging/lg2.hpp>
@@ -14,6 +12,7 @@
 
 #include <chrono>
 #include <filesystem>
+#include <format>
 
 namespace phosphor
 {
@@ -230,8 +229,8 @@
 
 bool checkACLoss(size_t& chassisId)
 {
-    std::string chassisLostPowerFileFmt = fmt::sprintf(CHASSIS_LOST_POWER_FILE,
-                                                       chassisId);
+    std::string chassisLostPowerFileFmt = std::format(CHASSIS_LOST_POWER_FILE,
+                                                      chassisId);
 
     std::filesystem::path chassisPowerLossFile{chassisLostPowerFileFmt};
     if (std::filesystem::exists(chassisPowerLossFile))
