diff --git a/scripts/generate.sh b/scripts/generate.sh
new file mode 100755
index 0000000000000000000000000000000000000000..cf9ff2d607217890b6fd0586e1dddece962d59b9
--- /dev/null
+++ b/scripts/generate.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+CMAKE_PROJECT_DIR="$(pwd)"
+CMAKE_PROJECT_NAME="$(basename "$CMAKE_PROJECT_DIR")"
+
+# Navigate to the main directory of the cloned repository
+cd "$(dirname "$0")" || exit
+cd ..
+
+CMAKE_FRAMEWORK_DIR="$(realpath -s --relative-to="$CMAKE_PROJECT_DIR" "$(pwd)")"
+
+# Navigate back to the project directory
+cd "$CMAKE_PROJECT_DIR" || exit
+
+test -f "CMakeLists.txt" && echo "WARNING: CMakeLists.txt exists already! Project generation stops!" && exit
+test -f "src/main.cpp" && echo "WARNING: src/main.cpp exists already! Project generation stops!" && exit
+
+generate_cmake_lists() {
+  echo "cmake_minimum_required(VERSION 3.16)"
+  echo "project($CMAKE_PROJECT_NAME)"
+  echo
+  echo "set(CMAKE_CXX_STANDARD 20)"
+  echo "set(CMAKE_CXX_STANDARD_REQUIRED ON)"
+  echo
+  echo "set(BUILD_MODULES ON CACHE INTERNAL \"\")"
+  echo "set(BUILD_PROJECTS OFF CACHE INTERNAL \"\")"
+  echo "set(BUILD_DOXYGEN_DOCS OFF CACHE INTERNAL \"\")"
+  echo "set(BUILD_SHARED OFF CACHE INTERNAL \"\")"
+  echo "add_subdirectory($CMAKE_FRAMEWORK_DIR)"
+  echo
+  echo "add_executable($CMAKE_PROJECT_NAME src/main.cpp)"
+  echo
+  echo "target_include_directories($CMAKE_PROJECT_NAME SYSTEM BEFORE PRIVATE \${vkcv_includes})"
+  echo "target_link_libraries($CMAKE_PROJECT_NAME \${vkcv_libraries})"
+}
+
+generate_main_cpp() {
+  echo "#include <vkcv/Core.hpp>"
+  echo
+  echo "int main(int argc, const char** argv) {"
+  echo "  vkcv::Core core = vkcv::Core::create("
+  echo "    \"$CMAKE_PROJECT_NAME\","
+  echo "    VK_MAKE_VERSION(0, 0, 1),"
+  echo "    { vk::QueueFlagBits::eTransfer,vk::QueueFlagBits::eGraphics, vk::QueueFlagBits::eCompute },"
+  echo "    { VK_KHR_SWAPCHAIN_EXTENSION_NAME }"
+  echo "  );"
+  echo "  "
+  echo "  vkcv::WindowHandle windowHandle = core.createWindow(\"$CMAKE_PROJECT_NAME\", 800, 600, true);"
+  echo "  "
+  echo "  while (vkcv::Window::hasOpenWindow()) {"
+  echo "    vkcv::Window::pollEvents();"
+  echo "  }"
+  echo "}"
+}
+
+generate_cmake_lists > "CMakeLists.txt"
+
+mkdir -p "src"
+generate_main_cpp > "src/main.cpp"