@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
@@ -0,0 +1,158 @@
1
+ ---
2
+ sidebar_position: 1
3
+ sidebar_label: Overview
4
+ title: EventCatalog Federation
5
+ description: Combine independently owned EventCatalogs into one validated organization-wide catalog.
6
+ ---
7
+
8
+ import EventCatalogEnterprise from '@site/src/components/MDX/EventCatalogEnterprise';
9
+
10
+ <EventCatalogEnterprise />
11
+
12
+ EventCatalog Federation is a solution for distributed documentation across your organization. Teams document and own their services, domains, messages, ADRs, specifications, schemas, diagrams, and everything else EventCatalog supports in their own catalogs, while Federation combines them into one organization-wide view.
13
+
14
+ Each team keeps its documentation, ownership, and review workflow in its own EventCatalog project. A central catalog selects those catalogs, validates them together, and materializes their resources as one connected catalog.
15
+
16
+ <div className="federation-mermaid">
17
+
18
+ ```mermaid
19
+ flowchart LR
20
+ subgraph TEAMS["Team-owned catalogs"]
21
+ direction TB
22
+ PAY["`**Payments team**
23
+ Services · APIs · events
24
+ ADRs · docs`"]
25
+ ORD["`**Orders team**
26
+ Services · commands · flows
27
+ ADRs · docs`"]
28
+ FUL["`**Fulfillment team**
29
+ Services · events · diagrams
30
+ ADRs · docs`"]
31
+ end
32
+
33
+ PAY --> FED["`**eventcatalog federate**
34
+ Merge · resolve · validate`"]
35
+ ORD --> FED
36
+ FUL --> FED
37
+ FED --> ORG["`**Organization catalog**
38
+ One connected view`"]
39
+
40
+ classDef team fill:#eef2ff,stroke:#6366f1,color:#1e1b4b
41
+ classDef federation fill:#f5f3ff,stroke:#8b5cf6,color:#2e1065
42
+ classDef central fill:#ecfdf5,stroke:#10b981,color:#064e3b
43
+ class PAY,ORD,FUL team
44
+ class FED federation
45
+ class ORG central
46
+ style TEAMS fill:#f8fafc,stroke:#cbd5e1,stroke-dasharray:5 5,color:#475569
47
+ ```
48
+
49
+ </div>
50
+
51
+ Federation is useful when one catalog repository or one documentation team would become a bottleneck. Each team can document its part of the architecture close to the people and code that own it, while the organization still gets one place to discover resources and follow relationships.
52
+
53
+ ## What Federation gives you
54
+
55
+ Use Federation to:
56
+
57
+ - Combine resources from multiple EventCatalog projects
58
+ - Resolve relationships between catalogs
59
+ - Validate organization-wide ownership and resource types
60
+ - Include schemas, specifications, sidecar documentation, public assets, and custom components
61
+ - Test federation against local catalogs before using remote sources
62
+ - Fetch public or private catalogs from GitHub
63
+ - Treat selected diagnostics as warnings, errors, or disabled rules
64
+ - Keep the previous generated output when an update fails
65
+
66
+ ## The central catalog is still an EventCatalog
67
+
68
+ The central catalog can own organization-wide documentation of its own, such as cross-domain flows, shared architecture decisions, or enterprise domains. Its local resources participate in the same ownership validation as federated resources.
69
+
70
+ <div className="federation-mermaid">
71
+
72
+ ```mermaid
73
+ flowchart LR
74
+ subgraph TEAMS["Team-owned catalogs"]
75
+ direction TB
76
+ ORD["`**Orders team**
77
+ Services · commands · docs`"]
78
+ PAY["`**Payments team**
79
+ Services · APIs · events`"]
80
+ FUL["`**Fulfillment team**
81
+ Services · events · diagrams`"]
82
+ end
83
+
84
+ FED["`**eventcatalog federate**
85
+ Hydrate · resolve · validate`"]
86
+
87
+ subgraph CENTRAL["Central catalog"]
88
+ direction TB
89
+ LOCAL["`**Central-owned documentation**
90
+ Organization flows · ADRs · domains`"]
91
+ REMOTE["`**Federated resources**
92
+ Generated into federated/`"]
93
+ VIEW["`**Organization catalog**
94
+ One connected view`"]
95
+
96
+ LOCAL --> VIEW
97
+ REMOTE --> VIEW
98
+ end
99
+
100
+ ORD --> FED
101
+ PAY --> FED
102
+ FUL --> FED
103
+ FED --> REMOTE
104
+
105
+ classDef team fill:#eef2ff,stroke:#6366f1,color:#1e1b4b
106
+ classDef federation fill:#f5f3ff,stroke:#8b5cf6,color:#2e1065
107
+ classDef central fill:#ecfdf5,stroke:#10b981,color:#064e3b
108
+ class ORD,PAY,FUL team
109
+ class FED federation
110
+ class LOCAL,REMOTE central
111
+ class VIEW central
112
+ style TEAMS fill:#f8fafc,stroke:#cbd5e1,stroke-dasharray:5 5,color:#475569
113
+ style CENTRAL fill:#f8fafc,stroke:#cbd5e1,stroke-dasharray:5 5,color:#475569
114
+ ```
115
+
116
+ </div>
117
+
118
+ The generated content is written to `federated/`. The normal EventCatalog development server or build then reads the local and federated resources together.
119
+
120
+ ## Federation is explicit
121
+
122
+ The current workflow has two separate commands:
123
+
124
+ ```bash
125
+ npx eventcatalog federate
126
+ npm run build
127
+ ```
128
+
129
+ `eventcatalog federate` fetches, validates, and materializes the configured sources. `npm run build` renders the resulting catalog. Federation does not run automatically before `dev`, `build`, or `generate`.
130
+
131
+ :::info Enterprise feature
132
+
133
+ EventCatalog Federation requires an EventCatalog Enterprise offline license. To try it, email [hello@eventcatalog.dev](mailto:hello@eventcatalog.dev?subject=EventCatalog%20Federation%20Trial) and we will send you an offline trial key. Save the `license.jwt` file in the root of your central catalog before running Federation.
134
+
135
+ Learn more about [offline license validation](/docs/development/license-keys/license-validation#offline-validation).
136
+
137
+ :::
138
+
139
+ ## Built-in Federation and the Federation generator
140
+
141
+ These docs describe the built-in `eventcatalog federate` workflow. It uses catalog indexes, graph validation, content hashes, and generated federation output.
142
+
143
+ It is different from the older `@eventcatalog/generator-federation` integration, which clones repositories and copies configured directories through the generator pipeline.
144
+
145
+ ## Current release status
146
+
147
+ Federation is being released as an initial working version for feedback. The core composition and validation workflow is ready to use, while operational features such as automatic build integration, source management commands, frozen lockfile installs, and local file watching may evolve from user feedback.
148
+
149
+ Read [MVP status and feedback](/docs/federation/explanation/mvp-status-and-feedback) for the current boundaries.
150
+
151
+ ## Next steps
152
+
153
+ - Follow the [first federation tutorial](/docs/federation/first-federation).
154
+ - Learn [how Federation works](/docs/federation/explanation/how-it-works).
155
+ - [Configure GitHub sources](/docs/federation/how-to/configure-github-sources).
156
+ - [Use local catalogs during development](/docs/federation/how-to/use-local-sources).
157
+ - Look up the complete [configuration reference](/docs/federation/reference/configuration).
158
+ - Review the [diagnostic rule reference](/docs/federation/reference/diagnostic-rules).
@@ -0,0 +1,199 @@
1
+ ---
2
+ sidebar_position: 2
3
+ sidebar_label: First federation tutorial
4
+ title: Federate your first catalogs
5
+ description: Create two local EventCatalog projects and combine them into one organization catalog.
6
+ slug: /federation/first-federation
7
+ ---
8
+
9
+ import EventCatalogEnterprise from '@site/src/components/MDX/EventCatalogEnterprise';
10
+
11
+ <EventCatalogEnterprise />
12
+
13
+ This tutorial takes you through the first successful Federation workflow:
14
+
15
+ 1. Create a team catalog
16
+ 2. Create an empty organization catalog
17
+ 3. Configure the team catalog as a local source
18
+ 4. Run Federation
19
+ 5. Open the combined catalog
20
+
21
+ The goal is to learn the federation loop before introducing GitHub, CI, or organization-wide validation rules.
22
+
23
+ ## What you will build
24
+
25
+ <div className="federation-mermaid">
26
+
27
+ ```mermaid
28
+ flowchart LR
29
+ TEAM["`**team-catalog/**
30
+ Services · messages · docs`"]
31
+ FED["`**eventcatalog federate**
32
+ Fetch · validate · hydrate`"]
33
+ ORG["`**organization-catalog/**
34
+ Local + federated resources`"]
35
+
36
+ TEAM -->|local source| FED
37
+ FED --> ORG
38
+
39
+ classDef team fill:#eef2ff,stroke:#6366f1,color:#1e1b4b
40
+ classDef federation fill:#f5f3ff,stroke:#8b5cf6,color:#2e1065
41
+ classDef central fill:#ecfdf5,stroke:#10b981,color:#064e3b
42
+ class TEAM team
43
+ class FED federation
44
+ class ORG central
45
+ ```
46
+
47
+ </div>
48
+
49
+ ## Prerequisites
50
+
51
+ Before you start, make sure you have:
52
+
53
+ - [Node.js 22 or later](https://nodejs.org/en/download/)
54
+ - Git installed
55
+ - An EventCatalog Enterprise offline license. Email [hello@eventcatalog.dev](mailto:hello@eventcatalog.dev?subject=EventCatalog%20Federation%20Trial) to request a trial key.
56
+ - A terminal and text editor
57
+
58
+ Check Node and Git with:
59
+
60
+ ```bash
61
+ node -v
62
+ git --version
63
+ ```
64
+
65
+ ## Create the tutorial catalogs
66
+
67
+ Create a directory for the tutorial:
68
+
69
+ ```bash
70
+ mkdir federation-tutorial
71
+ cd federation-tutorial
72
+ ```
73
+
74
+ Create a team catalog with the sample resources included by the EventCatalog installer:
75
+
76
+ ```bash
77
+ npx @eventcatalog/create-eventcatalog@latest team-catalog
78
+ ```
79
+
80
+ Create an empty catalog that will become the organization view:
81
+
82
+ ```bash
83
+ npx @eventcatalog/create-eventcatalog@latest organization-catalog --empty
84
+ ```
85
+
86
+ You now have two sibling projects:
87
+
88
+ ```text
89
+ federation-tutorial/
90
+ ├── team-catalog/
91
+ └── organization-catalog/
92
+ ```
93
+
94
+ ## Add your Enterprise license
95
+
96
+ Federation uses an offline Enterprise license. Save the `license.jwt` file we send you in the root of the organization catalog:
97
+
98
+ ```text
99
+ organization-catalog/
100
+ ├── license.jwt
101
+ ├── eventcatalog.config.js
102
+ └── package.json
103
+ ```
104
+
105
+ To try Federation, email [hello@eventcatalog.dev](mailto:hello@eventcatalog.dev?subject=EventCatalog%20Federation%20Trial) and ask for an offline trial key. You can commit `license.jwt` with the central catalog so it is available locally and in CI/CD. If your organization prefers not to commit it, provide the file during your CI/CD job instead.
106
+
107
+ ## Configure the local source
108
+
109
+ Open `organization-catalog/eventcatalog.config.js` and add `federation.sources` to the exported configuration:
110
+
111
+ ```js title="organization-catalog/eventcatalog.config.js"
112
+ export default {
113
+ // Keep the settings created by the installer...
114
+ federation: {
115
+ sources: [
116
+ {
117
+ id: 'tutorial/team-catalog',
118
+ source: 'file:../team-catalog',
119
+ },
120
+ ],
121
+ },
122
+ };
123
+ ```
124
+
125
+ The source path is relative to the organization catalog. The `id` is the stable identity Federation uses for ownership, generated paths, and diagnostics.
126
+
127
+ ## Ignore generated output
128
+
129
+ Add the generated federation directory and cache to `organization-catalog/.gitignore`:
130
+
131
+ ```gitignore title="organization-catalog/.gitignore"
132
+ federated/
133
+ .eventcatalog-cache/
134
+ ```
135
+
136
+ Do not edit files under `federated/`. Federation replaces that directory on a successful run.
137
+
138
+ ## Run Federation
139
+
140
+ Move into the organization catalog and run the command:
141
+
142
+ ```bash
143
+ cd organization-catalog
144
+
145
+ # If this does not work, add federate script in your package.json "federate: eventcatalog federate"
146
+ npm run federate
147
+ ```
148
+
149
+ A successful run ends with output similar to:
150
+
151
+ ```text
152
+ [federation] Graph resolved: 20 remote resources, 28 relationships
153
+ [federation] Federation complete: 1 source, 20 remote resources, 35 files written
154
+ [federation] Recorded resolved source state in eventcatalog.lock
155
+ ```
156
+
157
+ The exact resource and file counts depend on the current starter catalog.
158
+
159
+ Federation has now created:
160
+
161
+ - `federated/` containing the team catalog resources
162
+ - `.eventcatalog-cache/federation/content/` containing verified reusable content
163
+ - `eventcatalog.lock` recording the source state resolved by this run
164
+
165
+ ## Open the organization catalog
166
+
167
+ Start the organization catalog:
168
+
169
+ ```bash
170
+ npm run dev
171
+ ```
172
+
173
+ Open [http://localhost:3000](http://localhost:3000). The resources from `team-catalog` now appear in the organization catalog.
174
+
175
+ ## Make a source change
176
+
177
+ Stop the development server, then change the name or documentation of a resource in `team-catalog`.
178
+
179
+ Run Federation again from `organization-catalog`:
180
+
181
+ ```bash
182
+ npx eventcatalog federate
183
+ ```
184
+
185
+ Start the development server again. The organization view now contains the updated source content.
186
+
187
+ Local filesystem sources are one-shot inputs. You need to rerun `eventcatalog federate` after a source changes.
188
+
189
+ ## What you learned
190
+
191
+ You have completed the core federation loop:
192
+
193
+ - A team catalog owns its source documentation
194
+ - The organization catalog selects it through configuration
195
+ - Federation indexes, validates, and materializes the source
196
+ - The normal EventCatalog application renders the combined view
197
+ - Rerunning Federation updates the generated output
198
+
199
+ Next, learn how to [configure GitHub sources](/docs/federation/how-to/configure-github-sources), [resolve relationships across catalogs](/docs/federation/explanation/ownership-and-references), or [run Federation in CI](/docs/federation/how-to/run-in-ci).
@@ -0,0 +1,12 @@
1
+ {
2
+ "label": "Federation",
3
+ "position": 3,
4
+ "collapsible": false,
5
+ "collapsed": false,
6
+ "link": {
7
+ "type": "generated-index",
8
+ "slug": "federation",
9
+ "title": "EventCatalog Federation",
10
+ "description": "Combine independently owned EventCatalogs into one validated organization-wide catalog."
11
+ }
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "label": "Explanation",
3
+ "position": 5,
4
+ "collapsible": true,
5
+ "collapsed": false,
6
+ "link": {
7
+ "type": "generated-index",
8
+ "slug": "federation/explanation",
9
+ "title": "Federation explanation",
10
+ "description": "Conceptual guides that explain composition, ownership, resolution, generated output, caching, and the federation lockfile."
11
+ }
12
+ }
@@ -0,0 +1,129 @@
1
+ ---
2
+ sidebar_position: 1
3
+ sidebar_label: How Federation works
4
+ title: How EventCatalog Federation works
5
+ description: Understand how EventCatalog indexes, resolves, and materializes several catalogs into one organization view.
6
+ ---
7
+
8
+ import EventCatalogEnterprise from '@site/src/components/MDX/EventCatalogEnterprise';
9
+
10
+ <EventCatalogEnterprise />
11
+
12
+ EventCatalog Federation is a build-time composition process.
13
+
14
+ It reads independently owned catalogs, converts them into a common index, validates the combined graph, and writes generated catalog files that the normal EventCatalog application can render.
15
+
16
+ ## The three-stage pipeline
17
+
18
+ <div className="federation-mermaid">
19
+
20
+ ```mermaid
21
+ flowchart LR
22
+ A[Source catalogs] --> B[Index]
23
+ B --> C[Resolve]
24
+ C --> D{Blocking diagnostics?}
25
+ D -->|Yes| E[Keep previous output]
26
+ D -->|No| F[Hydrate]
27
+ F --> G[Generated organization view]
28
+ ```
29
+
30
+ </div>
31
+
32
+ ### Index
33
+
34
+ Each source catalog is described as facts:
35
+
36
+ - Resource IDs, types, and versions
37
+ - Resource ownership and relationships
38
+ - Content paths and hashes
39
+ - Schemas and specifications
40
+ - Sidecar documentation
41
+ - Public assets and custom components
42
+
43
+ Federation operates on EventCatalog's existing files and frontmatter. Teams do not maintain a second federation-specific resource definition.
44
+
45
+ ### Resolve
46
+
47
+ Federation combines the indexes into one graph. The resolver:
48
+
49
+ - Connects relationships across source boundaries
50
+ - Selects resource versions for relationship pointers
51
+ - Detects multiple owners for one resource ID
52
+ - Detects conflicting resource types
53
+ - Detects relationship type mismatches
54
+ - Identifies missing resources and unavailable versions
55
+ - Chooses a deterministic winner for remote asset collisions
56
+
57
+ The central catalog's local resources participate in ownership validation. A local flow or architecture decision can point to federated resources, while a local resource can also conflict with a remote owner.
58
+
59
+ ### Hydrate
60
+
61
+ After validation succeeds, Federation fetches the selected resource files and writes them under `federated/`.
62
+
63
+ Schemas, specifications, sidecars, public assets, and custom components travel with their owning resources. Content hashes are checked before files are accepted.
64
+
65
+ The normal EventCatalog build then reads local and federated content together.
66
+
67
+ ## How sources are acquired
68
+
69
+ Federation currently supports GitHub and local filesystem sources.
70
+
71
+ <div className="federation-mermaid">
72
+
73
+ ```mermaid
74
+ flowchart TB
75
+ CFG[eventcatalog.config.js] --> ROUTE{Source locator}
76
+ ROUTE -->|github:| GH[Fetch published index or create one from checkout]
77
+ ROUTE -->|file:| FS[Index the current local directory]
78
+ GH --> IDX[Catalog index]
79
+ FS --> IDX
80
+ IDX --> RESOLVE[Shared resolver and hydration pipeline]
81
+ ```
82
+
83
+ </div>
84
+
85
+ A GitHub source can publish `catalog.index.json`. If the file exists, Federation checks its source ID and uses it. If the file does not exist, Federation creates an index from a temporary checkout.
86
+
87
+ A filesystem source is indexed directly. Its revision is derived from the indexed content so the completed run can record which local state it used.
88
+
89
+ After source acquisition, both source types use the same validation, hydration, caching, asset, and lockfile behavior.
90
+
91
+ ## Federation materializes files
92
+
93
+ Federation does not make live requests to team catalogs when somebody opens the organization site.
94
+
95
+ The generated files are a local representation of the last successful federation run:
96
+
97
+ ```text
98
+ central-catalog/
99
+ ├── domains/ # centrally owned resources
100
+ ├── federated/ # generated source resources
101
+ ├── public/ # central and managed remote assets
102
+ ├── eventcatalog.lock # completed-run receipt and managed asset state
103
+ └── .eventcatalog-cache/ # reusable verified content
104
+ ```
105
+
106
+ This means the organization catalog can be built and deployed through the same process as any other EventCatalog after Federation completes.
107
+
108
+ ## Failed updates preserve the previous view
109
+
110
+ Federation validates the graph before hydration. Output changes are staged, and the lockfile is written after the generated resources and public assets are composed.
111
+
112
+ If a normal update fails while installing new output, Federation attempts to restore the previous `federated/` directory and affected public assets. A bad source update should not replace the last successful organization view with partial output.
113
+
114
+ ## Federation is explicit
115
+
116
+ The federation command and EventCatalog build are separate:
117
+
118
+ ```bash
119
+ npx eventcatalog federate
120
+ npm run build
121
+ ```
122
+
123
+ This keeps source acquisition and graph validation visible in local workflows and CI. The current release does not automatically federate before `dev`, `build`, or `generate`.
124
+
125
+ ## Related guides
126
+
127
+ - [Ownership and cross-catalog references](/docs/federation/explanation/ownership-and-references)
128
+ - [Lockfile and cache](/docs/federation/explanation/lockfile-and-cache)
129
+ - [Generated output reference](/docs/federation/reference/generated-output)
@@ -0,0 +1,134 @@
1
+ ---
2
+ sidebar_position: 3
3
+ sidebar_label: Lockfile and cache
4
+ title: Federation lockfile and content cache
5
+ description: Understand what eventcatalog.lock records, what it does not pin, and how the Federation cache works.
6
+ ---
7
+
8
+ import EventCatalogEnterprise from '@site/src/components/MDX/EventCatalogEnterprise';
9
+
10
+ <EventCatalogEnterprise />
11
+
12
+ Federation writes two kinds of local state:
13
+
14
+ - `eventcatalog.lock` records the source state and managed public files from a completed run.
15
+ - `.eventcatalog-cache/` stores verified content that can be reused by later runs.
16
+
17
+ They solve different problems.
18
+
19
+ <div className="federation-mermaid">
20
+
21
+ ```mermaid
22
+ flowchart LR
23
+ CFG[eventcatalog.config.js] -->|controls next run| RUN[eventcatalog federate]
24
+ CACHE[.eventcatalog-cache/] <--> |reuses verified content| RUN
25
+ RUN -->|records completed run| LOCK[eventcatalog.lock]
26
+ RUN --> OUT[federated/]
27
+ ```
28
+
29
+ </div>
30
+
31
+ ## What the lockfile records
32
+
33
+ For each source, `eventcatalog.lock` records:
34
+
35
+ - The stable source ID
36
+ - The Git commit or content-derived local revision used by the run
37
+ - A digest of the resolved source index
38
+ - The time the source was resolved
39
+
40
+ It also records the hash and source of public files managed by Federation. This allows a later run to update or remove generated public files without deleting files owned or modified by the central catalog.
41
+
42
+ A simplified lockfile looks like:
43
+
44
+ ```json title="eventcatalog.lock"
45
+ {
46
+ "lockVersion": 1,
47
+ "sources": [
48
+ {
49
+ "id": "acme/payments",
50
+ "digest": "sha256:...",
51
+ "commit": "4a1b7e23c79b4ef9f5f337c5e7655a5ec82a4761",
52
+ "resolvedAt": "2026-08-21T10:30:00.000Z"
53
+ }
54
+ ],
55
+ "publicFiles": {
56
+ "payments/payment-flow.svg": {
57
+ "source": "acme/payments",
58
+ "hash": "sha256:..."
59
+ }
60
+ }
61
+ }
62
+ ```
63
+
64
+ ## The lockfile does not control the next run
65
+
66
+ The current lockfile is a completed-run receipt and managed-output record. It is not read as a package-manager-style source lock.
67
+
68
+ Every Federation run:
69
+
70
+ - Resolves the configured GitHub `ref` again
71
+ - Re-indexes the current files for a `file:` source
72
+ - Writes a new lockfile after the update succeeds
73
+
74
+ If `ref` is `main`, a later run can select a newer commit. To make a source repeatable, configure `ref` as an exact commit SHA.
75
+
76
+ :::warning Do not describe the current lockfile as a pin
77
+
78
+ The commit in `eventcatalog.lock` tells you what the completed run used. It does not force the next run to use that commit.
79
+
80
+ :::
81
+
82
+ ## Should the lockfile be committed?
83
+
84
+ It is safe to commit `eventcatalog.lock` when you want:
85
+
86
+ - An auditable record of the last completed federation run
87
+ - Managed public-file state shared between environments
88
+ - Source revisions visible during code review
89
+
90
+ Expect a moving branch or edited local source to update the lockfile. Committing it does not by itself make future builds repeatable.
91
+
92
+ ## How the content cache works
93
+
94
+ Federation stores content under:
95
+
96
+ ```text
97
+ .eventcatalog-cache/
98
+ └── federation/
99
+ └── content/
100
+ ```
101
+
102
+ Cache entries are addressed by SHA-256 content hashes. Before reusing an entry, Federation calculates its hash again. A corrupt or mismatched entry is discarded instead of being hydrated.
103
+
104
+ The cache avoids downloading identical resource files, schemas, specifications, sidecars, and assets on every run.
105
+
106
+ ## Ignore or persist the cache
107
+
108
+ Add the cache to `.gitignore`:
109
+
110
+ ```gitignore
111
+ .eventcatalog-cache/
112
+ ```
113
+
114
+ The cache is disposable. You can remove it when you need to reclaim disk space; the next run downloads the required content again.
115
+
116
+ The current release does not prune old content automatically, so a long-lived cache can grow as source content changes.
117
+
118
+ Persisting `.eventcatalog-cache` in CI can improve repeat build times, but it is not required for correctness.
119
+
120
+ ## Refresh cached content
121
+
122
+ Use `--no-cache` to disable cache reads for one run:
123
+
124
+ ```bash
125
+ npx eventcatalog federate --no-cache
126
+ ```
127
+
128
+ Federation fetches the required content and writes valid content back to the cache. The option refreshes cache entries; it does not permanently disable caching.
129
+
130
+ ## Related guides
131
+
132
+ - [Run Federation in CI](/docs/federation/how-to/run-in-ci)
133
+ - [Generated output reference](/docs/federation/reference/generated-output)
134
+ - [CLI reference](/docs/federation/reference/cli)