diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8f90053164374ce92e16e123f07bcdcd3a8045bc..a760d0906d3fed719ed64ce1844bf424cf11b0b8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,13 +10,17 @@ stages:
 build:
   image: openjdk:11
   stage: build
+  before_script:
+    - apt-get update && apt-get -y install graphviz
   script:
     - "./gradlew relast"
     - "./gradlew assemble"
+    - "./gradlew generateGrammarDiagrams"
   artifacts:
     paths:
       - "src/gen/java"
       - "src/gen/jastadd"
+      - "src/gen/resources"
 
 test:
   image: openjdk:11
@@ -59,9 +63,6 @@ ragdoc_view:
     - OUTPUT_DIR=$(pwd -P)/pages/docs/ragdoc
     - cd /ragdoc-view/src/ && rm -rf data && ln -s $DATA_DIR
     - /ragdoc-view/build-view.sh --output-path=$OUTPUT_DIR
-  only:
-    - tests/openapi-generator
-    - main
   artifacts:
     paths:
       - "pages/docs/ragdoc"
@@ -75,10 +76,8 @@ pages:
   before_script:
     - pip install -r pages/requirements.txt
   script:
+    - cp -r src/gen/resources/diagrams/ pages/docs/diagrams
     - cd pages && mkdocs build
   artifacts:
     paths:
-      - public/
-  only:
-    - tests/openapi-generator
-    - main
+      - public/
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index 41d0e7658aebaa5e5d40c7a09c46781616ec9f1f..402130e84c5b7006d4852030bae3c198dfd575b4 100644
--- a/build.gradle
+++ b/build.gradle
@@ -19,9 +19,15 @@ repositories {
     }
 }
 
+configurations {
+    grammar2uml
+    relast
+}
+
 dependencies {
     implementation group: 'com.flipkart.zjsonpatch', name: 'zjsonpatch', version: "${json_patch_version}"
     implementation group: 'io.swagger.parser.v3', name: 'swagger-parser', version: "${swagger_parser_version}"
+    grammar2uml group: 'de.tudresden.inf.st', name: 'grammar2uml', version: "${grammar2uml_version}"
 
     testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "${junit_jupiter_version}"
     testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: "${junit_jupiter_version}"
@@ -86,6 +92,20 @@ def relastOutputFiles = [
         "src/gen/jastadd/OpenAPISpecification.ast",
         "src/gen/jastadd/OpenAPISpecification.jadd"
 ]
+def grammarDiagramFile = './src/gen/resources/diagrams/grammar/openapiRelast.png'
+
+
+task generateGrammarDiagrams(type: JavaExec) {
+    group = 'Documentation'
+    classpath = configurations.grammar2uml
+    main = 'de.tudresden.inf.st.jastadd.grammar2uml.compiler.Compiler'
+
+    args "--output=${grammarDiagramFile}", '--defaultFolders'
+    args relastInputFiles
+
+    inputs.files relastInputFiles
+    outputs.files file(grammarDiagramFile)
+}
 
 task relast(type: JavaExec) {
     classpath = files("libs/relast.jar")
@@ -163,3 +183,6 @@ jastadd {
         delete "src/gen-res"
     }
 }
+
+generateAst.dependsOn relast
+generateGrammarDiagrams.dependsOn generateAst
diff --git a/gradle.properties b/gradle.properties
index 7009aabd1bb194a1cc17038702cf1e62b5f8cb75..99c154b69102a4a8b2843c255511324e99e988d8 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -2,4 +2,5 @@ json_patch_version = 0.4.11
 swagger_parser_version = 2.0.30
 junit_jupiter_version = 5.7.0
 json_path_version = 2.6.0
-jastaddgradle_version = 1.13.3
\ No newline at end of file
+jastaddgradle_version = 1.13.3
+grammar2uml_version = 0.2.2-13
diff --git a/pages/docs/index.md b/pages/docs/index.md
index 9f7cda8ed5fcaff95eb3e5566a6609dc61696f6b..19e436a3fce9dd0313eeeaf341903c3093b4b2e6 100644
--- a/pages/docs/index.md
+++ b/pages/docs/index.md
@@ -1 +1,3 @@
-Index
\ No newline at end of file
+Index
+
+![](diagrams/grammar/uml.png)
\ No newline at end of file