@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.
- package/dist/analytics/analytics.cjs +1 -1
- package/dist/analytics/analytics.js +2 -2
- package/dist/analytics/log-build.cjs +1 -1
- package/dist/analytics/log-build.js +3 -3
- package/dist/{chunk-SSSN5FXC.js → chunk-7LWOCX4R.js} +1 -1
- package/dist/{chunk-IIECZFXN.js → chunk-A4JRWRCV.js} +1 -1
- package/dist/{chunk-JHUICVBT.js → chunk-HBVTU6ZP.js} +1 -1
- package/dist/{chunk-PADMH2RJ.js → chunk-I6HUOX4R.js} +1 -1
- package/dist/{chunk-34RMFKFB.js → chunk-Q2ATWE7N.js} +1 -1
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/docs/api/02-config.md +60 -6
- package/dist/docs/development/ask-your-architecture/02-eventcatalog-assistant/02-configuration.md +18 -11
- package/dist/docs/development/authentication/providers/03-setting-up-github.md +29 -0
- package/dist/docs/development/bring-your-own-documentation/custom-pages/02-adding-custom-docs.md +2 -2
- package/dist/docs/development/bring-your-own-documentation/custom-pages/03-components.md +17 -0
- package/dist/docs/development/components/07-resource-references.md +7 -1
- package/dist/docs/development/components/components/05-architecture-graph.md +65 -0
- package/dist/docs/development/components/components/{05-attachments.md → 06-attachments.md} +1 -1
- package/dist/docs/development/components/components/{06-channel-information.md → 07-channel-information.md} +1 -1
- package/dist/docs/development/components/components/{07-custom-properties.md → 08-custom-properties.md} +1 -1
- package/dist/docs/development/components/components/{08-design.md → 09-design.md} +1 -1
- package/dist/docs/development/components/components/{09-entitymap.md → 10-entitymap.md} +1 -1
- package/dist/docs/development/components/components/{10-flow.md → 11-flow.md} +1 -1
- package/dist/docs/development/components/components/{11-link.md → 12-link.md} +1 -1
- package/dist/docs/development/components/components/{12-mermaid-file-loader.md → 13-mermaid-file-loader.md} +13 -1
- package/dist/docs/development/components/components/{13-message-table.md → 14-message-table.md} +1 -1
- package/dist/docs/development/components/components/{14-nodegraph.md → 15-nodegraph.md} +1 -1
- package/dist/docs/development/components/components/{15-openapi.md → 16-openapi.md} +1 -1
- package/dist/docs/development/components/components/{16-prompt.md → 17-prompt.md} +1 -1
- package/dist/docs/development/components/components/{17-remote-schema.md → 18-remote-schema.md} +1 -1
- package/dist/docs/development/components/components/{18-resource-group-table.md → 19-resource-group-table.md} +1 -1
- package/dist/docs/development/components/components/{19-resource-link.md → 20-resource-link.md} +1 -1
- package/dist/docs/development/components/components/{20-schema.md → 21-schema.md} +1 -1
- package/dist/docs/development/components/components/{21-schema-viewer.md → 22-schema-viewer.md} +1 -1
- package/dist/docs/development/components/components/{22-steps.md → 23-steps.md} +1 -1
- package/dist/docs/development/components/components/{23-tabs.md → 24-tabs.md} +1 -1
- package/dist/docs/development/components/components/{24-tiles.md → 25-tiles.md} +1 -1
- package/dist/docs/development/components/components/{25-visibility.md → 26-visibility.md} +1 -1
- package/dist/docs/development/components/diagram-syntax/06-mermaid.md +45 -6
- package/dist/docs/development/customization/04-documentation-sidebar.md +3 -3
- package/dist/docs/development/customization/05-resource-sidebar.md +235 -0
- package/dist/docs/development/customization/09-embed-eventcatalog.md +179 -0
- package/dist/docs/development/customization/_category_.json +1 -1
- package/dist/docs/development/deployment/build-and-deploy.md +4 -0
- package/dist/docs/development/deployment/hosting-options.md +1 -1
- package/dist/docs/development/deployment/link-validation.md +105 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/00-overview.md +76 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/01-setup.md +144 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/_category_.json +10 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/01-configure-rules.md +130 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/02-run-in-ci.md +93 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/03-use-custom-frontmatter.md +81 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/04-reference-external-catalogs.md +51 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/05-fix-common-problems.md +120 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/_category_.json +12 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/01-cli.md +109 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/02-configuration.md +120 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/03-rules.md +287 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/04-versions.md +77 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/05-supported-resources.md +75 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/_category_.json +12 -0
- package/dist/docs/development/guides/97-architecture-graph.md +78 -0
- package/dist/docs/development/guides/domains/02-create-domain.md +1 -1
- package/dist/docs/development/guides/domains/03-ownership-and-language/02-adding-ubiquitous-language.md +29 -0
- package/dist/docs/development/guides/domains/09-reference.md +10 -0
- package/dist/docs/development/guides/resources/messages/04-message-channels/02-adding-channels.md +2 -2
- package/dist/docs/development/guides/resources/messages/04-message-channels/04-adding-messages-to-services.md +8 -0
- package/dist/docs/development/guides/resources/schemas/03-add-specifications-to-services/01-add-openapi-specifications.md +2 -2
- package/dist/docs/development/guides/resources/schemas/03-add-specifications-to-services/02-add-asyncapi-specifications.md +3 -3
- package/dist/docs/development/guides/systems/05-system-context-maps.md +2 -0
- package/dist/docs/development/license-keys/license-validation.md +7 -3
- package/dist/docs/development/license-keys/overview.md +7 -3
- package/dist/docs/development/upgrading/upgrading.md +3 -3
- package/dist/docs/development/upgrading/v2.md +3 -3
- package/dist/docs/federation/00-overview.md +158 -0
- package/dist/docs/federation/01-first-federation.md +199 -0
- package/dist/docs/federation/_category_.json +12 -0
- package/dist/docs/federation/explanation/_category_.json +12 -0
- package/dist/docs/federation/explanation/how-it-works.md +129 -0
- package/dist/docs/federation/explanation/lockfile-and-cache.md +134 -0
- package/dist/docs/federation/explanation/mvp-status-and-feedback.md +86 -0
- package/dist/docs/federation/explanation/ownership-and-references.md +134 -0
- package/dist/docs/federation/how-to/_category_.json +12 -0
- package/dist/docs/federation/how-to/configure-github-sources.md +156 -0
- package/dist/docs/federation/how-to/configure-validation-rules.md +127 -0
- package/dist/docs/federation/how-to/run-in-ci.md +138 -0
- package/dist/docs/federation/how-to/share-assets-and-components.md +125 -0
- package/dist/docs/federation/how-to/use-local-sources.md +138 -0
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/00-introduction.md +11 -2
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/01-installation.md +11 -3
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/02-plugin-configuration.md +11 -2
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/03-examples.md +11 -1
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/04-configuration.md +11 -1
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/05-setup-team-catalog.md +11 -2
- package/dist/docs/federation/legacy-federation/_category_.json +12 -0
- package/dist/docs/federation/reference/_category_.json +12 -0
- package/dist/docs/federation/reference/cli.md +122 -0
- package/dist/docs/federation/reference/configuration.md +192 -0
- package/dist/docs/federation/reference/diagnostic-rules.md +173 -0
- package/dist/docs/federation/reference/generated-output.md +118 -0
- package/dist/docs/federation/reference/supported-content.md +86 -0
- package/dist/docs/federation/reference/troubleshooting.md +208 -0
- package/dist/docs/plugins/01-intro.md +3 -3
- package/dist/docs/plugins/03-all-plugins.md +2 -2
- package/dist/docs/plugins/asyncapi/00-intro.md +4 -4
- package/dist/docs/plugins/asyncapi/02-plugin-configuration.md +4 -4
- package/dist/docs/plugins/backstage/00-overview.md +53 -0
- package/dist/docs/plugins/backstage/01-get-started.md +95 -0
- package/dist/docs/plugins/backstage/02-embed-entity-tabs.md +109 -0
- package/dist/docs/plugins/backstage/03-add-overview-cards.md +79 -0
- package/dist/docs/plugins/backstage/04-control-theme-and-size.md +54 -0
- package/dist/docs/plugins/backstage/05-migrate-to-annotations.md +49 -0
- package/dist/docs/plugins/backstage/06-configuration.md +85 -0
- package/dist/docs/plugins/backstage/07-components.md +129 -0
- package/dist/docs/plugins/backstage/08-how-embeds-work.md +52 -0
- package/dist/docs/plugins/backstage/_category_.json +4 -3
- package/dist/docs/plugins/eventbridge/00-intro.md +5 -5
- package/dist/docs/plugins/eventbridge/03-api.md +3 -3
- package/dist/docs/plugins/graphql/00-intro.md +2 -2
- package/dist/docs/plugins/graphql/02-plugin-configuration.md +2 -2
- package/dist/docs/plugins/hookdeck/01-intro.md +1 -1
- package/dist/docs/plugins/openapi/00-intro.md +1 -1
- package/dist/eventcatalog.cjs +1 -1
- package/dist/eventcatalog.js +5 -5
- package/dist/generate.cjs +1 -1
- package/dist/generate.js +3 -3
- package/dist/utils/cli-logger.cjs +1 -1
- package/dist/utils/cli-logger.js +2 -2
- package/eventcatalog/src/components/SchemaExplorer/AvroSchemaViewer.tsx +21 -19
- package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.test.tsx +114 -0
- package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.tsx +107 -86
- package/eventcatalog/src/components/SchemaExplorer/ProtobufSchemaViewer.test.tsx +91 -0
- package/eventcatalog/src/components/SchemaExplorer/ProtobufSchemaViewer.tsx +115 -33
- package/eventcatalog/src/components/SchemaExplorer/SchemaViewerHover.test.tsx +33 -0
- package/eventcatalog/src/components/SchemaExplorer/protobuf-validation.test.ts +84 -0
- package/eventcatalog/src/components/SchemaExplorer/protobuf-validation.ts +149 -0
- package/eventcatalog/src/utils/collections/glob-loader.ts +2 -2
- package/eventcatalog/src/utils/protobuf-schema.ts +211 -16
- package/package.json +8 -8
- package/dist/docs/cli/channels.md +0 -180
- package/dist/docs/cli/commands.md +0 -183
- package/dist/docs/cli/custom-docs.md +0 -78
- package/dist/docs/cli/data-products.md +0 -177
- package/dist/docs/cli/data-stores.md +0 -166
- package/dist/docs/cli/diagrams.md +0 -147
- package/dist/docs/cli/domains.md +0 -280
- package/dist/docs/cli/entities.md +0 -138
- package/dist/docs/cli/events.md +0 -186
- package/dist/docs/cli/export.md +0 -27
- package/dist/docs/cli/governance.md +0 -24
- package/dist/docs/cli/messages.md +0 -69
- package/dist/docs/cli/queries.md +0 -183
- package/dist/docs/cli/services.md +0 -266
- package/dist/docs/cli/snapshots.md +0 -44
- package/dist/docs/cli/teams.md +0 -75
- package/dist/docs/cli/users.md +0 -75
- package/dist/docs/cli/utilities.md +0 -43
- package/dist/docs/development/developer-tools/eventcatalog-linter.md +0 -732
- package/dist/docs/plugins/backstage/00-intro.md +0 -67
- package/dist/docs/plugins/backstage/01-installation.md +0 -242
- package/dist/docs/plugins/backstage/02-api.md +0 -51
- package/dist/docs/plugins/backstage/03-examples.md +0 -12
- 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)
|