diff --git a/.vitepress/components/Mermaid.vue b/.vitepress/components/Mermaid.vue
index 3e2370ca..c7935618 100644
--- a/.vitepress/components/Mermaid.vue
+++ b/.vitepress/components/Mermaid.vue
@@ -72,5 +72,5 @@ const renderChart = async () => {
-
+
diff --git a/.vitepress/components/ApplicationNavbar.vue b/.vitepress/components/Navbar.vue
similarity index 79%
rename from .vitepress/components/ApplicationNavbar.vue
rename to .vitepress/components/Navbar.vue
index 0dca868b..df60bba6 100644
--- a/.vitepress/components/ApplicationNavbar.vue
+++ b/.vitepress/components/Navbar.vue
@@ -1,15 +1,25 @@
-
+
diff --git a/.vitepress/theme/custom.css b/.vitepress/theme/custom.css
index f0998cc6..8d833342 100644
--- a/.vitepress/theme/custom.css
+++ b/.vitepress/theme/custom.css
@@ -29,8 +29,8 @@
}
img {
- -webkit-box-shadow: 2px 5px 15px 3px rgba(0, 0, 0, 0.74);
- box-shadow: 2px 5px 15px 3px rgba(0, 0, 0, 0.74);
+ -webkit-box-shadow: 2px 5px 15px 3px rgba(0, 0, 0, 0.74);
+ box-shadow: 2px 5px 15px 3px rgba(0, 0, 0, 0.74);
}
img[no-shadow] {
@@ -44,24 +44,35 @@ img[center] {
margin-right: auto;
}
+.mermaid-container {
+ display: flex;
+ justify-content: center;
+ margin: 1rem 0;
+}
+
+.mermaid-container svg {
+ max-width: 100%;
+ height: auto;
+}
+
h1 {
- color:#daa04a
+ color: #daa04a
}
h2 {
- color:#b49566
+ color: #b49566
}
h3 {
- color:#a38e7f;
+ color: #a38e7f;
}
h4 {
- color:#b67474;
+ color: #b67474;
}
/* Hide default nav items since we're rendering custom nav via Layout slot */
-.VPNavBar .content > nav:not(.custom-nav-links) {
+.VPNavBar .content>nav:not(.custom-nav-links) {
display: none;
}
@@ -75,14 +86,16 @@ h4 {
/* Media query for mobile view */
@media (max-width: 600px) {
.videos {
- grid-template-columns: 1fr; /* Single column layout */
+ grid-template-columns: 1fr;
+ /* Single column layout */
}
}
.video {
min-height: 6rem;
position: relative;
- padding-bottom: 56.25%; /* 16:9 aspect ratio */
+ padding-bottom: 56.25%;
+ /* 16:9 aspect ratio */
height: 0;
overflow: hidden;
}
diff --git a/package.json b/package.json
index 3ad29354..062e28b3 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
"@caido/eslint-config": "0.6.0",
"@eslint/markdown": "7.2.0",
"eslint": "9.28.0",
- "mermaid": "11.9.0",
+ "mermaid": "11.12.2",
"typescript": "5.6.2",
"vitepress": "1.6.3",
"vitepress-plugin-llms": "1.5.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 6ec0759d..f146cc18 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -28,8 +28,8 @@ importers:
specifier: 9.28.0
version: 9.28.0
mermaid:
- specifier: 11.9.0
- version: 11.9.0
+ specifier: 11.12.2
+ version: 11.12.2
typescript:
specifier: 5.6.2
version: 5.6.2
@@ -121,11 +121,8 @@ packages:
resolution: {integrity: sha512-4No9iTjr1GZ0JWsFbQJj9aZBnmKyY1sTxOoEud9+SGe3U6iAulF0A0lI4cWi/F/Gcfg8V3jkaddcqSQKDnE45w==}
engines: {node: '>= 14.0.0'}
- '@antfu/install-pkg@1.0.0':
- resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==}
-
- '@antfu/utils@8.1.1':
- resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
+ '@antfu/install-pkg@1.1.0':
+ resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
'@babel/helper-string-parser@7.24.1':
resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==}
@@ -446,8 +443,8 @@ packages:
'@iconify/types@2.0.0':
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
- '@iconify/utils@2.3.0':
- resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
+ '@iconify/utils@3.1.0':
+ resolution: {integrity: sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==}
'@isaacs/balanced-match@4.0.1':
resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
@@ -466,8 +463,8 @@ packages:
'@mdn/browser-compat-data@5.7.6':
resolution: {integrity: sha512-7xdrMX0Wk7grrTZQwAoy1GkvPMFoizStUoL+VmtUkAxegbCCec+3FKwOM6yc/uGU5+BEczQHXAlWiqvM8JeENg==}
- '@mermaid-js/parser@0.6.2':
- resolution: {integrity: sha512-+PO02uGF6L6Cs0Bw8RpGhikVvMWEysfAyl27qTlroUB8jSWr1lL0Sf6zi78ZxlSnmgSY2AMMKVgghnN9jTtwkQ==}
+ '@mermaid-js/parser@0.6.3':
+ resolution: {integrity: sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -969,11 +966,6 @@ packages:
engines: {node: '>=0.4.0'}
hasBin: true
- acorn@8.14.1:
- resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
@@ -1146,9 +1138,6 @@ packages:
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
- confbox@0.2.1:
- resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==}
-
copy-anything@4.0.5:
resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
engines: {node: '>=18'}
@@ -1327,8 +1316,8 @@ packages:
resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
engines: {node: '>=12'}
- dagre-d3-es@7.0.11:
- resolution: {integrity: sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==}
+ dagre-d3-es@7.0.13:
+ resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==}
data-view-buffer@1.0.2:
resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
@@ -1342,8 +1331,8 @@ packages:
resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
engines: {node: '>= 0.4'}
- dayjs@1.11.13:
- resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==}
+ dayjs@1.11.19:
+ resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==}
debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
@@ -1619,9 +1608,6 @@ packages:
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
engines: {node: '>=0.10.0'}
- exsolve@1.0.4:
- resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
-
extend-shallow@2.0.1:
resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
engines: {node: '>=0.10.0'}
@@ -1982,9 +1968,6 @@ packages:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
- kolorist@1.8.0:
- resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
-
langium@3.3.1:
resolution: {integrity: sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==}
engines: {node: '>=16.0.0'}
@@ -1999,10 +1982,6 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
- local-pkg@1.1.1:
- resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
- engines: {node: '>=14'}
-
locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
engines: {node: '>=10'}
@@ -2038,8 +2017,8 @@ packages:
resolution: {integrity: sha512-MqIQVVkz+uGEHi3TsHx/czcxxCbRIL7sv5K5DnYw/tI+apY54IbPefV/cmgxp6LoJSEx/TqcHdLs/298afG5QQ==}
engines: {node: '>=6'}
- marked@16.1.1:
- resolution: {integrity: sha512-ij/2lXfCRT71L6u0M29tJPhP0bM5shLL3u5BePhFwPELj2blMJ6GDtD7PfJhRLhJ/c2UwrK17ySVcDzy2YHjHQ==}
+ marked@16.4.2:
+ resolution: {integrity: sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==}
engines: {node: '>= 20'}
hasBin: true
@@ -2090,8 +2069,8 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
- mermaid@11.9.0:
- resolution: {integrity: sha512-YdPXn9slEwO0omQfQIsW6vS84weVQftIyyTGAZCwM//MGhPzL1+l6vO6bkf0wnP4tHigH1alZ5Ooy3HXI2gOag==}
+ mermaid@11.12.2:
+ resolution: {integrity: sha512-n34QPDPEKmaeCG4WDMGy0OT6PSyxKCfy2pJgShP+Qow2KLrvWjclwbc3yXfSIf4BanqWEhQEpngWwNp/XhZt6w==}
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
@@ -2208,8 +2187,8 @@ packages:
mitt@3.0.1:
resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
- mlly@1.7.4:
- resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
ms@2.1.3:
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
@@ -2276,8 +2255,8 @@ packages:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
engines: {node: '>=10'}
- package-manager-detector@0.2.11:
- resolution: {integrity: sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==}
+ package-manager-detector@1.6.0:
+ resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
parent-module@1.0.1:
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
@@ -2320,9 +2299,6 @@ packages:
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
- pkg-types@2.1.0:
- resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==}
-
points-on-curve@0.2.0:
resolution: {integrity: sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==}
@@ -2368,9 +2344,6 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- quansync@0.2.8:
- resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==}
-
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -2596,8 +2569,9 @@ packages:
resolution: {integrity: sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==}
engines: {node: '>=6'}
- tinyexec@0.3.2:
- resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+ tinyexec@1.0.2:
+ resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
+ engines: {node: '>=18'}
to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
@@ -2668,8 +2642,8 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
- ufo@1.5.4:
- resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
+ ufo@1.6.3:
+ resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
unbox-primitive@1.1.0:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
@@ -2972,12 +2946,10 @@ snapshots:
dependencies:
'@algolia/client-common': 5.46.3
- '@antfu/install-pkg@1.0.0':
+ '@antfu/install-pkg@1.1.0':
dependencies:
- package-manager-detector: 0.2.11
- tinyexec: 0.3.2
-
- '@antfu/utils@8.1.1': {}
+ package-manager-detector: 1.6.0
+ tinyexec: 1.0.2
'@babel/helper-string-parser@7.24.1': {}
@@ -3243,18 +3215,11 @@ snapshots:
'@iconify/types@2.0.0': {}
- '@iconify/utils@2.3.0':
+ '@iconify/utils@3.1.0':
dependencies:
- '@antfu/install-pkg': 1.0.0
- '@antfu/utils': 8.1.1
+ '@antfu/install-pkg': 1.1.0
'@iconify/types': 2.0.0
- debug: 4.4.0
- globals: 15.15.0
- kolorist: 1.8.0
- local-pkg: 1.1.1
- mlly: 1.7.4
- transitivePeerDependencies:
- - supports-color
+ mlly: 1.8.0
'@isaacs/balanced-match@4.0.1': {}
@@ -3268,7 +3233,7 @@ snapshots:
'@mdn/browser-compat-data@5.7.6': {}
- '@mermaid-js/parser@0.6.2':
+ '@mermaid-js/parser@0.6.3':
dependencies:
langium: 3.3.1
@@ -3804,8 +3769,6 @@ snapshots:
acorn@8.12.1: {}
- acorn@8.14.1: {}
-
acorn@8.15.0: {}
ajv@6.12.6:
@@ -4007,8 +3970,6 @@ snapshots:
confbox@0.1.8: {}
- confbox@0.2.1: {}
-
copy-anything@4.0.5:
dependencies:
is-what: 5.5.0
@@ -4212,7 +4173,7 @@ snapshots:
d3-transition: 3.0.1(d3-selection@3.0.0)
d3-zoom: 3.0.0
- dagre-d3-es@7.0.11:
+ dagre-d3-es@7.0.13:
dependencies:
d3: 7.9.0
lodash-es: 4.17.21
@@ -4235,7 +4196,7 @@ snapshots:
es-errors: 1.3.0
is-data-view: 1.0.2
- dayjs@1.11.13: {}
+ dayjs@1.11.19: {}
debug@3.2.7:
dependencies:
@@ -4616,8 +4577,6 @@ snapshots:
esutils@2.0.3: {}
- exsolve@1.0.4: {}
-
extend-shallow@2.0.1:
dependencies:
is-extendable: 0.1.1
@@ -4979,8 +4938,6 @@ snapshots:
kind-of@6.0.3: {}
- kolorist@1.8.0: {}
-
langium@3.3.1:
dependencies:
chevrotain: 11.0.3
@@ -4998,12 +4955,6 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
- local-pkg@1.1.1:
- dependencies:
- mlly: 1.7.4
- pkg-types: 2.1.0
- quansync: 0.2.8
-
locate-path@6.0.0:
dependencies:
p-locate: 5.0.0
@@ -5032,7 +4983,7 @@ snapshots:
markdown-title@1.0.2: {}
- marked@16.1.1: {}
+ marked@16.4.2: {}
math-intrinsics@1.1.0: {}
@@ -5163,30 +5114,28 @@ snapshots:
merge2@1.4.1: {}
- mermaid@11.9.0:
+ mermaid@11.12.2:
dependencies:
'@braintree/sanitize-url': 7.1.1
- '@iconify/utils': 2.3.0
- '@mermaid-js/parser': 0.6.2
+ '@iconify/utils': 3.1.0
+ '@mermaid-js/parser': 0.6.3
'@types/d3': 7.4.3
cytoscape: 3.31.1
cytoscape-cose-bilkent: 4.1.0(cytoscape@3.31.1)
cytoscape-fcose: 2.2.0(cytoscape@3.31.1)
d3: 7.9.0
d3-sankey: 0.12.3
- dagre-d3-es: 7.0.11
- dayjs: 1.11.13
+ dagre-d3-es: 7.0.13
+ dayjs: 1.11.19
dompurify: 3.2.6
katex: 0.16.22
khroma: 2.1.0
lodash-es: 4.17.21
- marked: 16.1.1
+ marked: 16.4.2
roughjs: 4.6.6
stylis: 4.3.6
ts-dedent: 2.2.0
uuid: 11.1.0
- transitivePeerDependencies:
- - supports-color
micromark-core-commonmark@2.0.3:
dependencies:
@@ -5413,12 +5362,12 @@ snapshots:
mitt@3.0.1: {}
- mlly@1.7.4:
+ mlly@1.8.0:
dependencies:
- acorn: 8.14.1
+ acorn: 8.15.0
pathe: 2.0.3
pkg-types: 1.3.1
- ufo: 1.5.4
+ ufo: 1.6.3
ms@2.1.3: {}
@@ -5496,9 +5445,7 @@ snapshots:
dependencies:
p-limit: 3.1.0
- package-manager-detector@0.2.11:
- dependencies:
- quansync: 0.2.8
+ package-manager-detector@1.6.0: {}
parent-module@1.0.1:
dependencies:
@@ -5527,13 +5474,7 @@ snapshots:
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
- mlly: 1.7.4
- pathe: 2.0.3
-
- pkg-types@2.1.0:
- dependencies:
- confbox: 0.2.1
- exsolve: 1.0.4
+ mlly: 1.8.0
pathe: 2.0.3
points-on-curve@0.2.0: {}
@@ -5576,8 +5517,6 @@ snapshots:
punycode@2.3.1: {}
- quansync@0.2.8: {}
-
queue-microtask@1.2.3: {}
reflect.getprototypeof@1.0.10:
@@ -5884,7 +5823,7 @@ snapshots:
tapable@2.2.3: {}
- tinyexec@0.3.2: {}
+ tinyexec@1.0.2: {}
to-fast-properties@2.0.0: {}
@@ -5964,7 +5903,7 @@ snapshots:
typescript@5.6.2: {}
- ufo@1.5.4: {}
+ ufo@1.6.3: {}
unbox-primitive@1.1.0:
dependencies:
diff --git a/src/_images/instance_claim.png b/src/_images/instance_claim.png
new file mode 100644
index 00000000..2f68f2fd
Binary files /dev/null and b/src/_images/instance_claim.png differ
diff --git a/src/_images/new_local_instance.png b/src/_images/new_local_instance.png
new file mode 100644
index 00000000..523d01dd
Binary files /dev/null and b/src/_images/new_local_instance.png differ
diff --git a/src/_images/new_registration_key.png b/src/_images/new_registration_key.png
new file mode 100644
index 00000000..b4cae0f5
Binary files /dev/null and b/src/_images/new_registration_key.png differ
diff --git a/src/_images/registration_key_table.png b/src/_images/registration_key_table.png
new file mode 100644
index 00000000..d65d8b2d
Binary files /dev/null and b/src/_images/registration_key_table.png differ
diff --git a/src/_images/workspace_objects.png b/src/_images/workspace_objects.png
new file mode 100644
index 00000000..7a9709d0
Binary files /dev/null and b/src/_images/workspace_objects.png differ
diff --git a/src/app/concepts/cli_vs_desktop.md b/src/app/concepts/cli_vs_desktop.md
index 33a89f69..757a1a2f 100644
--- a/src/app/concepts/cli_vs_desktop.md
+++ b/src/app/concepts/cli_vs_desktop.md
@@ -36,7 +36,7 @@ In addition to the installed webview, you can still access the GUI from the brow
::: info
Although either installation provides the same functionality, the desktop application has some slight advantages over the standalone Caido CLI:
-- It provides centralized management for multiple [instances](/app/concepts/instances.md).
+- It provides centralized management for multiple [instances](/app/concepts/instance.md).
- It includes [browser pre-configurations](/app/guides/preconfigured_browser.md).
- It can be used in environments without internet access.
:::
diff --git a/src/app/concepts/cloud.md b/src/app/concepts/cloud.md
index d7ceb158..b8cfd50f 100644
--- a/src/app/concepts/cloud.md
+++ b/src/app/concepts/cloud.md
@@ -4,7 +4,7 @@ description: "Understand the core concepts behind Caido Cloud services including
# Caido Cloud
-Caido Cloud is comprised of your account dashboard (_accessible at [https://dashboard.caido.io](https://dashboard.caido.io)_) and an API that handles [instance](/app/concepts/instances.md) registration and authentication.
+Caido Cloud is comprised of your account dashboard (_accessible at [https://dashboard.caido.io](https://dashboard.caido.io)_) and an API that handles [instance](/app/concepts/instance.md) registration and authentication.
::: info
For transparency, the OpenAPI specification of the cloud API can be viewed at [https://github.com/caido/caido/blob/main/api/cloud_instance.yaml](https://github.com/caido/caido/blob/main/api/cloud_instance.yaml).
diff --git a/src/app/concepts/graphql.md b/src/app/concepts/graphql.md
index e4712d47..4ec5e89e 100644
--- a/src/app/concepts/graphql.md
+++ b/src/app/concepts/graphql.md
@@ -43,7 +43,7 @@ JSON.parse(localStorage.CAIDO_AUTHENTICATION).accessToken;
```
::: warning NOTE
-The access token expires after a period of 7 days. If your project requires consistent authentication, utilize the [OAuth](/app/concepts/instances.md#authentication) `startAuthenticationFlow` mutation and `createdAuthenticationToken` subscription.
+The access token expires after a period of 7 days. If your project requires consistent authentication, utilize the [OAuth](/app/concepts/instance_authentication) `startAuthenticationFlow` mutation and `createdAuthenticationToken` subscription.
:::
## Example: Using Replay
@@ -280,7 +280,7 @@ date: Tue, 13 Jan 2026 16:15:03 GMT
{"data":{"startReplayTask":{"task":{"__typename":"ReplayTask","id":"2","createdAt":"2026-01-13T16:15:03.7537873Z","replayEntry":{"__typename":"ReplayEntry","id":"2","error":null,"createdAt":1768320903752,"connection":{"__typename":"ConnectionInfo","host":"example.com","port":80,"isTLS":false,"SNI":"example.com"},"session":{"id":"1"},"request":null,"raw":"R0VUIC8gSFRUUC8xLjENCkhvc3Q6IGV4YW1wbGUuY29tDQpDb25uZWN0aW9uOiBjbG9zZQ0KDQo=","settings":{"placeholders":[]}}},"error":null}}}
```
-A [traffic splitting algorithm](/app/concepts/traffic_splitting.md) recognizes that the request is intended for a destination server. The Caido CLI (_server component_) forwards the request and handles the corresponding response.
+A [traffic splitting algorithm](/app/concepts/traffic_splitting.md) recognizes that the request is intended for a destination server. The Caido CLI (_server component_) forwards the request and handles the corresponding response.
```http
GET / HTTP/1.1
diff --git a/src/app/concepts/instance.md b/src/app/concepts/instance.md
new file mode 100644
index 00000000..ac7918eb
--- /dev/null
+++ b/src/app/concepts/instance.md
@@ -0,0 +1,37 @@
+---
+description: "Understand the core concepts behind Caido instances - the client/server architecture, local vs remote instances"
+---
+
+# Instance
+
+An Instance of Caido is effectively a directory on disk that contains the settings, projects, secrets, plugins, etc. that are created by Caido at runtime.
+
+This abstraction allows you to manage multiple, separate instances of Caido on a single device.
+
+## Local vs Remote
+
+### Local Instances
+
+A local instance runs on the same computer as you. Effectively, we will manage the [caido cli](./cli_vs_desktop.md) for you in the background.
+
+Additional local instances can be created using either the standalone Caido CLI or desktop application by [changing the data storage location](/app/guides/data_location.md).
+
+
+
+### Remote Instances
+
+A remote instance runs on another computer that you can access over the network.
+
+Additional instances can also be created for remote installations of the Caido CLI via the launch window of the desktop application.
+
+
+
+## Client/server
+
+When you start a Caido instance, you effectively start a server on a given port.
+
+You can use either the Caido Desktop application or a browser to access that instance.
+
+This is why we refer Caido has being built using a client/server architecture.
+
+
diff --git a/src/app/concepts/instance_authentication.md b/src/app/concepts/instance_authentication.md
new file mode 100644
index 00000000..37b08c2d
--- /dev/null
+++ b/src/app/concepts/instance_authentication.md
@@ -0,0 +1,27 @@
+# Authentication
+
+Each instance requires access control to authenticate the Caido GUI (_client component_) to the Caido CLI (_server component_).
+
+::: danger
+Although the API is authenticated, the proxy traffic is currently unprotected. We **strongly** advise not to expose your Caido instances to the open internet.
+:::
+
+Authentication in Caido is based on [OAuth 2.0](https://www.rfc-editor.org/rfc/rfc6749) protocol.
+
+## User authentication
+
+Like we mentioned in [instance registration](./instance_registration.md), each Caido instance registers itself with our Cloud as an `OAuth 2.0 client`.
+
+When you click on `Login` on the instance, it performs a Device Authorization flow. Currently this flow requires a human approval via the website (we are working on removing this limitation).
+
+
+
+::: warning NOTE
+We do not make any guarantees on the lifetime of the tokens.
+Currently the access token is valid for 7 days and the refresh token is valid for 3 months.
+:::
+
+## Instance authentication
+
+Under the cover, the instance will also perform a Client Credentials flow to have a token to identify itself with the cloud.
+This allows the instance to retrieve metadata like the [Workspace](/dashboard/concepts/workspace) in which it lives.
diff --git a/src/app/concepts/instance_registration.md b/src/app/concepts/instance_registration.md
new file mode 100644
index 00000000..08846ce5
--- /dev/null
+++ b/src/app/concepts/instance_registration.md
@@ -0,0 +1,62 @@
+# Registration
+
+When an instance is started for the first time, it will register itself with the [Caido Cloud](./cloud.md) as an [OAuth 2.0 Client](./instance_authentication.md).
+At this stage the instance is considered "unclaimed", meaning that **anybody** with access to the instance can claim it for themselves or one of their Teams (in a [Workspace](/dashboard/concepts/workspace)).
+
+You can **only** log into an instance if it has been claimed.
+
+## Human claim
+
+On initial the login, if it the instance is "unclaimed", you can claim it.
+This is the same idea if you [reset the credentials](/app/troubleshooting/authentication.html#reset-the-instance-credentials) of your instance.
+
+You are prompted to choose a name and a [Workspace](/dashboard/concepts/workspace) in which the instance will live.
+Claiming an instance in a Team workspace will allow team members to access the instance.
+
+
+
+The flow usually looks like:
+
+```mermaid
+sequenceDiagram
+ autonumber
+ Instance->>Cloud: Registers itself
+ User->>Instance: Clicks on login
+ User->>Cloud: Claims instance
+ User->>Cloud: Approves login
+ Cloud->>Instance: Creates and Gives tokens
+ Instance->>User: Forwards tokens
+```
+
+:::warning
+Do **NOT** leave instances unclaimed, anybody can claim them and then access the machine on which Caido is installed
+:::
+
+## Machine claim
+
+
+This is feature is available starting with Caido v0.56.0 for Teams.
+
+
+For Teams, you can also automatically claim new instances using [Registration Keys](/dashboard/concepts/registration_key). This allows you to deploy a lot of instances in advance for testers (ahead of an engagement) or on demand (in CICD).
+
+This ensures that all the instances are safe even if no human is involved in the deployment.
+
+Currently you need to use the [caido cli](./cli_vs_desktop.md) to pass the Registration Key to the instance.
+You can use either the `--registration-key` flag or the environment variable `CAIDO_REGISTRATION_KEY`.
+
+The flow usually looks like:
+
+```mermaid
+sequenceDiagram
+ autonumber
+ Instance->>Cloud: Registers itself with Key
+ Cloud->>Cloud: Claims instance
+ Note over Instance,User: Time passes (SAFE)
+ User->>Instance: Clicks on login
+ User->>Cloud: Approves login
+ Cloud->>Instance: Creates and Gives tokens
+ Instance->>User: Forwards tokens
+```
+
+Check our guide on [how to create a registration key](/dashboard/guides/create_registration_key) to get started.
diff --git a/src/app/concepts/instances.md b/src/app/concepts/instances.md
deleted file mode 100644
index 7f11f7f2..00000000
--- a/src/app/concepts/instances.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-description: "Understand the core concepts behind Caido instances - the client/server architecture, local vs remote instances, and instance management."
----
-
-# Instances & Authentication
-
-An "instance" is a reference to the directory that stores the data generated by Caido's installation and usage.
-
-This abstraction allows you to manage multiple, separate installations of Caido on a single device.
-
-## Local Instances
-
-Additional local instances can be created using either the standalone Caido CLI or desktop application by [changing the data storage location](/app/guides/data_location.md).
-
-## Remote Instances
-
-Additional instances can also be created for remote installations of the Caido CLI via the launch window of the desktop application.
-
-
-
-## Authentication
-
-Each instance requires access control to authenticate the Caido GUI (_client component_) to the Caido CLI (_server component_), to ensure it is only accessible to you.
-
-::: danger
-Although the API is authenticated, the proxy traffic is currently unprotected. We **strongly** advise not to expose your Caido instances to the open internet.
-:::
-
-
-
-Authentication in Caido is based on [OAuth 2.0](https://www.rfc-editor.org/rfc/rfc6749). Every instance that is created [registers](https://www.rfc-editor.org/rfc/rfc7591.html) to our cloud service and obtains a client ID and secret. On initial login to the instance using your account credentials, you claim the instance's client ID.
-
-### Workspaces
-
-Once an instance has been registered and claimed, it is associated with your account workspace. Workspaces provide a central management location and facilitate collaboration between team members via the `Instances` interface of the [account dashboard](https://dashboard.caido.io/).
-
-### OAuth Grants Used by Caido
-
-- Client Credentials: This grant is used to obtain an access token that authenticates the instance with the cloud.
-- Device Authorization: This grant is used to obtain access and refresh tokens to authenticate users. Contrary to most other grants, this grant eliminates the browser redirect.
-- [Refresh Token](https://www.rfc-editor.org/rfc/rfc6749#section-1.5): This grant is used to refresh user access tokens without requiring re-authentication.
-
-::: warning NOTE
-At this moment, we do not make any guarantees on the lifetime of the tokens.
-:::
-
-
-
-### Secrets Storage
-
-- The **client secret** and **instance access token** are both encrypted and stored in the `secrets.db` database in the instance data directory on disk.
-- **User access and refresh tokens** are stored in the client's `local storage`. These tokens are never stored on the instance, but can be present in memory.
diff --git a/src/app/guides/logs_viewing.md b/src/app/guides/logs_viewing.md
index cf8a7881..6cbb83a1 100644
--- a/src/app/guides/logs_viewing.md
+++ b/src/app/guides/logs_viewing.md
@@ -4,7 +4,7 @@ description: "A step-by-step guide to viewing both the frontend and backend Caid
# Viewing Logs
-As Caido utilizes a [client/server architecture](/app/concepts/instances.md), both frontend and backend logs are produced.
+As Caido utilizes a [client/server architecture](/app/concepts/instance.md), both frontend and backend logs are produced.
::: danger
As log files can contain sensitive information, only send them in private conversations with a verified member of the Caido team. If you are contacting us on Discord, we will open a private channel before asking for logs.
diff --git a/src/app/quickstart/setup.md b/src/app/quickstart/setup.md
index cd9d32ac..26f39f50 100644
--- a/src/app/quickstart/setup.md
+++ b/src/app/quickstart/setup.md
@@ -7,7 +7,7 @@ description: "A step-by-step guide to initial setup for Caido including authenti
Once Caido has been launched:
1. **Click** on the `Start` button and log in with your account credentials or create an account.
-2. Once you are authenticated, name your [instance](/app/concepts/instances.md) and grant access to your account username, email address, and subscription.
+2. Once you are authenticated, name your [instance](/app/concepts/instance.md) and grant access to your account username, email address, and subscription.
::: info ADDITIONAL OPTIONS
`Enable the AI assistant feature`: Available to Individual and Team tier [subscriptions](https://caido.io/pricing).
diff --git a/src/app/troubleshooting/report_bug.md b/src/app/troubleshooting/report_bug.md
index cc0c4682..99c6d626 100644
--- a/src/app/troubleshooting/report_bug.md
+++ b/src/app/troubleshooting/report_bug.md
@@ -34,7 +34,7 @@ I am using:
## Log Files
-As Caido utilizes a [client/server architecture](/app/concepts/instances.md), both frontend and backend logs are produced.
+As Caido utilizes a [client/server architecture](/app/concepts/instance.md), both frontend and backend logs are produced.
::: danger
As log files can contain sensitive information, only send them in private conversations with a verified member of the Caido team. If you are contacting us on Discord, we will open a private channel before asking for logs.
diff --git a/src/dashboard/concepts/index.md b/src/dashboard/concepts/index.md
new file mode 100644
index 00000000..7aca0046
--- /dev/null
+++ b/src/dashboard/concepts/index.md
@@ -0,0 +1,7 @@
+---
+description: "Understand the core concepts of the Caido dashboard"
+---
+
+# Concepts
+
+The Concepts section explains the foundational ideas and principles in the Dashboard. It’s designed to help you understand what features are, why they exist, and how they fit into the broader ecosystem of Caido tooling.
diff --git a/src/dashboard/concepts/registration_key.md b/src/dashboard/concepts/registration_key.md
new file mode 100644
index 00000000..160faf8f
--- /dev/null
+++ b/src/dashboard/concepts/registration_key.md
@@ -0,0 +1,14 @@
+# Registration Key
+
+
+This is feature is available starting with Caido v0.56.0 for Teams.
+
+
+Registration Keys allow you to automatically claim new instances. This allows you to deploy instances safely without human intervention. For example, ahead of an engagement or on demand in CICD.
+
+Registration Keys are easy identifiable with the `ckey_` prefix. They can be single use or reusable, a single use key is automatically revoked on use.
+
+- Check our documentation on [instance registration](/app/concepts/instance_registration) to understand how they fit in that process.
+- Check our guide on [how to create a registration key](/dashboard/guides/create_registration_key) to get started.
+
+
diff --git a/src/dashboard/concepts/workspace.md b/src/dashboard/concepts/workspace.md
new file mode 100644
index 00000000..1a73bf87
--- /dev/null
+++ b/src/dashboard/concepts/workspace.md
@@ -0,0 +1,17 @@
+# Workspace
+
+Workspaces provide a central repository for various objects in the Caido ecosystem.
+Each User and Team gets a `Default` Workspace.
+
+It will eventually we possible to create more workspaces and assign access permissions to them.
+
+At the moment a Workspace can contain:
+
+- [Instances](/app/concepts/instance): An installation of Caido
+- [Registration Keys](./registration_key.md): Keys to automatically claim instances
+
+
+
+:::info
+The Workspace page in the application is **NOT** related to the concept of Dashboard Workspaces.
+:::
diff --git a/src/dashboard/guides/create_registration_key.md b/src/dashboard/guides/create_registration_key.md
new file mode 100644
index 00000000..13f42151
--- /dev/null
+++ b/src/dashboard/guides/create_registration_key.md
@@ -0,0 +1,21 @@
+---
+description: "Step-by-step instructions to create a registration key."
+---
+
+# Creating a Registration Key
+
+Registration keys are used to register instances automatically in a Team workspace.
+To learn more check our documentation on the [instance registration process](/app/concepts/instance_registration).
+
+
+
+To create a registration key, click on the Create Key button. Only admins are allowed to create keys.
+
+The options are:
+
+- `Description`: Describe the usage for the key
+- `Prefix`: The instance claimed using this key will have a name with this prefix, if not set the instance name will be purely random
+- `Expiration`: When will the key expire, we strongly recommend setting an expiration date
+- `Reusable`: Whether the key can be used to claim more than one instance. If not allowed, the key is revoked on first use.
+
+
diff --git a/src/dashboard/guides/index.md b/src/dashboard/guides/index.md
new file mode 100644
index 00000000..989d1067
--- /dev/null
+++ b/src/dashboard/guides/index.md
@@ -0,0 +1,7 @@
+---
+description: "Step-by-step guide to help you perform various operations in the dashboard"
+---
+
+# Guides
+
+The Guides sections is there to help you with step-by-step guides to perform administrative operations in the Dashboard.
diff --git a/src/dashboard/index.md b/src/dashboard/quickstart/index.md
similarity index 100%
rename from src/dashboard/index.md
rename to src/dashboard/quickstart/index.md
diff --git a/src/faq.md b/src/faq.md
index e2f7f73f..2150786d 100644
--- a/src/faq.md
+++ b/src/faq.md
@@ -6,7 +6,7 @@ description: "Frequently asked questions about Caido pricing, installation, data
## Is Caido free?
-Caido has a free `Basic` plan. We also offer a `Pro` plan which includes additional advanced features. By purchasing the `Pro` plan, you will be supporting the development and maintenance of the tool.
+Caido has a free `Basic` plan. We also offer an `Individual` plan which includes additional advanced features. By purchasing the `Individual` plan, you will be supporting the development and maintenance of the tool.
Additionally, we offer a `Team` plan for organizations that need premium support and/or custom feature implementation.
@@ -16,7 +16,7 @@ You can check our [website](https://caido.io) to stay informed about the new fea
## Is Caido open source?
-Caido is not currently open source, but we have plans to offer an API for [open source plugin development](https://developer.caido.io/). We also employ standard open formats whenever possible.
+Caido is not currently open source, but we have a rich ecosystem of [open source extensions](https://caido.io/plugins). We also employ standard open formats whenever possible.
## On how many devices can I install Caido?