diff --git a/src/utility/boost-info-editor.cpp b/src/utility/boost-info-editor.cpp
new file mode 100644
index 0000000..bd6893a
--- /dev/null
+++ b/src/utility/boost-info-editor.cpp
@@ -0,0 +1,93 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014-2025,  The University of Memphis,
+ *                           Regents of the University of California,
+ *                           Arizona Board of Regents.
+ *
+ * This file is part of NLSR (Named-data Link State Routing).
+ * See AUTHORS.md for complete list of NLSR authors and contributors.
+ *
+ * NLSR is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "boost-info-editor.hpp"
+#include "logger.hpp"
+
+#include <boost/property_tree/info_parser.hpp>
+
+namespace nlsr::util::boost_info_editor {
+
+// Incorporates Apache 2.0 licensed code by Yanbiao Li under a compatible license
+boost::property_tree::ptree
+load(const std::string& fileName)
+{
+  boost::property_tree::ptree info;
+  std::ifstream input(fileName);
+
+  // Thrown errors are received at calling function
+  boost::property_tree::info_parser::read_info(input, info);
+
+  input.close();
+  return info;
+}
+
+bool
+save(const std::string& fileName, boost::property_tree::ptree& info)
+{
+  std::ofstream output(fileName);
+  try {
+    write_info(output, info);
+  } catch (const boost::property_tree::info_parser::info_parser_error& error) {
+    return false;
+  }
+  output.close();
+  return true;
+}
+
+bool
+put(const std::string& fileName, const std::string& section, const std::string& value)
+{
+  boost::property_tree::ptree info;
+  try {
+    info = load(fileName);
+  }
+  catch (const boost::property_tree::info_parser::info_parser_error& error) {
+    return false;
+  }
+  info.put(section.c_str(), value.c_str());
+  return save(fileName, info);
+}
+
+bool
+remove(const std::string& fileName, const std::string& section)
+{
+  boost::property_tree::ptree info;
+  try {
+    info = load(fileName);
+  }
+  catch (const boost::property_tree::info_parser::info_parser_error& error) {
+    return false;
+  }
+  std::size_t pos = section.find_last_of(".");
+  if (pos == std::string::npos) {
+    info.erase(section.c_str());
+  }
+  else {
+    boost::optional<boost::property_tree::ptree&> child =
+      info.get_child_optional(section.substr(0, pos));
+    if (child) {
+      child->erase(section.substr(pos + 1));
+    }
+  }
+  return save(fileName, info);
+}
+} // namespace nlsr::util::boost_info_editor
diff --git a/src/utility/boost-info-editor.hpp b/src/utility/boost-info-editor.hpp
new file mode 100644
index 0000000..d4ba0e5
--- /dev/null
+++ b/src/utility/boost-info-editor.hpp
@@ -0,0 +1,45 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2014-2025,  The University of Memphis,
+ *                           Regents of the University of California,
+ *                           Arizona Board of Regents.
+ *
+ * This file is part of NLSR (Named-data Link State Routing).
+ * See AUTHORS.md for complete list of NLSR authors and contributors.
+ *
+ * NLSR is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ *
+ * NLSR is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * NLSR, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NLSR_BOOST_INFO_EDITOR_HPP
+#define NLSR_BOOST_INFO_EDITOR_HPP
+
+#include <string>
+
+namespace nlsr::util::boost_info_editor {
+
+/*! Insert a specified combination of configuration field name and value into a specific file path
+  Returns false if any errors occur on I/O, otherwise true.
+  \param fileName Path to conf file as string
+  \param section Section name to add/modify in conf file; expects [section].[subsection]... formatting
+  \param value The value to insert into the sheet as a string. Typechecking should be done in caller.
+*/
+bool put(const std::string& fileName, const std::string& section, const std::string& value);
+
+/*! Remove a specified key and its value from a configuration file at a specific path
+  Returns false if any errors occur on I/O, otherwise true.
+  \param fileName Path to conf file as string
+  \param section Section name to add/modify in conf file; expects [section].[subsection]... formatting
+*/
+bool remove(const std::string& fileName, const std::string& section);
+} // namespace nlsr::util::boost_info_editor
+
+#endif // NLSR_BOOST_INFO_EDITOR_HPP
