@eventcatalog/core 4.10.12 → 4.10.14

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 (179) 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-7URQ754Q.js → chunk-HERAHLM2.js} +1 -1
  6. package/dist/{chunk-Y5XU3YLT.js → chunk-LITOQH56.js} +1 -1
  7. package/dist/{chunk-S4LLGOO4.js → chunk-LUW6RDA7.js} +1 -1
  8. package/dist/{chunk-VFSEVDCQ.js → chunk-ONDFEA5R.js} +1 -1
  9. package/dist/{chunk-A53VCEEA.js → chunk-V2SKOQYF.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 +55 -1
  13. package/dist/docs/development/authentication/providers/03-setting-up-github.md +29 -0
  14. package/dist/docs/development/bring-your-own-documentation/custom-pages/02-adding-custom-docs.md +2 -2
  15. package/dist/docs/development/bring-your-own-documentation/custom-pages/03-components.md +17 -0
  16. package/dist/docs/development/components/07-resource-references.md +7 -1
  17. package/dist/docs/development/components/components/05-architecture-graph.md +65 -0
  18. package/dist/docs/development/components/components/{05-attachments.md → 06-attachments.md} +1 -1
  19. package/dist/docs/development/components/components/{06-channel-information.md → 07-channel-information.md} +1 -1
  20. package/dist/docs/development/components/components/{07-custom-properties.md → 08-custom-properties.md} +1 -1
  21. package/dist/docs/development/components/components/{08-design.md → 09-design.md} +1 -1
  22. package/dist/docs/development/components/components/{09-entitymap.md → 10-entitymap.md} +1 -1
  23. package/dist/docs/development/components/components/{10-flow.md → 11-flow.md} +1 -1
  24. package/dist/docs/development/components/components/{11-link.md → 12-link.md} +1 -1
  25. package/dist/docs/development/components/components/{12-mermaid-file-loader.md → 13-mermaid-file-loader.md} +1 -1
  26. package/dist/docs/development/components/components/{13-message-table.md → 14-message-table.md} +1 -1
  27. package/dist/docs/development/components/components/{14-nodegraph.md → 15-nodegraph.md} +1 -1
  28. package/dist/docs/development/components/components/{15-openapi.md → 16-openapi.md} +1 -1
  29. package/dist/docs/development/components/components/{16-prompt.md → 17-prompt.md} +1 -1
  30. package/dist/docs/development/components/components/{17-remote-schema.md → 18-remote-schema.md} +1 -1
  31. package/dist/docs/development/components/components/{18-resource-group-table.md → 19-resource-group-table.md} +1 -1
  32. package/dist/docs/development/components/components/{19-resource-link.md → 20-resource-link.md} +1 -1
  33. package/dist/docs/development/components/components/{20-schema.md → 21-schema.md} +1 -1
  34. package/dist/docs/development/components/components/{21-schema-viewer.md → 22-schema-viewer.md} +1 -1
  35. package/dist/docs/development/components/components/{22-steps.md → 23-steps.md} +1 -1
  36. package/dist/docs/development/components/components/{23-tabs.md → 24-tabs.md} +1 -1
  37. package/dist/docs/development/components/components/{24-tiles.md → 25-tiles.md} +1 -1
  38. package/dist/docs/development/components/components/{25-visibility.md → 26-visibility.md} +1 -1
  39. package/dist/docs/development/customization/04-documentation-sidebar.md +3 -3
  40. package/dist/docs/development/customization/05-resource-sidebar.md +235 -0
  41. package/dist/docs/development/customization/09-embed-eventcatalog.md +179 -0
  42. package/dist/docs/development/customization/_category_.json +1 -1
  43. package/dist/docs/development/deployment/build-and-deploy.md +4 -0
  44. package/dist/docs/development/deployment/hosting-options.md +1 -1
  45. package/dist/docs/development/deployment/link-validation.md +105 -0
  46. package/dist/docs/development/developer-tools/eventcatalog-linter/00-overview.md +76 -0
  47. package/dist/docs/development/developer-tools/eventcatalog-linter/01-setup.md +144 -0
  48. package/dist/docs/development/developer-tools/eventcatalog-linter/_category_.json +10 -0
  49. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/01-configure-rules.md +130 -0
  50. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/02-run-in-ci.md +93 -0
  51. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/03-use-custom-frontmatter.md +81 -0
  52. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/04-reference-external-catalogs.md +51 -0
  53. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/05-fix-common-problems.md +120 -0
  54. package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/_category_.json +12 -0
  55. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/01-cli.md +109 -0
  56. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/02-configuration.md +120 -0
  57. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/03-rules.md +287 -0
  58. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/04-versions.md +77 -0
  59. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/05-supported-resources.md +75 -0
  60. package/dist/docs/development/developer-tools/eventcatalog-linter/reference/_category_.json +12 -0
  61. package/dist/docs/development/guides/97-architecture-graph.md +78 -0
  62. package/dist/docs/development/guides/domains/02-create-domain.md +1 -1
  63. package/dist/docs/development/guides/domains/03-ownership-and-language/02-adding-ubiquitous-language.md +29 -0
  64. package/dist/docs/development/guides/domains/09-reference.md +10 -0
  65. package/dist/docs/development/guides/resources/messages/04-message-channels/02-adding-channels.md +2 -2
  66. package/dist/docs/development/guides/resources/messages/04-message-channels/04-adding-messages-to-services.md +8 -0
  67. package/dist/docs/development/guides/resources/schemas/03-add-specifications-to-services/01-add-openapi-specifications.md +2 -2
  68. package/dist/docs/development/guides/resources/schemas/03-add-specifications-to-services/02-add-asyncapi-specifications.md +3 -3
  69. package/dist/docs/development/guides/systems/05-system-context-maps.md +2 -0
  70. package/dist/docs/development/license-keys/license-validation.md +7 -3
  71. package/dist/docs/development/license-keys/overview.md +7 -3
  72. package/dist/docs/development/upgrading/upgrading.md +3 -3
  73. package/dist/docs/development/upgrading/v2.md +3 -3
  74. package/dist/docs/federation/00-overview.md +158 -0
  75. package/dist/docs/federation/01-first-federation.md +199 -0
  76. package/dist/docs/federation/_category_.json +12 -0
  77. package/dist/docs/federation/explanation/_category_.json +12 -0
  78. package/dist/docs/federation/explanation/how-it-works.md +129 -0
  79. package/dist/docs/federation/explanation/lockfile-and-cache.md +134 -0
  80. package/dist/docs/federation/explanation/mvp-status-and-feedback.md +86 -0
  81. package/dist/docs/federation/explanation/ownership-and-references.md +134 -0
  82. package/dist/docs/federation/how-to/_category_.json +12 -0
  83. package/dist/docs/federation/how-to/configure-github-sources.md +156 -0
  84. package/dist/docs/federation/how-to/configure-validation-rules.md +127 -0
  85. package/dist/docs/federation/how-to/run-in-ci.md +138 -0
  86. package/dist/docs/federation/how-to/share-assets-and-components.md +125 -0
  87. package/dist/docs/federation/how-to/use-local-sources.md +138 -0
  88. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/00-introduction.md +11 -2
  89. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/01-installation.md +11 -3
  90. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/02-plugin-configuration.md +11 -2
  91. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/03-examples.md +11 -1
  92. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/04-configuration.md +11 -1
  93. package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/05-setup-team-catalog.md +11 -2
  94. package/dist/docs/federation/legacy-federation/_category_.json +12 -0
  95. package/dist/docs/federation/reference/_category_.json +12 -0
  96. package/dist/docs/federation/reference/cli.md +122 -0
  97. package/dist/docs/federation/reference/configuration.md +192 -0
  98. package/dist/docs/federation/reference/diagnostic-rules.md +173 -0
  99. package/dist/docs/federation/reference/generated-output.md +118 -0
  100. package/dist/docs/federation/reference/supported-content.md +86 -0
  101. package/dist/docs/federation/reference/troubleshooting.md +208 -0
  102. package/dist/docs/plugins/01-intro.md +3 -3
  103. package/dist/docs/plugins/03-all-plugins.md +2 -2
  104. package/dist/docs/plugins/asyncapi/00-intro.md +4 -4
  105. package/dist/docs/plugins/asyncapi/02-plugin-configuration.md +4 -4
  106. package/dist/docs/plugins/backstage/00-overview.md +53 -0
  107. package/dist/docs/plugins/backstage/01-get-started.md +95 -0
  108. package/dist/docs/plugins/backstage/02-embed-entity-tabs.md +109 -0
  109. package/dist/docs/plugins/backstage/03-add-overview-cards.md +79 -0
  110. package/dist/docs/plugins/backstage/04-control-theme-and-size.md +54 -0
  111. package/dist/docs/plugins/backstage/05-migrate-to-annotations.md +49 -0
  112. package/dist/docs/plugins/backstage/06-configuration.md +85 -0
  113. package/dist/docs/plugins/backstage/07-components.md +129 -0
  114. package/dist/docs/plugins/backstage/08-how-embeds-work.md +52 -0
  115. package/dist/docs/plugins/backstage/_category_.json +4 -3
  116. package/dist/docs/plugins/eventbridge/00-intro.md +5 -5
  117. package/dist/docs/plugins/eventbridge/03-api.md +3 -3
  118. package/dist/docs/plugins/graphql/00-intro.md +2 -2
  119. package/dist/docs/plugins/graphql/02-plugin-configuration.md +2 -2
  120. package/dist/docs/plugins/hookdeck/01-intro.md +1 -1
  121. package/dist/docs/plugins/openapi/00-intro.md +1 -1
  122. package/dist/eventcatalog.cjs +1 -1
  123. package/dist/eventcatalog.js +5 -5
  124. package/dist/generate.cjs +1 -1
  125. package/dist/generate.js +3 -3
  126. package/dist/utils/cli-logger.cjs +1 -1
  127. package/dist/utils/cli-logger.js +2 -2
  128. package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +208 -119
  129. package/eventcatalog/src/components/ChatPanel/ChatPanelButton.tsx +28 -8
  130. package/eventcatalog/src/components/ChatPanel/OfflineReply.tsx +45 -0
  131. package/eventcatalog/src/components/Header.astro +11 -6
  132. package/eventcatalog/src/components/MDX/Design/Design.astro +2 -2
  133. package/eventcatalog/src/components/MDX/EntityMap/EntityMap.astro +2 -2
  134. package/eventcatalog/src/components/MDX/Flow/Flow.astro +2 -2
  135. package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +2 -2
  136. package/eventcatalog/src/components/SchemaExplorer/AvroSchemaViewer.tsx +21 -19
  137. package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.tsx +79 -77
  138. package/eventcatalog/src/components/SchemaExplorer/ProtobufSchemaViewer.test.tsx +91 -0
  139. package/eventcatalog/src/components/SchemaExplorer/ProtobufSchemaViewer.tsx +115 -33
  140. package/eventcatalog/src/components/SchemaExplorer/SchemaViewerHover.test.tsx +33 -0
  141. package/eventcatalog/src/components/SchemaExplorer/protobuf-validation.test.ts +84 -0
  142. package/eventcatalog/src/components/SchemaExplorer/protobuf-validation.ts +149 -0
  143. package/eventcatalog/src/components/Search/Search.astro +11 -4
  144. package/eventcatalog/src/components/Settings/AssistantSettingsForm.tsx +29 -24
  145. package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/index.astro +3 -3
  146. package/eventcatalog/src/pages/diagrams/[id]/[version]/index.astro +2 -2
  147. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/index.astro +5 -3
  148. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/index.astro +10 -4
  149. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +2 -2
  150. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +3 -3
  151. package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/[filename].astro +2 -2
  152. package/eventcatalog/src/pages/visualiser/designs/[id]/index.astro +2 -2
  153. package/eventcatalog/src/utils/feature.ts +1 -0
  154. package/eventcatalog/src/utils/protobuf-schema.ts +211 -16
  155. package/package.json +3 -3
  156. package/dist/docs/cli/channels.md +0 -180
  157. package/dist/docs/cli/commands.md +0 -183
  158. package/dist/docs/cli/custom-docs.md +0 -78
  159. package/dist/docs/cli/data-products.md +0 -177
  160. package/dist/docs/cli/data-stores.md +0 -166
  161. package/dist/docs/cli/diagrams.md +0 -147
  162. package/dist/docs/cli/domains.md +0 -280
  163. package/dist/docs/cli/entities.md +0 -138
  164. package/dist/docs/cli/events.md +0 -186
  165. package/dist/docs/cli/export.md +0 -27
  166. package/dist/docs/cli/governance.md +0 -24
  167. package/dist/docs/cli/messages.md +0 -69
  168. package/dist/docs/cli/queries.md +0 -183
  169. package/dist/docs/cli/services.md +0 -266
  170. package/dist/docs/cli/snapshots.md +0 -44
  171. package/dist/docs/cli/teams.md +0 -75
  172. package/dist/docs/cli/users.md +0 -75
  173. package/dist/docs/cli/utilities.md +0 -43
  174. package/dist/docs/development/developer-tools/eventcatalog-linter.md +0 -732
  175. package/dist/docs/plugins/backstage/00-intro.md +0 -67
  176. package/dist/docs/plugins/backstage/01-installation.md +0 -242
  177. package/dist/docs/plugins/backstage/02-api.md +0 -51
  178. package/dist/docs/plugins/backstage/03-examples.md +0 -12
  179. package/dist/docs/plugins/eventcatalog-federation/_category_.json +0 -11
@@ -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)
@@ -0,0 +1,86 @@
1
+ ---
2
+ sidebar_position: 4
3
+ sidebar_label: MVP status and feedback
4
+ title: Federation MVP status and feedback
5
+ description: Understand the current Federation release boundaries and how to share useful feedback.
6
+ ---
7
+
8
+ import EventCatalogEnterprise from '@site/src/components/MDX/EventCatalogEnterprise';
9
+
10
+ <EventCatalogEnterprise />
11
+
12
+ EventCatalog Federation is being introduced as an initial working release for feedback.
13
+
14
+ The core workflow is ready to combine real catalogs, validate ownership, and build an organization-wide view. The first release deliberately keeps source configuration and execution explicit while EventCatalog learns how teams want to operate Federation.
15
+
16
+ ## What is included
17
+
18
+ The MVP includes:
19
+
20
+ - GitHub sources
21
+ - Local filesystem sources for development
22
+ - Indexing and hydration of EventCatalog resources
23
+ - Cross-catalog relationship and version resolution
24
+ - Central catalog ownership validation
25
+ - Schemas, specifications, sidecar files, public assets, and custom components
26
+ - Configurable `off`, `warn`, and `error` diagnostic rules
27
+ - Content hashing and a verified local cache
28
+ - Stale generated-output cleanup
29
+ - Restoration of previous output after a normal failed update
30
+ - A lockfile that records completed source and managed public-file state
31
+
32
+ ## Current boundaries
33
+
34
+ The first release does not include:
35
+
36
+ - `add`, `status`, or `dry-run` source management commands
37
+ - Automatic Federation before `dev`, `build`, or `generate`
38
+ - Local source watcher integration
39
+ - A frozen mode that installs the commits recorded in `eventcatalog.lock`
40
+ - Graph diff commands
41
+ - Automatic cache pruning
42
+ - Parallel source fetching
43
+ - A command for publishing `catalog.index.json`
44
+ - Federation of top-level reusable `snippets/`
45
+
46
+ Sources are configured manually in `eventcatalog.config.js` and processed with:
47
+
48
+ ```bash
49
+ npx eventcatalog federate
50
+ ```
51
+
52
+ These constraints are intentional for the feedback release. They keep the contract small while the team observes which operational workflows matter in real organizations.
53
+
54
+ ## Useful areas for feedback
55
+
56
+ When you try Federation, consider:
57
+
58
+ - Is editing `federation.sources` directly clear enough?
59
+ - Do you prefer moving branches or immutable commits?
60
+ - Which diagnostics should block your organization catalog?
61
+ - Does local filesystem Federation give you a useful development loop?
62
+ - How often do resource, asset, or component collisions occur?
63
+ - Should Federation run manually, in CI, or automatically before builds?
64
+ - Do your teams share custom components, reusable snippets, or npm dependencies?
65
+ - How large are your catalogs and how long does a Federation run take?
66
+ - What information would you expect from future `status` or diff commands?
67
+
68
+ ## Share feedback
69
+
70
+ The most useful feedback includes:
71
+
72
+ - What you were trying to federate
73
+ - The number and approximate size of the source catalogs
74
+ - Whether the sources were GitHub or local
75
+ - What worked
76
+ - What was confusing
77
+ - The diagnostic or workflow that blocked you
78
+ - What you expected Federation to do
79
+
80
+ Share feedback in the [EventCatalog Discord](https://eventcatalog.dev/discord) or [open an issue in the EventCatalog repository](https://github.com/event-catalog/eventcatalog/issues).
81
+
82
+ ## Related guides
83
+
84
+ - [EventCatalog Federation overview](/docs/federation/overview)
85
+ - [How Federation works](/docs/federation/explanation/how-it-works)
86
+ - [Troubleshooting Federation](/docs/federation/reference/troubleshooting)