diff --git a/client/pages/projects/_id.vue b/client/pages/projects/_id.vue
index 7597a41745063c6d3f64c001f8b98cb00778818f..e84c19ac74e800b59f2347440d77dc2d44afe01c 100644
--- a/client/pages/projects/_id.vue
+++ b/client/pages/projects/_id.vue
@@ -598,7 +598,7 @@ methods:{
             this.sharedUrl = "http://"+window.location.host + "/projects/" + this.project.id;
             console.log(this.project.id);
             this.status=result.status;
-            if(result.status.worktable ==="READY" && ! this.isready){
+            if(result.status.metadata ==="READY" && ! this.isready){
 
               await this.$axios.$get('/projects/'+this.project.id+"/gencov").then((async function (result2) {
                 this.gencov = result2;
diff --git a/jass/models/project.py b/jass/models/project.py
index 88bc7762d131f493a1cf2e947fed1789f8eb8469..c118a9bb0ff4ecd03b2e7bd5b17100994e7c5018 100644
--- a/jass/models/project.py
+++ b/jass/models/project.py
@@ -218,6 +218,12 @@ class Project(BaseModel, abc.ABC):
     def get_project_summary_statistics(self):
         return get_worktable_summary(self.get_worktable_path())
 
+    def get_metadata_file_path(self):
+        """
+        Get the path of the metadata json file
+        """
+        return os.path.join(self.get_folder_path(), "metadata.json")
+
     def get_project_nsnps(self):
         return get_inittable_meta(self.get_worktable_path())
 
@@ -270,6 +276,11 @@ class Project(BaseModel, abc.ABC):
             if filename.endswith(".png"):
                 os.remove(os.path.join(self.get_folder_path(), filename))
                 have_removed_file = True
+        try:
+            os.remove(self.get_metadata_file_path())
+            have_removed_file = True
+        except FileNotFoundError:
+            pass
         return have_removed_file
 
     @call_with_tb('global_manhattan')
@@ -296,6 +307,12 @@ class Project(BaseModel, abc.ABC):
     def create_csv_file(self):
         return create_genome_full_csv(self.get_worktable_path(), self.get_csv_path())
 
+    @call_with_tb('metadata')
+    def create_project_metadata_file(self):
+        with open(self.get_metadata_file_path(), 'w') as f:
+            f.write(json.dumps(self.get_project_nsnps()))
+        print("------ metadata -----")
+
 
 class GlobalProject(Project):
     @call_with_tb('worktable')
diff --git a/jass/server.py b/jass/server.py
index b1aa22e45405f7530ef80188e656461db7eb9167..b040ffd686296b4b7620682343702d37c4016ea2 100644
--- a/jass/server.py
+++ b/jass/server.py
@@ -106,7 +106,7 @@ def project_gencov_view(project_id: str):
 
 @app.get("/api/projects/{project_id}/metadata")
 def project_metadata(project_id: str):
-    return load_project(project_id=project_id).get_project_nsnps()
+    return FileResponse(load_project(project_id=project_id).get_metadata_file_path())
 
 
 @app.get("/api/projects/{project_id}/globalmanhattan")
diff --git a/jass/tasks.py b/jass/tasks.py
index 90e8f769d680ec5d1715e324500dde227bb63bf3..41e2a7a66338aa286d5dc5c789223180e82dcf60 100644
--- a/jass/tasks.py
+++ b/jass/tasks.py
@@ -79,6 +79,12 @@ def create_project_csv_file(project_id):
     return project.create_csv_file()
 
 
+@celery.task
+def create_project_metadata_file(project_id):
+    project = GlobalProject.load(project_id)
+    return project.create_project_metadata_file()
+
+
 @celery.task
 def dummy_task():
     print("This task to nothing, but help the chain to have a valid status")
@@ -124,6 +130,9 @@ def run_project_analysis_if_needed(project):
     if project.get_csv_path() and not os.path.exists(project.get_csv_path()):
         post_worktable_tasks.append(create_project_csv_file.si(project.id))
 
+    if project.get_metadata_file_path() and not os.path.exists(project.get_metadata_file_path()):
+        post_worktable_tasks.append(create_project_metadata_file.si(project.id))
+
     if len(tasks) + len(post_worktable_tasks) == 0:
         return
     main_wf = chain(