diff --git a/backend/areas/apps/models.py b/backend/areas/apps/models.py
index 73fd15504b59b73df5681773d33e0bd2e63b7822..e7898a14c1c67f40ff2d27176c7f7c30c861d653 100644
--- a/backend/areas/apps/models.py
+++ b/backend/areas/apps/models.py
@@ -165,7 +165,7 @@ class App(db.Model):
 
         FIXME: This should probably become a database field.
         """
-        if self.slug in ['nextcloud', 'wordpress', 'wekan', 'zulip']:
+        if self.slug in ['nextcloud', 'wordpress', 'wekan', 'zulip', 'hedgedoc']:
             return 'stackspin-apps'
         return 'stackspin'
 
diff --git a/backend/areas/apps/templates/stackspin-hedgedoc-variables.yaml.jinja b/backend/areas/apps/templates/stackspin-hedgedoc-variables.yaml.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..e0d339621b60c815d04003a1fe8780507e0fae57
--- /dev/null
+++ b/backend/areas/apps/templates/stackspin-hedgedoc-variables.yaml.jinja
@@ -0,0 +1,7 @@
+apiVersion: v1
+kind: Secret
+metadata:
+  name: stackspin-hedgedoc-variables
+data:
+  hedgedoc_mariadb_password: "{{ 32 | generate_password | b64encode }}"
+  hedgedoc_mariadb_root_password: "{{ 32 | generate_password | b64encode }}"
diff --git a/deployment/helmchart/Chart.yaml b/deployment/helmchart/Chart.yaml
index c32b4ac2d2292c7941a5d0e924ad770dd2b6b4bb..62fef710abc91f367d240266818e2ccff64d4c55 100644
--- a/deployment/helmchart/Chart.yaml
+++ b/deployment/helmchart/Chart.yaml
@@ -23,4 +23,4 @@ name: stackspin-dashboard
 sources:
   - https://open.greenhost.net/stackspin/dashboard/
   - https://open.greenhost.net/stackspin/dashboard-backend/
-version: 1.6.2
+version: 1.6.3-hedgedoc
diff --git a/deployment/helmchart/templates/job-initialize-user.yaml b/deployment/helmchart/templates/job-initialize-user.yaml
index 4cf77350d3cbfbd3b2defeb9e3f732397d8ab95b..a1d6d1d95edeebb0c1a9762ed94daf6c2cb66b96 100644
--- a/deployment/helmchart/templates/job-initialize-user.yaml
+++ b/deployment/helmchart/templates/job-initialize-user.yaml
@@ -56,5 +56,6 @@ spec:
             flask cli user setrole $SETUP_EMAIL wordpress admin;
             flask cli user setrole $SETUP_EMAIL wekan admin;
             flask cli user setrole $SETUP_EMAIL zulip admin;
+            flask cli user setrole $SETUP_EMAIL hedgedoc admin;
             {{- end }}
 
diff --git a/frontend/public/assets/hedgedoc.svg b/frontend/public/assets/hedgedoc.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e561ed32ce807fbf12f014d9d9c5d86a32a30975
--- /dev/null
+++ b/frontend/public/assets/hedgedoc.svg
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="100%" height="100%" viewBox="0 0 1772 1772" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
+    <g>
+        <path d="M1553.66,961.083L1628.91,885.825L1553.66,810.579L1610.27,720.483L1520.17,663.867L1555.32,563.421L1454.88,528.279L1466.79,422.533L1361.05,410.621L1349.13,304.871L1243.39,316.783L1208.24,216.338L1107.81,251.483L1051.18,161.383L961.073,218L885.831,142.754L810.589,218.004L720.485,161.392L663.873,251.488L563.431,216.338L528.289,316.779L422.539,304.863L410.627,410.604L304.885,422.517L316.802,528.258L216.348,563.408L251.493,663.846L161.393,720.458L218.014,810.575L142.756,885.825L218.006,961.083L161.393,1051.19L251.493,1107.8L216.348,1208.24L316.798,1243.39L304.885,1349.12L410.627,1361.04L422.539,1466.78L528.289,1454.87L563.431,1555.3L663.868,1520.17L720.485,1610.27L810.581,1553.65L885.831,1628.2L961.081,1553.67L1051.18,1610.28L1107.79,1520.17L1208.24,1555.32L1243.38,1454.88L1349.13,1466.79L1361.04,1361.04L1466.79,1349.13L1454.87,1243.39L1555.32,1208.24L1520.17,1107.79L1610.27,1051.18L1553.66,961.083Z" style="fill:rgb(181,31,8);fill-rule:nonzero;"/>
+        <path d="M1401.3,1004.78C1401.3,859.343 1283.4,741.439 1137.96,741.439C1065.72,741.439 1000.28,770.551 952.708,817.664L952.675,817.63L885.579,884.73L830.717,829.868C782.45,774.801 711.646,739.989 632.675,739.989C487.233,739.989 369.333,857.893 369.333,1003.33C369.333,1079.33 401.563,1147.76 453.054,1195.82L885.833,1628.37L1309.05,1204.88C1361.93,1155.11 1401.3,1084.88 1401.3,1004.78" style="fill:rgb(252,202,140);fill-rule:nonzero;"/>
+        <path d="M885.579,884.73L830.717,829.868C782.45,774.801 711.646,739.989 632.675,739.989C487.233,739.989 369.333,857.893 369.333,1003.33C369.333,1079.33 401.563,1147.76 453.054,1195.82L885.833,1628.37" style="fill:url(#_Linear1);fill-rule:nonzero;"/>
+    </g>
+    <path d="M885.833,1628.37L885.579,884.73" style="fill:none;"/>
+    <g>
+        <path d="M961.011,1553.59C941.732,1534.24 915.094,1522.28 885.686,1522.28C856.269,1522.28 829.64,1534.24 810.357,1553.59C810.665,1594.93 844.265,1628.35 885.682,1628.35C927.098,1628.35 960.702,1594.92 961.011,1553.59" style="fill:rgb(1,0,7);fill-rule:nonzero;"/>
+        <path d="M797.707,1098.22C797.707,1130.02 771.94,1155.79 740.136,1155.79C708.349,1155.79 682.578,1130.02 682.578,1098.22C682.578,1066.42 708.349,1040.65 740.136,1040.65C771.94,1040.65 797.707,1066.42 797.707,1098.22" style="fill:rgb(1,0,7);fill-rule:nonzero;"/>
+        <path d="M777.962,1089.59C777.962,1098.41 770.816,1105.53 762.012,1105.53C753.204,1105.53 746.054,1098.41 746.054,1089.59C746.054,1080.78 753.204,1073.63 762.012,1073.63C770.816,1073.63 777.962,1080.78 777.962,1089.59" style="fill:rgb(255,255,250);fill-rule:nonzero;"/>
+        <path d="M1089.65,1098.22C1089.65,1130.02 1063.88,1155.79 1032.08,1155.79C1000.29,1155.79 974.513,1130.02 974.513,1098.22C974.513,1066.42 1000.29,1040.65 1032.08,1040.65C1063.88,1040.65 1089.65,1066.42 1089.65,1098.22" style="fill:rgb(1,0,7);fill-rule:nonzero;"/>
+        <path d="M1069.9,1089.59C1069.9,1098.41 1062.75,1105.53 1053.95,1105.53C1045.14,1105.53 1037.99,1098.41 1037.99,1089.59C1037.99,1080.78 1045.14,1073.63 1053.95,1073.63C1062.75,1073.63 1069.9,1080.78 1069.9,1089.59" style="fill:rgb(255,255,250);fill-rule:nonzero;"/>
+    </g>
+    <defs>
+        <linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(200,-420,420,200,660,1340)"><stop offset="0" style="stop-color:rgb(252,202,140);stop-opacity:1"/><stop offset="1" style="stop-color:rgb(220,160,85);stop-opacity:1"/></linearGradient>
+    </defs>
+</svg>
diff --git a/frontend/src/components/UserModal/consts.ts b/frontend/src/components/UserModal/consts.ts
index 95cbbf0812a22ca98c2b1b1230a16b51c4426845..ebf5a1f93be1338ba981d95c5b8f29fd41e28eb7 100644
--- a/frontend/src/components/UserModal/consts.ts
+++ b/frontend/src/components/UserModal/consts.ts
@@ -1,6 +1,12 @@
 import { UserRole } from 'src/services/users';
 
 export const appAccessList = [
+  {
+    name: 'hedgedoc',
+    image: '/assets/hedgedoc.svg',
+    label: 'HedgeDoc',
+    documentationUrl: 'https://docs.hedgedoc.org/',
+  },
   {
     name: 'wekan',
     image: '/assets/wekan.svg',
@@ -47,6 +53,10 @@ export const initialAppRoles = [
     name: 'dashboard',
     role: UserRole.User,
   },
+  {
+    name: 'hedgedoc',
+    role: UserRole.User,
+  },
   {
     name: 'wekan',
     role: UserRole.User,