diff --git a/doc/Guide.md b/doc/Guide.md
index 1d4f67d28daa70393796449c711459958ff1aa65..db4f3663db94034e04a5d769f56c4e198b84373a 100644
--- a/doc/Guide.md
+++ b/doc/Guide.md
@@ -68,6 +68,14 @@ buffer::ptr use_buffer_on_heap() {
 
 ### lava app
 
+```
+--clean, -c
+```
+
+* clean preferences folder
+
+<br />
+
 ```
 --v_sync, -vs {0|1}
 ```
diff --git a/liblava/app/app.cpp b/liblava/app/app.cpp
index adab17e6190aefef63af47c3e6e4a1a4ae0515f1..6853ecce43915429853177e980ec6b46722345d1 100644
--- a/liblava/app/app.cpp
+++ b/liblava/app/app.cpp
@@ -90,9 +90,12 @@ namespace lava {
 
         file_system::instance().mount_res();
 
+        auto& cmd_line = get_cmd_line();
+        if (cmd_line[{ "-c", "--clean" }])
+            file_system::instance().clean_pref_dir();
+
         handle_config();
 
-        auto& cmd_line = get_cmd_line();
         cmd_line({ "-vs", "--v_sync" }) >> config.v_sync;
         cmd_line({ "-pd", "--physical_device" }) >> config.physical_device;
 
diff --git a/liblava/file/file_system.cpp b/liblava/file/file_system.cpp
index e92bfd11ee31a2f6da6b3404bc4ea4411bff97c5..866ad6af7b3c900ed18ea888f0741c83c9056310 100644
--- a/liblava/file/file_system.cpp
+++ b/liblava/file/file_system.cpp
@@ -127,4 +127,8 @@ namespace lava {
         return fs::exists(data_path);
     }
 
+    void file_system::clean_pref_dir() {
+        fs::remove_all(get_pref_dir());
+    }
+
 } // namespace lava
diff --git a/liblava/file/file_system.hpp b/liblava/file/file_system.hpp
index ce83f3ed2c300346ca58ad2457d51ebe6d7fce46..a81f5403e9adc7036a7a29a7804fcceb113f2515 100644
--- a/liblava/file/file_system.hpp
+++ b/liblava/file/file_system.hpp
@@ -35,6 +35,7 @@ namespace lava {
 
         void mount_res();
         bool create_data_folder();
+        void clean_pref_dir();
 
         name get_org() const {
             return org;