diff --git a/bookmarks/templates/bookmarks/layout.html b/bookmarks/templates/bookmarks/layout.html
index 90fbb78..b5f67f1 100644
--- a/bookmarks/templates/bookmarks/layout.html
+++ b/bookmarks/templates/bookmarks/layout.html
@@ -8,6 +8,8 @@
+
+
diff --git a/bookmarks/tests/test_metadata_view.py b/bookmarks/tests/test_metadata_view.py
new file mode 100644
index 0000000..5272392
--- /dev/null
+++ b/bookmarks/tests/test_metadata_view.py
@@ -0,0 +1,33 @@
+from django.test import TestCase, override_settings
+
+
+class MetadataViewTestCase(TestCase):
+
+ def test_default_manifest(self):
+ response = self.client.get("/manifest.json")
+
+ self.assertEqual(response.status_code, 200)
+
+ response_body = response.json()
+ expected_body = {
+ "short_name": "linkding",
+ "start_url": "bookmarks",
+ "display": "standalone",
+ "scope": "/"
+ }
+ self.assertDictEqual(response_body, expected_body)
+
+ @override_settings(LD_CONTEXT_PATH="linkding/")
+ def test_manifest_respects_context_path(self):
+ response = self.client.get("/manifest.json")
+
+ self.assertEqual(response.status_code, 200)
+
+ response_body = response.json()
+ expected_body = {
+ "short_name": "linkding",
+ "start_url": "bookmarks",
+ "display": "standalone",
+ "scope": "/linkding/"
+ }
+ self.assertDictEqual(response_body, expected_body)
diff --git a/bookmarks/urls.py b/bookmarks/urls.py
index 1c2387d..834a2f4 100644
--- a/bookmarks/urls.py
+++ b/bookmarks/urls.py
@@ -32,5 +32,7 @@ urlpatterns = [
path('feeds//all', AllBookmarksFeed(), name='feeds.all'),
path('feeds//unread', UnreadBookmarksFeed(), name='feeds.unread'),
# Health check
- path('health', views.health, name='health')
+ path('health', views.health, name='health'),
+ # Manifest
+ path("manifest.json", views.manifest, name='manifest')
]
diff --git a/bookmarks/views/__init__.py b/bookmarks/views/__init__.py
index 948a4ad..894b61d 100644
--- a/bookmarks/views/__init__.py
+++ b/bookmarks/views/__init__.py
@@ -2,3 +2,4 @@ from .bookmarks import *
from .settings import *
from .toasts import *
from .health import health
+from .manifest import manifest
diff --git a/bookmarks/views/manifest.py b/bookmarks/views/manifest.py
new file mode 100644
index 0000000..07a3995
--- /dev/null
+++ b/bookmarks/views/manifest.py
@@ -0,0 +1,13 @@
+from django.http import JsonResponse
+from django.conf import settings
+
+
+def manifest(request):
+ response = {
+ "short_name": "linkding",
+ "start_url": "bookmarks",
+ "display": "standalone",
+ "scope": "/" + settings.LD_CONTEXT_PATH
+ }
+
+ return JsonResponse(response, status=200)