diff --git a/cmake/StaticAnalyzers.cmake b/cmake/StaticAnalyzers.cmake
index ca136aab64a152ceafc238983eb8d69356df7313..43964447f068f30a8af5de899691b8f5538d33fc 100644
--- a/cmake/StaticAnalyzers.cmake
+++ b/cmake/StaticAnalyzers.cmake
@@ -1,5 +1,5 @@
-option(ENABLE_CPPCHECK "Enable static analysis with cppcheck" ON)
-option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy" ON)
+option(ENABLE_CPPCHECK "Enable static analysis with cppcheck" OFF)
+option(ENABLE_CLANG_TIDY "Enable static analysis with clang-tidy" OFF)
 option(ENABLE_INCLUDE_WHAT_YOU_USE "Enable static analysis with include-what-you-use" OFF)
 
 if(ENABLE_CPPCHECK)
diff --git a/src/game/CMakeLists.txt b/src/game/CMakeLists.txt
index 05287a7da6d4e8c0fda07b5eb90b393c0837891e..ee9fdec0ea18a569966ff6e6d8093bd3284571c3 100644
--- a/src/game/CMakeLists.txt
+++ b/src/game/CMakeLists.txt
@@ -1,5 +1,6 @@
 add_subdirectory(state)
 add_subdirectory(input)
+add_subdirectory(renderer)
 
 add_library(game
             game.h game.cpp)
@@ -11,4 +12,5 @@ target_link_libraries(game
     CONAN_PKG::spdlog
     state
     input
+    renderer
 )
\ No newline at end of file
diff --git a/src/game/game.cpp b/src/game/game.cpp
index e55f090e65b73656b5f526b27189c7481f4782c2..476163ad943004d81a2a0fd61a1b5b0646749ae2 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -2,16 +2,19 @@
 
 #include "spdlog/spdlog.h"
 #include "input/sdl_input.h"
+#include "renderer/sdl_renderer.h"
 
 #include <variant>
 
 game::game(uint32_t fps):current_state(),
                          input_processor(nullptr),
+                         renderer(nullptr),
                          player_position_delta(0),
                          player_angle_delta(0.0),
                          delta_time(1.0 / static_cast<double>(fps)),
                          is_running(false) {
     input_processor = new sdl_input();
+    renderer = new sdl_renderer();
     spdlog::get("game")->debug("Fps set to: {} and delta_time set to: {}", fps, delta_time);
     spdlog::get("game")->info("Finished game component initialization.");
 }
@@ -20,6 +23,9 @@ game::~game() {
     spdlog::get("game")->debug("Deleting allocated resources");
     if (!input_processor)
         delete input_processor;
+    if (!renderer) {
+        delete renderer;
+    }
 }
 
 void game::run_loop() {
diff --git a/src/game/game.h b/src/game/game.h
index b9028d6ab5d0dbb41653ea7ae007f9bcb69104ae..a58fe95e52ae90831ce95007bba6c8a0acdb5aae 100644
--- a/src/game/game.h
+++ b/src/game/game.h
@@ -6,6 +6,7 @@
 
 #include "state/state.h"
 #include "input/abstract_input.h"
+#include "renderer/abstract_renderer.h"
 
 /**
  * Basic game structure - behaves like controler in MVC schema.
@@ -32,6 +33,8 @@ protected:
     state current_state;
     /// Current input processor
     abstract_input* input_processor;
+    /// Current game renderer
+    abstract_renderer* renderer;
     /// Player position is updated every second by this value
     uint32_t player_position_delta;
     /// Player angle is updated every second by this value
diff --git a/src/game/renderer/CMakeLists.txt b/src/game/renderer/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..827c7b5ad63c01a8f4ad1d4b3f489e0ed979aa73
--- /dev/null
+++ b/src/game/renderer/CMakeLists.txt
@@ -0,0 +1,13 @@
+add_library(renderer
+    abstract_renderer.h abstract_renderer.cpp
+    sdl_renderer.h sdl_renderer.cpp)
+
+target_link_libraries(input
+    PUBLIC
+    project_options
+    project_warnings
+    CONAN_PKG::spdlog
+    ${SDL2_LIBRARY}
+    ${SDL2_IMAGE_LIBRARY}
+    ${SDL2_TTF_LIBRARY}
+    state)
\ No newline at end of file
diff --git a/src/game/renderer/abstract_renderer.cpp b/src/game/renderer/abstract_renderer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..d377f27823a9267a0598b843774c7bd0b4c6344e
--- /dev/null
+++ b/src/game/renderer/abstract_renderer.cpp
@@ -0,0 +1 @@
+#include "abstract_renderer.h"
\ No newline at end of file
diff --git a/src/game/renderer/abstract_renderer.h b/src/game/renderer/abstract_renderer.h
new file mode 100644
index 0000000000000000000000000000000000000000..94d69125426f8154544c81a3fca60b7661e95e70
--- /dev/null
+++ b/src/game/renderer/abstract_renderer.h
@@ -0,0 +1,12 @@
+#ifndef ABSTRACT_RENDERER_H
+#define ABSTRACT_RENDERER_H
+
+#include "../state/state.h"
+
+class abstract_renderer{
+public:
+    virtual ~abstract_renderer() {}
+    virtual void render_state(const state& current_state) = 0;
+};
+
+#endif//ABSTRACT_RENDERER_H
\ No newline at end of file
diff --git a/src/game/renderer/sdl_renderer.cpp b/src/game/renderer/sdl_renderer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e0dec3e6f88fbe727c68ad48cb63d1fd401ab3a4
--- /dev/null
+++ b/src/game/renderer/sdl_renderer.cpp
@@ -0,0 +1,37 @@
+#include "sdl_renderer.h"
+
+#include <SDL2/SDL.h>
+
+#include <stdexcept>
+
+sdl_renderer::sdl_renderer() {
+    SDL_Init(SDL_INIT_VIDEO);
+    window = SDL_CreateWindow("Window NAME - Replace me",
+                              SDL_WINDOWPOS_CENTERED,
+                              SDL_WINDOWPOS_CENTERED,
+                              640, 480, 0);
+    if (window == nullptr) {
+        throw std::runtime_error(SDL_GetError());
+    }
+
+    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
+    if (renderer == nullptr) {
+        throw std::runtime_error(SDL_GetError());
+    }
+
+    SDL_SetRenderDrawColor(renderer, 100, 100, 100, 0);
+    SDL_Rect screen{0, 0, 640, 480};
+    SDL_RenderFillRect(renderer, &screen);
+}
+
+sdl_renderer::~sdl_renderer() {
+    if (renderer != nullptr)
+        SDL_DestroyRenderer(renderer);
+    if (window != nullptr)
+        SDL_DestroyWindow(window);
+    SDL_QuitSubSystem(SDL_INIT_VIDEO);
+}
+
+void sdl_renderer::render_state(const state& cs) {
+
+}
\ No newline at end of file
diff --git a/src/game/renderer/sdl_renderer.h b/src/game/renderer/sdl_renderer.h
new file mode 100644
index 0000000000000000000000000000000000000000..a4df68fc9cc36b0c189323613983a07bb9a08892
--- /dev/null
+++ b/src/game/renderer/sdl_renderer.h
@@ -0,0 +1,24 @@
+#ifndef SDL_RENDERER_H
+#define SDL_RENDERER_H
+
+#include <SDL2/SDL.h>
+
+#include "abstract_renderer.h"
+
+/// Game renderer class. Using SDL2 to render game
+class sdl_renderer: public abstract_renderer {
+public:
+    /// Default contructor (initializes SDL, window, renderer and loads texture into memory)
+    sdl_renderer();
+    /// Closes window and deintializes sdl video module
+    virtual ~sdl_renderer();
+
+    /// Renders passed state to created window
+    void render_state(const state& current_state) override;
+protected:
+    /// SDL window struct
+    SDL_Window* window;
+    SDL_Renderer* renderer;
+};
+
+#endif//SDL_RENDERER_H
\ No newline at end of file
diff --git a/src/game/state/CMakeLists.txt b/src/game/state/CMakeLists.txt
index 469a40a271152e0651fb59617a0a044bc0c80400..38db7a02180406ff91ac238479e3a2548ab549a8 100644
--- a/src/game/state/CMakeLists.txt
+++ b/src/game/state/CMakeLists.txt
@@ -2,6 +2,8 @@ add_library(state
             state.h state.cpp
             shooter.h shooter.cpp)
 
+target_include_directories(state PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
+
 target_link_libraries(state
     PRIVATE
     project_options