diff --git a/src/world/entity/entity.h b/src/world/entity/entity.h
new file mode 100644
index 00000000..43ebc5fb
--- /dev/null
+++ b/src/world/entity/entity.h
@@ -0,0 +1,46 @@
+// Copyright (c) 2021 Dominic Masters
+// 
+// This software is released under the MIT License.
+// https://opensource.org/licenses/MIT
+
+#pragma once
+#include <stdint.h>
+#include <string.h>
+#include <malloc.h>
+#include "../../input/input.h"
+#include "../../display/primitive.h"
+#include "../../display/shader.h"
+#include "../../display/camera.h"
+#define ENTITY_COUNT_MAX 32
+
+#define ENTITY_TYPE_NULL 0
+#define ENTITY_TYPE_PLAYER 1
+
+/** ID used to identify an entity's type */
+typedef uint8_t entityid_t;
+
+typedef struct entitysystem_t entitysystem_t;
+
+/** Entity Callbacks */
+typedef struct entitycallbacks_t {
+  void (*dispose)(entitysystem_t *, int32_t);
+  void (*render)(entitysystem_t *, int32_t, shader_t *, camera_t *, input_t *);
+} entitycallbacks_t;
+
+typedef struct {
+  float x, y, z;
+} entitypos_t;
+
+/** Entity System */
+typedef struct entitysystem_t {
+  entityid_t entities[ENTITY_COUNT_MAX];
+  entitycallbacks_t callbacks[ENTITY_COUNT_MAX];
+  entitypos_t positions[ENTITY_COUNT_MAX]
+  primitive_t *primitives[ENTITY_COUNT_MAX];
+} entitysystem_t;
+
+void entitySystemInit(entitysystem_t *entitySystem);
+void entitySystemUpdate(entitysystem_t *entitySystem,
+  shader_t *shader,  camera_t *camera,
+  input_t *input
+);
\ No newline at end of file