diff --git a/src/language/modules/CMakeLists.txt b/src/language/modules/CMakeLists.txt
index 0a996fd6764b4d2eed57c02e8682283f1e640901..cd4c99bd8fb9d8e354706020a4077bf0c8234057 100644
--- a/src/language/modules/CMakeLists.txt
+++ b/src/language/modules/CMakeLists.txt
@@ -7,6 +7,7 @@ add_library(PugsLanguageModules
   MeshModule.cpp
   ModuleRepository.cpp
   SchemeModule.cpp
+  UtilsModule.cpp
   VTKModule.cpp
 )
 
diff --git a/src/language/modules/ModuleRepository.cpp b/src/language/modules/ModuleRepository.cpp
index df403fa87f0c0d39778414a92ec7aa991b3d8d5b..83d44b23ee90423f495144216f5244a9b40db482 100644
--- a/src/language/modules/ModuleRepository.cpp
+++ b/src/language/modules/ModuleRepository.cpp
@@ -5,6 +5,7 @@
 #include <language/modules/MathModule.hpp>
 #include <language/modules/MeshModule.hpp>
 #include <language/modules/SchemeModule.hpp>
+#include <language/modules/UtilsModule.hpp>
 #include <language/modules/VTKModule.hpp>
 #include <language/utils/BuiltinFunctionEmbedder.hpp>
 #include <language/utils/ParseError.hpp>
@@ -20,11 +21,12 @@ ModuleRepository::_subscribe(std::unique_ptr<IModule> m)
 
 ModuleRepository::ModuleRepository()
 {
+  this->_subscribe(std::make_unique<LinearSolverModule>());
   this->_subscribe(std::make_unique<MathModule>());
   this->_subscribe(std::make_unique<MeshModule>());
-  this->_subscribe(std::make_unique<VTKModule>());
   this->_subscribe(std::make_unique<SchemeModule>());
-  this->_subscribe(std::make_unique<LinearSolverModule>());
+  this->_subscribe(std::make_unique<UtilsModule>());
+  this->_subscribe(std::make_unique<VTKModule>());
 }
 
 template <typename NameEmbedderMapT, typename EmbedderTableT>
diff --git a/src/language/modules/UtilsModule.cpp b/src/language/modules/UtilsModule.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..ff5b2a0df4ae576546d30e2c8a73934a8f443526
--- /dev/null
+++ b/src/language/modules/UtilsModule.cpp
@@ -0,0 +1,19 @@
+#include <language/modules/UtilsModule.hpp>
+
+#include <language/utils/BuiltinFunctionEmbedder.hpp>
+#include <utils/PugsUtils.hpp>
+
+UtilsModule::UtilsModule()
+{
+  this->_addBuiltinFunction("getPugsVersion", std::make_shared<BuiltinFunctionEmbedder<std::string(void)>>(
+
+                                                []() -> std::string { return pugsVersion(); }
+
+                                                ));
+
+  this->_addBuiltinFunction("getPugsBuildInfo", std::make_shared<BuiltinFunctionEmbedder<std::string(void)>>(
+
+                                                  []() -> std::string { return pugsBuildInfo(); }
+
+                                                  ));
+}
diff --git a/src/language/modules/UtilsModule.hpp b/src/language/modules/UtilsModule.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..f7580a0422d3d8dabbd8c931b99dbfc7601f84da
--- /dev/null
+++ b/src/language/modules/UtilsModule.hpp
@@ -0,0 +1,19 @@
+#ifndef UTILS_MODULE_HPP
+#define UTILS_MODULE_HPP
+
+#include <language/modules/BuiltinModule.hpp>
+
+class UtilsModule : public BuiltinModule
+{
+ public:
+  std::string_view
+  name() const final
+  {
+    return "utils";
+  }
+
+  UtilsModule();
+  ~UtilsModule() = default;
+};
+
+#endif   // UTILS_MODULE_HPP