diff --git a/include/authentication.hpp b/include/authentication.hpp
index 3021af5..ba4fb44 100644
--- a/include/authentication.hpp
+++ b/include/authentication.hpp
@@ -102,8 +102,8 @@
         isConfigureSelfOnly);
 }
 
-inline std::shared_ptr<persistent_data::UserSession>
-    performTokenAuth(std::string_view authHeader)
+inline std::shared_ptr<persistent_data::UserSession> performTokenAuth(
+    std::string_view authHeader)
 {
     BMCWEB_LOG_DEBUG("[AuthMiddleware] Token authentication");
     if (!authHeader.starts_with("Token "))
@@ -116,8 +116,8 @@
     return sessionOut;
 }
 
-inline std::shared_ptr<persistent_data::UserSession>
-    performXtokenAuth(const boost::beast::http::header<true>& reqHeader)
+inline std::shared_ptr<persistent_data::UserSession> performXtokenAuth(
+    const boost::beast::http::header<true>& reqHeader)
 {
     BMCWEB_LOG_DEBUG("[AuthMiddleware] X-Auth-Token authentication");
 
@@ -131,9 +131,9 @@
     return sessionOut;
 }
 
-inline std::shared_ptr<persistent_data::UserSession>
-    performCookieAuth(boost::beast::http::verb method [[maybe_unused]],
-                      const boost::beast::http::header<true>& reqHeader)
+inline std::shared_ptr<persistent_data::UserSession> performCookieAuth(
+    boost::beast::http::verb method [[maybe_unused]],
+    const boost::beast::http::header<true>& reqHeader)
 {
     using headers = boost::beast::http::header<true>;
     std::pair<headers::const_iterator, headers::const_iterator> cookies =
@@ -224,8 +224,8 @@
     }
     if (boost::beast::http::verb::get == method)
     {
-        if ((url == "/redfish") || //
-            (url == "/redfish/v1") || //
+        if ((url == "/redfish") ||          //
+            (url == "/redfish/v1") ||       //
             (url == "/redfish/v1/odata") || //
             (url == "/redfish/v1/$metadata"))
         {
diff --git a/include/dbus_privileges.hpp b/include/dbus_privileges.hpp
index f174991..a2bdd1f 100644
--- a/include/dbus_privileges.hpp
+++ b/include/dbus_privileges.hpp
@@ -27,9 +27,9 @@
 namespace crow
 {
 // Populate session with user information.
-inline bool
-    populateUserInfo(persistent_data::UserSession& session,
-                     const dbus::utility::DBusPropertiesMap& userInfoMap)
+inline bool populateUserInfo(
+    persistent_data::UserSession& session,
+    const dbus::utility::DBusPropertiesMap& userInfoMap)
 {
     std::string userRole;
     bool remoteUser = false;
diff --git a/include/dbus_utility.hpp b/include/dbus_utility.hpp
index 5c33b28..b4a5e81 100644
--- a/include/dbus_utility.hpp
+++ b/include/dbus_utility.hpp
@@ -130,11 +130,11 @@
     return count >= index;
 }
 
-inline void
-    getAllProperties(const std::string& service, const std::string& objectPath,
-                     const std::string& interface,
-                     std::function<void(const boost::system::error_code&,
-                                        const DBusPropertiesMap&)>&& callback)
+inline void getAllProperties(
+    const std::string& service, const std::string& objectPath,
+    const std::string& interface,
+    std::function<void(const boost::system::error_code&,
+                       const DBusPropertiesMap&)>&& callback)
 {
     sdbusplus::asio::getAllProperties(*crow::connections::systemBus, service,
                                       objectPath, interface,
@@ -188,11 +188,11 @@
         std::array<std::string, 0>());
 }
 
-inline void
-    getSubTree(const std::string& path, int32_t depth,
-               std::span<const std::string_view> interfaces,
-               std::function<void(const boost::system::error_code&,
-                                  const MapperGetSubTreeResponse&)>&& callback)
+inline void getSubTree(
+    const std::string& path, int32_t depth,
+    std::span<const std::string_view> interfaces,
+    std::function<void(const boost::system::error_code&,
+                       const MapperGetSubTreeResponse&)>&& callback)
 {
     crow::connections::systemBus->async_method_call(
         [callback{std::move(callback)}](
diff --git a/include/duplicatable_file_handle.hpp b/include/duplicatable_file_handle.hpp
index b8f9114..5401e76 100644
--- a/include/duplicatable_file_handle.hpp
+++ b/include/duplicatable_file_handle.hpp
@@ -25,7 +25,7 @@
         fileHandle.native_handle(dup(other.fileHandle.native_handle()));
         return *this;
     }
-    DuplicatableFileHandle&
-        operator=(DuplicatableFileHandle&& other) noexcept = default;
+    DuplicatableFileHandle& operator=(DuplicatableFileHandle&& other) noexcept =
+        default;
     ~DuplicatableFileHandle() = default;
 };
diff --git a/include/google/google_service_root.hpp b/include/google/google_service_root.hpp
index 6169899..8b0d36c 100644
--- a/include/google/google_service_root.hpp
+++ b/include/google/google_service_root.hpp
@@ -33,9 +33,9 @@
 namespace google_api
 {
 
-inline void
-    handleGoogleV1Get(const crow::Request& /*req*/,
-                      const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+inline void handleGoogleV1Get(
+    const crow::Request& /*req*/,
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
 {
     asyncResp->res.jsonValue["@odata.type"] =
         "#GoogleServiceRoot.v1_0_0.GoogleServiceRoot";
@@ -148,19 +148,19 @@
         "Embedded";
 }
 
-inline void
-    handleRootOfTrustGet(const crow::Request& /*req*/,
-                         const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                         const std::string& param)
+inline void handleRootOfTrustGet(
+    const crow::Request& /*req*/,
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const std::string& param)
 {
     std::string emptyCommand;
     resolveRoT(emptyCommand, asyncResp, param, populateRootOfTrustEntity);
 }
 
-inline void
-    invocationCallback(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                       const boost::system::error_code& ec,
-                       const std::vector<uint8_t>& responseBytes)
+inline void invocationCallback(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const boost::system::error_code& ec,
+    const std::vector<uint8_t>& responseBytes)
 {
     if (ec)
     {
@@ -174,10 +174,10 @@
         bytesToHexString(responseBytes);
 }
 
-inline void
-    invokeRoTCommand(const std::string& command,
-                     const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                     const ResolvedEntity& resolvedEntity)
+inline void invokeRoTCommand(
+    const std::string& command,
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const ResolvedEntity& resolvedEntity)
 {
     std::vector<uint8_t> bytes = hexStringToBytes(command);
     if (bytes.empty())
diff --git a/include/http_utility.hpp b/include/http_utility.hpp
index ffe5378..ce5f23e 100644
--- a/include/http_utility.hpp
+++ b/include/http_utility.hpp
@@ -148,9 +148,9 @@
     ANY, // represents *. Never returned.  Only used for string matching
 };
 
-inline Encoding
-    getPreferredEncoding(std::string_view acceptEncoding,
-                         const std::span<const Encoding> availableEncodings)
+inline Encoding getPreferredEncoding(
+    std::string_view acceptEncoding,
+    const std::span<const Encoding> availableEncodings)
 {
     if (acceptEncoding.empty())
     {
diff --git a/include/ibm/management_console_rest.hpp b/include/ibm/management_console_rest.hpp
index 65435d9..0b14575 100644
--- a/include/ibm/management_console_rest.hpp
+++ b/include/ibm/management_console_rest.hpp
@@ -39,11 +39,11 @@
 constexpr size_t maxSaveareaDirSize =
     25000000; // Allow save area dir size to be max 25MB
 constexpr size_t minSaveareaFileSize =
-    100; // Allow save area file size of minimum 100B
+    100;      // Allow save area file size of minimum 100B
 constexpr size_t maxSaveareaFileSize =
-    500000; // Allow save area file size upto 500KB
+    500000;   // Allow save area file size upto 500KB
 constexpr size_t maxBroadcastMsgSize =
-    1000; // Allow Broadcast message size upto 1KB
+    1000;     // Allow Broadcast message size upto 1KB
 
 inline void handleFilePut(const crow::Request& req,
                           const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
@@ -229,8 +229,8 @@
     }
 }
 
-inline void
-    handleConfigFileList(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+inline void handleConfigFileList(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
 {
     std::vector<std::string> pathObjList;
     std::filesystem::path loc(
@@ -258,8 +258,8 @@
         "/ibm/v1/Host/ConfigFiles/Actions/IBMConfigFiles.DeleteAll";
 }
 
-inline void
-    deleteConfigFiles(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+inline void deleteConfigFiles(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
 {
     std::error_code ec;
     std::filesystem::path loc(
@@ -312,9 +312,9 @@
     asyncResp->res.jsonValue["Data"] = fileData;
 }
 
-inline void
-    handleFileDelete(const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
-                     const std::string& fileID)
+inline void handleFileDelete(
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
+    const std::string& fileID)
 {
     std::string filePath(
         "/var/lib/bmcweb/ibm-management-console/configfiles/" + fileID);
@@ -343,9 +343,9 @@
     }
 }
 
-inline void
-    handleBroadcastService(const crow::Request& req,
-                           const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+inline void handleBroadcastService(
+    const crow::Request& req,
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
 {
     std::string broadcastMsg;
 
diff --git a/include/image_upload.hpp b/include/image_upload.hpp
index 128b384..914b3e8 100644
--- a/include/image_upload.hpp
+++ b/include/image_upload.hpp
@@ -35,9 +35,9 @@
 // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
 static std::unique_ptr<sdbusplus::bus::match_t> fwUpdateMatcher;
 
-inline void
-    uploadImageHandler(const crow::Request& req,
-                       const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
+inline void uploadImageHandler(
+    const crow::Request& req,
+    const std::shared_ptr<bmcweb::AsyncResp>& asyncResp)
 {
     // Only allow one FW update at a time
     if (fwUpdateMatcher != nullptr)
diff --git a/include/sessions.hpp b/include/sessions.hpp
index 6e00778..ba2bfa7 100644
--- a/include/sessions.hpp
+++ b/include/sessions.hpp
@@ -73,8 +73,8 @@
      * @return a shared pointer if data has been loaded properly, nullptr
      * otherwise
      */
-    static std::shared_ptr<UserSession>
-        fromJson(const nlohmann::json::object_t& j)
+    static std::shared_ptr<UserSession> fromJson(
+        const nlohmann::json::object_t& j)
     {
         std::shared_ptr<UserSession> userSession =
             std::make_shared<UserSession>();
diff --git a/include/ssl_key_handler.hpp b/include/ssl_key_handler.hpp
index daf42c4..fad89fc 100644
--- a/include/ssl_key_handler.hpp
+++ b/include/ssl_key_handler.hpp
@@ -42,7 +42,7 @@
 
 std::shared_ptr<boost::asio::ssl::context> getSslServerContext();
 
-std::optional<boost::asio::ssl::context>
-    getSSLClientContext(VerifyCertificate verifyCertificate);
+std::optional<boost::asio::ssl::context> getSSLClientContext(
+    VerifyCertificate verifyCertificate);
 
 } // namespace ensuressl
diff --git a/include/vm_websocket.hpp b/include/vm_websocket.hpp
index 0c1e0c3..424cb80 100644
--- a/include/vm_websocket.hpp
+++ b/include/vm_websocket.hpp
@@ -427,11 +427,11 @@
 // NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
 static SessionMap sessions;
 
-inline void
-    afterGetSocket(crow::websocket::Connection& conn,
-                   const sdbusplus::message::object_path& path,
-                   const boost::system::error_code& ec,
-                   const dbus::utility::DBusPropertiesMap& propertiesList)
+inline void afterGetSocket(
+    crow::websocket::Connection& conn,
+    const sdbusplus::message::object_path& path,
+    const boost::system::error_code& ec,
+    const dbus::utility::DBusPropertiesMap& propertiesList)
 {
     if (ec)
     {
