diff --git a/.gitmodules b/.gitmodules
index b44e47387fc30a41c3f5c8d09b5ad525b354f233..323286b592292b798a8b6ca03dde3651dd36239e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,6 @@
 [submodule "lib/glfw"]
 	path = lib/glfw
 	url = https://github.com/glfw/glfw.git
+[submodule "lib/SPIRV-Cross"]
+	path = lib/SPIRV-Cross
+	url = https://github.com/KhronosGroup/SPIRV-Cross.git
diff --git a/config/Libraries.cmake b/config/Libraries.cmake
index 13667936dd100be91ab43b73e6774e7db3da876c..e04aa3575a34632eb75c929bf4640305cd93e298 100644
--- a/config/Libraries.cmake
+++ b/config/Libraries.cmake
@@ -16,6 +16,7 @@ set(vkcv_config_msg " - Library: ")
 # load dependencies via separate cmake file
 include(${vkcv_config_lib}/GLFW.cmake)    # glfw-x11 / glfw-wayland					# libglfw3-dev
 include(${vkcv_config_lib}/Vulkan.cmake)  # vulkan-intel / vulkan-radeon / nvidia	# libvulkan-dev
+include(${vkcv_config_lib}/SPIRV_Cross.cmake)  # SPIRV-Cross	                    # libspirv_cross_c_shared
 
 # cleanup of compiler flags
 if (vkcv_flags)
diff --git a/config/lib/SPIRV_Cross.cmake b/config/lib/SPIRV_Cross.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..2c06dabeb6bd46c53a5c05c32b27425c5ed7f812
--- /dev/null
+++ b/config/lib/SPIRV_Cross.cmake
@@ -0,0 +1,17 @@
+find_package(spirv_cross_c_shared QUIET)
+
+if (spirv-cross_FOUND)
+    list(APPEND vkcv_libraries spirv_cross_c_shared)
+
+    message(${vkcv_config_msg} " SPIRV Cross    - ")
+else()
+    if (EXISTS "${vkcv_lib_path}/SPIRV-Cross")
+        add_subdirectory(${vkcv_lib}/SPIRV-Cross)
+
+        list(APPEND vkcv_libraries spirv_cross_c_shared)
+
+        message(${vkcv_config_msg} " SPIRV Cross    - ")
+    else()
+        message(WARNING "SPIRV-Cross is required..! Update the submodules!")
+    endif ()
+endif ()
\ No newline at end of file
diff --git a/include/vkcv/ShaderProgram.hpp b/include/vkcv/ShaderProgram.hpp
index 172e906fca457c6245855639275054514958b69d..53e75aba696f9da3fd1d60bdd70e657675571427 100644
--- a/include/vkcv/ShaderProgram.hpp
+++ b/include/vkcv/ShaderProgram.hpp
@@ -10,6 +10,7 @@
 #include <iostream>
 #include <filesystem>
 #include <vulkan/vulkan.hpp>
+#include <spirv_glsl.hpp>
 
 namespace vkcv {
 
@@ -53,6 +54,8 @@ namespace vkcv {
 
         bool existsShader(ShaderStage shaderStage) const;
 
+        void reflectShader(ShaderStage shaderStage) const;
+
 	private:
         std::unordered_map<ShaderStage, Shader> m_Shaders;
 
diff --git a/lib/SPIRV-Cross b/lib/SPIRV-Cross
new file mode 160000
index 0000000000000000000000000000000000000000..ff61890722a91e97c44940494be5b6eed0d5ff5b
--- /dev/null
+++ b/lib/SPIRV-Cross
@@ -0,0 +1 @@
+Subproject commit ff61890722a91e97c44940494be5b6eed0d5ff5b
diff --git a/src/vkcv/ShaderProgram.cpp b/src/vkcv/ShaderProgram.cpp
index 87ccdefbfec0b4891d3152d30aa6c9f6c8c0d5ea..e5569e0024b8735c093a546177a3634ef6d372bc 100644
--- a/src/vkcv/ShaderProgram.cpp
+++ b/src/vkcv/ShaderProgram.cpp
@@ -59,4 +59,10 @@ namespace vkcv {
 	    else
 	        return true;
     }
+
+    void ShaderProgram::reflectShader(ShaderStage shaderStage) const
+    {
+        auto shaderCode = m_Shaders.at(shaderStage).shaderCode;
+        //TODO
+    }
 }