@eventcatalog/core 4.10.13 → 4.10.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/dist/analytics/analytics.cjs +1 -1
  2. package/dist/analytics/analytics.js +2 -2
  3. package/dist/analytics/log-build.cjs +1 -1
  4. package/dist/analytics/log-build.js +3 -3
  5. package/dist/{chunk-SSSN5FXC.js → chunk-7LWOCX4R.js} +1 -1
  6. package/dist/{chunk-IIECZFXN.js → chunk-A4JRWRCV.js} +1 -1
  7. package/dist/{chunk-JHUICVBT.js → chunk-HBVTU6ZP.js} +1 -1
  8. package/dist/{chunk-PADMH2RJ.js → chunk-I6HUOX4R.js} +1 -1
  9. package/dist/{chunk-34RMFKFB.js → chunk-Q2ATWE7N.js} +1 -1
  10. package/dist/constants.cjs +1 -1
  11. package/dist/constants.js +1 -1
  12. package/dist/docs/api/02-config.md +60 -6
  13. package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/02-configuration.md +18 -11
  14. package/dist/docs/development/authentication/providers/03-setting-up-github.md +29 -0
  15. package/dist/docs/development/bring-your-own-documentation/custom-pages/02-adding-custom-docs.md +2 -2
  16. package/dist/docs/development/bring-your-own-documentation/custom-pages/03-components.md +17 -0
  17. package/dist/docs/development/components/07-resource-references.md +7 -1
  18. package/dist/docs/development/components/components/05-architecture-graph.md +65 -0
  19. package/dist/docs/development/components/components/{05-attachments.md → 06-attachments.md} +1 -1
  20. package/dist/docs/development/components/components/{06-channel-information.md → 07-channel-information.md} +1 -1
  21. package/dist/docs/development/components/components/{07-custom-properties.md → 08-custom-properties.md} +1 -1
  22. package/dist/docs/development/components/components/{08-design.md → 09-design.md} +1 -1
  23. package/dist/docs/development/components/components/{09-entitymap.md → 10-entitymap.md} +1 -1
  24. package/dist/docs/development/components/components/{10-flow.md → 11-flow.md} +1 -1
  25. package/dist/docs/development/components/components/{11-link.md → 12-link.md} +1 -1
  26. package/dist/docs/development/components/components/{12-mermaid-file-loader.md → 13-mermaid-file-loader.md} +13 -1
  27. package/dist/docs/development/components/components/{13-message-table.md → 14-message-table.md} +1 -1
  28. package/dist/docs/development/components/components/{14-nodegraph.md → 15-nodegraph.md} +1 -1
  29. package/dist/docs/development/components/components/{15-openapi.md → 16-openapi.md} +1 -1
  30. package/dist/docs/development/components/components/{16-prompt.md → 17-prompt.md} +1 -1
  31. package/dist/docs/development/components/components/{17-remote-schema.md → 18-remote-schema.md} +1 -1
  32. package/dist/docs/development/components/components/{18-resource-group-table.md → 19-resource-group-table.md} +1 -1
  33. package/dist/docs/development/components/components/{19-resource-link.md → 20-resource-link.md} +1 -1
  34. package/dist/docs/development/components/components/{20-schema.md → 21-schema.md} +1 -1
  35. package/dist/docs/development/components/components/{21-schema-viewer.md → 22-schema-viewer.md} +1 -1
  36. package/dist/docs/development/components/components/{22-steps.md → 23-steps.md} +1 -1
  37. package/dist/docs/development/components/components/{23-tabs.md → 24-tabs.md} +1 -1
  38. package/dist/docs/development/components/components/{24-tiles.md → 25-tiles.md} +1 -1
  39. package/dist/docs/development/components/components/{25-visibility.md → 26-visibility.md} +1 -1
  40. package/dist/docs/development/components/diagram-syntax/06-mermaid.md +45 -6
  41. package/dist/docs/development/customization/04-documentation-sidebar.md +3 -3
  42. package/dist/docs/development/customization/05-resource-sidebar.md +235 -0
  43. package/dist/docs/development/customization/09-embed-eventcatalog.md +179 -0
  44. package/dist/docs/development/customization/_category_.json +1 -1
  45. package/dist/docs/development/deployment/build-and-deploy.md +4 -0
  46. package/dist/docs/development/deployment/hosting-options.md +1 -1
  47. package/dist/docs/development/deployment/link-validation.md +105 -0
  48. package/dist/docs/development/developer-tools/eventcatalog-linter/00-overview.md +76 -0
  49. package/dist/docs/development/developer-tools/eventcatalog-linter/01-setup.md +144 -0
  50. package/dist/docs/development/developer-tools/eventcatalog-linter/_category_.json +10 -0
  51. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/01-configure-rules.md +130 -0
  52. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/02-run-in-ci.md +93 -0
  53. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/03-use-custom-frontmatter.md +81 -0
  54. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/04-reference-external-catalogs.md +51 -0
  55. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/05-fix-common-problems.md +120 -0
  56. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/_category_.json +12 -0
  57. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/01-cli.md +109 -0
  58. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/02-configuration.md +120 -0
  59. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/03-rules.md +287 -0
  60. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/04-versions.md +77 -0
  61. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/05-supported-resources.md +75 -0
  62. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/_category_.json +12 -0
  63. package/dist/docs/development/guides/97-architecture-graph.md +78 -0
  64. package/dist/docs/development/guides/domains/02-create-domain.md +1 -1
  65. package/dist/docs/development/guides/domains/03-ownership-and-language/02-adding-ubiquitous-language.md +29 -0
  66. package/dist/docs/development/guides/domains/09-reference.md +10 -0
  67. package/dist/docs/development/guides/resources/messages/04-message-channels/02-adding-channels.md +2 -2
  68. package/dist/docs/development/guides/resources/messages/04-message-channels/04-adding-messages-to-services.md +8 -0
  69. package/dist/docs/development/guides/resources/schemas/03-add-specifications-to-services/01-add-openapi-specifications.md +2 -2
  70. package/dist/docs/development/guides/resources/schemas/03-add-specifications-to-services/02-add-asyncapi-specifications.md +3 -3
  71. package/dist/docs/development/guides/systems/05-system-context-maps.md +2 -0
  72. package/dist/docs/development/license-keys/license-validation.md +7 -3
  73. package/dist/docs/development/license-keys/overview.md +7 -3
  74. package/dist/docs/development/upgrading/upgrading.md +3 -3
  75. package/dist/docs/development/upgrading/v2.md +3 -3
  76. package/dist/docs/federation/00-overview.md +158 -0
  77. package/dist/docs/federation/01-first-federation.md +199 -0
  78. package/dist/docs/federation/_category_.json +12 -0
  79. package/dist/docs/federation/explanation/_category_.json +12 -0
  80. package/dist/docs/federation/explanation/how-it-works.md +129 -0
  81. package/dist/docs/federation/explanation/lockfile-and-cache.md +134 -0
  82. package/dist/docs/federation/explanation/mvp-status-and-feedback.md +86 -0
  83. package/dist/docs/federation/explanation/ownership-and-references.md +134 -0
  84. package/dist/docs/federation/how-to/_category_.json +12 -0
  85. package/dist/docs/federation/how-to/configure-github-sources.md +156 -0
  86. package/dist/docs/federation/how-to/configure-validation-rules.md +127 -0
  87. package/dist/docs/federation/how-to/run-in-ci.md +138 -0
  88. package/dist/docs/federation/how-to/share-assets-and-components.md +125 -0
  89. package/dist/docs/federation/how-to/use-local-sources.md +138 -0
  90. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/00-introduction.md +11 -2
  91. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/01-installation.md +11 -3
  92. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/02-plugin-configuration.md +11 -2
  93. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/03-examples.md +11 -1
  94. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/04-configuration.md +11 -1
  95. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/05-setup-team-catalog.md +11 -2
  96. package/dist/docs/federation/legacy-federation/_category_.json +12 -0
  97. package/dist/docs/federation/reference/_category_.json +12 -0
  98. package/dist/docs/federation/reference/cli.md +122 -0
  99. package/dist/docs/federation/reference/configuration.md +192 -0
  100. package/dist/docs/federation/reference/diagnostic-rules.md +173 -0
  101. package/dist/docs/federation/reference/generated-output.md +118 -0
  102. package/dist/docs/federation/reference/supported-content.md +86 -0
  103. package/dist/docs/federation/reference/troubleshooting.md +208 -0
  104. package/dist/docs/plugins/01-intro.md +3 -3
  105. package/dist/docs/plugins/03-all-plugins.md +2 -2
  106. package/dist/docs/plugins/asyncapi/00-intro.md +4 -4
  107. package/dist/docs/plugins/asyncapi/02-plugin-configuration.md +4 -4
  108. package/dist/docs/plugins/backstage/00-overview.md +53 -0
  109. package/dist/docs/plugins/backstage/01-get-started.md +95 -0
  110. package/dist/docs/plugins/backstage/02-embed-entity-tabs.md +109 -0
  111. package/dist/docs/plugins/backstage/03-add-overview-cards.md +79 -0
  112. package/dist/docs/plugins/backstage/04-control-theme-and-size.md +54 -0
  113. package/dist/docs/plugins/backstage/05-migrate-to-annotations.md +49 -0
  114. package/dist/docs/plugins/backstage/06-configuration.md +85 -0
  115. package/dist/docs/plugins/backstage/07-components.md +129 -0
  116. package/dist/docs/plugins/backstage/08-how-embeds-work.md +52 -0
  117. package/dist/docs/plugins/backstage/_category_.json +4 -3
  118. package/dist/docs/plugins/eventbridge/00-intro.md +5 -5
  119. package/dist/docs/plugins/eventbridge/03-api.md +3 -3
  120. package/dist/docs/plugins/graphql/00-intro.md +2 -2
  121. package/dist/docs/plugins/graphql/02-plugin-configuration.md +2 -2
  122. package/dist/docs/plugins/hookdeck/01-intro.md +1 -1
  123. package/dist/docs/plugins/openapi/00-intro.md +1 -1
  124. package/dist/eventcatalog.cjs +1 -1
  125. package/dist/eventcatalog.js +5 -5
  126. package/dist/generate.cjs +1 -1
  127. package/dist/generate.js +3 -3
  128. package/dist/utils/cli-logger.cjs +1 -1
  129. package/dist/utils/cli-logger.js +2 -2
  130. package/eventcatalog/src/components/SchemaExplorer/AvroSchemaViewer.tsx +21 -19
  131. package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.test.tsx +114 -0
  132. package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.tsx +107 -86
  133. package/eventcatalog/src/components/SchemaExplorer/ProtobufSchemaViewer.test.tsx +91 -0
  134. package/eventcatalog/src/components/SchemaExplorer/ProtobufSchemaViewer.tsx +115 -33
  135. package/eventcatalog/src/components/SchemaExplorer/SchemaViewerHover.test.tsx +33 -0
  136. package/eventcatalog/src/components/SchemaExplorer/protobuf-validation.test.ts +84 -0
  137. package/eventcatalog/src/components/SchemaExplorer/protobuf-validation.ts +149 -0
  138. package/eventcatalog/src/utils/collections/glob-loader.ts +2 -2
  139. package/eventcatalog/src/utils/protobuf-schema.ts +211 -16
  140. package/package.json +8 -8
  141. package/dist/docs/cli/channels.md +0 -180
  142. package/dist/docs/cli/commands.md +0 -183
  143. package/dist/docs/cli/custom-docs.md +0 -78
  144. package/dist/docs/cli/data-products.md +0 -177
  145. package/dist/docs/cli/data-stores.md +0 -166
  146. package/dist/docs/cli/diagrams.md +0 -147
  147. package/dist/docs/cli/domains.md +0 -280
  148. package/dist/docs/cli/entities.md +0 -138
  149. package/dist/docs/cli/events.md +0 -186
  150. package/dist/docs/cli/export.md +0 -27
  151. package/dist/docs/cli/governance.md +0 -24
  152. package/dist/docs/cli/messages.md +0 -69
  153. package/dist/docs/cli/queries.md +0 -183
  154. package/dist/docs/cli/services.md +0 -266
  155. package/dist/docs/cli/snapshots.md +0 -44
  156. package/dist/docs/cli/teams.md +0 -75
  157. package/dist/docs/cli/users.md +0 -75
  158. package/dist/docs/cli/utilities.md +0 -43
  159. package/dist/docs/development/developer-tools/eventcatalog-linter.md +0 -732
  160. package/dist/docs/plugins/backstage/00-intro.md +0 -67
  161. package/dist/docs/plugins/backstage/01-installation.md +0 -242
  162. package/dist/docs/plugins/backstage/02-api.md +0 -51
  163. package/dist/docs/plugins/backstage/03-examples.md +0 -12
  164. package/dist/docs/plugins/eventcatalog-federation/_category_.json +0 -11
@@ -29,7 +29,7 @@ If you have large diagrams that fail to render, increase the `maxTextSize` confi
29
29
 
30
30
  ### Using the `mermaid` code block in any markdown file.
31
31
 
32
- To use mermaid you need to use the `mermaid` code block in any markdown file.
32
+ To use mermaid you need to use the `mermaid` code block in any markdown file. You can pass `placement` and `actions` on the code fence to configure the [interactive controls](#control-options).
33
33
 
34
34
  #### Example
35
35
 
@@ -74,6 +74,9 @@ Add your .mmd or .mermaid file to your folder (e.g `/events/MyEvent/mermaid.mmd`
74
74
 
75
75
  <!-- Using the .mermaid file extension -->
76
76
  <MermaidFileLoader file="my-second-mermaid-file.mermaid" />
77
+
78
+ <!-- Optional: configure interactive controls -->
79
+ <MermaidFileLoader file="mermaid.mmd" placement="top-left" actions={false} />
77
80
  ```
78
81
 
79
82
  This example will load a mermaid file (.mmd or .mermaid) into your EventCatalog page.
@@ -180,22 +183,58 @@ All Mermaid diagrams include interactive controls for better viewing and explora
180
183
 
181
184
  ![Example output of mermaid](../img/interactive.png)
182
185
 
186
+ Pan, zoom, reset, fullscreen, and copy controls appear on hover. On touch devices the controls stay visible.
187
+
183
188
  ### Zoom and pan
184
189
 
185
- Click and drag to pan around the diagram, or use the zoom controls in the bottom-left corner to zoom in and out. Double-click the diagram to zoom in quickly.
190
+ Click and drag to pan around the diagram, or use the pan and zoom buttons to move around. Double-click the diagram to zoom in quickly. Use reset to fit the diagram back into view.
186
191
 
187
- ### Presentation mode
192
+ ### Fullscreen
188
193
 
189
- Click the presentation button in the top-left corner to view the diagram in fullscreen. In presentation mode, mouse wheel zooming is enabled for precise control.
194
+ Click the fullscreen button to open the diagram in a modal. In fullscreen you can drag, scroll, or pinch to zoom.
190
195
 
191
- Press `Escape` to exit presentation mode.
196
+ Keyboard shortcuts in fullscreen:
197
+ - Arrow keys to pan
198
+ - `+` / `-` to zoom
199
+ - `0` to reset
200
+ - `Escape` to close
192
201
 
193
202
  ### Copy diagram code
194
203
 
195
- Click the copy button in the top-right corner to copy the diagram code to your clipboard.
204
+ Click the copy button to copy the diagram code to your clipboard.
196
205
 
197
206
  Useful for copying diagrams into LLM prompts.
198
207
 
208
+ ### Control options
209
+
210
+ <AddedIn version="4.10.6" />
211
+
212
+ Code blocks and [`<MermaidFileLoader />`](/docs/development/components/components/mermaid-file-loader) accept `placement` and `actions` to configure the controls.
213
+
214
+ | Name | Type | Default | Description |
215
+ | ---- | ---- | ------- | ----------- |
216
+ | `placement` (optional) | `'top-left' \| 'top-right' \| 'bottom-left' \| 'bottom-right'` | `'top-right'` | Corner for the interactive controls. |
217
+ | `actions` (optional) | `boolean` | shown when the diagram is taller than 120px | `true` always shows the controls. `false` hides them. |
218
+
219
+ #### Code block
220
+
221
+ Pass the options on the `mermaid` code fence. `placement` accepts double or single quotes. `actions` accepts `{true}` / `{false}` or `true` / `false`.
222
+
223
+ ```markdown
224
+ ```mermaid placement="top-left" actions={false}
225
+ sequenceDiagram
226
+ participant Customer
227
+ participant OrdersService
228
+ Customer->>OrdersService: Place Order
229
+ ```_
230
+ ```
231
+
232
+ #### MermaidFileLoader
233
+
234
+ ```md
235
+ <MermaidFileLoader file="mermaid.mmd" placement="top-left" actions={false} />
236
+ ```
237
+
199
238
  ## Export NodeGraphs as Mermaid
200
239
 
201
240
  <AddedIn version="3.9.0" />
@@ -9,7 +9,7 @@ description: Pick and customize the documentation sidebar.
9
9
 
10
10
  import AddedIn from '@site/src/components/MDX/AddedIn';
11
11
 
12
- The documentation sidebar is a [context aware sidebar](#what-is-context-aware-sidebar) that is shown on the `/docs/` pages.
12
+ The documentation sidebar is a [context aware sidebar](#what-is-a-context-aware-sidebar) that is shown on the `/docs/` pages.
13
13
 
14
14
  Clicking on any resource in the sidebar will show you related information to that selected resource ([see demo](https://demo.eventcatalog.dev/)).
15
15
 
@@ -56,9 +56,9 @@ You can specify the following options in the `navigation.pages` property:
56
56
 
57
57
  - [Top level options](#top-level-options)
58
58
  - Useful if you want to show the top-level resources in your catalog in the sidebar. For example high level domains and let your users drill down.
59
- - [List all resources (by type)](#list-all-resources-type)
59
+ - [List all resources (by type)](#list-all-resources-by-type)
60
60
  - Useful if you want to show all resources of a specific type in the sidebar. For example all domains, services, messages, etc.
61
- - [Pick specific resources to show](#pick-specific-resources-to-show)
61
+ - [Pick specific resources to show](#chose-which-resources-to-show)
62
62
  - Useful if you want to show a specific resource or a group of resources in the sidebar. For example a specific domain, service, message, etc.
63
63
  - [Custom groups and links](#custom-groups-and-links)
64
64
  - Useful if you want to create custom groups and links to external pages in the sidebar. For example a group of resources, or a link to an external page.
@@ -0,0 +1,235 @@
1
+ ---
2
+ sidebar_position: 2.5
3
+ keywords:
4
+ - EventCatalog resource sidebar
5
+ - customize sidebar
6
+ - sidebar.json
7
+ sidebar_label: Resource sidebar
8
+ title: Resource sidebar
9
+ description: Define your own sidebar for any resource with a sidebar.json file.
10
+ ---
11
+
12
+ import AddedIn from '@site/src/components/MDX/AddedIn';
13
+
14
+ <AddedIn version="4.10.0" />
15
+
16
+ Every resource in EventCatalog (domains, services, messages, flows, and more) gets a generated sidebar showing its quick reference, architecture, related resources and owners.
17
+
18
+ ![The resource sidebar shown on a system page](./img/resource-sidebar.png)
19
+
20
+ By default, EventCatalog will generate a sidebar for your resources, but sometimes you may want to customize what is shown here — for example runbooks, guides, external links, or your own grouping of events and services.
21
+
22
+ To do this, add a `sidebar.json` file next to the resource's `index.mdx`. This file becomes the sidebar for that resource.
23
+
24
+ ```
25
+ domains/
26
+ Payments/
27
+ index.mdx
28
+ sidebar.json <-- your sidebar for the Payments domain
29
+ ```
30
+
31
+ :::info The file is the sidebar
32
+ When a `sidebar.json` is present it fully replaces the generated sidebar — what you list is what renders, in the order you list it. Nothing is merged in, and anything you don't list isn't shown. Remove the file to get the default sidebar back.
33
+ :::
34
+
35
+ ## Which resources support it?
36
+
37
+ All of them. A `sidebar.json` can sit next to the `index.mdx` of any **domain, system, service, agent, event, command, query, flow, container (data store), entity, data product or ADR**.
38
+
39
+ Versioned copies (`versioned/0.0.1/index.mdx`) inherit the resource folder's `sidebar.json` automatically, unless the versioned folder contains its own.
40
+
41
+ ## Quick start
42
+
43
+ A sidebar is a list of **sections**. A section is either a predefined `$token` (a section EventCatalog generates and keeps up to date for you) or a group you define yourself:
44
+
45
+ ```json title="domains/Payments/sidebar.json"
46
+ {
47
+ "sections": [
48
+ // A predefined section, relabelled from "Quick Reference" to "Overview"
49
+ { "section": "$quick-reference", "title": "Overview" },
50
+ // Your own group — any Lucide icon name works
51
+ {
52
+ "title": "Runbooks",
53
+ "icon": "Siren",
54
+ "pages": [
55
+ // Links to this domain's runbooks/failed-captures documentation page
56
+ "[[doc|runbooks/failed-captures]]",
57
+ // A plain link — external links open in a new tab
58
+ { "title": "Health dashboard", "href": "https://grafana.acme.dev/d/payments" }
59
+ ]
60
+ },
61
+ // Predefined sections, rendered exactly as the default sidebar would
62
+ "$architecture",
63
+ "$services",
64
+ "$owners"
65
+ ]
66
+ }
67
+ ```
68
+
69
+ This renders: an **Overview** section (the generated Quick Reference, relabelled), your own **Runbooks** group, then the generated **Architecture**, **Services** and **Owners** sections.
70
+
71
+ ## Sections
72
+
73
+ Each entry in `sections` is one of three shapes:
74
+
75
+ | Shape | Example | Meaning |
76
+ |-------|---------|---------|
77
+ | Token | `"$architecture"` | A predefined section, rendered exactly as the default sidebar would — and kept up to date as your catalog changes |
78
+ | Adjusted token | `{ "section": "$owners", "title": "Team" }` | A predefined section with a new `title`, `icon` or `collapsed` state |
79
+ | Custom group | `{ "title": "Runbooks", "icon": "Siren", "pages": [...] }` | A group you define. `icon` is any [Lucide](https://lucide.dev) icon name |
80
+
81
+ A predefined section with nothing behind it (for example `$entities` on a domain with no entities) renders nothing — you can safely list sections that only sometimes have content.
82
+
83
+ ## Pages
84
+
85
+ Inside a custom group, each entry in `pages` is one of:
86
+
87
+ | Entry | Example | Renders |
88
+ |-------|---------|---------|
89
+ | Section token | `"$inbound-messages"` | The **items** of a predefined section, spliced into your group — this is how you extend a generated section with your own pages |
90
+ | Resource reference | `"[[service\|payment-api]]"` | The resource, with its own expandable nested sidebar, at its latest version. Messages can pin a version: `"[[event\|payment-captured@1.0.0]]"` — other types always reference the latest |
91
+ | Documentation reference | `"[[doc\|guides/onboarding]]"` | One of this resource's [documentation pages](/docs/development/bring-your-own-documentation/resource-docs/adding-resource-docs), addressed as `<type>/<id>` |
92
+ | Specification reference | `"[[spec\|openapi.yml]]"` | A specification page, with the OpenAPI/AsyncAPI/GraphQL logo and the spec's name |
93
+ | Schema reference | `"[[schema\|payment-captured]]"` | A message's schema page |
94
+ | Link | `{ "title": "Runbook", "href": "https://..." }` | A plain link. External links (any protocol) open in a new tab and show an external-link icon |
95
+ | Nested group | `{ "title": "Internal", "collapsed": true, "pages": [...] }` | A subsection. Groups nest to any depth |
96
+
97
+ Resource references accept any resource type: `domain`, `system`, `service`, `agent`, `event`, `command`, `query`, `flow`, `container`, `entity`, `channel`, `data-product`, `adr`, `diagram`, `team`, `user`.
98
+
99
+ ### Specification and schema references
100
+
101
+ Specifications belong to a resource, so a spec reference names the file — and optionally the resource that owns it:
102
+
103
+ ```json
104
+ "[[spec|openapi.yml]]" // this resource's own spec
105
+ "[[spec|payment-api/openapi.yml]]" // another resource's spec, by id
106
+ "[[spec|service/payment-api/openapi.yml]]" // type-qualified
107
+ ```
108
+
109
+ Specifications always come from the owner's latest version.
110
+
111
+ Schema references point at a message's schema page:
112
+
113
+ ```json
114
+ "[[schema|payment-captured]]" // latest version
115
+ "[[schema|event/payment-captured@1.0.0]]" // type-qualified and pinned to a version
116
+ ```
117
+
118
+ ### Extending a generated section
119
+
120
+ Because a `$token` inside `pages` splices in that section's items, extending a generated section is just wrapping it in your own group — placement is list order:
121
+
122
+ ```json
123
+ {
124
+ "title": "Quick Reference",
125
+ "icon": "BookOpen",
126
+ "pages": [
127
+ // Splices in the generated Quick Reference items (Overview, Changelog, ...)
128
+ "$quick-reference",
129
+ // ...followed by your own pages
130
+ "[[doc|guides/onboarding]]",
131
+ { "title": "Team Slack", "href": "https://acme.slack.com/archives/payments" }
132
+ ]
133
+ }
134
+ ```
135
+
136
+ ### Link placeholders
137
+
138
+ Internal links can use `{collection}`, `{id}` and `{version}` placeholders for the resource the sidebar belongs to, so the same file works across versions:
139
+
140
+ ```json
141
+ // On the Payments domain v1.0.0 this renders as
142
+ // "Visualiser (1.0.0)" -> /visualiser/domains/payments/1.0.0
143
+ { "title": "Visualiser ({version})", "href": "/visualiser/{collection}/{id}/{version}" }
144
+ ```
145
+
146
+ Internal links automatically respect your configured base path.
147
+
148
+ ## Collapsing sections
149
+
150
+ Any object-form section or group accepts `"collapsed": true | false` as its **initial** state — users can still toggle it, and their choice is remembered:
151
+
152
+ ```json
153
+ // Starts collapsed; users can still expand it and their choice is remembered
154
+ { "title": "Internal commands", "collapsed": true, "pages": ["[[command|refund-payment]]"] }
155
+ ```
156
+
157
+ Without `collapsed`, groups with more than five items start collapsed and smaller groups start open.
158
+
159
+ ## Predefined sections
160
+
161
+ Tokens shared by most resource types:
162
+
163
+ `$quick-reference` · `$documentation` · `$architecture` · `$diagrams` · `$decision-records` · `$owners` · `$code` · `$attachments`
164
+
165
+ And per resource type:
166
+
167
+ | Resource | Tokens |
168
+ |----------|--------|
169
+ | Domain | `$api-and-contracts` `$systems` `$subdomains` `$resources` `$services` `$flows` `$entities` `$domain-events` `$external-events` `$resource-groups` `$agents` `$external-integrations` `$data-products` |
170
+ | System | `$resources` `$services` `$flows` `$data-stores` `$entities` |
171
+ | Service / Agent | `$api-and-contracts`* `$resource-groups` `$state-and-persistence` `$entities`* `$outbound-messages` `$inbound-messages` `$channels` `$flows` |
172
+ | Event / Command / Query | `$api-and-contracts` `$producers` `$consumers` `$triggered-by` `$triggers` `$appears-in-flows` |
173
+ | Flow | `$messages` `$services` `$agents` `$subflows` `$data-stores` `$data-products` |
174
+ | Container | `$writes` `$reads` `$appears-in-flows` |
175
+ | Data product | `$inputs` `$outputs` `$data-contracts` `$appears-in-flows` |
176
+ | Entity | `$domains` `$services` |
177
+ | ADR | `$applies-to` `$supersedes` `$superseded-by` `$amends` `$amended-by` `$related-decisions` `$decision-makers` |
178
+
179
+ \* service only.
180
+
181
+ Tokens like `$services` that the default sidebar nests inside a "Resources" umbrella render as top-level sections when you use them directly.
182
+
183
+ ## When something doesn't resolve
184
+
185
+ Mistakes fail fast so your catalog never silently ships a broken sidebar:
186
+
187
+ - An unknown `$token`, or a `[[doc|…]]`, `[[spec|…]]` or `[[schema|…]]` reference that doesn't resolve **fails the build**, with an error naming the file and listing the valid options.
188
+ - A resource reference (like `[[service|…]]`) to something that doesn't exist renders nothing.
189
+
190
+ ## A complete example
191
+
192
+ The [demo catalog](https://demo.eventcatalog.dev/docs/domains/catalog/1.0.0) uses resource sidebars throughout. The Catalog domain's sidebar organizes the domain for its consumers — guides first, then the events other teams integrate with:
193
+
194
+ ```json title="domains/Catalog/sidebar.json"
195
+ {
196
+ "sections": [
197
+ // Generated Quick Reference, relabelled
198
+ { "section": "$quick-reference", "title": "Overview" },
199
+ // The domain's documentation pages, front and center for new consumers
200
+ {
201
+ "title": "Guides",
202
+ "icon": "BookOpen",
203
+ "pages": [
204
+ "[[doc|guides/integrating-with-the-catalog]]",
205
+ "[[doc|guides/product-data-model]]",
206
+ "[[doc|guides/event-versioning]]"
207
+ ]
208
+ },
209
+ // A curated list of the events other teams subscribe to.
210
+ // Each renders with its own expandable nested sidebar.
211
+ {
212
+ "title": "Integration Events",
213
+ "icon": "Radio",
214
+ "pages": ["[[event|product-created]]", "[[event|product-updated]]", "[[event|product-deleted]]"]
215
+ },
216
+ // Generated sections — kept up to date as the catalog changes
217
+ "$architecture",
218
+ "$systems",
219
+ "$entities",
220
+ // Docs mixed with external links in one group
221
+ {
222
+ "title": "Runbooks",
223
+ "icon": "Siren",
224
+ "pages": [
225
+ "[[doc|runbooks/on-call]]",
226
+ "[[doc|runbooks/search-index-lag]]",
227
+ { "title": "Health dashboard", "href": "https://grafana.acme.dev/d/catalog-overview" }
228
+ ]
229
+ },
230
+ // Out of the way until needed
231
+ { "title": "Decisions", "icon": "ClipboardList", "collapsed": true, "pages": ["[[adr|adr-001-use-transactional-outbox]]"] },
232
+ "$owners"
233
+ ]
234
+ }
235
+ ```
@@ -0,0 +1,179 @@
1
+ ---
2
+ sidebar_position: 11
3
+ sidebar_label: Embed EventCatalog
4
+ title: Embed EventCatalog in other applications
5
+ description: Bring EventCatalog documentation, diagrams, schemas, messages, and flows into your internal applications.
6
+ keywords:
7
+ - embed EventCatalog
8
+ - iframe
9
+ - developer portal
10
+ - internal application
11
+ - Scale
12
+ ---
13
+
14
+ import PlanBanner from '@site/src/components/MDX/PlanBanner';
15
+
16
+ <PlanBanner plan="Scale" />
17
+
18
+ You can embed EventCatalog pages in developer portals, internal tools, intranets, and other web applications. Your teams can explore architecture information in the application where they already work while EventCatalog remains the source of the documentation.
19
+
20
+ Embedding EventCatalog requires an EventCatalog Scale license. See [Getting a license key for EventCatalog Scale](/docs/development/license-keys/plans).
21
+
22
+ ## What you can embed
23
+
24
+ | Feature | What users can do in the embedded view |
25
+ | --- | --- |
26
+ | Resource documentation | Read the documentation for a domain, system, service, message, flow, team, or another catalog resource. |
27
+ | Resource visualizer | Explore the selected resource and its relationships. |
28
+ | Architecture Graph | Explore the catalog-wide graph or focus it on a resource with a relationship depth of 1, 2, or 3. |
29
+ | System Context Maps | View the catalog-wide system overview or the context surrounding one system. |
30
+ | Entity maps | Explore the entities and relationships associated with a resource. |
31
+ | Flows | Follow the steps, services, and messages in a business or technical flow. |
32
+ | Discovery tables | Browse and filter catalog resources such as services, events, commands, and queries. |
33
+ | Schema explorer | Search schemas, inspect their contents, and see the resources that use them. |
34
+
35
+ Embedded pages remain interactive. Controls belonging to the selected visualization or table stay available, while EventCatalog's application header and sidebars are removed so they do not compete with the host application's navigation.
36
+
37
+ ## How embedding works
38
+
39
+ Add `embed=true` to a supported EventCatalog URL and load that URL in an iframe. For example:
40
+
41
+ ```text
42
+ https://catalog.example.com/docs/services/order-service/1.0.0?embed=true
43
+ ```
44
+
45
+ You can also request a light or dark color mode for an embed:
46
+
47
+ ```text
48
+ https://catalog.example.com/docs/services/order-service/1.0.0?embed=true&theme=dark
49
+ ```
50
+
51
+ The requested theme only affects that embedded page. It does not replace the visitor's saved EventCatalog theme.
52
+
53
+ ## Before you embed
54
+
55
+ - Build and deploy EventCatalog with a valid Scale license.
56
+ - Use an EventCatalog URL that users of the host application can reach from their browsers.
57
+ - If EventCatalog is authenticated, verify that users can authenticate from the embedded context.
58
+ - Give the iframe's parent a defined height. EventCatalog fills the space the host application provides.
59
+ - Review the host application's Content Security Policy and iframe policy if the browser blocks the page.
60
+
61
+ ## Embed a page
62
+
63
+ ### 1. Choose the EventCatalog page
64
+
65
+ Open the page in EventCatalog and confirm that it contains the content you want users to see. Prefer an explicit resource version so the embedded URL is stable.
66
+
67
+ For example, a service visualizer may have this URL:
68
+
69
+ ```text
70
+ https://catalog.example.com/visualiser/services/order-service/1.0.0
71
+ ```
72
+
73
+ ### 2. Enable embed mode
74
+
75
+ Add `embed=true` to the query string:
76
+
77
+ ```text
78
+ https://catalog.example.com/visualiser/services/order-service/1.0.0?embed=true
79
+ ```
80
+
81
+ Use `&embed=true` instead when the URL already has query parameters.
82
+
83
+ ### 3. Add the iframe
84
+
85
+ Give the container a concrete height and let the iframe fill it:
86
+
87
+ ```html
88
+ <div style="height: 700px; width: 100%;">
89
+ <iframe
90
+ src="https://catalog.example.com/visualiser/services/order-service/1.0.0?embed=true"
91
+ title="Order service architecture"
92
+ loading="lazy"
93
+ style="border: 0; display: block; height: 100%; width: 100%;"
94
+ ></iframe>
95
+ </div>
96
+ ```
97
+
98
+ `height: 100%` only works when the iframe's ancestors have a defined height. Use a fixed, viewport-relative, or layout-controlled height in the host application.
99
+
100
+ ### 4. Select a theme
101
+
102
+ Add `theme=light` or `theme=dark` to force the embedded page's color mode:
103
+
104
+ ```html
105
+ <iframe
106
+ src="https://catalog.example.com/schemas/explorer?embed=true&theme=dark"
107
+ title="Schema explorer"
108
+ ></iframe>
109
+ ```
110
+
111
+ If you omit `theme`, EventCatalog uses the visitor's saved EventCatalog preference or their system preference.
112
+
113
+ ## Embed URL reference
114
+
115
+ Replace `https://catalog.example.com` with the URL of your deployed catalog.
116
+
117
+ | Feature | URL pattern |
118
+ | --- | --- |
119
+ | Resource documentation | `/docs/{collection}/{id}/{version}?embed=true` |
120
+ | Resource visualizer | `/visualiser/{collection}/{id}/{version}?embed=true` |
121
+ | Discovery table | `/discover/{collection}?embed=true` |
122
+ | Entity map | `/visualiser/{collection}/{id}/{version}/entity-map?embed=true` |
123
+ | Data dependency view | `/visualiser/{collection}/{id}/{version}/data?embed=true` |
124
+ | Schema explorer | `/schemas/explorer?embed=true` |
125
+ | Schema details | `/schemas/{type}/{id}/{version}?embed=true` |
126
+ | Architecture Graph | `/visualiser/graph?embed=true` |
127
+ | System Context Map overview | `/visualiser/system-context-map?embed=true` |
128
+ | System-specific context map | `/visualiser/systems/{id}/{version}/context?embed=true` |
129
+ | Flow visualizer | `/visualiser/flows/{id}/{version}?embed=true` |
130
+
131
+ Collections use their plural route names, such as `domains`, `systems`, `services`, `events`, `commands`, `queries`, `flows`, and `entities`. Schema detail pages support message types such as `events`, `commands`, and `queries`, as well as data product contracts.
132
+
133
+ ### Focus the Architecture Graph
134
+
135
+ Use `focus={collection}/{id}` to select the initial resource and `depth` to choose how many relationship hops are visible. `depth` accepts `1`, `2`, or `3`.
136
+
137
+ ```text
138
+ https://catalog.example.com/visualiser/graph?embed=true&focus=services/order-service&depth=2
139
+ ```
140
+
141
+ The Architecture Graph must be enabled in `eventcatalog.config.js`:
142
+
143
+ ```js title="eventcatalog.config.js"
144
+ module.exports = {
145
+ visualiser: {
146
+ architectureGraph: {
147
+ enabled: true,
148
+ },
149
+ },
150
+ };
151
+ ```
152
+
153
+ ## Troubleshooting
154
+
155
+ ### EventCatalog shows a license overlay
156
+
157
+ Confirm that the deployed catalog was built or started with a valid Scale license. Add the key to the EventCatalog project's environment:
158
+
159
+ ```bash title=".env"
160
+ EVENTCATALOG_SCALE_LICENSE_KEY=your-scale-license-key
161
+ ```
162
+
163
+ Then rebuild and redeploy the catalog. See [Getting a license key for EventCatalog Scale](/docs/development/license-keys/plans).
164
+
165
+ ### Navigation is still visible
166
+
167
+ Confirm that the URL contains `embed=true`, including the exact lowercase value `true`.
168
+
169
+ ### The iframe is blank or blocked
170
+
171
+ Open the iframe URL directly in the same browser. Confirm that it is reachable and that the user can authenticate. Then check the browser console for Content Security Policy, mixed-content, or iframe permission errors from either application.
172
+
173
+ ### The content does not fill the available height
174
+
175
+ Set an explicit height on the iframe's parent and keep the iframe at `height: 100%`. Check every ancestor if you use a percentage height.
176
+
177
+ ## Backstage
178
+
179
+ If your host application is Backstage, use the [EventCatalog Backstage plugin](/docs/plugins/backstage/overview). It supplies React components, resolves EventCatalog resources from Backstage entity annotations, and constructs the embed URLs for you.
@@ -7,6 +7,6 @@
7
7
  "type": "generated-index",
8
8
  "slug": "development/customization",
9
9
  "title": "Customization Documentation",
10
- "description": "Learn how to customize EventCatalog."
10
+ "description": "Customize EventCatalog and embed its documentation and visualizations in other applications."
11
11
  }
12
12
  }
@@ -32,6 +32,10 @@ This will output one directory
32
32
 
33
33
  - `dist` - Your EventCatalog as Static HTML
34
34
 
35
+ ### Link validation
36
+
37
+ Static builds check internal links and anchors and report warnings by default. See [link validation](/docs/development/deployment/link-validation) to fail builds on broken links, ignore destinations, or disable the check.
38
+
35
39
  ### Passing custom options
36
40
 
37
41
  <AddedIn version="2.16.5" />
@@ -22,7 +22,7 @@ By default EventCatalog will build a static website.
22
22
 
23
23
  Here are some guides and places you can host static content
24
24
 
25
- - [Host with Docker](#hosting-with-docker)
25
+ - [Host with Docker](#hosting-static-website-with-docker)
26
26
  - [Deploy to NextJS](https://nextjs.org/docs/deployment)
27
27
  - [Host in AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html)
28
28
 
@@ -0,0 +1,105 @@
1
+ ---
2
+ sidebar_position: 5
3
+ sidebar_label: Link validation
4
+ title: Link validation
5
+ description: Catch broken links and anchors before they reach production
6
+ ---
7
+
8
+ After a static build, EventCatalog scans every generated HTML page and reports internal links and anchors that don't resolve. This catches typos in [resource references](/docs/development/components/resource-references), renamed pages, and moved custom docs before they ship.
9
+
10
+ ## What gets checked
11
+
12
+ - Links between pages rendered by your catalog, including the sidebar navigation.
13
+ - Anchors (`#section`) on the destination page, so a link to a heading that no longer exists is caught too.
14
+ - Links are resolved against your [`base`](/docs/api/config#base) path, so this works the same whether your catalog is hosted at the root or a subpath.
15
+
16
+ Only links on the same origin and under the catalog's `base` path are checked. Set [`homepageLink`](/docs/api/config#homepageLink) to your deployed URL so absolute links to your own catalog are recognized as internal. External links and non-HTTP links such as `mailto:` are skipped.
17
+
18
+ Links to files in the build output are checked for existence, but fragments in non-HTML files such as PDFs are not validated. Links created only by client-side JavaScript are not checked, except for sidebar navigation.
19
+
20
+ :::info
21
+ Link validation only runs after a [static build](/docs/development/deployment/build-and-deploy). It's skipped when running in [SSR mode](/docs/development/deployment/build-ssr-mode), since pages are rendered on demand rather than generated up front.
22
+ :::
23
+
24
+ ## Configure the check
25
+
26
+ By default, broken links and anchors are logged as warnings and the build still succeeds.
27
+
28
+ ```js title="eventcatalog.config.js"
29
+ module.exports = {
30
+ linkValidation: {
31
+ onBrokenLinks: 'warn',
32
+ onBrokenAnchors: 'warn',
33
+ },
34
+ };
35
+ ```
36
+
37
+ Set either option to `error` to fail the build instead, or `ignore` to skip that check completely.
38
+
39
+ ```js title="eventcatalog.config.js"
40
+ module.exports = {
41
+ linkValidation: {
42
+ onBrokenLinks: 'error',
43
+ onBrokenAnchors: 'ignore',
44
+ },
45
+ };
46
+ ```
47
+
48
+ Turn the whole feature off by setting `linkValidation` to `false`.
49
+
50
+ ```js title="eventcatalog.config.js"
51
+ module.exports = {
52
+ linkValidation: false,
53
+ };
54
+ ```
55
+
56
+ ## Ignore known destinations
57
+
58
+ Some links can't be verified during the build, such as pages generated by a separate process. Use `ignore` with glob patterns for the destination paths. See [`linkValidation.ignore`](/docs/api/config#linkvalidationignore) for how paths are matched.
59
+
60
+ ```js title="eventcatalog.config.js"
61
+ module.exports = {
62
+ linkValidation: {
63
+ ignore: ['/api/**', '/docs/legacy/*'],
64
+ },
65
+ };
66
+ ```
67
+
68
+ ## Run in CI
69
+
70
+ Set both checks to `error` in CI to fail the build on broken links or anchors. Keep `warn` locally if you want the build to succeed while you fix them.
71
+
72
+ ```js title="eventcatalog.config.js"
73
+ module.exports = {
74
+ linkValidation: {
75
+ onBrokenLinks: process.env.CI ? 'error' : 'warn',
76
+ onBrokenAnchors: process.env.CI ? 'error' : 'warn',
77
+ },
78
+ };
79
+ ```
80
+
81
+ ```yaml title=".github/workflows/build-catalog.yml"
82
+ name: Build catalog
83
+ on:
84
+ pull_request:
85
+
86
+ jobs:
87
+ build:
88
+ runs-on: ubuntu-latest
89
+ steps:
90
+ - uses: actions/checkout@v4
91
+ - uses: actions/setup-node@v4
92
+ with:
93
+ node-version: 20
94
+ - run: npm install
95
+ - run: npm run build
96
+ env:
97
+ CI: true
98
+ ```
99
+
100
+ When a check is set to `error`, broken destinations fail the build. Diagnostics group references by destination and show up to five source pages per destination. For user/team and event/command/query mixups, EventCatalog suggests an alternative only when that destination exists in the build.
101
+
102
+ ## Related
103
+
104
+ - [`eventcatalog.config.js` reference](/docs/api/config#linkValidation) for the full list of options
105
+ - [Resource references](/docs/development/components/resource-references) for linking to catalog resources