diff --git a/packages/web-pkg/package.json b/packages/web-pkg/package.json
index 2dc1bf2e46b..172e28d83be 100644
--- a/packages/web-pkg/package.json
+++ b/packages/web-pkg/package.json
@@ -54,34 +54,35 @@
"@opencloud-eu/design-system": "workspace:^",
"@opencloud-eu/web-client": "workspace:^",
"@sentry/vue": "^10.46.0",
- "@tiptap/core": "^3.28.0",
- "@tiptap/extension-bubble-menu": "^3.29.2",
- "@tiptap/extension-collaboration": "^3.28.0",
- "@tiptap/extension-document": "^3.28.0",
- "@tiptap/extension-drag-handle": "^3.28.0",
- "@tiptap/extension-drag-handle-vue-3": "^3.28.0",
- "@tiptap/extension-file-handler": "^3.28.0",
- "@tiptap/extension-find-and-replace": "^3.29.2",
- "@tiptap/extension-hard-break": "^3.28.0",
- "@tiptap/extension-image": "^3.28.0",
- "@tiptap/extension-link": "^3.28.0",
- "@tiptap/extension-node-range": "^3.28.0",
- "@tiptap/extension-paragraph": "^3.28.0",
- "@tiptap/extension-placeholder": "^3.28.0",
- "@tiptap/extension-subscript": "^3.29.2",
- "@tiptap/extension-superscript": "^3.29.2",
- "@tiptap/extension-table": "^3.28.0",
- "@tiptap/extension-task-item": "^3.28.0",
- "@tiptap/extension-task-list": "^3.28.0",
- "@tiptap/extension-text": "^3.28.0",
- "@tiptap/extension-text-align": "^3.28.0",
- "@tiptap/extension-text-style": "^3.28.0",
- "@tiptap/extension-underline": "^3.28.0",
- "@tiptap/markdown": "^3.28.0",
- "@tiptap/pm": "^3.28.0",
- "@tiptap/starter-kit": "^3.28.0",
- "@tiptap/suggestion": "^3.28.0",
- "@tiptap/vue-3": "^3.28.0",
+ "@tiptap/core": "^3.30.2",
+ "@tiptap/extension-bubble-menu": "^3.30.2",
+ "@tiptap/extension-code-block-lowlight": "^3.30.2",
+ "@tiptap/extension-collaboration": "^3.30.2",
+ "@tiptap/extension-document": "^3.30.2",
+ "@tiptap/extension-drag-handle": "^3.30.2",
+ "@tiptap/extension-drag-handle-vue-3": "^3.30.2",
+ "@tiptap/extension-file-handler": "^3.30.2",
+ "@tiptap/extension-find-and-replace": "^3.30.2",
+ "@tiptap/extension-hard-break": "^3.30.2",
+ "@tiptap/extension-image": "^3.30.2",
+ "@tiptap/extension-link": "^3.30.2",
+ "@tiptap/extension-node-range": "^3.30.2",
+ "@tiptap/extension-paragraph": "^3.30.2",
+ "@tiptap/extension-placeholder": "^3.30.2",
+ "@tiptap/extension-subscript": "^3.30.2",
+ "@tiptap/extension-superscript": "^3.30.2",
+ "@tiptap/extension-table": "^3.30.2",
+ "@tiptap/extension-task-item": "^3.30.2",
+ "@tiptap/extension-task-list": "^3.30.2",
+ "@tiptap/extension-text": "^3.30.2",
+ "@tiptap/extension-text-align": "^3.30.2",
+ "@tiptap/extension-text-style": "^3.30.2",
+ "@tiptap/extension-underline": "^3.30.2",
+ "@tiptap/markdown": "^3.30.2",
+ "@tiptap/pm": "^3.30.2",
+ "@tiptap/starter-kit": "^3.30.2",
+ "@tiptap/suggestion": "^3.30.2",
+ "@tiptap/vue-3": "^3.30.2",
"@tiptap/y-tiptap": "^3.0.0",
"@uppy/core": "^5.2.0",
"@uppy/tus": "^5.1.1",
@@ -95,8 +96,10 @@
"dompurify": "^3.3.3",
"filesize": "^11.0.14",
"fuse.js": "^7.1.0",
+ "highlight.js": "^11.11.1",
"lodash-es": "^4.17.23",
"luxon": "^3.7.2",
+ "lowlight": "^3.3.0",
"mark.js": "^8.11.1",
"oidc-client-ts": "^3.5.0",
"p-queue": "^9.1.0",
diff --git a/packages/web-pkg/src/editor/components/CodeBlockComponent.vue b/packages/web-pkg/src/editor/components/CodeBlockComponent.vue
new file mode 100644
index 00000000000..56903517ed7
--- /dev/null
+++ b/packages/web-pkg/src/editor/components/CodeBlockComponent.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/web-pkg/src/editor/components/TextEditorContent.vue b/packages/web-pkg/src/editor/components/TextEditorContent.vue
index ddccba3291c..1f56e2d6955 100644
--- a/packages/web-pkg/src/editor/components/TextEditorContent.vue
+++ b/packages/web-pkg/src/editor/components/TextEditorContent.vue
@@ -46,14 +46,28 @@