diff --git a/src/main.cpp b/src/main.cpp
index 9b9a28a..d057cd5 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -24,10 +24,14 @@ public:
 
 private:
     /////////////////////////////////////////////////////////////
-    //// class member
+    /// class member
     GLFWwindow* m_window{ nullptr };
+    vk::raii::Context m_context;
+    vk::raii::Instance m_instance{ nullptr };
     /////////////////////////////////////////////////////////////
 
+    /////////////////////////////////////////////////////////////
+    /// run functions
     void initWindow() {
         glfwInit();
 
@@ -38,7 +42,7 @@ private:
     }
 
     void initVulkan() {
-
+        createInstance();
     }
 
     void mainLoop() {
@@ -51,6 +55,42 @@ private:
         glfwDestroyWindow( m_window );
         glfwTerminate();
     }
+    /////////////////////////////////////////////////////////////
+
+    /////////////////////////////////////////////////////////////
+    /// create instance
+    void createInstance(){
+        vk::ApplicationInfo applicationInfo(
+            "Hello Vulkan",     // pApplicationName
+            1,                  // applicationVersion
+            "No Engine",        // pEngineName
+            1,                  // engineVersion
+            vk::makeApiVersion(0, 1, 4, 0)  // apiVersion
+        );
+        vk::InstanceCreateInfo createInfo(
+            {},                 // vk::InstanceCreateFlags
+            &applicationInfo    // vk::ApplicationInfo*
+        );
+
+        uint32_t glfwExtensionCount = 0;
+        const char **glfwExtensions = glfwGetRequiredInstanceExtensions(&glfwExtensionCount);
+
+        std::vector<const char*> requiredExtensions( glfwExtensions, glfwExtensions + glfwExtensionCount );
+        requiredExtensions.emplace_back(vk::KHRPortabilityEnumerationExtensionName);
+
+        createInfo.setPEnabledExtensionNames( requiredExtensions );
+        createInfo.flags |= vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR;
+
+        // std::vector<vk::ExtensionProperties>
+        const auto extensions = m_context.enumerateInstanceExtensionProperties();
+        std::cout << "available extensions:\n";
+        for (const auto& extension : extensions) {
+            std::println("\t{}", std::string_view(extension.extensionName));
+        }
+
+        m_instance = m_context.createInstance( createInfo );
+    }
+    /////////////////////////////////////////////////////////////
 };
 
 int main() {
