diff --git a/.gitignore b/.gitignore
index 293edcd..02a311e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,4 +4,4 @@ docs/
 tests/testing_tmp/
 tests/testing_bak/
 
-include/migrations/*.sql.h
+include/sql/*.h
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e5622c8..d2bddf2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,19 +20,21 @@ aux_source_directory(src/models MODELS_SRC)
 aux_source_directory(src/helpers HELPERS_SRC)
 aux_source_directory(src/handlers HANDLERS_SRC)
 aux_source_directory(src/endpoints ENDPOINTS_SRC)
+aux_source_directory(vendor VENDOR_SRC)
 
-add_dependencies(core migrations)
+add_dependencies(core sql)
 
 configure_file("core.ini" "core.ini" COPYONLY)
 configure_file("version.h.in" "version.h" @ONLY)
 
 
-target_sources(core PRIVATE ${SRC_DIR} ${HANDLERS_SRC} ${HELPERS_SRC} ${MODELS_SRC} ${ENDPOINTS_SRC})
+target_sources(core PRIVATE ${SRC_DIR} ${HANDLERS_SRC} ${HELPERS_SRC} ${MODELS_SRC} ${ENDPOINTS_SRC} ${VENDOR_SRC})
 target_include_directories(core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
+target_include_directories(core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/vendor)
 target_include_directories(core PRIVATE ${CMAKE_BINARY_DIR})
 
-add_custom_target(migrations
-    COMMAND ./compile_migrations.sh
+add_custom_target(sql
+    COMMAND ./compile_sql.sh
     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
 )
 
diff --git a/compile_migrations.sh b/compile_migrations.sh
deleted file mode 100755
index 7a0a1fe..0000000
--- a/compile_migrations.sh
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/env sh
-
-cd "$(dirname "$0")";
-
-migration_num=0;
-
-while [ -f ./sql/migration_$migration_num.sql ]
-do
-    if [ -f ./include/migrations/$migration_num.sql.h ]
-    then
-        if [ -z $(find ./sql/migration_$migration_num.sql -newer ./include/migrations/$migration_num.sql.h -print) ]
-        then
-            migration_num=$((migration_num+1))
-            continue
-        fi
-    fi
-    echo "Recompiling migration $migration_num"
-    xxd -i sql/migration_$migration_num.sql | sed 's/\([0-9a-f]\)$/\0, 0x00/' > ./include/migrations/$migration_num.sql.h
-    migration_num=$((migration_num+1))
-done
-
-cd $PWD;
diff --git a/compile_sql.sh b/compile_sql.sh
new file mode 100755
index 0000000..24625a5
--- /dev/null
+++ b/compile_sql.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env sh
+
+function to_header()
+{
+    if [ -f ./include/sql/$1.h ]
+    then
+        if [ -z $(find ./sql/$1.sql -newer ./include/sql/$1.h -print) ]
+        then
+            return
+        fi
+    fi
+    echo "Compiling $1"
+    xxd -i sql/$1.sql | sed 's/\([0-9a-f]\)$/\0, 0x00/' > ./include/sql/$1.h
+
+}
+
+cd "$(dirname "$0")";
+
+migration_num=0;
+
+while [ -f ./sql/migration_$migration_num.sql ]
+do
+    if [ -f ./include/migrations/$migration_num.sql.h ]
+    then
+        if [ -z $(find ./sql/migration_$migration_num.sql -newer ./include/sql/migration_$migration_num.h -print) ]
+        then
+            migration_num=$((migration_num+1))
+            continue
+        fi
+    fi
+    to_header "migration_$migration_num"
+    migration_num=$((migration_num+1))
+done
+
+to_header "cache"
+
+cd $PWD;
diff --git a/include/cache.h b/include/cache.h
new file mode 100644
index 0000000..3e1ca63
--- /dev/null
+++ b/include/cache.h
@@ -0,0 +1,11 @@
+#ifndef CORE_CACHE_H
+#define CORE_CACHE_H
+
+#include <sqlite3.h>
+
+extern sqlite3 *cache_database;
+
+void
+cache_init();
+
+#endif /* CORE_CACHE_H */
diff --git a/include/migrations/.gitkeep b/include/sql/.gitkeep
similarity index 100%
rename from include/migrations/.gitkeep
rename to include/sql/.gitkeep
diff --git a/sql/cache.sql b/sql/cache.sql
new file mode 100644
index 0000000..a8904b5
--- /dev/null
+++ b/sql/cache.sql
@@ -0,0 +1,5 @@
+CREATE TABLE `cache` (
+   `key` STRING PRIMARY KEY,
+   `value` TEXT NOT NULL,
+   `expiration` INT DEFAULT 0
+);
diff --git a/src/cache.c b/src/cache.c
new file mode 100644
index 0000000..e6c80d3
--- /dev/null
+++ b/src/cache.c
@@ -0,0 +1,17 @@
+#include <cache.h>
+#include <logger.h>
+
+
+sqlite3 *cache_database;
+
+void
+cache_init()
+{
+    int rc = sqlite3_open(":memory:", &cache_database);
+
+    if(rc)
+    {
+        LOGGER_CRIT("can't open cache database: %s\n", sqlite3_errmsg(cache_database));
+        return;
+    }
+}
diff --git a/src/command.c b/src/command.c
index bb9b3a5..141e5a6 100644
--- a/src/command.c
+++ b/src/command.c
@@ -2,8 +2,9 @@
 #include <unistd.h>
 #include <sys/socket.h>
 
-#include <command.h>
 #include <mpack.h>
+
+#include <command.h>
 #include <logger.h>
 #include <helpers.h>
 #include <enums.h>
diff --git a/src/database.c b/src/database.c
index 2429786..cb8baa7 100644
--- a/src/database.c
+++ b/src/database.c
@@ -4,7 +4,7 @@
 #include <logger.h>
 #include <database.h>
 
-#include <migrations/0.sql.h>
+#include <sql/migration_0.h>
 
 sqlite3 *global_database;
 
diff --git a/src/helpers/parse_cli.c b/src/helpers/parse_cli.c
index a65caed..f205541 100644
--- a/src/helpers/parse_cli.c
+++ b/src/helpers/parse_cli.c
@@ -3,6 +3,7 @@
 #include <stdio.h>
 
 #include <argparse.h>
+
 #include <config.h>
 #include <logger.h>
 #include <helpers.h>
diff --git a/src/main.c b/src/main.c
index 3ee3b8f..a618bc9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -5,6 +5,8 @@
 #include <syslog.h>
 
 #include <mongoose.h>
+#include <confini.h>
+
 #include <router.h>
 #include <logger.h>
 #include <config.h>
@@ -13,7 +15,6 @@
 #include <enums.h>
 #include <helpers.h>
 #include <status.h>
-#include <confini.h>
 #include <models/controller.h>
 
 static struct mg_mgr mgr;
diff --git a/src/argparse.c b/vendor/argparse.c
similarity index 100%
rename from src/argparse.c
rename to vendor/argparse.c
diff --git a/include/argparse.h b/vendor/argparse.h
similarity index 100%
rename from include/argparse.h
rename to vendor/argparse.h
diff --git a/src/cJSON.c b/vendor/cJSON.c
similarity index 100%
rename from src/cJSON.c
rename to vendor/cJSON.c
diff --git a/include/cJSON.h b/vendor/cJSON.h
similarity index 100%
rename from include/cJSON.h
rename to vendor/cJSON.h
diff --git a/src/confini.c b/vendor/confini.c
similarity index 100%
rename from src/confini.c
rename to vendor/confini.c
diff --git a/include/confini.h b/vendor/confini.h
similarity index 100%
rename from include/confini.h
rename to vendor/confini.h
diff --git a/src/mongoose.c b/vendor/mongoose.c
similarity index 100%
rename from src/mongoose.c
rename to vendor/mongoose.c
diff --git a/include/mongoose.h b/vendor/mongoose.h
similarity index 100%
rename from include/mongoose.h
rename to vendor/mongoose.h
diff --git a/src/mpack.c b/vendor/mpack.c
similarity index 100%
rename from src/mpack.c
rename to vendor/mpack.c
diff --git a/include/mpack.h b/vendor/mpack.h
similarity index 100%
rename from include/mpack.h
rename to vendor/mpack.h