diff --git a/.gitmodules b/.gitmodules
index 9d87446c19d3de9a27f8d8d1d123db16a4ba7b00..5617fd287daa9e5cb46ee21a5d65e5ebbbffd0dc 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -46,3 +46,6 @@
 [submodule "ThirdParty/spdlog"]
 	path = ThirdParty/spdlog
 	url = https://github.com/gabime/spdlog.git
+[submodule "ThirdParty/xdmfdiff"]
+	path = ThirdParty/xdmfdiff
+	url = https://gitlab.opengeosys.org/ogs/xdmfdiff.git
diff --git a/ThirdParty/xdmfdiff b/ThirdParty/xdmfdiff
new file mode 160000
index 0000000000000000000000000000000000000000..428760e717acef51fdedcc2bf3e56474c1b971ef
--- /dev/null
+++ b/ThirdParty/xdmfdiff
@@ -0,0 +1 @@
+Subproject commit 428760e717acef51fdedcc2bf3e56474c1b971ef
diff --git a/scripts/cmake/SubmoduleSetup.cmake b/scripts/cmake/SubmoduleSetup.cmake
index 11990bac6b6c45f63e07c23fa5def2a559263be5..7db7db3685b2b303b3566faf131904af887ac255 100644
--- a/scripts/cmake/SubmoduleSetup.cmake
+++ b/scripts/cmake/SubmoduleSetup.cmake
@@ -21,7 +21,7 @@ set(REQUIRED_SUBMODULES
     ${OGS_ADDITIONAL_SUBMODULES_TO_CHECKOUT}
 )
 if(BUILD_TESTING)
-    list(APPEND REQUIRED_SUBMODULES ThirdParty/vtkdiff)
+    list(APPEND REQUIRED_SUBMODULES ThirdParty/vtkdiff ThirdParty/xdmfdiff)
 endif()
 if(OGS_BUILD_UTILS)
     # Required by the partmesh tool, which is build with utils only.