diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp
index 569033036c134407b3dd184ce5070d40cd6518ad..d718da0989251b7a992d020324c2bf2131dbf19e 100644
--- a/projects/first_triangle/src/main.cpp
+++ b/projects/first_triangle/src/main.cpp
@@ -2,6 +2,7 @@
 #include <vkcv/Core.hpp>
 #include <vkcv/Window.hpp>
 #include <vkcv/ShaderProgram.hpp>
+#include <GLFW/glfw3.h>
 
 int main(int argc, const char** argv) {
     const char* applicationName = "First Triangle";
@@ -15,6 +16,32 @@ int main(int argc, const char** argv) {
 		false
     );
 
+    // showing basic usage lambda events of window
+    window.e_mouseMove.add([&](double x, double y){
+        std::cout << "movement: " << x << " , " << y << std::endl;
+    });
+
+    window.e_key.add([&](int key, int scancode, int action, int mods){
+        switch (key) {
+            case GLFW_KEY_W:
+                std::cout << "Move forward" << std::endl;
+                break;
+            case GLFW_KEY_A:
+                std::cout << "Move left" << std::endl;
+                break;
+            case GLFW_KEY_S:
+                std::cout << "Move backward" << std::endl;
+                break;
+            case GLFW_KEY_D:
+                std::cout << "Move right" << std::endl;
+                break;
+            default:
+                std::cout << "this key is not supported yet: " << std::endl;
+        }
+    });
+
+    window.initEvents();
+
 	vkcv::Core core = vkcv::Core::create(
             window,
             applicationName,