diff --git a/.clang-tidy b/.clang-tidy
index 6704aff..6f3c69d 100644
--- a/.clang-tidy
+++ b/.clang-tidy
@@ -201,6 +201,7 @@
 clang-analyzer-valist.ValistBase,
 clang-analyzer-webkit.NoUncountedMemberChecker,
 clang-analyzer-webkit.RefCntblBaseVirtualDtor,
+cppcoreguidelines-init-variables,
 misc-misplaced-const,
 #misc-no-recursion,
 misc-redundant-expression,
diff --git a/http/routing.hpp b/http/routing.hpp
index c8946e4..06f2a09 100644
--- a/http/routing.hpp
+++ b/http/routing.hpp
@@ -805,7 +805,7 @@
             char c = reqUrl[pos];
             if ((c >= '0' && c <= '9') || c == '+' || c == '-')
             {
-                char* eptr;
+                char* eptr = nullptr;
                 errno = 0;
                 long long int value =
                     std::strtoll(reqUrl.data() + pos, &eptr, 10);
@@ -828,7 +828,7 @@
             char c = reqUrl[pos];
             if ((c >= '0' && c <= '9') || c == '+')
             {
-                char* eptr;
+                char* eptr = nullptr;
                 errno = 0;
                 unsigned long long int value =
                     std::strtoull(reqUrl.data() + pos, &eptr, 10);
@@ -851,7 +851,7 @@
             char c = reqUrl[pos];
             if ((c >= '0' && c <= '9') || c == '+' || c == '-' || c == '.')
             {
-                char* eptr;
+                char* eptr = nullptr;
                 errno = 0;
                 double value = std::strtod(reqUrl.data() + pos, &eptr);
                 if (errno != ERANGE && eptr != reqUrl.data() + pos)
diff --git a/http/utility.hpp b/http/utility.hpp
index 374caea..74a35da 100644
--- a/http/utility.hpp
+++ b/http/utility.hpp
@@ -425,7 +425,7 @@
     size_t i = 0;
     while (i < size)
     {
-        size_t keyIndex;
+        size_t keyIndex = 0;
 
         keyIndex = static_cast<size_t>(data[i] & 0xFC) >> 2;
         *it++ = key[keyIndex];
@@ -513,10 +513,10 @@
 
     for (size_t i = 0; i < inputLength; i++)
     {
-        char base64code0;
-        char base64code1;
+        char base64code0 = 0;
+        char base64code1 = 0;
         char base64code2 = 0; // initialized to 0 to suppress warnings
-        char base64code3;
+        char base64code3 = 0;
 
         base64code0 = getCodeValue(input[i]);
         if (base64code0 == nop)
diff --git a/include/async_resolve.hpp b/include/async_resolve.hpp
index 105616d..563d816 100644
--- a/include/async_resolve.hpp
+++ b/include/async_resolve.hpp
@@ -73,7 +73,7 @@
                         handler(ec, endpointList);
                         return;
                     }
-                    uint16_t portNum;
+                    uint16_t portNum = 0;
                     auto it = std::from_chars(
                         port.data(), port.data() + port.size(), portNum);
                     if (it.ec != std::errc())
diff --git a/include/ibm/locks.hpp b/include/ibm/locks.hpp
index 800ee48..fb8b396 100644
--- a/include/ibm/locks.hpp
+++ b/include/ibm/locks.hpp
@@ -39,7 +39,7 @@
 
 class Lock
 {
-    uint32_t transactionId;
+    uint32_t transactionId = 0;
     boost::container::flat_map<uint32_t, LockRequests> lockTable;
 
   protected:
@@ -429,7 +429,7 @@
 inline Rc Lock::isConflictWithTable(const LockRequests& refLockRequestStructure)
 {
 
-    uint32_t transactionId;
+    uint32_t transactionId = 0;
 
     if (lockTable.empty())
     {
diff --git a/include/ibm/management_console_rest.hpp b/include/ibm/management_console_rest.hpp
index 59d4111..57c9d83 100644
--- a/include/ibm/management_console_rest.hpp
+++ b/include/ibm/management_console_rest.hpp
@@ -418,7 +418,7 @@
     for (auto& element : body)
     {
         std::string lockType;
-        uint64_t resourceId;
+        uint64_t resourceId = 0;
 
         SegmentFlags segInfo;
         std::vector<nlohmann::json> segmentFlags;
@@ -439,7 +439,7 @@
         for (auto& e : segmentFlags)
         {
             std::string lockFlags;
-            uint32_t segmentLength;
+            uint32_t segmentLength = 0;
 
             if (!redfish::json_util::readJson(e, asyncResp->res, "LockFlag",
                                               lockFlags, "SegmentLength",
diff --git a/include/json_html_serializer.hpp b/include/json_html_serializer.hpp
index be9efc4..3efc224 100644
--- a/include/json_html_serializer.hpp
+++ b/include/json_html_serializer.hpp
@@ -327,9 +327,9 @@
 
     const bool isNegative = std::is_same<NumberType, int64_t>::value &&
                             !(number >= 0); // see issue #755
-    uint64_t absValue;
+    uint64_t absValue = 0;
 
-    unsigned int nChars;
+    unsigned int nChars = 0;
 
     if (isNegative)
     {
diff --git a/include/openbmc_dbus_rest.hpp b/include/openbmc_dbus_rest.hpp
index 7f16ea8..0b54c65 100644
--- a/include/openbmc_dbus_rest.hpp
+++ b/include/openbmc_dbus_rest.hpp
@@ -1104,7 +1104,7 @@
 inline int readVariantFromMessage(sdbusplus::message::message& m,
                                   nlohmann::json& data)
 {
-    const char* containerType;
+    const char* containerType = nullptr;
     int r = sd_bus_message_peek_type(m.get(), nullptr, &containerType);
     if (r < 0)
     {
diff --git a/include/ssl_key_handler.hpp b/include/ssl_key_handler.hpp
index abb1c94..eb59bee 100644
--- a/include/ssl_key_handler.hpp
+++ b/include/ssl_key_handler.hpp
@@ -256,8 +256,7 @@
     {
         std::cerr << "Generating x509 Certificate\n";
         // Use this code to directly generate a certificate
-        X509* x509;
-        x509 = X509_new();
+        X509* x509 = X509_new();
         if (x509 != nullptr)
         {
             // get a random number from the RNG for the certificate serial
@@ -280,8 +279,7 @@
             X509_set_pubkey(x509, pPrivKey);
 
             // get the subject name
-            X509_NAME* name;
-            name = X509_get_subject_name(x509);
+            X509_NAME* name = X509_get_subject_name(x509);
 
             X509_NAME_add_entry_by_txt(
                 name, "C", MBSTRING_ASC,
diff --git a/redfish-core/include/utils/time_utils.hpp b/redfish-core/include/utils/time_utils.hpp
index 0df6416..cef8aa5 100644
--- a/redfish-core/include/utils/time_utils.hpp
+++ b/redfish-core/include/utils/time_utils.hpp
@@ -43,7 +43,7 @@
         return false;
     }
 
-    const char* end;
+    const char* end = nullptr;
     std::chrono::milliseconds::rep ticks = 0;
     if constexpr (std::is_same_v<FromTime, std::chrono::milliseconds>)
     {
diff --git a/redfish-core/lib/ethernet.hpp b/redfish-core/lib/ethernet.hpp
index 8735178..ee8d2cd 100644
--- a/redfish-core/lib/ethernet.hpp
+++ b/redfish-core/lib/ethernet.hpp
@@ -635,9 +635,9 @@
         *bits = 0;
     }
 
-    char* endPtr;
+    char* endPtr = nullptr;
     long previousValue = 255;
-    bool firstZeroInByteHit;
+    bool firstZeroInByteHit = false;
     for (const std::string& byte : bytesInMask)
     {
         if (byte.empty())
@@ -1581,8 +1581,8 @@
                 return;
             }
 
-            const std::string* addr;
-            uint8_t prefix;
+            const std::string* addr = nullptr;
+            uint8_t prefix = 0;
 
             // Find the address and prefixLength values. Any values that are
             // not explicitly provided are assumed to be unmodified from the
diff --git a/redfish-core/lib/managers.hpp b/redfish-core/lib/managers.hpp
index 3a955cb..ad5c5e3 100644
--- a/redfish-core/lib/managers.hpp
+++ b/redfish-core/lib/managers.hpp
@@ -1092,8 +1092,8 @@
             std::vector<double> outputs;
             for (auto& step : *steps)
             {
-                double target;
-                double out;
+                double target = 0.0;
+                double out = 0.0;
 
                 if (!redfish::json_util::readJson(step, response->res, "Target",
                                                   target, "Output", out))
diff --git a/redfish-core/lib/message_registries.hpp b/redfish-core/lib/message_registries.hpp
index ae02189..cfa2bf5 100644
--- a/redfish-core/lib/message_registries.hpp
+++ b/redfish-core/lib/message_registries.hpp
@@ -62,7 +62,7 @@
     const crow::Request&, const std::shared_ptr<bmcweb::AsyncResp>& asyncResp,
     const std::string& registry)
 {
-    const message_registries::Header* header;
+    const message_registries::Header* header = nullptr;
     std::string dmtf = "DMTF ";
     const char* url = nullptr;
 
@@ -127,7 +127,7 @@
     const std::string& registry, const std::string& registryMatch)
 
 {
-    const message_registries::Header* header;
+    const message_registries::Header* header = nullptr;
     std::vector<const message_registries::MessageEntry*> registryEntries;
     if (registry == "Base")
     {
diff --git a/redfish-core/lib/sensors.hpp b/redfish-core/lib/sensors.hpp
index 6d10bb7..99dfc81 100644
--- a/redfish-core/lib/sensors.hpp
+++ b/redfish-core/lib/sensors.hpp
@@ -2758,10 +2758,10 @@
     BMCWEB_LOG_INFO << "setSensorsOverride for subNode"
                     << sensorAsyncResp->chassisSubNode << "\n";
 
-    const char* propertyValueName;
+    const char* propertyValueName = nullptr;
     std::unordered_map<std::string, std::pair<double, std::string>> overrideMap;
     std::string memberId;
-    double value;
+    double value = 0.0;
     for (auto& collectionItems : allCollections)
     {
         if (collectionItems.first == "Temperatures")
diff --git a/redfish-core/lib/systems.hpp b/redfish-core/lib/systems.hpp
index 2605c3f..e7f4f02 100644
--- a/redfish-core/lib/systems.hpp
+++ b/redfish-core/lib/systems.hpp
@@ -1728,7 +1728,7 @@
     BMCWEB_LOG_DEBUG << "Set Automatic Retry.";
 
     // OpenBMC only supports "Disabled" and "RetryAttempts".
-    bool autoRebootEnabled;
+    bool autoRebootEnabled = false;
 
     if (automaticRetryConfig == "Disabled")
     {
@@ -2765,7 +2765,7 @@
 
             // Get the command and host vs. chassis
             std::string command;
-            bool hostCommand;
+            bool hostCommand = true;
             if ((resetType == "On") || (resetType == "ForceOn"))
             {
                 command = "xyz.openbmc_project.State.Host.Transition.On";
