Ownership, guaranteed
Every resource has exactly one owning catalog. Duplicate ownership fails the run and names both catalogs — no silent overwrites, no last-write-wins.
Every team owns their documentation in their own repository, close to their code and their domain — while your organization catalog pulls, syncs, and verifies them into one connected view of your architecture.
Payments
Payments Team
Orders
Order Management
Fulfillment
Fulfillment Ops

Acme Inc
Organization catalog · one connected, validated view

Documentation is distributed. Your view of it isn't. Your architecture is built by many teams, in many repositories. At scale, keeping one shared view accurate, owned, and up to date gets harder with every new team, service, and schema.
As the organization grows, coordinating every team's documentation through a single repository takes real effort — and slows everyone down.
Teams keep their best documentation close to their code. Pulling it into one shared view shouldn't mean giving that up.
Copies drift. Nobody knows which version of an event is the real one, or who to ask.
Two teams document the same service differently — and both look authoritative.
Cross-team flows — checkout calling payments, orders triggering fulfillment — are invisible to everyone.
Scripts that clone and copy files lose provenance, break silently, and drift from their source.
Composition, not centralization.
How it works
Federation is built into EventCatalog. No custom scripts, no copy pipelines — your organization catalog declares its sources and one command does the rest.
Each team documents their domains, services, and messages in their own EventCatalog, in their own repository. Nothing changes for teams — no plugins, no extra config.
List the team catalogs you want to combine — GitHub repositories or local paths. Four lines of config per source.
Federate fetches every source, validates ownership and relationships across the whole organization, and materializes one connected catalog.
export default {
title: 'Acme Architecture',
federation: {
sources: [
{ id: 'acme/payments', source: 'github:acme/payments-catalog' },
{ id: 'acme/orders', source: 'github:acme/orders-catalog' },
{ id: 'acme/fulfillment', source: 'file:../fulfillment-catalog' },
],
},
};---
id: warehouse-service
name: Warehouse Service
receives:
- id: order-completed
---order-completed
Event · v1.0.0
One definition, one owner. Every consumer across the organization resolves to it — no copies, no drift.
Reference, don't copy
Teams reference each other's events, commands, and services by ID — they never copy definitions between repositories. Federation connects the pointers into one graph, so cross-team flows finally become visible.
Every resource has exactly one owner: the catalog that holds its files. If two catalogs claim the same resource, federation stops and names them both — ambiguity is a modelling error, not something to render.
Built for organizations
Federation treats your organization's documentation like a build: explicit, validated, and reproducible.
Every resource has exactly one owning catalog. Duplicate ownership fails the run and names both catalogs — no silent overwrites, no last-write-wins.
Lint-style rules catch missing resources, type collisions, and version mismatches across the whole organization. Promote warnings to errors in CI, or mute rules while you migrate.
eventcatalog.lock records the exact commit and content digest of every source. Same inputs, same catalog — every time.
Federation runs are transactional. If a run fails, the previous catalog stays intact — you never ship a half-written view of your architecture.
Federate from public or private GitHub repositories, or from local paths while you develop. Test the whole loop on your machine before wiring up CI.
Your organization catalog can own cross-cutting documentation of its own — enterprise domains, flows, and architecture decisions that span teams.
EventCatalog Federation is an Enterprise feature. Start a trial from EventCatalog Cloud and federate your first catalogs in minutes.