diff --git a/src/main.rs b/src/main.rs
index c00c4570..f03959f5 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -64,6 +64,7 @@ fn main() {
             routes::instance::shared_inbox,
             routes::instance::nodeinfo,
             routes::instance::about,
+            routes::instance::web_manifest,
 
             routes::likes::create,
             routes::likes::create_auth,
diff --git a/src/routes/instance.rs b/src/routes/instance.rs
index 159fc6cd..2dc4a0c2 100644
--- a/src/routes/instance.rs
+++ b/src/routes/instance.rs
@@ -154,3 +154,17 @@ fn about(user: Option<User>, conn: DbConn) -> Template {
         "n_instances": Instance::count(&*conn) - 1
     }))
 }
+
+#[get("/manifest.json")]
+fn web_manifest(conn: DbConn) -> Json<serde_json::Value> {
+    let instance = Instance::get_local(&*conn);
+    Json(json!({
+        "name": &instance.name,
+        "description": &instance.short_description,
+        "start_url": String::from("/"),
+        "scope": String::from("/"),
+        "display": String::from("standalone"),
+        "background_color": String::from("#f4f4f4"),
+        "theme_color": String::from("#7765e3")
+    }))
+}
diff --git a/templates/base.html.tera b/templates/base.html.tera
index 6825e736..7051a74e 100644
--- a/templates/base.html.tera
+++ b/templates/base.html.tera
@@ -6,6 +6,7 @@
         <meta name="viewport" content="width=device-width, initial-scale=1" />
         <link rel="stylesheet" href="/static/css/main.css" />
         <link rel="stylesheet" href="/static/css/feather.css" />
+        <link rel="manifest" href="/manifest.json" />
     </head>
     <body>
         <header>