diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2a9b703f9ae4e7e4b3758b9e03892d1cc7a18ad2..85d2f7e7f0e35ea2cb5438e9fbbccc40094fb70c 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -108,6 +108,9 @@ else()
     )
 endif()
 
+# leveleditor
+add_subdirectory(leveleditor)
+
 # writelevel
 add_executable(writelevel ${PROJECT_SOURCE_DIR}/writelevel.cpp)
 target_include_directories(writelevel
diff --git a/README.md b/README.md
index 8e5bcd0f74eb02bafe338d75ed3e513d8e39bcff..9213cba040cb5a8ebc929862dbf5f3f6ecdbfcb1 100644
--- a/README.md
+++ b/README.md
@@ -57,3 +57,6 @@ CMake kann mit verschiedenen Optionen konfiguriert werden:
 cmake .. -DCMAKE_BUILD_TYPE=Release    # Release-Build
 cmake .. -DCMAKE_BUILD_TYPE=Debug      # Debug-Build
 ```
+
+## Prerequisites for Leveleditor
+- QT 6: ```sudo apt install qt6-base-dev```
\ No newline at end of file
diff --git a/leveleditor/CMakeLists.txt b/leveleditor/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..248c3ea3fd3efd3e270fd4a0905710e3853d2f34
--- /dev/null
+++ b/leveleditor/CMakeLists.txt
@@ -0,0 +1,16 @@
+# Find Qt
+find_package(Qt6 REQUIRED COMPONENTS Widgets)
+
+file(GLOB_RECURSE LEVELEDITOR_SOURCES
+        "${PROJECT_SOURCE_DIR}/leveleditor/src/*.cpp"
+        "${PROJECT_SOURCE_DIR}/leveleditor/src/*.hpp"
+)
+
+# Add executable
+add_executable(editor ${LEVELEDITOR_SOURCES})
+
+# Link Qt libraries
+target_link_libraries(editor PRIVATE Qt6::Widgets)
+
+
+
diff --git a/leveleditor/src/MainWindow.cpp b/leveleditor/src/MainWindow.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..a8a07b62161077a771524f01ec9b298477d802e9
--- /dev/null
+++ b/leveleditor/src/MainWindow.cpp
@@ -0,0 +1,26 @@
+#include <QGraphicsScene>
+#include <QVBoxLayout>
+#include <QGraphicsView>
+#include "TileProvider.hpp"
+#include "MainWindow.hpp"
+
+MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
+    // Create the main widget and layout
+    QWidget *centralWidget = new QWidget(this);
+    QVBoxLayout *mainLayout = new QVBoxLayout(centralWidget);
+    setWindowTitle("Level Editor");
+
+    QGraphicsScene* scene = new QGraphicsScene(this);
+    scene->setSceneRect(0, 0, 400, 400); // Set the scene dimensions
+    TileProvider tileprovider = TileProvider::from_spritesheet("spritesheet.h5");
+    QPixmap pixmap = tileprovider.get_tile(0);
+    QGraphicsPixmapItem* pixmapitem = scene->addPixmap(pixmap);
+
+    // Create a view to display the scene
+    QGraphicsView* view = new QGraphicsView(scene, this);
+    view->setFixedSize(300, 300);
+    view->scale(10, 10);
+    mainLayout->addWidget(view);
+
+    setCentralWidget(centralWidget);
+}
\ No newline at end of file
diff --git a/leveleditor/src/MainWindow.hpp b/leveleditor/src/MainWindow.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..ef962da3415b814a4e1f72f7c32afb15645d61d8
--- /dev/null
+++ b/leveleditor/src/MainWindow.hpp
@@ -0,0 +1,6 @@
+#include <QMainWindow>
+
+class MainWindow : public QMainWindow {
+public:
+    MainWindow(QWidget *parent = nullptr);
+};
\ No newline at end of file
diff --git a/leveleditor/src/Tile.cpp b/leveleditor/src/Tile.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..8489d68fa09007bbac4a330b35c9dcfab91c3d54
--- /dev/null
+++ b/leveleditor/src/Tile.cpp
@@ -0,0 +1,8 @@
+#include "Tile.hpp"
+#include <iostream>
+
+Tile::Tile(const QPixmap &pixmap, uint8_t id) : QGraphicsPixmapItem(pixmap) {}
+
+void Tile::mousePressEvent(QGraphicsSceneMouseEvent *event) {
+    std::cout << "clicked" << std::endl;
+}
diff --git a/leveleditor/src/Tile.hpp b/leveleditor/src/Tile.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..726e0e6861915683b199d90b7e8863cf4e1faa6d
--- /dev/null
+++ b/leveleditor/src/Tile.hpp
@@ -0,0 +1,13 @@
+#include <QApplication>
+#include <QGraphicsPixmapItem>
+#include <QGraphicsSceneMouseEvent>
+
+class Tile : public QGraphicsPixmapItem {
+public:
+    explicit Tile(const QPixmap& pixmap, uint8_t id);
+
+protected:
+    // Override mousePressEvent to handle mouse clicks
+    void mousePressEvent(QGraphicsSceneMouseEvent* event) override;
+    
+};
\ No newline at end of file
diff --git a/leveleditor/src/TileProvider.cpp b/leveleditor/src/TileProvider.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..07b8671a6da01ce32e38267549bb912971154422
--- /dev/null
+++ b/leveleditor/src/TileProvider.cpp
@@ -0,0 +1,18 @@
+#include "TileProvider.hpp"
+
+TileProvider::TileProvider(std::vector<std::vector<uint32_t>> sprites) : sprites(sprites){}
+
+QPixmap TileProvider::get_tile(uint8_t id) {
+    QImage image(16, 16, QImage::Format::Format_ARGB32);
+    for (int y = 0; y < 16; y++) {
+        for (int x = 0; x < 16; x++) {
+            image.setPixel(x, y, 0xFF228B22);
+        }
+    }
+    return QPixmap::fromImage(image);
+}
+
+TileProvider TileProvider::from_spritesheet(const std::string path)
+{
+    return TileProvider({});
+}
diff --git a/leveleditor/src/TileProvider.hpp b/leveleditor/src/TileProvider.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..c3fee5b93e4ce9bf57db444a04b1e0e3351e106a
--- /dev/null
+++ b/leveleditor/src/TileProvider.hpp
@@ -0,0 +1,12 @@
+#include <QPixmap>
+#include <vector>
+
+class TileProvider {
+public: 
+    TileProvider(std::vector<std::vector<uint32_t>> sprites);
+    QPixmap get_tile(uint8_t id);
+    TileProvider static from_spritesheet(const std::string path);
+
+private:
+    std::vector<std::vector<uint32_t>> sprites;
+};
\ No newline at end of file
diff --git a/leveleditor/src/main.cpp b/leveleditor/src/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..fdad82e9177eeda6015f2bb3db527d4db4a66af9
--- /dev/null
+++ b/leveleditor/src/main.cpp
@@ -0,0 +1,12 @@
+#include <QApplication>
+#include "MainWindow.hpp"
+
+int main(int argc, char *argv[]) {
+    QApplication app(argc, argv);
+
+    MainWindow window;
+    window.resize(320, 320); // Adjust size as needed
+    window.show();
+
+    return app.exec();
+}
\ No newline at end of file