Skip to main content

Federate your first catalogs

View as Markdown

This tutorial takes you through the first successful Federation workflow:

  1. Create a team catalog
  2. Create an empty organization catalog
  3. Configure the team catalog as a local source
  4. Run Federation
  5. Open the combined catalog

The goal is to learn the federation loop before introducing GitHub, CI, or organization-wide validation rules.

What you will build​

Prerequisites​

Before you start, make sure you have:

Check Node and Git with:

node -v
git --version

Create the tutorial catalogs​

Create a directory for the tutorial:

mkdir federation-tutorial
cd federation-tutorial

Create a team catalog with the sample resources included by the EventCatalog installer:

npx @eventcatalog/create-eventcatalog@latest team-catalog

Create an empty catalog that will become the organization view:

npx @eventcatalog/create-eventcatalog@latest organization-catalog --empty

You now have two sibling projects:

federation-tutorial/
├── team-catalog/
└── organization-catalog/

Add your Enterprise license​

Federation uses an offline Enterprise license. Save the license.jwt file we send you in the root of the organization catalog:

organization-catalog/
├── license.jwt
├── eventcatalog.config.js
└── package.json

To try Federation, email hello@eventcatalog.dev 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.

Configure the local source​

Open organization-catalog/eventcatalog.config.js and add federation.sources to the exported configuration:

organization-catalog/eventcatalog.config.js
export default {
// Keep the settings created by the installer...
federation: {
sources: [
{
id: 'tutorial/team-catalog',
source: 'file:../team-catalog',
},
],
},
};

The source path is relative to the organization catalog. The id is the stable identity Federation uses for ownership, generated paths, and diagnostics.

Ignore generated output​

Add the generated federation directory and cache to organization-catalog/.gitignore:

organization-catalog/.gitignore
federated/
.eventcatalog-cache/

Do not edit files under federated/. Federation replaces that directory on a successful run.

Run Federation​

Move into the organization catalog and run the command:

cd organization-catalog

# If this does not work, add federate script in your package.json "federate: eventcatalog federate"
npm run federate

A successful run ends with output similar to:

[federation] Graph resolved: 20 remote resources, 28 relationships
[federation] Federation complete: 1 source, 20 remote resources, 35 files written
[federation] Recorded resolved source state in eventcatalog.lock

The exact resource and file counts depend on the current starter catalog.

Federation has now created:

  • federated/ containing the team catalog resources
  • .eventcatalog-cache/federation/content/ containing verified reusable content
  • eventcatalog.lock recording the source state resolved by this run

Open the organization catalog​

Start the organization catalog:

npm run dev

Open http://localhost:3000. The resources from team-catalog now appear in the organization catalog.

Make a source change​

Stop the development server, then change the name or documentation of a resource in team-catalog.

Run Federation again from organization-catalog:

npx eventcatalog federate

Start the development server again. The organization view now contains the updated source content.

Local filesystem sources are one-shot inputs. You need to rerun eventcatalog federate after a source changes.

What you learned​

You have completed the core federation loop:

  • A team catalog owns its source documentation
  • The organization catalog selects it through configuration
  • Federation indexes, validates, and materializes the source
  • The normal EventCatalog application renders the combined view
  • Rerunning Federation updates the generated output

Next, learn how to configure GitHub sources, resolve relationships across catalogs, or run Federation in CI.