diff --git a/thirdparty/CMakeLists.txt b/thirdparty/CMakeLists.txt
index 2ca3938779cf392633d7339ff35d7a56e5634e06..9cff344a26b87e1883e29d9fabb91686b0fd1373 100644
--- a/thirdparty/CMakeLists.txt
+++ b/thirdparty/CMakeLists.txt
@@ -1,5 +1,6 @@
 add_subdirectory(KWSys)
 add_subdirectory(NLohmannJson)
+add_subdirectory(pugixml)
 
 if(BUILD_TESTING)
   add_subdirectory(GTest)
diff --git a/thirdparty/pugixml/CMakeLists.txt b/thirdparty/pugixml/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..07a05515c27e26dd2e9187e75def9dcb50b51163
--- /dev/null
+++ b/thirdparty/pugixml/CMakeLists.txt
@@ -0,0 +1,12 @@
+# This is an extremely simple and tiny library.  Rather than build it
+# seperately we'll just create an interface library containing the sources and
+# headers
+add_library(pugixml INTERFACE)
+target_sources(pugixml INTERFACE
+  ${CMAKE_CURRENT_SOURCE_DIR}/pugixml/src/pugiconfig.hpp
+  ${CMAKE_CURRENT_SOURCE_DIR}/pugixml/src/pugixml.hpp
+  ${CMAKE_CURRENT_SOURCE_DIR}/pugixml/src/pugixml.cpp
+)
+target_include_directories(pugixml INTERFACE
+  ${CMAKE_CURRENT_SOURCE_DIR}/pugixml/src
+)
diff --git a/thirdparty/pugixml/Readme.txt b/thirdparty/pugixml/Readme.txt
new file mode 100644
index 0000000000000000000000000000000000000000..f7eeda3e76de90fac573dc25fcc2e07bf26a65d5
--- /dev/null
+++ b/thirdparty/pugixml/Readme.txt
@@ -0,0 +1,4 @@
+This is a copy of the upstream pugixml library located at
+https://github.com/zeux/pugixml. Do not make changes directly to this repo
+but instead to the upstream repository.  Update this copy of pugixml by running
+the update.sh script.
diff --git a/thirdparty/pugixml/pugixml/delete.me b/thirdparty/pugixml/pugixml/delete.me
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/thirdparty/pugixml/update.sh b/thirdparty/pugixml/update.sh
new file mode 100755
index 0000000000000000000000000000000000000000..a9a5d99d631741af38f2a9e93e32ff51f399456c
--- /dev/null
+++ b/thirdparty/pugixml/update.sh
@@ -0,0 +1,23 @@
+#!/usr/bin/env bash
+
+set -e
+set -x
+shopt -s dotglob
+
+readonly name="pugixml"
+readonly ownership="pugixml Upstream <robot@adios2>"
+readonly subtree="thirdparty/pugixml/pugixml"
+readonly repo="https://github.com/zeux/pugixml.git"
+readonly tag="v1.8.1"
+readonly shortlog="true"
+readonly paths="
+src/pugiconfig.hpp
+src/pugixml.hpp
+src/pugixml.cpp
+"
+
+extract_source () {
+    git_archive
+}
+
+. "${BASH_SOURCE%/*}/../update-common.sh"