# EventCatalog > EventCatalog is an Open Source project that helps you document your messages, services and domains. - [EventCatalog](/index.md) ## about-us The story behind EventCatalog - an open source project built to bring discoverability to your architecture. - [The Story Behind EventCatalog](/about-us.md): The story behind EventCatalog - an open source project built to bring discoverability to your architecture. ## blog Blog - [Blog - EventCatalog](/blog.md): Blog ### 2026 - [Introducing diagrams as first-class resources](/blog/2026/01/09/diagrams-as-first-class-resources.md): EventCatalog already gives you auto-generated visualizations: Entity Maps, Interaction Maps, and domain views that update as your catalog changes. These are great for understanding relationships between your resources. ### apicurio-registry-eventcatalog Connect Apicurio Registry to EventCatalog for better schema governance and documentation - [Integrate Apicurio Registry with EventCatalog](/blog/apicurio-registry-eventcatalog.md): Connect Apicurio Registry to EventCatalog for better schema governance and documentation ### architecture-change-detection Architecture Change Detection in EventCatalog monitors your event-driven architecture across git branches and notifies your teams the moment a service starts or stops producing or consuming messages. - [Your architecture is changing. Do you know about it?](/blog/architecture-change-detection.md): Architecture Change Detection in EventCatalog monitors your event-driven architecture across git branches and notifies your teams the moment a service starts or stops producing or consuming messages. ### archive Archive - [Archive](/blog/archive.md): Archive ### asyncapi-eventcatalog Integrate your AsyncAPI files and auto your EventCatalog - [AsyncAPI integration with EventCatalog](/blog/asyncapi-eventcatalog.md): Integrate your AsyncAPI files and auto your EventCatalog ### authentication-and-ssr-mode Getting started with EventCatalog Authentication and SSR Mode - [Introducing Authentication and SSR Mode](/blog/authentication-and-ssr-mode.md): Getting started with EventCatalog Authentication and SSR Mode ### azure-schema-registry-eventcatalog Connect Azure Schema Registry to EventCatalog for better governance and documentation - [Integrate Azure Schema Registry with EventCatalog](/blog/azure-schema-registry-eventcatalog.md): Connect Azure Schema Registry to EventCatalog for better governance and documentation ### built-in-mcp-server Connect AI tools to your architecture with 15 tools and 9 resources - [EventCatalog now includes a built-in MCP server](/blog/built-in-mcp-server.md): Connect AI tools to your architecture with 15 tools and 9 resources ### channels-20 Introducing EventCatalog 2.65.0 with support for channels 2.0 - [Modelling more message patterns in EventCatalog](/blog/channels-20.md): Introducing EventCatalog 2.65.0 with support for channels 2.0 ### custom-icons EventCatalog 3.28.1 lets you set a custom icon on any resource. One field in frontmatter and your visualiser goes from generic coloured boxes to a diagram that tells the real story of your stack. - [Your catalog nodes now show what they actually are](/blog/custom-icons.md): EventCatalog 3.28.1 lets you set a custom icon on any resource. One field in frontmatter and your visualiser goes from generic coloured boxes to a diagram that tells the real story of your stack. ### custom-search-experience EventCatalog introduces a completely redesigned search experience with advanced filtering, categorized results, and instant discovery for static builds. Find domains, services, events, and documentation faster than ever. - [Introducing Search v2](/blog/custom-search-experience.md): EventCatalog introduces a completely redesigned search experience with advanced filtering, categorized results, and instant discovery for static builds. Find domains, services, events, and documentation faster than ever. ### data-products Data products join EventCatalog as a first-class resource type with inputs, outputs, contracts, and full integration with your existing architecture. - [Document, visualize and discover your data products](/blog/data-products.md): Data products join EventCatalog as a first-class resource type with inputs, outputs, contracts, and full integration with your existing architecture. ### documenting-sync-and-async-apis-with-eventcatalog Learn how EventCatalog's OpenAPI and AsyncAPI generators help companies bridge the gap between synchronous REST APIs and asynchronous event-driven architectures - [Documenting sync and async APIs with EventCatalog](/blog/documenting-sync-and-async-apis-with-eventcatalog.md): Learn how EventCatalog's OpenAPI and AsyncAPI generators help companies bridge the gap between synchronous REST APIs and asynchronous event-driven architectures ### domain-level-messages Domain-level messaging gives teams more flexibility in how they model their event-driven architectures - [Document events at the domain level](/blog/domain-level-messages.md): Domain-level messaging gives teams more flexibility in how they model their event-driven architectures ### eventbridge-eventcatalog Integrate Amazon EventBridge with EventCatalog - [Amazon EventBridge integration with EventCatalog](/blog/eventbridge-eventcatalog.md): Integrate Amazon EventBridge with EventCatalog ### eventcatalog-2130 Introducing EventCatalog 2.13.0 with support for channels - [2.13.0](/blog/eventcatalog-2130.md): Introducing EventCatalog 2.13.0 with support for channels ### eventcatalog-250 Introducing EventCatalog 2.5.0 with support for flows - [2.5.0](/blog/eventcatalog-250.md): Introducing EventCatalog 2.5.0 with support for flows ### eventcatalog-april-2025 EventCatalog updates for April 2025 - [Whats new in EventCatalog - April 2025](/blog/eventcatalog-april-2025.md): EventCatalog updates for April 2025 ### eventcatalog-attachments Link external resources, diagrams, and documentation to your EventCatalog resources - [Introducing Attachments for EventCatalog](/blog/eventcatalog-attachments.md): Link external resources, diagrams, and documentation to your EventCatalog resources ### eventcatalog-august-2024 Overview of what was released in August 2024 - [EventCatalog August 2024 update](/blog/eventcatalog-august-2024.md): Overview of what was released in August 2024 ### eventcatalog-august-2025 EventCatalog updates for August 2025 - [Whats new in EventCatalog - August 2025](/blog/eventcatalog-august-2025.md): EventCatalog updates for August 2025 ### eventcatalog-changelogs Understand and explore how to add changelogs to your domains, services and messages - [Announcing Changelogs for EventCatalog](/blog/eventcatalog-changelogs.md): Understand and explore how to add changelogs to your domains, services and messages ### eventcatalog-chat Understand your architecture through conversation - [Introducing EventCatalog Chat](/blog/eventcatalog-chat.md): Understand your architecture through conversation ### eventcatalog-cli The EventCatalog SDK now includes a command-line interface, making automation and integration dead simple - [Access your EventCatalog from the command line](/blog/eventcatalog-cli.md): The EventCatalog SDK now includes a command-line interface, making automation and integration dead simple ### eventcatalog-cloud EventCatalog Cloud is a new way to experience EventCatalog, and license for plugins. - [Introducing EventCatalog Cloud and Plugin Licensing](/blog/eventcatalog-cloud.md): EventCatalog Cloud is a new way to experience EventCatalog, and license for plugins. ### eventcatalog-components Understand how to create custom components for eventcatalog - [Introducing Custom Components](/blog/eventcatalog-components.md): Understand how to create custom components for eventcatalog ### eventcatalog-custom-docs Bring your own documentation to EventCatalog - [Introducing EventCatalog Custom Documentation](/blog/eventcatalog-custom-docs.md): Bring your own documentation to EventCatalog ### eventcatalog-december-2024 EventCatalog updates for December 2024 - [EventCatalog December 2024 update](/blog/eventcatalog-december-2024.md): EventCatalog updates for December 2024 ### eventcatalog-diagrams Bring your diagrams to life with EventCatalog - [Bring your diagrams to EventCatalog](/blog/eventcatalog-diagrams.md): Bring your diagrams to life with EventCatalog ### eventcatalog-directory EventCatalog Directory is a new way to find users and teams using EventCatalog. - [Introducing EventCatalog Directory](/blog/eventcatalog-directory.md): EventCatalog Directory is a new way to find users and teams using EventCatalog. ### eventcatalog-february-2025 EventCatalog updates for February 2025 - [EventCatalog February 2025 update](/blog/eventcatalog-february-2025.md): EventCatalog updates for February 2025 ### eventcatalog-federation Merge multiple EventCatalog instances into one for a single source of truth - [Introducing EventCatalog Federation](/blog/eventcatalog-federation.md): Merge multiple EventCatalog instances into one for a single source of truth ### eventcatalog-icepanel Visualize your C4 architecture diagrams with IcePanel integration - [Embed IcePanel Diagrams in EventCatalog](/blog/eventcatalog-icepanel.md): Visualize your C4 architecture diagrams with IcePanel integration ### eventcatalog-january-2026 EventCatalog updates for January 2026 - [What's new in EventCatalog - January 2026](/blog/eventcatalog-january-2026.md): EventCatalog updates for January 2026 ### eventcatalog-july-2025 EventCatalog updates for July 2025 - [Whats new in EventCatalog - July 2025](/blog/eventcatalog-july-2025.md): EventCatalog updates for July 2025 ### eventcatalog-june-2025 EventCatalog updates for June 2025 - [Whats new in EventCatalog - June 2025](/blog/eventcatalog-june-2025.md): EventCatalog updates for June 2025 ### eventcatalog-linter Catch issues early and maintain high-quality documentation with the new EventCatalog Linter - [Introducing the EventCatalog Linter](/blog/eventcatalog-linter.md): Catch issues early and maintain high-quality documentation with the new EventCatalog Linter ### eventcatalog-march-2025 EventCatalog updates for March 2025 - [EventCatalog March 2025 update](/blog/eventcatalog-march-2025.md): EventCatalog updates for March 2025 ### eventcatalog-march-2026 EventCatalog updates for March 2026 - [Whats new in EventCatalog - March 2026](/blog/eventcatalog-march-2026.md): EventCatalog updates for March 2026 ### eventcatalog-may-2025 EventCatalog updates for May 2025 - [Whats new in EventCatalog - May 2025](/blog/eventcatalog-may-2025.md): EventCatalog updates for May 2025 ### eventcatalog-mcp Connect your EventCatalog to any MCP Client (e.g Cursor, Windsurf, Claude Desktop) - [Introducing EventCatalog MCP Server](/blog/eventcatalog-mcp.md): Connect your EventCatalog to any MCP Client (e.g Cursor, Windsurf, Claude Desktop) ### eventcatalog-miro Bring your diagrams to life with Miro integration - [Bring Your Miro Boards to Life in EventCatalog](/blog/eventcatalog-miro.md): Bring your diagrams to life with Miro integration ### eventcatalog-miro-app The EventCatalog Miro App v2 turns your architecture documentation into interactive, collaborative design artifacts — and sends them back when you're done. - [Your documentation is a design artifact, not just a wiki page](/blog/eventcatalog-miro-app.md): The EventCatalog Miro App v2 turns your architecture documentation into interactive, collaborative design artifacts — and sends them back when you're done. ### eventcatalog-november-2024 EventCatalog updates for November 2024 - [EventCatalog November 2024 update](/blog/eventcatalog-november-2024.md): EventCatalog updates for November 2024 ### eventcatalog-october-2024 EventCatalog updates for October 2024 - [EventCatalog October 2024 update](/blog/eventcatalog-october-2024.md): EventCatalog updates for October 2024 ### eventcatalog-october-2025 EventCatalog updates for October 2025 - [Whats new in EventCatalog - October 2025](/blog/eventcatalog-october-2025.md): EventCatalog updates for October 2025 ### eventcatalog-openai EventCatalog now integrates with OpenAI, allowing you to use OpenAI models in your documentation. - [EventCatalog now integrates with OpenAI](/blog/eventcatalog-openai.md): EventCatalog now integrates with OpenAI, allowing you to use OpenAI models in your documentation. ### eventcatalog-sdk Understand and explore the SDK for EventCatalog - [Announcing the new EventCatalog SDK](/blog/eventcatalog-sdk.md): Understand and explore the SDK for EventCatalog ### eventcatalog-september-2024 Overview of what was released in September 2024 - [EventCatalog September 2024 update](/blog/eventcatalog-september-2024.md): Overview of what was released in September 2024 ### eventcatalog-september-2025 EventCatalog updates for September 2025 - [Whats new in EventCatalog - September 2025](/blog/eventcatalog-september-2025.md): EventCatalog updates for September 2025 ### eventcatalog-themes-dark-mode Customize your catalog with built-in themes, dark mode support, and create your own custom themes - [Introducing Themes and Dark Mode](/blog/eventcatalog-themes-dark-mode.md): Customize your catalog with built-in themes, dark mode support, and create your own custom themes ### eventcatalog-v2 Whats new in EventCatalog and how to get started - [Introducing EventCatalog v2](/blog/eventcatalog-v2.md): Whats new in EventCatalog and how to get started ### eventcatalog-v3 What's new in EventCatalog v3 and how to get started - [Introducing EventCatalog v3](/blog/eventcatalog-v3.md): What's new in EventCatalog v3 and how to get started ### external-systems A new externalSystem flag lets you mark services like Stripe, Twilio, or Snowflake as third-party dependencies. They get their own colour, their own sidebar section, and their own tab in discover. - [Model external systems in EventCatalog](/blog/external-systems.md): A new externalSystem flag lets you mark services like Stripe, Twilio, or Snowflake as third-party dependencies. They get their own colour, their own sidebar section, and their own tab in discover. ### field-usage EventCatalog already shows you which services consume a message. Now it can also show you which specific fields they use. - [Which fields are your consumers actually using?](/blog/field-usage.md): EventCatalog already shows you which services consume a message. Now it can also show you which specific fields they use. ### flow-wizard The new flow-wizard skill lets you describe a business workflow in plain language while your AI agent builds the flow and wires it to your existing catalog resources. - [Describe the workflow, let the agent build the flow](/blog/flow-wizard.md): The new flow-wizard skill lets you describe a business workflow in plain language while your AI agent builds the flow and wires it to your existing catalog resources. ### focus-mode Navigate through your architecture by clicking nodes to see their inputs and outputs in a dedicated view - [Click any node to explore its connections in Focus Mode](/blog/focus-mode.md): Navigate through your architecture by clicking nodes to see their inputs and outputs in a dedicated view ### github-actions Getting started with EventCatalog GitHub Action - [Introducing the EventCatalog GitHub Action](/blog/github-actions.md): Getting started with EventCatalog GitHub Action ### github-as-a-schema-registry EventCatalog now supports GitHub as a schema registry, allowing you to document your schemas in GitHub and keep them in sync with your documentation. - [Using GitHub as a schema registry with EventCatalog](/blog/github-as-a-schema-registry.md): EventCatalog now supports GitHub as a schema registry, allowing you to document your schemas in GitHub and keep them in sync with your documentation. ### graphql-eventcatalog Integrate your GraphQL schema files and automate your EventCatalog - [Introducing GraphQL integration with EventCatalog](/blog/graphql-eventcatalog.md): Integrate your GraphQL schema files and automate your EventCatalog ### introducing-data-resources Document your data stores in EventCatalog - [Introducing Data Stores with EventCatalog](/blog/introducing-data-resources.md): Document your data stores in EventCatalog ### introducing-entity-maps Visualize and explore entity relationships within your domains with EventCatalog's new Entity Maps feature - [Introducing Entity Maps](/blog/introducing-entity-maps.md): Visualize and explore entity relationships within your domains with EventCatalog's new Entity Maps feature ### introducing-eventcatalog-reports EventCatalog now includes Governance Reports, helping you measure and track your architecture’s health. - [Introducing EventCatalog Reports](/blog/introducing-eventcatalog-reports.md): EventCatalog now includes Governance Reports, helping you measure and track your architecture’s health. ### introducing-queries Introducing queries for EventCatalog - [Introducing query messages for EventCatalog](/blog/introducing-queries.md): Introducing queries for EventCatalog ### live-data-meets-architecture-documentation Extend EventCatalog Assistant with custom tools to bring real-time metrics, service health, on-call information, and more into your architecture conversations - [Live data meets architecture documentation](/blog/live-data-meets-architecture-documentation.md): Extend EventCatalog Assistant with custom tools to bring real-time metrics, service health, on-call information, and more into your architecture conversations ### message-usage-examples Message Usage Examples lets you ship real payload samples alongside your events, commands, and queries so your team never has to guess what an OrderCreated event actually looks like in production. - [Document examples with your schemas](/blog/message-usage-examples.md): Message Usage Examples lets you ship real payload samples alongside your events, commands, and queries so your team never has to guess what an OrderCreated event actually looks like in production. ### openapi-consumer-services The EventCatalog OpenAPI generator now lets you define consumer services with optional route-based filtering, so you can document the full producer-consumer picture directly from your OpenAPI specs. - [Document who consumes your APIs, not just who owns them](/blog/openapi-consumer-services.md): The EventCatalog OpenAPI generator now lets you define consumer services with optional route-based filtering, so you can document the full producer-consumer picture directly from your OpenAPI specs. ### openapi-eventcatalog Integrate your OpenAPI files and auto your EventCatalog - [OpenAPI integration with EventCatalog](/blog/openapi-eventcatalog.md): Integrate your OpenAPI files and auto your EventCatalog ### remote-schema-component EventCatalog 2.52.0 introduces the RemoteSchema component, enabling real-time schema synchronization from external APIs and keeping your documentation always up-to-date. - [Introducing Remote Schemas - Fetch and Sync Schemas at Runtime](/blog/remote-schema-component.md): EventCatalog 2.52.0 introduces the RemoteSchema component, enabling real-time schema synchronization from external APIs and keeping your documentation always up-to-date. ### resource-docs Stop losing documentation in wikis and Confluence pages. Resource-level documentation lets you attach runbooks, ADRs, guides, and more directly to the services, events, and domains they describe. - [The right documentation, in the right place](/blog/resource-docs.md): Stop losing documentation in wikis and Confluence pages. Resource-level documentation lets you attach runbooks, ADRs, guides, and more directly to the services, events, and domains they describe. ### schema-features EventCatalog Schema updates - [EventCatalog 2.64.0 - Schemas!](/blog/schema-features.md): EventCatalog Schema updates ### schema-fields-explorer EventCatalog now indexes every field from every message schema and lets you search, filter, and trace fields across your entire architecture. Scale plan users get Field Intelligence with type conflict detection and interactive traceability graphs. - [Trace every field across your schemas and architecture](/blog/schema-fields-explorer.md): EventCatalog now indexes every field from every message schema and lets you search, filter, and trace fields across your entire architecture. Scale plan users get Field Intelligence with type conflict detection and interactive traceability graphs. ### slack-integration Stop searching through wikis and Confluence pages. Get architecture answers where your team already works. - [EventCatalog Slack integration](/blog/slack-integration.md): Stop searching through wikis and Confluence pages. Get architecture answers where your team already works. ### tags - [Tags](/blog/tags.md) - [One post tagged with "2"](/blog/tags/2.md) - [6 posts tagged with "AI"](/blog/tags/ai.md) - [One post tagged with "API Documentation"](/blog/tags/api-documentation.md) - [One post tagged with "API Integration"](/blog/tags/api-integration.md) - [One post tagged with "Apicurio"](/blog/tags/apicurio.md) - [3 posts tagged with "Architecture"](/blog/tags/architecture.md) - [One post tagged with "Assistant"](/blog/tags/assistant.md) - [2 posts tagged with "AsyncAPI"](/blog/tags/async-api.md) - [One post tagged with "Attachments"](/blog/tags/attachments.md) - [One post tagged with "August"](/blog/tags/august.md) - [One post tagged with "Authentication"](/blog/tags/authentication.md) - [One post tagged with "Automation"](/blog/tags/automation.md) - [One post tagged with "Azure"](/blog/tags/azure.md) - [One post tagged with "C4"](/blog/tags/c-4.md) - [One post tagged with "Change Detection"](/blog/tags/change-detection.md) - [One post tagged with "Changelogs"](/blog/tags/changelogs.md) - [2 posts tagged with "Channels"](/blog/tags/channels.md) - [One post tagged with "CI/CD"](/blog/tags/ci-cd.md) - [One post tagged with "CLI"](/blog/tags/cli.md) - [One post tagged with "commands"](/blog/tags/commands.md) - [3 posts tagged with "Component"](/blog/tags/component.md) - [One post tagged with "Components"](/blog/tags/components.md) - [One post tagged with "Custom Tools"](/blog/tags/custom-tools.md) - [One post tagged with "Customization"](/blog/tags/customization.md) - [2 posts tagged with "Dark Mode"](/blog/tags/dark-mode.md) - [One post tagged with "Data"](/blog/tags/data.md) - [One post tagged with "Data Products"](/blog/tags/data-products.md) - [One post tagged with "DDD"](/blog/tags/ddd.md) - [One post tagged with "Design"](/blog/tags/design.md) - [One post tagged with "diagrams"](/blog/tags/diagrams.md) - [One post tagged with "Distributed System"](/blog/tags/distributed-system.md) - [3 posts tagged with "Documentation"](/blog/tags/documentation.md) - [One post tagged with "Domain-Driven Design"](/blog/tags/domain-driven-design.md) - [One post tagged with "domains"](/blog/tags/domains.md) - [One post tagged with "Draw.io"](/blog/tags/draw-io.md) - [One post tagged with "EDA"](/blog/tags/eda.md) - [One post tagged with "Entity Maps"](/blog/tags/entity-maps.md) - [One post tagged with "EventBridge"](/blog/tags/event-bridge.md) - [73 posts tagged with "EventCatalog"](/blog/tags/event-catalog.md) - [One post tagged with "Event-Driven Architecture"](/blog/tags/event-driven-architecture.md) - [One post tagged with "Event Hubs"](/blog/tags/event-hubs.md) - [3 posts tagged with "Events"](/blog/tags/events.md) - [One post tagged with "Examples"](/blog/tags/examples.md) - [One post tagged with "Features"](/blog/tags/features.md) - [One post tagged with "Field Intelligence"](/blog/tags/field-intelligence.md) - [One post tagged with "Field Usage"](/blog/tags/field-usage.md) - [2 posts tagged with "Flows"](/blog/tags/flows.md) - [One post tagged with "Focus Mode"](/blog/tags/focus-mode.md) - [One post tagged with "Generators"](/blog/tags/generators.md) - [2 posts tagged with "Governance"](/blog/tags/governance.md) - [One post tagged with "GraphQL"](/blog/tags/graph-ql.md) - [One post tagged with "IcePanel"](/blog/tags/ice-panel.md) - [One post tagged with "Icons"](/blog/tags/icons.md) - [One post tagged with "Integration"](/blog/tags/integration.md) - [One post tagged with "Integrations"](/blog/tags/integrations.md) - [One post tagged with "January"](/blog/tags/january.md) - [One post tagged with "July"](/blog/tags/july.md) - [One post tagged with "June"](/blog/tags/june.md) - [2 posts tagged with "Layout"](/blog/tags/layout.md) - [One post tagged with "Linter"](/blog/tags/linter.md) - [One post tagged with "Lucid"](/blog/tags/lucid.md) - [One post tagged with "March"](/blog/tags/march.md) - [One post tagged with "MCP"](/blog/tags/mcp.md) - [2 posts tagged with "Messages"](/blog/tags/messages.md) - [3 posts tagged with "Miro"](/blog/tags/miro.md) - [One post tagged with "October"](/blog/tags/october.md) - [One post tagged with "OpenAI"](/blog/tags/open-ai.md) - [3 posts tagged with "OpenAPI"](/blog/tags/open-api.md) - [One post tagged with "Quality"](/blog/tags/quality.md) - [One post tagged with "Queries"](/blog/tags/queries.md) - [One post tagged with "Remote Schema"](/blog/tags/remote-schema.md) - [One post tagged with "Reports"](/blog/tags/reports.md) - [3 posts tagged with "Scale"](/blog/tags/scale.md) - [3 posts tagged with "Schema"](/blog/tags/schema.md) - [One post tagged with "Schema Explorer"](/blog/tags/schema-explorer.md) - [2 posts tagged with "Schema Registry"](/blog/tags/schema-registry.md) - [2 posts tagged with "SDK"](/blog/tags/sdk.md) - [One post tagged with "Search"](/blog/tags/search.md) - [One post tagged with "September"](/blog/tags/september.md) - [4 posts tagged with "Services"](/blog/tags/services.md) - [One post tagged with "Skills"](/blog/tags/skills.md) - [One post tagged with "Slack"](/blog/tags/slack.md) - [One post tagged with "SSR"](/blog/tags/ssr.md) - [One post tagged with "Static Sites"](/blog/tags/static-sites.md) - [One post tagged with "Themes"](/blog/tags/themes.md) - [25 posts tagged with "Update"](/blog/tags/update.md) - [One post tagged with "User Experience"](/blog/tags/user-experience.md) - [One post tagged with "versioning"](/blog/tags/versioning.md) - [2 posts tagged with "Visualiser"](/blog/tags/visualiser.md) - [One post tagged with "Visualization"](/blog/tags/visualization.md) - [3 posts tagged with "Visualizer"](/blog/tags/visualizer.md) ### visualizer-improvements The EventCatalog visualizer just got a complete overhaul. Cleaner nodes, smarter layouts, dark mode support, hover highlighting and more. - [See your architecture clearly: Major visualizer improvements](/blog/visualizer-improvements.md): The EventCatalog visualizer just got a complete overhaul. Cleaner nodes, smarter layouts, dark mode support, hover highlighting and more. ### visualizer-layout-persistence Take control of how your architecture diagrams look and share custom layouts with your team - [Rearrange and save your visualizer layouts](/blog/visualizer-layout-persistence.md): Take control of how your architecture diagrams look and share custom layouts with your team ## changelog Latest updates and improvements to EventCatalog - [Changelog](/changelog.md): Latest updates and improvements to EventCatalog ## code-of-conduct - [tODO](/code-of-conduct.md) ## contact-us Open source project to help you document your event-driven architectures. - [Contact Us](/contact-us.md): Open source project to help you document your event-driven architectures. ## enterprise Open source project to help you document your event-driven architectures. - [EventCatalog Enterprise Support](/enterprise.md): Open source project to help you document your event-driven architectures. ## features ### ai-assistant AI-powered assistant for your EventCatalog documentation. - [Bring your own models to find the information you need in seconds, not days.](/features/ai-assistant.md): AI-powered assistant for your EventCatalog documentation. ### business-flows Document business flows and processes with EventCatalog. - [Go from documentation to design](/features/business-flows.md): Document business flows and processes with EventCatalog. ### change Merge your team catalogs into a single view with EventCatalog Federation. - [Track changes across your architecture](/features/change.md): Merge your team catalogs into a single view with EventCatalog Federation. ### documentation Document domains, services, events, and schemas as first-class architectural primitives. Stored in Git, owned by teams. - [Architecture documentation your team will actually use.](/features/documentation.md): Document domains, services, events, and schemas as first-class architectural primitives. Stored in Git, owned by teams. ### query Query your architecture with AI. Built-in MCP server with 15 tools, natural language Q&A, and llms.txt auto-generation. - [Ask your architectureanything.](/features/query.md): Query your architecture with AI. Built-in MCP server with 15 tools, natural language Q&A, and llms.txt auto-generation. ### visualization See how your services connect, how data flows, and how messages move through your system. Generated from your docs, always accurate. - [See your system as it actually works.](/features/visualization.md): See how your services connect, how data flows, and how messages move through your system. Generated from your docs, always accurate. ## federation Merge your team catalogs into a single view with EventCatalog Federation. - [EventCatalog for Enterprise](/federation.md): Merge your team catalogs into a single view with EventCatalog Federation. ## index%20copy - [Page Not Found](/index%20copy.md) ## integrations Example integrations page layout - [Integrate with your tools](/integrations.md): Example integrations page layout ### amazon-api-gateway - [Amazon API Gateway](/integrations/amazon-api-gateway.md) ### amazon-eventbridge - [Amazon EventBridge](/integrations/amazon-eventbridge.md) ### apicurio - [Apicurio Registry](/integrations/apicurio.md) ### asyncapi - [AsyncAPI](/integrations/asyncapi.md) ### atlassian-compass - [Atlassian Compass](/integrations/atlassian-compass.md) ### aws-glue-registry - [AWS Glue Schema Registry](/integrations/aws-glue-registry.md) ### azure-schema-registry - [Azure Schema Registry](/integrations/azure-schema-registry.md) ### backstage - [Backstage](/integrations/backstage.md) ### claude - [Claude Desktop](/integrations/claude.md) ### confluent-schema-registry - [Confluent Schema Registry](/integrations/confluent-schema-registry.md) ### cursor - [Cursor](/integrations/cursor.md) ### drawio - [DrawIO](/integrations/drawio.md) ### figjam - [FigJam](/integrations/figjam.md) ### github - [GitHub](/integrations/github.md) ### graphql - [GraphQL](/integrations/graphql.md) ### helm - [Helm](/integrations/helm.md) ### hookdeck - [Hookdeck integration](/integrations/hookdeck.md) ### icepanel - [IcePanel](/integrations/icepanel.md) ### lucid - [Lucid](/integrations/lucid.md) ### miro - [Miro](/integrations/miro.md) ### old Integrate EventCatalog with your favorite tools and services. - [Discoverability forIntegrate with your systems using](/integrations/old.md): Integrate EventCatalog with your favorite tools and services. ### openapi - [OpenAPI](/integrations/openapi.md) ### windsurf - [Windsurf](/integrations/windsurf.md) ## landing-page-v1 Bring discoverability to your event-driven architectures - [Know what exists.Know who owns it.Know how it connects.](/landing-page-v1.md): Bring discoverability to your event-driven architectures ## landing-page-v2 Turn your distributed architecture into a searchable, visual, AI-queryable source of truth. Self-hosted, open source. - [Know what exists. Know who owns it. Know how it connects.](/landing-page-v2.md): Turn your distributed architecture into a searchable, visual, AI-queryable source of truth. Self-hosted, open source. ## newsletter Get notified of EventCatalog updates directly to your inbox - [Email Sign Up - EventCatalog](/newsletter.md): Get notified of EventCatalog updates directly to your inbox ## pricing EventCatalog pricing plans for teams of all sizes - [Pricing - EventCatalog](/pricing.md): EventCatalog pricing plans for teams of all sizes ### small-business-program Discounted EventCatalog pricing for startups and small businesses - [Small Business Program - EventCatalog](/pricing/small-business-program.md): Discounted EventCatalog pricing for startups and small businesses ## privacy Privacy Policy for EventCatalog - [Privacy Policy](/privacy.md): Privacy Policy for EventCatalog ## product ### documentation Merge your team catalogs into a single view with EventCatalog Federation. - [Architecture documentation for your teams](/product/documentation.md): Merge your team catalogs into a single view with EventCatalog Federation. ## search - [Search the documentation](/search.md) ## services Get expert guidance on event-driven architecture governance and implementation - [Expert support for your event-driven journey](/services.md): Get expert guidance on event-driven architecture governance and implementation ## services2 - [EventCatalog Professional Services](/services2.md) ## specifications ### asyncapi Turn your AsyncAPI specifications into a cohesive, discoverable, and interactive documentation portal. - [Discoverability forYour central hub for](/specifications/asyncapi.md): Turn your AsyncAPI specifications into a cohesive, discoverable, and interactive documentation portal. ## support Open source project to help you document your event-driven architectures. - [Help fix discoverability Sponsor our project](/support.md): Open source project to help you document your event-driven architectures. ## terms Terms of Service for EventCatalog - [Terms of Service](/terms.md): Terms of Service for EventCatalog ## use-cases Discover how teams use EventCatalog to document, visualize, and govern their event-driven architectures. - [How teams are using EventCatalog](/use-cases.md): Discover how teams use EventCatalog to document, visualize, and govern their event-driven architectures. ### ai-llm-context-foundation Give your AI assistants the architectural context they need. EventCatalog becomes the source of truth that LLMs can query to understand your domains, services, events, and organizational boundaries. - [AI/LLM Context Foundation](/use-cases/ai-llm-context-foundation.md): Give your AI assistants the architectural context they need. EventCatalog becomes the source of truth that LLMs can query to understand your domains, services, events, and organizational boundaries. ### architecture-documentation Document your software architecture with a tool designed specifically for software primitives. Bring all your architecture artifacts into one place, version them with Git, and make them discoverable for humans and AI. - [Architecture Documentation](/use-cases/architecture-documentation.md): Document your software architecture with a tool designed specifically for software primitives. Bring all your architecture artifacts into one place, version them with Git, and make them discoverable for humans and AI. ### architecture-planning Plan your future architecture alongside your current state. Use drafts, versioning, and visual comparison to design changes before writing code. - [Architecture Planning](/use-cases/architecture-planning.md): Plan your future architecture alongside your current state. Use drafts, versioning, and visual comparison to design changes before writing code. ### automated-documentation Sync documentation from your OpenAPI and AsyncAPI specs. Automate what changes, keep manual control over business context. - [Automated Documentation](/use-cases/automated-documentation.md): Sync documentation from your OpenAPI and AsyncAPI specs. Automate what changes, keep manual control over business context. ### beyond-api-documentation EventCatalog is more than an API documentation tool. Capture business context, flows, domains, team ownership, and ubiquitous language alongside your technical specifications. - [Not Just an API Documentation Tool](/use-cases/beyond-api-documentation.md): EventCatalog is more than an API documentation tool. Capture business context, flows, domains, team ownership, and ubiquitous language alongside your technical specifications. ### breaking-change-detection Understand the downstream impact of schema changes before they reach production. Visualize consumers, detect breaking changes with AI, and coordinate changes across distributed teams. - [Breaking Change Detection](/use-cases/breaking-change-detection.md): Understand the downstream impact of schema changes before they reach production. Visualize consumers, detect breaking changes with AI, and coordinate changes across distributed teams. ### ci-cd-integration Integrate EventCatalog into your CI/CD pipelines. Rebuild your catalog automatically when schemas change, on a schedule, or on demand. - [CI/CD Integration](/use-cases/ci-cd-integration.md): Integrate EventCatalog into your CI/CD pipelines. Rebuild your catalog automatically when schemas change, on a schedule, or on demand. ### domain-driven-design Document your domain model with first-class support for domains, bounded contexts, ubiquitous language, and team ownership. Map business context to technical implementation. - [Domain-Driven Design Documentation](/use-cases/domain-driven-design.md): Document your domain model with first-class support for domains, bounded contexts, ubiquitous language, and team ownership. Map business context to technical implementation. ### schema-documentation Transform technical schemas into business-contextualized documentation. Sync from any source, enrich with ownership and purpose, track changes over time. - [Enrich Schemas with Documentation](/use-cases/schema-documentation.md): Transform technical schemas into business-contextualized documentation. Sync from any source, enrich with ownership and purpose, track changes over time. ## workshops Hands-on workshops to master event-driven architecture and EventCatalog. - [De-Risk Your EDA. Scale with Confidence.](/workshops.md): Hands-on workshops to master event-driven architecture and EventCatalog. ## docs A collection of guides to help you understand domains and how they work with EventCatalog. - [Creating domains](/docs.md): A collection of guides to help you understand domains and how they work with EventCatalog. ### adding-to-services - [Adding to services](/docs/adding-to-services.md) ### amazon-apigateway Amazon API Gateway integration documentation for EventCatalog - [Amazon API Gateway](/docs/amazon-apigateway.md): Amazon API Gateway integration documentation for EventCatalog ### amazon-eventbridge Amazon EventBridge integration documentation for EventCatalog - [Amazon EventBridge](/docs/amazon-eventbridge.md): Amazon EventBridge integration documentation for EventCatalog ### api - [Channel frontmatter API](/docs/api/channel-api.md): Understanding the API for channels. - [Code blocks](/docs/api/code-blocks.md): Understanding what is possible with EventCatalog code blocks - [Command frontmatter API](/docs/api/command-api.md): Understanding the API for commands. - [eventcatalog.config.js](/docs/api/config.md): Understanding the configuration file for EventCatalog. - [Data frontmatter API](/docs/api/data-api.md): Understanding the API for data. - [Data Product frontmatter API](/docs/api/data-product-api.md): Understanding the API for data products - [Domain frontmatter API](/docs/api/domain-api.md): Understanding the API for domains. - [Entity frontmatter API](/docs/api/entity-api.md): Understanding the API for entities. - [Event frontmatter API](/docs/api/event-api.md): Understanding the API for events. - [Flow frontmatter API](/docs/api/flow-api.md): Understanding the API for flows. - [EventCatalog CLI](/docs/api/overview.md): Understand the CLI of EventCatalog - [Query frontmatter API](/docs/api/query-api.md): Understanding the API for queries. - [Service frontmatter API](/docs/api/service-api.md): Understanding the API for services. ### apicurio Apicurio Registry integration for EventCatalog - [Apicurio Registry](/docs/apicurio.md): Apicurio Registry integration for EventCatalog ### ask-your-architecture Learn how to integrate your LLM models with EventCatalog. - [Ask your architecture](/docs/ask-your-architecture.md): Learn how to integrate your LLM models with EventCatalog. ### asyncapi AsyncAPI integration documentation for EventCatalog - [AsyncAPI](/docs/asyncapi.md): AsyncAPI integration documentation for EventCatalog ### aws-glue-schema-registry AWS Glue Schema Registry integration documentation for EventCatalog - [AWS Glue Schema Registry](/docs/aws-glue-schema-registry.md): AWS Glue Schema Registry integration documentation for EventCatalog ### azure-schema-registry Azure Schema Registry integration for EventCatalog - [Azure Schema Registry](/docs/azure-schema-registry.md): Azure Schema Registry integration for EventCatalog ### backstage Backstage integration with EventCatalog - [Backstage](/docs/backstage.md): Backstage integration with EventCatalog ### bring-your-own-documentation Bring your own documentation to EventCatalog. Add global custom pages or attach docs directly to individual resources. - [Bring your own documentation](/docs/bring-your-own-documentation.md): Bring your own documentation to EventCatalog. Add global custom pages or attach docs directly to individual resources. ### category - [Contributing to the Miro App](/docs/category/contributing.md): Help improve the EventCatalog Miro App - [Diagrams](/docs/category/diagrams.md): Learn how to document your architecture with reusable diagrams - [EventCatalog Studio Documentation](/docs/category/diagrams-1.md): EventCatalog Studio Documentation - [EventCatalog Studio Documentation](/docs/category/enterprise.md): EventCatalog Studio Documentation - [EventCatalog Studio Documentation](/docs/category/getting-started.md): EventCatalog Studio Documentation - [Getting Started with the Miro App](/docs/category/getting-started-1.md): Install and connect EventCatalog to Miro - [Miro App Guides](/docs/category/guides.md): Learn how to use the EventCatalog Miro app to visualize and manage your architecture - [Import OpenAPI & AsyncAPI into Miro](/docs/category/import-from-specifications.md): Use EventCatalog plugins to import your API specifications and visualize them in Miro - [EventCatalog Studio Documentation](/docs/category/organization--teams.md): EventCatalog Studio Documentation - [EventCatalog Studio Documentation](/docs/category/project.md): EventCatalog Studio Documentation - [Using AI with the Miro App](/docs/category/using-ai.md): Use AI to turn your Miro board designs into EventCatalog documentation ### changelogs A collection of guides to help you understand changelogs and how they work with EventCatalog. - [Changelogs](/docs/changelogs.md): A collection of guides to help you understand changelogs and how they work with EventCatalog. ### channels A collection of guides to help you understand channels and how they work with EventCatalog. - [Channels](/docs/channels.md): A collection of guides to help you understand channels and how they work with EventCatalog. - [Ownership & components](/docs/channels/ownership-and-components.md): A collection of guides to help you understand entities and how they work with EventCatalog. - [Versioning & lifecycle](/docs/channels/versioning-and-lifecycle.md): A collection of guides to help you understand entities and how they work with EventCatalog. - [Versioning & lifecycle](/docs/channels/versioning-and-lifecycle.md): A collection of guides to help you understand entities and how they work with EventCatalog. ### cli The EventCatalog CLI allows you to interact with your EventCatalog directly from the command line. Execute any SDK function without writing code. - [EventCatalog CLI](/docs/cli.md): The EventCatalog CLI allows you to interact with your EventCatalog directly from the command line. Execute any SDK function without writing code. - [Channels CLI Commands](/docs/cli/cli-channels.md): Manage channels in your EventCatalog from the command line. - [Commands CLI Commands](/docs/cli/cli-commands.md): Manage commands in your EventCatalog from the command line. - [Custom Docs CLI Commands](/docs/cli/cli-custom-docs.md): Manage custom docs in your EventCatalog from the command line. - [Data Products CLI Commands](/docs/cli/cli-data-products.md): Manage data products in your EventCatalog from the command line. - [Data Stores CLI Commands](/docs/cli/cli-data-stores.md): Manage data stores in your EventCatalog from the command line. - [Diagrams CLI Commands](/docs/cli/cli-diagrams.md): Manage diagrams in your EventCatalog from the command line. - [Domains CLI Commands](/docs/cli/cli-domains.md): Manage domains in your EventCatalog from the command line. - [Entities CLI Commands](/docs/cli/cli-entities.md): Manage entities in your EventCatalog from the command line. - [Events CLI Commands](/docs/cli/cli-events.md): Manage events in your EventCatalog from the command line. - [Export CLI Commands](/docs/cli/cli-export.md): Manage export in your EventCatalog from the command line. - [Governance CLI Commands](/docs/cli/cli-governance.md): Manage governance in your EventCatalog from the command line. - [Import CLI Commands](/docs/cli/cli-import.md): Manage import in your EventCatalog from the command line. - [Messages CLI Commands](/docs/cli/cli-messages.md): Manage messages in your EventCatalog from the command line. - [Queries CLI Commands](/docs/cli/cli-queries.md): Manage queries in your EventCatalog from the command line. - [Services CLI Commands](/docs/cli/cli-services.md): Manage services in your EventCatalog from the command line. - [Snapshots CLI Commands](/docs/cli/cli-snapshots.md): Manage snapshots in your EventCatalog from the command line. - [Teams CLI Commands](/docs/cli/cli-teams.md): Manage teams in your EventCatalog from the command line. - [Users CLI Commands](/docs/cli/cli-users.md): Manage users in your EventCatalog from the command line. - [Utilities CLI Commands](/docs/cli/cli-utilities.md): Manage utilities in your EventCatalog from the command line. ### commands A collection of guides to help you understand commands and how they work with EventCatalog. - [Commands](/docs/commands.md): A collection of guides to help you understand commands and how they work with EventCatalog. ### components This section describes what components can be used in EventCatalog.. - [Components](/docs/components.md): This section describes what components can be used in EventCatalog.. - [Components](/docs/components/list.md): This section describes what components can be used in EventCatalog.. ### configuration - [Configuration](/docs/configuration/getting-started.md): Learn how to configure EventCatalog. ### confluent-schema-registry Confluent Schema Registry integration for EventCatalog - [Confluent Schema Registry](/docs/confluent-schema-registry.md): Confluent Schema Registry integration for EventCatalog ### contributing - [Contributing to EventCatalog](/docs/contributing/overview.md): Understand how to contribute of EventCatalog ### custom-components A collection of guides to help your understand and build custom components inside your catalog. - [Write your own components](/docs/custom-components.md): A collection of guides to help your understand and build custom components inside your catalog. ### customize-sidebars A collection of guides to help you customize the sidebars in your catalog. - [Customize Sidebars](/docs/customize-sidebars.md): A collection of guides to help you customize the sidebars in your catalog. ### customize-visualizer A collection of guides to help you customize the visualizer in your catalog. - [Customize Visualizer](/docs/customize-visualizer.md): A collection of guides to help you customize the visualizer in your catalog. ### data A collection of guides to help you understand data resources and how they work with EventCatalog. - [Data Stores](/docs/data.md): A collection of guides to help you understand data resources and how they work with EventCatalog. - [Ownership & components](/docs/data/ownership-and-components.md): A collection of guides to help you understand entities and how they work with EventCatalog. ### data-products A collection of guides to help you understand data products and how they work with EventCatalog. - [Data Products](/docs/data-products.md): A collection of guides to help you understand data products and how they work with EventCatalog. ### design This section describes how to use EventCatalog to design workflows and new ideas. - [Design](/docs/design.md): This section describes how to use EventCatalog to design workflows and new ideas. ### development - [Analytics](/docs/development/analytics/overview.md): Track page views and user behavior across your catalog - [Custom Tools](/docs/development/ask-your-architecture/eventcatalog-assistant/bring-your-own-tools.md): Extend EventCatalog Assistant with custom tools to bring real-time data, metrics, and integrations into your architecture conversations - [Configuration](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md): Configure EventCatalog Assistant - [What is EventCatalog Assistant?](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md): Learn how EventCatalog Assistant helps users explore documentation using natural language. - [AI with EventCatalog](/docs/development/ask-your-architecture/intro.md): Architecture documentation for humans and AI - [Getting started](/docs/development/ask-your-architecture/mcp-server/getting-started.md): Connect MCP clients to your EventCatalog - [MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md): Connect AI tools to your architecture catalog - [Skills](/docs/development/ask-your-architecture/skills.md): Pre-built AI skills for generating EventCatalog documentation - [Installing AI Skills](/docs/development/ask-your-architecture/skills/installation.md): How to install EventCatalog AI skills for your AI coding agent - [AI Skills](/docs/development/ask-your-architecture/skills/introduction.md): Pre-built AI skills to help you document your architecture with EventCatalog - [Slack Integration](/docs/development/ask-your-architecture/slack-integration.md): Query your EventCatalog directly from Slack using the EventCatalog Slack Bot. - [Deployment](/docs/development/ask-your-architecture/slack-integration/deployment.md): Deploy the bot to production - [Installation](/docs/development/ask-your-architecture/slack-integration/installation.md): Install and configure the bot - [Slack integration](/docs/development/ask-your-architecture/slack-integration/introduction.md): Query architecture documentation directly from Slack - [Slack app setup](/docs/development/ask-your-architecture/slack-integration/slack-app-setup.md): Create and configure your Slack app - [Troubleshooting](/docs/development/ask-your-architecture/slack-integration/troubleshooting.md): Common issues and solutions - [Using the bot](/docs/development/ask-your-architecture/slack-integration/usage.md): Query architecture documentation from Slack - [Enabling authentication](/docs/development/authentication/enabling-authentication.md): Enabling authentication for EventCatalog - [Authentication Guide](/docs/development/authentication/introduction.md): Introduction to EventCatalog Authentication - [Providers](/docs/development/authentication/providers.md): Authentication for EventCatalog - [Setting up Auth0](/docs/development/authentication/providers/setting-up-auth0.md): Setting up Auth0 authentication for EventCatalog - [Setting up Azure AD (Entra ID)](/docs/development/authentication/providers/setting-up-azure-ad.md): Setting up Microsoft Entra ID authentication for EventCatalog - [Setting up GitHub](/docs/development/authentication/providers/setting-up-github.md): Setting up GitHub authentication for EventCatalog - [Setting up Google](/docs/development/authentication/providers/setting-up-google.md): Setting up Google authentication for EventCatalog - [Setting up Okta](/docs/development/authentication/providers/setting-up-okta.md): Setting up Okta authentication for EventCatalog - [Role-Based Access Control (RBAC) Middleware](/docs/development/authentication/rbac-middleware.md): Implementing role-based access control with custom middleware in EventCatalog - [Adding global documentation](/docs/development/bring-your-own-documentation/custom-pages/adding-custom-docs.md): Adding global documentation to your EventCatalog - [Components](/docs/development/bring-your-own-documentation/custom-pages/components.md): Component list for custom pages - [Introduction](/docs/development/bring-your-own-documentation/custom-pages/introduction.md): Customize documentation in EventCatalog - [Adding custom page owners](/docs/development/bring-your-own-documentation/custom-pages/owners.md): Adding owners to custom pages with EventCatalog. - [Bring your own documentation](/docs/development/bring-your-own-documentation/introduction.md): Bring your own documentation to EventCatalog - [Adding resource-level documentation](/docs/development/bring-your-own-documentation/resource-docs/adding-resource-docs.md): Place MDX files in a docs/ directory alongside any resource. - [Configure categories](/docs/development/bring-your-own-documentation/resource-docs/categories.md): Control sidebar labels and ordering for doc type groups using category files. - [Resource-level documentation](/docs/development/bring-your-own-documentation/resource-docs/introduction.md): Attach documentation pages to any resource in your catalog. - [Version documents](/docs/development/bring-your-own-documentation/resource-docs/versioning.md): Keep historical versions of resource docs alongside versioned resources. - [](/docs/development/components/components/01a-attachments.md): Learn how to add attachments to your EventCatalog resources - [](/docs/development/components/components/03a-entitymap.md): Component for EventCatalog - [](/docs/development/components/components/accordian.md): Component for EventCatalog - [](/docs/development/components/components/accordian-group.md): Component for EventCatalog - [Admonitions](/docs/development/components/components/admonitions.md): Component for EventCatalog - [](/docs/development/components/components/channel-information.md): Render channel into EventCatalog - [](/docs/development/components/components/design.md): Component for embedding EventCatalog Studio diagrams into your documentation - [](/docs/development/components/components/embed-diagrams/drawio.md): Embed a DrawIO diagram in your documentation - [](/docs/development/components/components/embed-diagrams/figjam.md): Embed a FigJam diagram in your documentation - [](/docs/development/components/components/embed-diagrams/icepanel.md): Embed an IcePanel diagram in your documentation - [](/docs/development/components/components/embed-diagrams/lucid.md): Embed a Lucid diagram in your documentation - [](/docs/development/components/components/embed-diagrams/miro.md): Embed a Miro board in your documentation - [](/docs/development/components/components/flow.md): Render a Flow in any EventCatalog page - [](/docs/development/components/components/link.md): Create links in your documentation - [](/docs/development/components/components/mermaid-file-loader.md): Component for embedding EventCatalog Studio diagrams into your documentation - [](/docs/development/components/components/message-table.md): Component for displaying messages for services and domains in EventCatalog - [](/docs/development/components/components/nodegraph.md): Component for EventCatalog - [](/docs/development/components/components/openapi.md): Component for EventCatalog - [](/docs/development/components/components/remote-schema.md): Component for fetching and rendering remote schemas in EventCatalog - [](/docs/development/components/components/resource-group-table.md): Component for displaying EventCatalog grouped resources in EventCatalog - [](/docs/development/components/components/resource-link.md): Create links in your documentation to resources in EventCatalog - [](/docs/development/components/components/schema.md): Component for EventCatalog - [](/docs/development/components/components/schema-viewer.md): Render JSON schema in EventCatalog - [](/docs/development/components/components/steps.md): Render steps into EventCatalog - [](/docs/development/components/components/tabs.md): Render tabs in your EventCatalog pages - [](/docs/development/components/components/tiles.md): Render tiles into EventCatalog - [Using IcePanel](/docs/development/components/icepanel.md): Understanding how to embed IcePanel diagrams in EventCatalog - [Using mermaid](/docs/development/components/mermaid.md): Understanding how to use mermaid with EventCatalog - [Using plantuml](/docs/development/components/plantuml.md): Understanding how to use plantuml with EventCatalog - [Resource references](/docs/development/components/resource-references.md): Create inline links to resources with hover tooltips - [Reusable snippets](/docs/development/components/snippets.md): Understanding how to use snippets with EventCatalog - [Using Structurizr](/docs/development/components/structurizr.md): Understanding how to use Structurizr with EventCatalog - [Using components](/docs/development/components/using-components.md): Understanding components - [Configuration](/docs/development/configuration.md): Configure EventCatalog - [Configure RSS feeds](/docs/development/configuration/rss-feed.md): Configure RSS feeds for EventCatalog - [Customization Documentation](/docs/development/customization.md): Learn how to customize EventCatalog. - [Adding components](/docs/development/customization/custom-components/adding-components.md): Adding custom components to your catalog - [Component styling](/docs/development/customization/custom-components/component-styling.md): Adding custom components to your catalog - [Introduction](/docs/development/customization/custom-components/introduction.md): Add custom components to your catalog - [Client side scripts](/docs/development/customization/custom-components/javascript-components.md): Adding client side scripts to EventCatalog components - [What is MDX?](/docs/development/customization/custom-components/what-is-mdx.md): What is MDX? - [Customize landing page](/docs/development/customization/customize-landing-page.md): Customize landing pages in EventCatalog - [Application Sidebar](/docs/development/customization/customize-sidebars/application-sidebar.md): Pick and customize the application sidebar. - [Documentation sidebar](/docs/development/customization/customize-sidebars/documentation-sidebar.md): Pick and customize the documentation sidebar. - [Customize tables](/docs/development/customization/customize-tables.md): Customize tables in EventCatalog - [Customize visualizer nodes](/docs/development/customization/customize-visualizer/visualizer-nodes.md): Customize the color, label and icon of the visualizer nodes. - [Themes](/docs/development/customization/themes.md): Customize the look and feel of your catalog with built-in themes, dark/light mode, and custom themes - [Deployment guides](/docs/development/deployment.md): This section contains deployment tutorials for developers. This includes tutorials for deploying to Heroku, AWS, and other cloud providers. - [Building Eventcatalog](/docs/development/deployment/build-and-deploy.md): This document describes step by step how to deploy EventCatalog. - [Building Eventcatalog](/docs/development/deployment/build-ssr-mode.md): This document describes step by step how to deploy EventCatalog. - [Deployment Workflows](/docs/development/deployment/deployment-workflows.md): This document describes different deployment workflows for EventCatalog. - [Hosting](/docs/development/deployment/hosting-options.md): This document describes hosting options for EventCatalog. - [EventCatalog Licenses](/docs/development/deployment/licenses.md): This document describes how EventCatalog licenses work online and offline. - [Embed Designs into EventCatalog](/docs/development/design/embed-designs-into-eventcatalog.md): Embed Designs into EventCatalog with EventCatalog - [Further Reading](/docs/development/design/further-reading.md): Further Reading with EventCatalog - [Import Resources into Studio](/docs/development/design/import-resources.md): Import Resources into Studio with EventCatalog - [Documentation to Design](/docs/development/design/intro.md): Documentation to Design with EventCatalog - [EventCatalog Linter](/docs/development/developer-tools/eventcatalog-linter.md): Validate your EventCatalog frontmatter schemas and resource references with the comprehensive EventCatalog Linter - [AI Reviewer](/docs/development/developer-tools/github-action.md): Integrate EventCatalog with GitHub Actions - [LLMS.txt](/docs/development/developer-tools/llms.txt.md): Understanding how to use LLMS.txt with EventCatalog and your LLMs - [MCP Server](/docs/development/developer-tools/mcp-server.md): This section contains tutorials for the EventCatalog MCP Server. - [schemas.txt](/docs/development/developer-tools/schemas.txt.md): Understanding how to use schemas.txt with EventCatalog and your schemas - [Getting Started Documentation](/docs/development/getting-started.md): Learn how to install EventCatalog. - [Development and build](/docs/development/getting-started/develop-and-build.md): Understanding how to develop and build EventCatalog - [Fundamentals](/docs/development/getting-started/fundamentals.md): Understanding the fundamentals of EventCatalog - [Installation](/docs/development/getting-started/installation.md): Understanding how to install EventCatalog locally - [Why EventCatalog?](/docs/development/getting-started/introduction.md): EventCatalog is an open source project to help you bring discoverability to your event-driven architecture. - [Project structure](/docs/development/getting-started/project-structure.md): Understanding how to structure your EventCatalog project - [CLI & CI/CD](/docs/development/governance/architecture-change-detection/ci-cd.md): Run governance checks locally and in your CI/CD pipeline - [Configuration](/docs/development/governance/architecture-change-detection/configuration.md): Configure governance rules with triggers, resource filters, and actions - [Architecture Change Detection](/docs/development/governance/architecture-change-detection/introduction.md): Know when your event-driven architecture changes. Get notified when services start or stop producing and consuming messages. - [Pipeline gates](/docs/development/governance/architecture-change-detection/pipeline-gates.md): Block merges automatically when governance rules trigger - [Recipes](/docs/development/governance/architecture-change-detection/recipes.md): Common governance configurations you can copy and adapt - [Webhook Payload](/docs/development/governance/architecture-change-detection/webhooks.md): CloudEvents 1.0 payload format sent by governance webhook actions - [Authentication](/docs/development/guides/auth.md): Authentication for EventCatalog - [Creating changelogs](/docs/development/guides/changelogs/adding-changelogs.md): Creating and managing changelogs within EventCatalog. - [Automated diffs](/docs/development/guides/changelogs/automated-changelogs.md): Understanding how EventCatalog automates diffs for your files - [Understanding changelogs](/docs/development/guides/changelogs/introduction.md): What are changelogs - [Creating channels](/docs/development/guides/channels/adding-channels.md): Creating and managing channels within EventCatalog. - [Routing messages through channels](/docs/development/guides/channels/adding-messages-to-services.md): Understanding how to route messages through channels - [Understanding channels](/docs/development/guides/channels/introduction.md): What are channels? Why are they useful for event-driven architectures? - [Components](/docs/development/guides/channels/ownership-and-components/components.md): Component list for domains - [Adding channel owners](/docs/development/guides/channels/ownership-and-components/owners.md): Adding owners to channels with EventCatalog. - [Service changelogs](/docs/development/guides/channels/versioning-and-lifecycle/changelog.md): Adding changelogs to your channels - [Versioning](/docs/development/guides/channels/versioning-and-lifecycle/versioning.md): Learn how to version channels - [Customize your docs sidebar](/docs/development/guides/customize-your-sidebar.md): Customize your docs sidebar to show your own content. - [Creating data products](/docs/development/guides/data-products/adding-data-products.md): Creating and managing data products - [Adding to domains](/docs/development/guides/data-products/adding-to-domains.md): Organize data products within domains - [Data Contracts](/docs/development/guides/data-products/contracts.md): Define schema contracts for outputs - [Inputs and outputs](/docs/development/guides/data-products/inputs-and-outputs.md): Define dependencies and consumers - [Understanding data products](/docs/development/guides/data-products/introduction.md): Data as a product for analytics and insights - [Versioning](/docs/development/guides/data-products/versioning.md): Version data products and track changes - [Adding schemas to data stores](/docs/development/guides/data/03a-adding-schemas-to-data-stores.md): Adding schemas to data stores - [Creating data stores](/docs/development/guides/data/adding-data.md): Creating and managing services within EventCatalog. - [Understanding data stores](/docs/development/guides/data/introduction.md): What are data resources in EventCatalog? - [Components](/docs/development/guides/data/ownership-and-components/components.md): Component list for data stores - [Adding data store owners](/docs/development/guides/data/ownership-and-components/owners.md): Adding owners to data stores with EventCatalog. - [Data store changelogs](/docs/development/guides/data/versioning-and-lifecycle/changelog.md): Adding changelogs to your data stores - [Deprecating data stores](/docs/development/guides/data/versioning-and-lifecycle/deprecating.md): Deprecating data stores with EventCatalog. - [Versioning](/docs/development/guides/data/versioning-and-lifecycle/versioning.md): Learn how to version data stores - [Comparing diagram versions (Scale)](/docs/development/guides/diagrams/comparing-diagrams.md): Side-by-side version comparison for diagrams with EventCatalog Scale - [Creating diagrams](/docs/development/guides/diagrams/creating-diagrams.md): How to create and organize diagrams in EventCatalog - [Using diagrams with LLMs](/docs/development/guides/diagrams/diagrams-with-llms.md): How to use your diagrams with AI assistants and LLM tools - [Understanding diagrams](/docs/development/guides/diagrams/introduction.md): Bring your own diagrams to EventCatalog - version them, compare them, and assign them to any resource - [Referencing diagrams from resources](/docs/development/guides/diagrams/referencing-diagrams.md): How to link diagrams to domains, services, messages, and other resources - [Versioning diagrams](/docs/development/guides/diagrams/versioning-diagrams.md): How to create and manage versioned diagrams in EventCatalog - [Adding data products to domains](/docs/development/guides/domains/creating-domains/adding-data-products-to-domains.md): Organize analytics and data assets within domain boundaries. - [Creating domains](/docs/development/guides/domains/creating-domains/adding-domains.md): Creating and managing domains within EventCatalog. - [Adding messages to domains](/docs/development/guides/domains/creating-domains/adding-messages-to-domains.md): Document event flows at the domain level. - [Adding services to domains](/docs/development/guides/domains/creating-domains/adding-services-to-domains.md): Creating and managing domains within EventCatalog. - [Creating subdomains](/docs/development/guides/domains/creating-domains/subdomains.md): Creating and managing subdomains within EventCatalog. - [Domain Integration Map](/docs/development/guides/domains/domain-integration-map.md): Component list for domains - [Creating entities](/docs/development/guides/domains/entities/adding-entities.md): Creating and managing entities within EventCatalog. - [Adding entities to domains](/docs/development/guides/domains/entities/adding-entities-to-domains.md): Creating and managing entities within EventCatalog. - [Entity Maps](/docs/development/guides/domains/entities/domain-entity-map.md): Visualize and explore entity relationships within your domains and services using EventCatalog's Entity Map feature. - [What are entities?](/docs/development/guides/domains/entities/introduction.md): What are entities? Why are they useful for event-driven architectures? - [Understanding domains](/docs/development/guides/domains/introduction.md): What are domains? Why are they useful for event-driven architectures? - [Ubiquitous language](/docs/development/guides/domains/ownership-and-language/adding-ubiquitous-language.md): Creating a Ubiquitous-language dictionary for your domain - [Adding domain owners](/docs/development/guides/domains/ownership-and-language/owners.md): Adding owners to domains with EventCatalog. - [Domain changelogs](/docs/development/guides/domains/versioning-and-changelogs/changelog.md): Adding changelogs to your domains - [Versioning](/docs/development/guides/domains/versioning-and-changelogs/versioning.md): Learn how to version domains - [EventCatalog Assistant](/docs/development/guides/eventcatalog-assistant.md): EventCatalog Assistant - [Creating flows](/docs/development/guides/flows/adding-flows.md): Creating and managing flows within EventCatalog. - [Adding flows to domains](/docs/development/guides/flows/adding-flows-to-domains.md): Associate flows with domains in EventCatalog - [Adding flows to services](/docs/development/guides/flows/adding-flows-to-services.md): Associate flows with services in EventCatalog - [Creating a flow (with AI)](/docs/development/guides/flows/create-flow-with-ai.md): Interactively document business flows using an AI agent skill. - [Flow nodes types](/docs/development/guides/flows/flow-nodes.md): Flow nodes types within EventCatalog. - [Understanding flows](/docs/development/guides/flows/introduction.md): What are flows? Why are they useful for event-driven architectures? - [Versioning](/docs/development/guides/flows/versioning.md): Learn how to version flows - [Creating commands](/docs/development/guides/messages/commands/adding-commands.md): Creating and managing commands within EventCatalog. - [Understanding commands](/docs/development/guides/messages/commands/introduction.md): What are commands? Why are they useful for event-driven architectures? - [Adding schemas to messages](/docs/development/guides/messages/common/adding-schemas.md): Understand how to add schemas to your messages. - [Event changelogs](/docs/development/guides/messages/common/changelog.md): Adding changelogs to your events - [Components](/docs/development/guides/messages/common/components.md): Component list for domains - [Deprecating messages](/docs/development/guides/messages/common/deprecating.md): Deprecating messages with EventCatalog. - [Creating draft messages](/docs/development/guides/messages/common/draft-messages.md): Creating and managing draft messages within EventCatalog. - [Message examples](/docs/development/guides/messages/common/examples.md): Add usage examples to your messages for quick reference. - [Grouping messages](/docs/development/guides/messages/common/grouping-messages.md): Learn how to group related messages in the visualiser to reduce clutter. - [Assigning events to services](/docs/development/guides/messages/common/map-to-producers-and-consumers.md): Understanding how to link events to services - [Adding event owners](/docs/development/guides/messages/common/owners.md): Adding owners to events with EventCatalog. - [Patterns for shared messages](/docs/development/guides/messages/common/shared-messages-across-boundaries.md): Understand the patterns for shared messages in EventCatalog. - [Versioning](/docs/development/guides/messages/common/versioning.md): Learn how to version events - [Creating events](/docs/development/guides/messages/events/adding-events.md): Creating and managing events within EventCatalog. - [Understanding events](/docs/development/guides/messages/events/introduction.md): What are events? Why are they useful for event-driven architectures? - [Overview](/docs/development/guides/messages/overview.md): What are messags in EventCatalog? - [Creating queries](/docs/development/guides/messages/queries/adding-queries.md): Creating and managing queries within EventCatalog. - [Understanding queries](/docs/development/guides/messages/queries/introduction.md): What are queries? Why are they useful for event-driven architectures? - [Creating teams](/docs/development/guides/owners/teams/adding-teams.md): Creating and managing teams within EventCatalog. - [Understanding teams](/docs/development/guides/owners/teams/introduction.md): What are teams in EventCatalog? - [Creating users](/docs/development/guides/owners/users/adding-users.md): Creating and managing users within EventCatalog. - [Understanding users](/docs/development/guides/owners/users/introduction.md): What are users in EventCatalog? - [Consumer Field Usage](/docs/development/guides/schemas/field-usage.md): Track which services depend on specific message fields. - [Fields Explorer](/docs/development/guides/schemas/fields-explorer.md): Browse, search, and trace schema fields across all messages in your catalog. - [Getting started with schemas](/docs/development/guides/schemas/introduction.md): Getting started with schemas in EventCatalog - [Schema API](/docs/development/guides/schemas/schema-api.md): Get API (GET) access to your schemas for mocking or testing - [Schema Explorer](/docs/development/guides/schemas/schema-explorer.md): Explore your schemas in the Schema Explorer - [Schema MCP](/docs/development/guides/schemas/schema-mcp.md): Get access to your schemas for your MCP clients (e.g Cursor, Windsurf, Claude Desktop etc) - [Creating services](/docs/development/guides/services/adding-services.md): Creating and managing services within EventCatalog. - [Adding data stores to services](/docs/development/guides/services/adding-to-services/adding-data-stores-to-services.md): Adding data stores to services - [Adding AsyncAPI specifications](/docs/development/guides/services/adding-to-services/asyncapi.md): Attach an AsyncAPI specification to your service and render them in your documentation - [Adding entities to services](/docs/development/guides/services/adding-to-services/entities.md): Creating and managing entities within EventCatalog. - [Adding GraphQL schemas](/docs/development/guides/services/adding-to-services/graphql.md): Add a GraphQL schema to your service and render them in your documentation - [Adding messages to services](/docs/development/guides/services/adding-to-services/messages.md): Understanding how to add messages to services. - [Adding OpenAPI specifications](/docs/development/guides/services/adding-to-services/openapi.md): Attach an OpenAPI specification to your service and render them in your documentation - [Creating external systems](/docs/development/guides/services/creating-external-systems.md): Model third-party services like Stripe, Twilio, or Snowflake as external systems in EventCatalog. - [Understanding services](/docs/development/guides/services/introduction.md): What are services? Why are they useful for event-driven architectures? - [Components](/docs/development/guides/services/ownership-and-components/components.md): Component list for domains - [Adding service owners](/docs/development/guides/services/ownership-and-components/owners.md): Adding owners to services with EventCatalog. - [Service changelogs](/docs/development/guides/services/versioning-and-lifecycle/changelog.md): Adding changelogs to your services - [Deprecating services](/docs/development/guides/services/versioning-and-lifecycle/deprecating.md): Deprecating services with EventCatalog. - [Versioning](/docs/development/guides/services/versioning-and-lifecycle/versioning.md): Learn how to version services - [Upgrading EventCatalog](/docs/development/upgrading.md): How to upgrade EventCatalog. - [Upgrade to EventCatalog v2](/docs/development/upgrading/v2.md): How to upgrade to EventCatalog v2. - [Upgrade to EventCatalog v3](/docs/development/upgrading/v3.md): How to upgrade to EventCatalog v3. ### domains A collection of guides to help you understand domains and how they work with EventCatalog. - [Domains](/docs/domains.md): A collection of guides to help you understand domains and how they work with EventCatalog. - [Creating domain entities](/docs/domains/entities.md): A collection of guides to help you understand entities and how they work with EventCatalog. ### embed-diagrams This section describes what components can be used in EventCatalog.. - [Embed Diagrams](/docs/embed-diagrams.md): This section describes what components can be used in EventCatalog.. ### eventcatalog-federation Merge multiple EventCatalog instances into a single catalog. - [EventCatalog Federation](/docs/eventcatalog-federation.md): Merge multiple EventCatalog instances into a single catalog. ### events A collection of guides to help you understand events and how they work with EventCatalog. - [Events](/docs/events.md): A collection of guides to help you understand events and how they work with EventCatalog. ### flows A collection of guides to help you understand flows and how they work with EventCatalog. - [Flows](/docs/flows.md): A collection of guides to help you understand flows and how they work with EventCatalog. ### github GitHub integration for EventCatalog - [GitHub](/docs/github.md): GitHub integration for EventCatalog ### graphql GraphQL integration documentation for EventCatalog - [GraphQL](/docs/graphql.md): GraphQL integration documentation for EventCatalog ### guides A collection of guides for EventCatalog. - [Documenting your architecture](/docs/guides.md): A collection of guides for EventCatalog. - [Global documentation](/docs/guides/bring-your-own-documentation/custom-pages.md): Add catalog-wide custom documentation pages to your catalog. - [Resource-level documentation](/docs/guides/bring-your-own-documentation/resource-docs.md): Attach documentation pages directly to any resource in your catalog. ### hookdeck Hookdeck integration with EventCatalog - [Hookdeck](/docs/hookdeck.md): Hookdeck integration with EventCatalog ### messages A collection of guides to help you understand commands and how they work with EventCatalog. - [Messages](/docs/messages.md): A collection of guides to help you understand commands and how they work with EventCatalog. - [Common to all messages](/docs/messages/common.md): A collection of guides to help you understand queries and how they work with EventCatalog. ### miro - [Adding Resources to the Board](/docs/miro/adding-resources.md): Drag and drop services, events, commands, and more onto your Miro board - [Import AsyncAPI into Miro](/docs/miro/asyncapi.md): Import your AsyncAPI specifications into Miro via EventCatalog - [Connected Resources](/docs/miro/connected-resources.md): View and navigate connections between resources on the board - [Connecting to EventCatalog](/docs/miro/connecting-to-eventcatalog.md): Export and import your EventCatalog resources into the Miro app - [Creating New Resources](/docs/miro/creating-resources.md): Create new services, events, and other resources directly from the Miro app - [Editing Resources](/docs/miro/editing-resources.md): Edit resource details by selecting nodes on the board - [Exporting to EventCatalog](/docs/miro/exporting-to-eventcatalog.md): Export your Miro board design back to EventCatalog - [Getting Involved](/docs/miro/getting-involved.md): How to contribute to the EventCatalog Miro App - [Installing the Miro App](/docs/miro/installation.md): How to install the EventCatalog Miro app to your Miro board - [Navigating the Board](/docs/miro/navigating-the-board.md): Navigate between connected resources and organize your board layout - [Import OpenAPI into Miro](/docs/miro/openapi.md): Import your OpenAPI specifications into Miro via EventCatalog - [EventCatalog Miro App](/docs/miro/overview.md): Bring your EventCatalog architecture into Miro for collaborative visual design - [Import from Schema Registries](/docs/miro/schema-registries.md): Import schemas from your registry into Miro via EventCatalog - [Services and Dependencies](/docs/miro/services-and-dependencies.md): Control whether services are added with their full dependency graph or standalone - [From Miro to EventCatalog with AI](/docs/miro/using-ai.md): Use AI to turn your Miro board designs into EventCatalog documentation automatically ### openapi OpenAPI integration documentation for EventCatalog - [OpenAPI](/docs/openapi.md): OpenAPI integration documentation for EventCatalog ### owners A collection of guides to help you understand owners and how they work with EventCatalog. - [Teams & Users](/docs/owners.md): A collection of guides to help you understand owners and how they work with EventCatalog. ### ownership-and-components A collection of guides to help you understand entities and how they work with EventCatalog. - [Ownership & components](/docs/ownership-and-components.md): A collection of guides to help you understand entities and how they work with EventCatalog. ### ownership-and-language - [Versioning & changelogs](/docs/ownership-and-language.md) ### plugins - [All EventCatalog plugins](/docs/plugins/all-plugins.md): All EventCatalog plugins - [Examples](/docs/plugins/amazon-apigateway/examples.md): Examples of using the Amazon API Gateway plugin - [Features](/docs/plugins/amazon-apigateway/features.md): Features of AsyncAPI with EventCatalog - [Installation](/docs/plugins/amazon-apigateway/installation.md): Installation instructions for the Amazon API Gateway plugin - [Getting started](/docs/plugins/amazon-apigateway/intro.md): Getting started with Amazon EventBridge plugin - [Plugin Configuration](/docs/plugins/amazon-apigateway/plugin-configuration.md): Configuration of the Amazon API Gateway plugin - [Examples](/docs/plugins/apicurio/examples.md): Examples of using the Apicurio Registry plugin - [Features](/docs/plugins/apicurio/features.md): Features of Apicurio Registry with EventCatalog - [Installation](/docs/plugins/apicurio/installation.md): Installation of the EventCatalog Apicurio Registry plugin - [Introduction](/docs/plugins/apicurio/intro.md): Getting started with Apicurio Registry plugin - [Plugin Configuration](/docs/plugins/apicurio/plugin-configuration.md): Configuration of the EventCatalog Apicurio Registry plugin - [Workflows](/docs/plugins/asyncapi/03a-workflows.md): Workflows of AsyncAPI with EventCatalog - [Examples](/docs/plugins/asyncapi/examples.md): Examples of using the AsyncAPI plugin - [Features](/docs/plugins/asyncapi/features.md): Features of AsyncAPI with EventCatalog - [Installation](/docs/plugins/asyncapi/installation.md): Installation of the EventCatalog AsyncAPI plugin - [Introduction](/docs/plugins/asyncapi/intro.md): Getting started with AsyncAPI plugin - [Plugin Configuration](/docs/plugins/asyncapi/plugin-configuration.md): Configuration of the EventCatalog AsyncAPI plugin - [Using reference objects](/docs/plugins/asyncapi/using-reference-objects.md): Understanding reference objects with AsyncAPI - [Installation](/docs/plugins/aws-glue-registry/00a-installation.md): How to install the AWS Glue Schema Registry plugin - [API Reference](/docs/plugins/aws-glue-registry/api.md): Complete API reference for AWS Glue Schema Registry plugin - [Examples](/docs/plugins/aws-glue-registry/examples.md): Examples of using AWS Glue Schema Registry with EventCatalog - [Features](/docs/plugins/aws-glue-registry/features.md): Features of AWS Glue Schema Registry with EventCatalog - [Getting started](/docs/plugins/aws-glue-registry/intro.md): Getting started with AWS Glue Schema Registry plugin - [Examples](/docs/plugins/azure-schema-registry/examples.md): Examples of the EventCatalog Azure Schema Registry plugin - [Features](/docs/plugins/azure-schema-registry/features.md): Features of the EventCatalog Azure Schema Registry plugin - [Installation](/docs/plugins/azure-schema-registry/installation.md): Installation of the EventCatalog Azure Schema Registry plugin - [Introduction](/docs/plugins/azure-schema-registry/intro.md): Getting started with Azure Schema Registry plugin - [Plugin Configuration](/docs/plugins/azure-schema-registry/plugin-configuration.md): Configuration of the EventCatalog Azure Schema Registry plugin - [Backstage configuration](/docs/plugins/backstage/api.md): Getting started with Backstage and EventCatalog plugin - [Examples](/docs/plugins/backstage/examples.md): Examples of using the AsyncAPI plugin - [Installation](/docs/plugins/backstage/installation.md): Installation instructions for the EventCatalog Backstage plugin - [Getting started](/docs/plugins/backstage/intro.md): Getting started with Backstage plugin - [Examples](/docs/plugins/confluent-schema-registry/examples.md): Examples of using the AsyncAPI plugin - [Features](/docs/plugins/confluent-schema-registry/features.md): Features of AsyncAPI with EventCatalog - [Installation](/docs/plugins/confluent-schema-registry/installation.md): Installation of the EventCatalog Confluent Schema Registry plugin - [Introduction](/docs/plugins/confluent-schema-registry/intro.md): Getting started with AsyncAPI plugin - [Plugin Configuration](/docs/plugins/confluent-schema-registry/plugin-configuration.md): Configuration of the EventCatalog Confluent Schema Registry plugin - [Workflows](/docs/plugins/eventbridge/03a-workflows.md): Workflows of EventBridge with EventCatalog - [Generator API](/docs/plugins/eventbridge/api.md): Getting started with Amazon EventBridge plugin - [Examples](/docs/plugins/eventbridge/examples.md): Examples of using the OpenAPI plugin - [Features](/docs/plugins/eventbridge/features.md): Features of AsyncAPI with EventCatalog - [Installation](/docs/plugins/eventbridge/installation.md): Installation guide for the EventCatalog Amazon EventBridge plugin - [Getting started](/docs/plugins/eventbridge/intro.md): Getting started with Amazon EventBridge plugin - [Setup main catalog](/docs/plugins/eventcatalog-federation/configuration.md): Configuring federation in your EventCatalog - [Examples](/docs/plugins/eventcatalog-federation/examples.md): Examples of using the Federation plugin - [Installation](/docs/plugins/eventcatalog-federation/installation.md): Installation of the EventCatalog Federation plugin - [Introduction](/docs/plugins/eventcatalog-federation/introduction.md): Merge multiple EventCatalog instances into a single catalog - [Plugin Configuration](/docs/plugins/eventcatalog-federation/plugin-configuration.md): Configuration of the EventCatalog Federation plugin - [Configuring team catalogs](/docs/plugins/eventcatalog-federation/setup-team-catalog.md): Configuring federation in your EventCatalog - [Generators](/docs/plugins/generators.md): Understanding EventCatalog generators. - [Examples](/docs/plugins/github/examples.md): Examples of using the Github plugin - [Features](/docs/plugins/github/features.md): Features of the Github Plugin with EventCatalog - [Installation](/docs/plugins/github/installation.md): Installation of the EventCatalog GitHub plugin - [Introduction](/docs/plugins/github/intro.md): Getting started with GitHub plugin - [Plugin Configuration](/docs/plugins/github/plugin-configuration.md): Configuration of the EventCatalog GitHub plugin - [Examples](/docs/plugins/graphql/examples.md): Examples of using the GraphQL plugin - [Features](/docs/plugins/graphql/features.md): Features of GraphQL with EventCatalog - [Installation](/docs/plugins/graphql/installation.md): Installation of the EventCatalog GraphQL plugin - [Introduction](/docs/plugins/graphql/intro.md): Getting started with GraphQL plugin - [Plugin Configuration](/docs/plugins/graphql/plugin-configuration.md): Configuration of the EventCatalog GraphQL plugin - [Hookdeck Generator API](/docs/plugins/hookdeck/api.md): Getting started with Hookdeck plugin - [Hookdeck Generator CLI](/docs/plugins/hookdeck/cli.md): Getting started with Hookdeck plugin as a CLI - [Getting started](/docs/plugins/hookdeck/intro.md): Getting started with Hookdeck plugin - [Understanding EventCatalog Plugins](/docs/plugins/intro.md): Understand how to use EventCatalog plugins - [Workflows](/docs/plugins/openapi/03a-workflows.md): Workflows of OpenAPI with EventCatalog - [Examples](/docs/plugins/openapi/examples.md): Examples of using the OpenAPI plugin - [Features](/docs/plugins/openapi/features.md): Features of OpenAPI with EventCatalog - [Installation](/docs/plugins/openapi/installation.md): Installation of the EventCatalog OpenAPI plugin - [Getting started](/docs/plugins/openapi/intro.md): Getting started with OpenAPI plugin - [Plugin Configuration](/docs/plugins/openapi/plugin-configuration.md): Configuration of the EventCatalog OpenAPI plugin ### queries A collection of guides to help you understand queries and how they work with EventCatalog. - [Queries](/docs/queries.md): A collection of guides to help you understand queries and how they work with EventCatalog. ### schemas A collection of guides to help you understand schemas and how they work with EventCatalog. - [Schemas & Specifications](/docs/schemas.md): A collection of guides to help you understand schemas and how they work with EventCatalog. ### sdk EventCatalog SDK - [@eventcatalog/sdk](/docs/sdk.md): EventCatalog SDK - [Function: addDataProductToDomain()](/docs/sdk/functions/addDataProductToDomain.md): addDataProductToDomain(directory): (id, dataProduct, version?) => Promise\ - [Function: addDataStoreToService()](/docs/sdk/functions/addDataStoreToService.md): addDataStoreToService(directory): (id, operation, dataStore, version?) => Promise\ - [Function: addEntityToDomain()](/docs/sdk/functions/addEntityToDomain.md): addEntityToDomain(directory): (id, entity, version?) => Promise\ - [Function: addEntityToService()](/docs/sdk/functions/addEntityToService.md): addEntityToService(directory): (id, entity, version?) => Promise\ - [Function: addExampleToCommand()](/docs/sdk/functions/addExampleToCommand.md): addExampleToCommand(directory): (id, example, version?) => Promise\ - [Function: addExampleToEvent()](/docs/sdk/functions/addExampleToEvent.md): addExampleToEvent(directory): (id, example, version?) => Promise\ - [Function: addExampleToQuery()](/docs/sdk/functions/addExampleToQuery.md): addExampleToQuery(directory): (id, example, version?) => Promise\ - [Function: addFileToCommand()](/docs/sdk/functions/addFileToCommand.md): addFileToCommand(directory): (id, file, version?, options?) => Promise\ - [Function: addFileToDataProduct()](/docs/sdk/functions/addFileToDataProduct.md): addFileToDataProduct(directory): (id, file, version?) => Promise\ - [Function: addFileToDataStore()](/docs/sdk/functions/addFileToDataStore.md): addFileToDataStore(directory): (id, file, version?) => Promise\ - [Function: addFileToDiagram()](/docs/sdk/functions/addFileToDiagram.md): addFileToDiagram(directory): (id, file, version?) => Promise\ - [Function: addFileToDomain()](/docs/sdk/functions/addFileToDomain.md): addFileToDomain(directory): (id, file, version?) => Promise\ - [Function: addFileToEvent()](/docs/sdk/functions/addFileToEvent.md): addFileToEvent(directory): (id, file, version?, options?) => Promise\ - [Function: addFileToQuery()](/docs/sdk/functions/addFileToQuery.md): addFileToQuery(directory): (id, file, version?, options?) => Promise\ - [Function: addFileToService()](/docs/sdk/functions/addFileToService.md): addFileToService(directory): (id, file, version?) => Promise\ - [Function: addMessageToChannel()](/docs/sdk/functions/addMessageToChannel.md): addMessageToChannel(directory, collection): (id, _message, version?) => Promise\ - [Function: addMessageToDomain()](/docs/sdk/functions/addMessageToDomain.md): addMessageToDomain(directory): (id, direction, message, version?) => Promise\ - [Function: addMessageToService()](/docs/sdk/functions/addMessageToService.md): addMessageToService(directory): (id, direction, event, version?) => Promise\ - [Function: addSchemaToCommand()](/docs/sdk/functions/addSchemaToCommand.md): addSchemaToCommand(directory): (id, schema, version?, options?) => Promise\ - [Function: addSchemaToEvent()](/docs/sdk/functions/addSchemaToEvent.md): addSchemaToEvent(directory): (id, schema, version?, options?) => Promise\ - [Function: addSchemaToQuery()](/docs/sdk/functions/addSchemaToQuery.md): addSchemaToQuery(directory): (id, schema, version?, options?) => Promise\ - [Function: addServiceToDomain()](/docs/sdk/functions/addServiceToDomain.md): addServiceToDomain(directory): (id, service, version?) => Promise\ - [Function: addSubDomainToDomain()](/docs/sdk/functions/addSubDomainToDomain.md): addSubDomainToDomain(directory): (id, subDomain, version?) => Promise\ - [Function: addUbiquitousLanguageToDomain()](/docs/sdk/functions/addUbiquitousLanguageToDomain.md): addUbiquitousLanguageToDomain(directory): (id, ubiquitousLanguageDictionary, version?) => Promise\ - [Function: appendChangelog()](/docs/sdk/functions/appendChangelog.md): appendChangelog(catalogDir): (id, changelog, options) => Promise\ - [Function: channelHasVersion()](/docs/sdk/functions/channelHasVersion.md): channelHasVersion(directory): (id, version?) => Promise\ - [Function: commandHasVersion()](/docs/sdk/functions/commandHasVersion.md): commandHasVersion(directory): (id, version?) => Promise\ - [Function: dataProductHasVersion()](/docs/sdk/functions/dataProductHasVersion.md): dataProductHasVersion(directory): (id, version?) => Promise\ - [Function: dataStoreHasVersion()](/docs/sdk/functions/dataStoreHasVersion.md): dataStoreHasVersion(directory): (id, version?) => Promise\ - [Function: diagramHasVersion()](/docs/sdk/functions/diagramHasVersion.md): diagramHasVersion(directory): (id, version?) => Promise\ - [Function: domainHasVersion()](/docs/sdk/functions/domainHasVersion.md): domainHasVersion(directory): (id, version?) => Promise\ - [Function: dumpCatalog()](/docs/sdk/functions/dumpCatalog.md): dumpCatalog(directory): (options?) => Promise\ - [Function: entityHasVersion()](/docs/sdk/functions/entityHasVersion.md): entityHasVersion(directory): (id, version?) => Promise\ - [Function: eventHasVersion()](/docs/sdk/functions/eventHasVersion.md): eventHasVersion(directory): (id, version?) => Promise\ - [Function: getChangelog()](/docs/sdk/functions/getChangelog.md): getChangelog(catalogDir): (id, options) => Promise\ - [Function: getChannel()](/docs/sdk/functions/getChannel.md): getChannel(directory): (id, version?) => Promise\ - [Function: getChannels()](/docs/sdk/functions/getChannels.md): getChannels(directory): (options?) => Promise\ - [Function: getCommand()](/docs/sdk/functions/getCommand.md): getCommand(directory): (id, version?, options?) => Promise\ - [Function: getCommands()](/docs/sdk/functions/getCommands.md): getCommands(directory): (options?) => Promise\ - [Function: getConsumersOfSchema()](/docs/sdk/functions/getConsumersOfSchema.md): getConsumersOfSchema(directory): (path) => Promise\ - [Function: getCustomDoc()](/docs/sdk/functions/getCustomDoc.md): getCustomDoc(directory): (filePath) => Promise\ - [Function: getCustomDocs()](/docs/sdk/functions/getCustomDocs.md): getCustomDocs(directory): (options?) => Promise\ - [Function: getDataProduct()](/docs/sdk/functions/getDataProduct.md): getDataProduct(directory): (id, version?) => Promise\ - [Function: getDataProducts()](/docs/sdk/functions/getDataProducts.md): getDataProducts(directory): (options?) => Promise\ - [Function: getDataStore()](/docs/sdk/functions/getDataStore.md): getDataStore(directory): (id, version?) => Promise\ - [Function: getDataStores()](/docs/sdk/functions/getDataStores.md): getDataStores(directory): (options?) => Promise\ - [Function: getDiagram()](/docs/sdk/functions/getDiagram.md): getDiagram(directory): (id, version?) => Promise\ - [Function: getDiagrams()](/docs/sdk/functions/getDiagrams.md): getDiagrams(directory): (options?) => Promise\ - [Function: getDomain()](/docs/sdk/functions/getDomain.md): getDomain(directory): (id, version?) => Promise\ - [Function: getDomains()](/docs/sdk/functions/getDomains.md): getDomains(directory): (options?) => Promise\ - [Function: getEntities()](/docs/sdk/functions/getEntities.md): getEntities(directory): (options?) => Promise\ - [Function: getEntity()](/docs/sdk/functions/getEntity.md): getEntity(directory): (id, version?) => Promise\ - [Function: getEvent()](/docs/sdk/functions/getEvent.md): getEvent(directory): (id, version?, options?) => Promise\ - [Function: getEventCatalogConfigurationFile()](/docs/sdk/functions/getEventCatalogConfigurationFile.md): getEventCatalogConfigurationFile(directory): () => Promise\ - [Function: getEvents()](/docs/sdk/functions/getEvents.md): getEvents(directory): (options?) => Promise\ - [Function: getExamplesFromCommand()](/docs/sdk/functions/getExamplesFromCommand.md): getExamplesFromCommand(directory): (id, version?) => Promise\ - [Function: getExamplesFromEvent()](/docs/sdk/functions/getExamplesFromEvent.md): getExamplesFromEvent(directory): (id, version?) => Promise\ - [Function: getExamplesFromQuery()](/docs/sdk/functions/getExamplesFromQuery.md): getExamplesFromQuery(directory): (id, version?) => Promise\ - [Function: getFlow()](/docs/sdk/functions/getFlow.md): getFlow(directory): (id, version?) => Promise\ - [Function: getFlows()](/docs/sdk/functions/getFlows.md): getFlows(directory): (options?) => Promise\ - [Function: getMessageBySchemaPath()](/docs/sdk/functions/getMessageBySchemaPath.md): getMessageBySchemaPath(directory): (path, options?) => Promise\ - [Function: getOwnersForResource()](/docs/sdk/functions/getOwnersForResource.md): getOwnersForResource(catalogDir): (id, version?) => Promise\ - [Function: getProducersAndConsumersForMessage()](/docs/sdk/functions/getProducersAndConsumersForMessage.md): getProducersAndConsumersForMessage(directory): (id, version?, options?) => Promise\ - [Function: getProducersOfSchema()](/docs/sdk/functions/getProducersOfSchema.md): getProducersOfSchema(directory): (path) => Promise\ - [Function: getQueries()](/docs/sdk/functions/getQueries.md): getQueries(directory): (options?) => Promise\ - [Function: getQuery()](/docs/sdk/functions/getQuery.md): getQuery(directory): (id, version?, options?) => Promise\ - [Function: getSchemaForMessage()](/docs/sdk/functions/getSchemaForMessage.md): getSchemaForMessage(directory): (id, version?) => Promise\ - [Function: getService()](/docs/sdk/functions/getService.md): getService(directory): (id, version?) => Promise\ - [Function: getServiceByPath()](/docs/sdk/functions/getServiceByPath.md): getServiceByPath(directory): (path) => Promise\ - [Function: getServices()](/docs/sdk/functions/getServices.md): getServices(directory): (options?) => Promise\ - [Function: getSpecificationFilesForService()](/docs/sdk/functions/getSpecificationFilesForService.md): getSpecificationFilesForService(directory): (id, version?) => Promise\ - [Function: getTeam()](/docs/sdk/functions/getTeam.md): getTeam(catalogDir): (id) => Promise\ - [Function: getTeams()](/docs/sdk/functions/getTeams.md): getTeams(catalogDir): (options?) => Promise\ - [Function: getUbiquitousLanguageFromDomain()](/docs/sdk/functions/getUbiquitousLanguageFromDomain.md): getUbiquitousLanguageFromDomain(directory): (id, version?) => Promise\ - [Function: getUser()](/docs/sdk/functions/getUser.md): getUser(catalogDir): (id) => Promise\ - [Function: getUsers()](/docs/sdk/functions/getUsers.md): getUsers(catalogDir): (options?) => Promise\ - [Function: isService()](/docs/sdk/functions/isService.md): isService(directory): (path) => Promise\ - [Function: queryHasVersion()](/docs/sdk/functions/queryHasVersion.md): queryHasVersion(directory): (id, version?) => Promise\ - [Function: removeExampleFromCommand()](/docs/sdk/functions/removeExampleFromCommand.md): removeExampleFromCommand(directory): (id, fileName, version?) => Promise\ - [Function: removeExampleFromEvent()](/docs/sdk/functions/removeExampleFromEvent.md): removeExampleFromEvent(directory): (id, fileName, version?) => Promise\ - [Function: removeExampleFromQuery()](/docs/sdk/functions/removeExampleFromQuery.md): removeExampleFromQuery(directory): (id, fileName, version?) => Promise\ - [Function: rmChangelog()](/docs/sdk/functions/rmChangelog.md): rmChangelog(catalogDir): (id, options) => Promise\ - [Function: rmChannel()](/docs/sdk/functions/rmChannel.md): rmChannel(directory): (path) => Promise\ - [Function: rmChannelById()](/docs/sdk/functions/rmChannelById.md): rmChannelById(directory): (id, version?, persistFiles?) => Promise\ - [Function: rmCommand()](/docs/sdk/functions/rmCommand.md): rmCommand(directory): (path) => Promise\ - [Function: rmCommandById()](/docs/sdk/functions/rmCommandById.md): rmCommandById(directory): (id, version?, persistFiles?) => Promise\ - [Function: rmCustomDoc()](/docs/sdk/functions/rmCustomDoc.md): rmCustomDoc(directory): (filePath) => Promise\ - [Function: rmDataProduct()](/docs/sdk/functions/rmDataProduct.md): rmDataProduct(directory): (path) => Promise\ - [Function: rmDataProductById()](/docs/sdk/functions/rmDataProductById.md): rmDataProductById(directory): (id, version?, persistFiles?) => Promise\ - [Function: rmDataStore()](/docs/sdk/functions/rmDataStore.md): rmDataStore(directory): (path) => Promise\ - [Function: rmDataStoreById()](/docs/sdk/functions/rmDataStoreById.md): rmDataStoreById(directory): (id, version?, persistFiles?) => Promise\ - [Function: rmDiagram()](/docs/sdk/functions/rmDiagram.md): rmDiagram(directory): (path) => Promise\ - [Function: rmDiagramById()](/docs/sdk/functions/rmDiagramById.md): rmDiagramById(directory): (id, version?, persistFiles?) => Promise\ - [Function: rmDomain()](/docs/sdk/functions/rmDomain.md): rmDomain(directory): (path) => Promise\ - [Function: rmDomainById()](/docs/sdk/functions/rmDomainById.md): rmDomainById(directory): (id, version?, persistFiles?) => Promise\ - [Function: rmEntity()](/docs/sdk/functions/rmEntity.md): rmEntity(directory): (path) => Promise\ - [Function: rmEntityById()](/docs/sdk/functions/rmEntityById.md): rmEntityById(directory): (id, version?, persistFiles?) => Promise\ - [Function: rmEvent()](/docs/sdk/functions/rmEvent.md): rmEvent(directory): (path) => Promise\ - [Function: rmEventById()](/docs/sdk/functions/rmEventById.md): rmEventById(directory): (id, version?, persistFiles?) => Promise\ - [Function: rmQuery()](/docs/sdk/functions/rmQuery.md): rmQuery(directory): (path) => Promise\ - [Function: rmQueryById()](/docs/sdk/functions/rmQueryById.md): rmQueryById(directory): (id, version?, persistFiles?) => Promise\ - [Function: rmService()](/docs/sdk/functions/rmService.md): rmService(directory): (path) => Promise\ - [Function: rmServiceById()](/docs/sdk/functions/rmServiceById.md): rmServiceById(directory): (id, version?, persistFiles?) => Promise\ - [Function: rmTeamById()](/docs/sdk/functions/rmTeamById.md): rmTeamById(catalogDir): (id) => Promise\ - [Function: rmUserById()](/docs/sdk/functions/rmUserById.md): rmUserById(catalogDir): (id) => Promise\ - [Function: serviceHasVersion()](/docs/sdk/functions/serviceHasVersion.md): serviceHasVersion(directory): (id, version?) => Promise\ - [Function: toService()](/docs/sdk/functions/toService.md): toService(directory): (file) => Promise\ - [Function: versionChannel()](/docs/sdk/functions/versionChannel.md): versionChannel(directory): (id) => Promise\ - [Function: versionCommand()](/docs/sdk/functions/versionCommand.md): versionCommand(directory): (id) => Promise\ - [Function: versionDataProduct()](/docs/sdk/functions/versionDataProduct.md): versionDataProduct(directory): (id) => Promise\ - [Function: versionDataStore()](/docs/sdk/functions/versionDataStore.md): versionDataStore(directory): (id) => Promise\ - [Function: versionDiagram()](/docs/sdk/functions/versionDiagram.md): versionDiagram(directory): (id) => Promise\ - [Function: versionDomain()](/docs/sdk/functions/versionDomain.md): versionDomain(directory): (id) => Promise\ - [Function: versionEntity()](/docs/sdk/functions/versionEntity.md): versionEntity(directory): (id) => Promise\ - [Function: versionEvent()](/docs/sdk/functions/versionEvent.md): versionEvent(directory): (id) => Promise\ - [Function: versionQuery()](/docs/sdk/functions/versionQuery.md): versionQuery(directory): (id) => Promise\ - [Function: versionService()](/docs/sdk/functions/versionService.md): versionService(directory): (id) => Promise\ - [Function: writeChangelog()](/docs/sdk/functions/writeChangelog.md): writeChangelog(catalogDir): (id, changelog, options) => Promise\ - [Function: writeChannel()](/docs/sdk/functions/writeChannel.md): writeChannel(directory): (channel, options) => Promise\ - [Function: writeCommand()](/docs/sdk/functions/writeCommand.md): writeCommand(directory): (command, options) => Promise\ - [Function: writeCommandToService()](/docs/sdk/functions/writeCommandToService.md): writeCommandToService(directory): (command, service, options) => Promise\ - [Function: writeCustomDoc()](/docs/sdk/functions/writeCustomDoc.md): writeCustomDoc(directory): (customDoc, options) => Promise\ - [Function: writeDataProduct()](/docs/sdk/functions/writeDataProduct.md): writeDataProduct(directory): (dataProduct, options) => Promise\ - [Function: writeDataProductToDomain()](/docs/sdk/functions/writeDataProductToDomain.md): writeDataProductToDomain(directory): (dataProduct, domain, options) => Promise\ - [Function: writeDataStore()](/docs/sdk/functions/writeDataStore.md): writeDataStore(directory): (data, options) => Promise\ - [Function: writeDataStoreToService()](/docs/sdk/functions/writeDataStoreToService.md): writeDataStoreToService(directory): (container, service, options) => Promise\ - [Function: writeDiagram()](/docs/sdk/functions/writeDiagram.md): writeDiagram(directory): (diagram, options) => Promise\ - [Function: writeDomain()](/docs/sdk/functions/writeDomain.md): writeDomain(directory): (domain, options) => Promise\ - [Function: writeEntity()](/docs/sdk/functions/writeEntity.md): writeEntity(directory): (entity, options) => Promise\ - [Function: writeEvent()](/docs/sdk/functions/writeEvent.md): writeEvent(directory): (event, options) => Promise\ - [Function: writeEventToService()](/docs/sdk/functions/writeEventToService.md): writeEventToService(directory): (event, service, options) => Promise\ - [Function: writeQuery()](/docs/sdk/functions/writeQuery.md): writeQuery(directory): (query, options) => Promise\ - [Function: writeQueryToService()](/docs/sdk/functions/writeQueryToService.md): writeQueryToService(directory): (query, service, options) => Promise\ - [Function: writeService()](/docs/sdk/functions/writeService.md): writeService(directory): (service, options) => Promise\ - [Function: writeServiceToDomain()](/docs/sdk/functions/writeServiceToDomain.md): writeServiceToDomain(directory): (service, domain, options) => Promise\ - [Function: writeTeam()](/docs/sdk/functions/writeTeam.md): writeTeam(catalogDir): (team, options) => Promise\ - [Function: writeUser()](/docs/sdk/functions/writeUser.md): writeUser(catalogDir): (user, options) => Promise\ - [Function: writeVersionedService()](/docs/sdk/functions/writeVersionedService.md): writeVersionedService(directory): (service) => Promise\ ### services A collection of guides to help you understand services and how they work with EventCatalog. - [Services](/docs/services.md): A collection of guides to help you understand services and how they work with EventCatalog. ### starting-a-new-project - [Starting a new project](/docs/starting-a-new-project/getting-started.md): Learn how to install EventCatalog. ### studio - [Adding comments](/docs/studio/diagrams/adding-comments.md): Understanding how to use comments in EventCatalog Studio - [Adding documentation](/docs/studio/diagrams/adding-documentation.md): Understanding how to use nodes in EventCatalog Studio - [Deleting designs](/docs/studio/diagrams/deleting-designs.md): How to delete designs in EventCatalog Studio - [Export as prompt](/docs/studio/diagrams/diagram-to-prompt.md): Exporting your diagram as a prompt - [Embed into EventCatalog](/docs/studio/diagrams/eventcatalog-embed.md): Understanding how to use nodes in EventCatalog Studio - [Import EventCatalog resources](/docs/studio/diagrams/import-eventcatalog-resources.md): Understanding how to import EventCatalog resources into EventCatalog Studio - [Import & Export](/docs/studio/diagrams/import-export.md): Understanding how to use nodes in EventCatalog Studio - [Reset your environment](/docs/studio/diagrams/reset-your-environment.md): Understanding how to reset your environment in EventCatalog Studio - [Templates](/docs/studio/diagrams/templates.md): Using templates in EventCatalog Studio - [Using nodes](/docs/studio/diagrams/using-nodes.md): Understanding how to use nodes in EventCatalog Studio - [Version Control & Audits](/docs/studio/enterprise/audits.md): Version Control & Audits for designs in EventCatalog Studio - [Self-host](/docs/studio/enterprise/self-host.md): Understand the CLI of EventCatalog - [Getting Started](/docs/studio/getting-started.md): Getting started with EventCatalog Studio - [Managing your organization](/docs/studio/organization-teams/inviting-users.md): Understand the CLI of EventCatalog - [Organization settings](/docs/studio/organization-teams/organization-settings.md): Understand the CLI of EventCatalog - [Upgrade to a paid plan](/docs/studio/organization-teams/upgrade.md): Understand the CLI of EventCatalog - [Contributing](/docs/studio/project/contributing.md): Understand the CLI of EventCatalog - [Open Source](/docs/studio/project/opensource.md): Understand the CLI of EventCatalog - [Roadmap](/docs/studio/project/roadmap.md): Understand the CLI of EventCatalog - [Welcome to EventCatalog Studio](/docs/studio/welcome.md): Understand the CLI of EventCatalog - [Why EventCatalog Studio?](/docs/studio/why-studio.md): Understand the CLI of EventCatalog ### teams A collection of guides to help you understand teams and how they work with EventCatalog. - [Teams](/docs/teams.md): A collection of guides to help you understand teams and how they work with EventCatalog. ### users A collection of guides to help you understand users and how they work with EventCatalog. - [Users](/docs/users.md): A collection of guides to help you understand users and how they work with EventCatalog. ### versioning-and-lifecycle A collection of guides to help you understand entities and how they work with EventCatalog. - [Versioning & lifecycle](/docs/versioning-and-lifecycle.md): A collection of guides to help you understand entities and how they work with EventCatalog. --- # Full Documentation Content ## Why We Started Building I was an architect working with event-driven systems, and I hit a wall that many of you will recognise: our events had become a free-for-all. Finding what events existed, who owned them, what they contained - it was painful. Documentation was scattered across Confluence pages, README files, and tribal knowledge locked in people's heads. I tried existing solutions. AsyncAPI was great for documenting individual services, but it still didn't solve the discovery problem. I needed something designed specifically for finding and understanding architecture at scale. So I built it. What started as a simple catalog of events has grown into something much bigger. With incredible community support, EventCatalog now helps teams document domains, services, schemas, and the relationships between them. It's become the documentation tool I wished existed. ## Why We're Bootstrapped EventCatalog is fully bootstrapped. No VC money, no outside investors telling us what to prioritise. This is intentional. With venture capital comes top-down pressure: aggressive growth targets, arbitrary revenue milestones, and often a focus on the wrong things. The roadmap becomes about what investors want, not what users need. By staying bootstrapped, we keep our destiny in our own hands. We can build the team we want to build, focus on the product we want to create, and make decisions based on one thing: what's best for the people actually using EventCatalog. The only influence we want is from our users, customers, and community. ## Why We're Open Source (Forever) EventCatalog will always be open source. This isn't a marketing strategy - it's a core belief. I'm a true believer in the open source ethos. There's something powerful about building in the open, letting anyone inspect the code, contribute ideas, and shape the direction of the project. It keeps us honest and accountable. Open source also means you're never locked in. Your architecture documentation belongs to you. You can self-host, fork, extend, and integrate however you need. We think that's how software should be. ## Where We Are Today Since that Christmas in 2022, EventCatalog has grown beyond what I imagined: * **31,000+ catalogs** created worldwide * **2,500+ GitHub stars** from the community * **Enterprise customers** in healthcare, banking, and transport * **Teams of all sizes** using it to document their architectures Companies like Nike, AWS, GOV.UK, M\&S, Eurostar, and many others trust EventCatalog to document their systems. That's humbling and motivating in equal measure. ## Where We're Going My vision is for EventCatalog to become *the* documentation tool for software architecture - not just event-driven systems, but all of it. We're building for humans *and* AI. We focus on software architecture primitives and patterns, not implementation details. The goal is a tool that can sync and automate alongside your day-to-day workflows, while also capturing the context that only humans can provide about your business domains. Architecture documentation doesn't have to be boring. With the right tools, the right vision, and the right community, we can make this better for everyone. ## Our Values **Open & Honest.** Open source isn't just our license - it's how we operate. Transparent about our roadmap, honest about our limitations. **Community First.** Everyone should feel welcome. We listen to feedback, prioritise based on real needs, and build together. **Have Fun.** Documentation can be a slog. We're trying to change that. Building should be enjoyable - for us and for you. **User-Driven.** No investor roadmaps. Features come from the people actually using EventCatalog every day. ## A Note to You If you're reading this, you've probably felt the same pain I felt. Your architecture is growing faster than your documentation. Events, services, and schemas are scattered everywhere. New team members take weeks to understand how things connect. It doesn't feel like a big problem at first. But as your architecture scales, your documentation doesn't. That gap only gets wider. EventCatalog exists to close that gap. To bring discoverability to your architecture. To give you a single source of truth that's actually designed for the job - not a generic wiki or a repurposed tool that almost works. Thank you for being here. Whether you're evaluating EventCatalog, already using it, or just curious - I appreciate you taking the time to learn about what we're building and why. — **Dave Boyne** Creator & Founder, EventCatalog **About Dave:** 20 years in startups and enterprises. Former developer advocate for serverless and architecture. From a small place in the UK. When not building EventCatalog, you'll find me playing guitar and experimenting with new ideas. What drives me is helping people through code - and seeing that feedback loop where the product gets better because of you. [Star us on GitHub](https://github.com/event-catalog/eventcatalog)[Join our Discord](https://eventcatalog.dev/discord) --- ## [Your catalog nodes now show what they actually are](/blog/custom-icons.md) April 15, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.28.1 adds custom icons to every resource type. Set `styles.icon` in any frontmatter and that icon appears across your entire catalog: visualiser nodes, sidebar navigation, documentation headers, and search results. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualiser](/blog/tags/visualiser.md) * [Icons](/blog/tags/icons.md) [**Read more**](/blog/custom-icons.md) --- # Introducing diagrams as first-class resources January 9, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog already gives you auto-generated visualizations: Entity Maps, Interaction Maps, and domain views that update as your catalog changes. These are great for understanding relationships between your resources. But sometimes you need your *own* diagrams. Target architecture plans. Event storming results. Sequence flows from Miro. C4 diagrams from IcePanel. The stuff that lives in scattered boards, Confluence pages, or that folder someone created two years ago. **EventCatalog 3.3.0 lets you bring those diagrams to your documentation.** Your custom diagrams are now first-class, versioned resources in your catalog. Bring them in **from any tool**, version them, link them to your domains and services, and even ask AI about them. ## What's new?[​](#whats-new "Direct link to What's new?") You could already [embed diagrams](/docs/embed-diagrams.md) from tools like Miro, IcePanel, and Lucidchart into your documentation pages. That's still fully supported. Now, diagrams can be standalone resources with their own dedicated pages: * **Versioning**: Track how your architecture evolves over time * **Version comparison**: See what changed between versions (Scale) * **Cross-references**: Link diagrams to domains, services, messages, and containers * **LLM support**: Every diagram is accessible via `.mdx` endpoints for AI tools * **Interactive controls**: Zoom, pan, and copy diagram code (e.g Mermaid, PlantUML) for better viewing and exploration ![Diagram page](/img/diagrams.png)Example of PlantUML diagram ## Why this matters[​](#why-this-matters "Direct link to Why this matters") Get more value from your documentation by bringing your diagrams into EventCatalog. Version them alongside your domains, services, and messages. Link them to the resources they describe. A common use case: document your current architecture as v1.0.0 and your target architecture as v2.0.0. Teams can switch between versions and see exactly where you're headed. No more hunting through Confluence or asking "where's that architecture diagram?" ## How it works[​](#how-it-works "Direct link to How it works") ### Creating a diagram[​](#creating-a-diagram "Direct link to Creating a diagram") Diagrams can live anywhere in your catalog. Put them at the root level for system-wide diagrams, or nest them within domains and services for resource-specific visualizations: ``` # Root level (system-wide diagrams) /diagrams/target-architecture/index.mdx # Nested within a domain /domains/Orders/diagrams/order-flow/index.mdx # Nested within a service /services/PaymentService/diagrams/payment-sequence/index.mdx ``` tip Use root-level diagrams for cross-cutting concerns like target architecture or system context. Nest diagrams within resources when they're specific to that domain or service. Add frontmatter and your content: ``` --- id: system-architecture name: System Architecture version: 2.0.0 summary: Target microservices architecture --- ``` Then add your diagram content. Use code blocks for Mermaid or PlantUML, or use EventCatalog's built-in components like ``, ``, ``, or ``. It's up to you. ```` ```mermaid graph TB Gateway[API Gateway] OrderService[Order Service] Gateway --> OrderService ``` ```` ### Versioning[​](#versioning "Direct link to Versioning") All diagrams can be versioned using EventCatalog's built-in versioning feature. Old versions live in a `versioned` folder: ``` /diagrams/ └── system-architecture/ ├── index.mdx # v2.0.0 (latest) └── versioned/ └── 1.0.0/ └── index.mdx # v1.0.0 (monolith) ``` Users can switch between versions using the dropdown in the header. ### Referencing from resources[​](#referencing-from-resources "Direct link to Referencing from resources") Link diagrams to any resource using the `diagrams` field: ``` --- id: E-Commerce name: E-Commerce Domain version: 1.0.0 diagrams: - id: system-architecture version: 2.0.0 - id: checkout-flow --- ``` The diagrams appear in the resource's sidebar, keeping everything connected. ![Diagram sidebar](/img/diagram-sidebar.png)Example of diagram sidebar ### Comparing versions[​](#comparing-versions "Direct link to Comparing versions") With EventCatalog Scale (requires a license), compare diagram versions side-by-side. Perfect for architecture reviews and migration planning. ![Diagram compare](/img/diagrams-compare.png)Example of diagram compare ### New diagram interactive controls[​](#new-diagram-interactive-controls "Direct link to New diagram interactive controls") All mermaid and plantuml diagrams now include interactive controls for better viewing and exploration. You can use the controls to zoom and pan around the diagram, and to copy the diagram code to your clipboard for your LLM tools. ![Example output of mermaid](/assets/images/interactive-56a3e958a41a6bfac8daf4b62a11d994.png) ## Using diagrams with AI[​](#using-diagrams-with-ai "Direct link to Using diagrams with AI") Every diagram is available as markdown at a `.mdx` endpoint: ``` /diagrams/system-architecture/2.0.0.mdx ``` This follows the [llms.txt](https://llmstxt.org/) convention, making your diagrams consumable by AI tools. Share the URL with ChatGPT, Claude, or any LLM that can fetch content. With EventCatalog's built-in assistant, you can ask questions directly from the diagram page: * "What services are shown in this diagram?" * "Explain the flow between OrderService and PaymentService" * "What would happen if Kafka went down?" * "How does this compare to the previous version?" ![Diagram AI](/img/diagrams-ai.png)Using EventCatalog Assistant to ask questions about a diagram ## Getting started[​](#getting-started "Direct link to Getting started") Upgrade to EventCatalog 3.4.1 or later. ``` npm install @eventcatalog/core@latest ``` **Create a new diagram:** 1. Create a `/diagrams` folder in your catalog 2. Add your first diagram with `id`, `name`, and `version` 3. Reference it from your domains, services, or other resources 4. Version it as your architecture evolves That's it. Your custom diagrams now live alongside EventCatalog's auto-generated visualizations, giving you the complete picture: what your system looks like today *and* where it's heading. *Diagram SDK support is coming soon* *** [Get started](/docs/development/getting-started/installation.md) or check the [diagrams documentation](/docs/development/guides/diagrams/introduction.md) for more details. **Tags:** * [diagrams](/blog/tags/diagrams.md) * [architecture](/blog/tags/architecture.md) * [versioning](/blog/tags/versioning.md) * [ai](/blog/tags/ai.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-09-diagrams-as-first-class-resources.md) --- # Integrate Apicurio Registry with EventCatalog November 26, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [YouTube video player](https://www.youtube.com/embed/0DmGWa0sr6w) I'm happy to announce the release of the [EventCatalog Apicurio Registry plugin](/docs/plugins/apicurio/intro.md). This plugin allows you to import schemas from Apicurio Registry into EventCatalog and keep them in sync alongside your documentation. Importing your schemas into EventCatalog gives you the ability to: * Add more value to your schemas with business context and ownership * Map your schemas to your producers and consumers in EventCatalog and keep them in sync * Discover your schemas easier with the [EventCatalog Schema Explorer](/docs/development/guides/schemas/schema-explorer.md) * Assign ownership (users and teams) to your schemas * Automate documentation from your AsyncAPI and OpenAPI specifications hosted in your Apicurio Registry * Visualize the bigger picture with the [EventCatalog Visualizer](/features/visualization.md) * Access your schemas with the [EventCatalog Schema API](/docs/development/guides/schemas/schema-api.md) for your LLMs or testing * Connect your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) to get schemas for your LLMs * And more... In this blog post I'll walk you through the features of the plugin and how to get started. *** ### What is Apicurio Registry?[​](#what-is-apicurio-registry "Direct link to What is Apicurio Registry?") [Apicurio Registry](https://www.apicur.io/registry/) is an open-source schema registry that provides a centralized repository for managing schemas and API artifacts in event-driven and message-based architectures. For architects building distributed systems, Apicurio Registry offers a powerful solution for schema validation, versioning, and governance with support for multiple schema formats including Avro, JSON Schema, Protobuf, OpenAPI, and AsyncAPI. Apicurio Registry supports both V2 and V3 APIs, giving teams flexibility in how they manage their schemas. Whether you're running it as a standalone service or as part of a larger infrastructure, Apicurio Registry helps ensure consistency across your event-driven architecture. ### Why integrate Apicurio Registry with EventCatalog?[​](#why-integrate-apicurio-registry-with-eventcatalog "Direct link to Why integrate Apicurio Registry with EventCatalog?") EventCatalog helps organizations understand and manage their event-driven architectures by providing comprehensive documentation of domains, services, and messages. **While schema registries capture the technical contract of your events, EventCatalog preserves the crucial context often lost in traditional documentation**: ownership details, business context, schema evolution history, and visual representations of your message flows. The Apicurio Registry plugin creates a seamless connection between your schema registry and EventCatalog, giving you the best of both worlds. You maintain all the powerful features of Apicurio's schema management while enriching your developer experience with EventCatalog's visualization capabilities, detailed documentation, governance tools, and enhanced discoverability. This integration helps teams not just track what schemas exist, but understand how they fit into the broader architectural landscape and how they've evolved over time. ### How the plugin works[​](#how-the-plugin-works "Direct link to How the plugin works") [The Apicurio Registry plugin](/docs/plugins/apicurio/intro.md) maps your schemas into logical services and domains within your organization. Teams can configure which schemas each service produces or consumes using flexible filters based on exact artifact IDs, prefixes, suffixes, or string matching. ![Apicurio Registry plugin](/assets/images/apicurio-064fe960df700d72b7de4629e19671de.png) When Apicurio schemas are imported into EventCatalog, they become more than just technical contracts - they gain rich contextual information that helps teams understand their broader impact. This includes crucial details like schema ownership, business context, and the producer-consumer relationships between services. The plugin also supports attaching OpenAPI and AsyncAPI specifications stored in your Apicurio Registry directly to services. You can even chain generators together, running the OpenAPI or AsyncAPI generators on these specifications to automatically create message documentation from your specs. Any markdown and documentation added to your messages are persisted between versions, so you can add more value to your schemas and keep your documentation up-to-date as schemas evolve. ### Getting started[​](#getting-started "Direct link to Getting started") To get started with the Apicurio Registry integration, you'll need: * An Apicurio Registry instance (V2 or V3) * Schemas registered in your Apicurio Registry * An EventCatalog license key for Apicurio Registry integration ([14-day free trial](https://eventcatalog.cloud)) The setup takes just a few minutes. [Read the installation guide](/docs/plugins/apicurio/installation.md) to configure your integration, or explore the [example project](https://github.com/event-catalog/generators/tree/main/examples/generator-apicurio) to see it in action. ### Summary[​](#summary "Direct link to Summary") Apicurio Registry is a powerful open-source tool for managing schemas in event-driven architectures. We created our [Apicurio Registry integration](https://github.com/event-catalog/generators) to help you unlock more value from your schema registries. The Apicurio Registry plugin allows you to map your schemas to services and domains within your organization, helping your team understand how schemas are produced and consumed across your architecture. With support for multiple schema formats and flexible filtering options, you can document exactly what matters to your teams. EventCatalog syncs with your schema registry and persists any additional contextual information you add, including documentation, ownership, and relationships. This context carries forward as your schemas evolve, creating a living history of your event-driven architecture. Using the Schema Explorer you can quickly find schemas in your architecture, understand the history of your schemas, or connect your schemas to your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md). Getting started should take just a few minutes and [you can read our guide here](/docs/plugins/apicurio/intro.md). If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Apicurio](/blog/tags/apicurio.md) * [Schema Registry](/blog/tags/schema-registry.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-11-26-introducing-apicurio-integration.md) --- # Your architecture is changing. Do you know about it? March 5, 2026 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog As event-driven architectures scale, an invisible problem emerges: who is producing what, and who is consuming it? A service starts consuming your `OrderPlaced` event. No ticket. No Slack message. No email. You find out weeks later when something breaks downstream. At scale, you need governance over these relationships. You need to know when dependencies change, who is affected, and ideally, before it reaches production. ## Architecture changes are invisible[​](#architecture-changes-are-invisible "Direct link to Architecture changes are invisible") In event-driven systems, things change constantly. New consumers appear. Producers get decommissioned. Messages get deprecated or versioned. Schemas evolve. Dependencies shift across teams, repos, and time. The problem is visibility. When a new service starts consuming your event, who gets told? When a producer goes away, do the teams depending on that message get a warning? When a schema changes, do downstream consumers know? **Most of the time, no.** Teams find out after something breaks, not before. Service owners have no way to see who depends on their messages. Platform teams trace relationships manually after incidents. Breaking changes land in production because no one was watching the dependency graph. **Architecture Change Detection is our first step toward solving this.** Starting with producer and consumer relationship changes, with more detection capabilities coming soon. ## Introducing Architecture Change Detection[​](#introducing-architecture-change-detection "Direct link to Introducing Architecture Change Detection") **Architecture Change Detection is a new feature that turns your catalog into an active monitoring system.** It compares your EventCatalog across git branches, detects when services start or stop producing or consuming messages, and notifies your teams automatically. You define rules. The tool watches. Your teams stay informed. ## When you'd use it[​](#when-youd-use-it "Direct link to When you'd use it") This feature is designed for teams where the cost of a missed architecture change is high. **Service owners** who want to know the moment someone starts depending on their messages. **Platform teams** who need to enforce governance and catch breaking changes before a PR merges. **Operations teams** who want an audit trail of every dependency change across the catalog. If any of those sound familiar, this is for you. ## How it works[​](#how-it-works "Direct link to How it works") You define governance rules in a `governance.yaml` file at the root of your catalog. Each rule specifies what to watch, what conditions to trigger on, and where to send notifications. governance.yaml ``` rules: - name: notify-consumer-changes when: - consumer_added - consumer_removed resources: - produces:OrdersService actions: - type: console - type: webhook url: $SLACK_WEBHOOK_URL ``` This rule watches every message that `OrdersService` produces. When any service starts or stops consuming one of those messages, it fires. Notifications go to the console and to a Slack webhook. ### Triggers[​](#triggers "Direct link to Triggers") To start, rules respond to four triggers, with more coming soon: * `consumer_added`: a service started consuming a message * `consumer_removed`: a service stopped consuming a message * `producer_added`: a new service started producing a message * `producer_removed`: a service stopped producing a message ### Resources[​](#resources "Direct link to Resources") The `resources` field controls what to watch. You can be broad or narrow: * `*`: everything in the catalog * `message:OrderPlaced`: a specific message * `service:NotificationService`: a specific service (as consumer or producer) * `produces:OrdersService`: all messages that `OrdersService` produces * `consumes:PaymentService`: all messages that `PaymentService` consumes ### Actions[​](#actions "Direct link to Actions") When a rule fires, it can trigger two action types. `console` prints the change to the terminal. `webhook` sends a POST request in [CloudEvents 1.0](https://cloudevents.io/) format to any URL, Slack, PagerDuty, or any other endpoint that accepts a webhook. Webhook payloads include the service involved with its owners, the message involved with its type (event, command, or query), and a human-readable summary of what changed. ## Running the check[​](#running-the-check "Direct link to Running the check") Run the check against any two branches: ``` npx @eventcatalog/cli governance check \ --base main \ --target feature/new-consumer ``` EventCatalog compares the two branches, finds the architectural differences, and evaluates them against your rules. Changes that match a rule trigger the configured actions. ## Integrating with CI/CD[​](#integrating-with-cicd "Direct link to Integrating with CI/CD") The real power comes from running this check automatically on every pull request. Add it to your GitHub Actions workflow to catch changes before they merge: .github/workflows/governance.yaml ``` name: EventCatalog Governance on: pull_request: types: [opened, synchronize, reopened] jobs: governance: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-node@v4 with: node-version: '24' - run: | npx @eventcatalog/cli governance check \ --base main \ --target ${{ github.head_ref }} \ --status proposed env: EVENTCATALOG_SCALE_LICENSE_KEY: ${{ secrets.EVENTCATALOG_SCALE_LICENSE_KEY }} SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} ``` The `--status proposed` flag marks webhook payloads with the PR lifecycle stage. When a PR is approved and merged, you can run the check again with `--status approved` to notify teams that the change is confirmed. ## Recipes to get you started[​](#recipes-to-get-you-started "Direct link to Recipes to get you started") We've put together a handful of ready-to-use configurations for common scenarios: * **Alert when a message gets a new consumer**, so you know when teams start depending on your events * **Alert when anyone consumes any message your service produces**, giving service owners full downstream visibility * **Detect when an upstream producer disappears**, catching breaking changes before they affect your service * **Track all changes across the catalog**, for audit logs or a central ops channel * **Monitor all changes for a specific service**, regardless of which message is affected Each recipe includes a copy-paste `governance.yaml` configuration. Check out the full list in the [Recipes documentation](/docs/development/governance/architecture-change-detection/recipes.md). ## Getting started[​](#getting-started "Direct link to Getting started") Architecture Change Detection is available on the Scale plan. Not on Scale yet? [Start a 14-day free trial](https://eventcatalog.cloud). Once you have a license key, set it as the `EVENTCATALOG_SCALE_LICENSE_KEY` environment variable, create a `governance.yaml` file at the root of your catalog, and run your first check: ``` npx @eventcatalog/cli governance check --base main --target HEAD ``` That's it. You'll see the detected changes printed to the console, and any matching rules will fire their configured actions. ## Summary[​](#summary "Direct link to Summary") Architecture Change Detection solves a real problem in event-driven systems: the gap between what changes and who gets notified. Define rules once, run checks in CI, and your teams stay informed automatically. **Your catalog becomes a governance layer, not just documentation.** ## What's next[​](#whats-next "Direct link to What's next") Producer and consumer detection is just the beginning. We're working on expanding Architecture Change Detection to cover more of the changes that matter to your teams: * **Schema change detection**: know when message schemas evolve across versions * **Breaking change detection**: catch backward-incompatible schema changes before they affect consumers * **Message deprecation alerts**: get notified when messages are deprecated so dependent teams can plan ahead * **Version lifecycle tracking**: detect when resources are versioned and track the upgrade path If you have ideas for what you'd like to detect in your catalog, let us know on [Discord](https://discord.gg/eventcatalog) or raise an issue on [GitHub](https://github.com/event-catalog/eventcatalog). Read the full [Architecture Change Detection documentation](/docs/development/governance/architecture-change-detection/introduction.md) for complete configuration options and recipes. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Governance](/blog/tags/governance.md) * [Architecture](/blog/tags/architecture.md) * [Change Detection](/blog/tags/change-detection.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-03-05-architecture-change-detection.md) --- ### 2026[​](#2026 "Direct link to 2026") * [January 7](/blog/eventcatalog-v3.md) [ - ](/blog/eventcatalog-v3.md) [Introducing EventCatalog v3](/blog/eventcatalog-v3.md) * [January 8](/blog/eventcatalog-themes-dark-mode.md) [ - ](/blog/eventcatalog-themes-dark-mode.md) [Introducing Themes and Dark Mode](/blog/eventcatalog-themes-dark-mode.md) * [January 8](/blog/eventcatalog-icepanel.md) [ - ](/blog/eventcatalog-icepanel.md) [Embed IcePanel Diagrams in EventCatalog](/blog/eventcatalog-icepanel.md) * [January 8](/blog/live-data-meets-architecture-documentation.md) [ - ](/blog/live-data-meets-architecture-documentation.md) [Live data meets architecture documentation](/blog/live-data-meets-architecture-documentation.md) * [January 9](/blog/2026/01/09/diagrams-as-first-class-resources.md) [ - ](/blog/2026/01/09/diagrams-as-first-class-resources.md) [Introducing diagrams as first-class resources](/blog/2026/01/09/diagrams-as-first-class-resources.md) * [January 11](/blog/built-in-mcp-server.md) [ - ](/blog/built-in-mcp-server.md) [EventCatalog now includes a built-in MCP server](/blog/built-in-mcp-server.md) * [January 15](/blog/domain-level-messages.md) [ - ](/blog/domain-level-messages.md) [Document events at the domain level](/blog/domain-level-messages.md) * [January 21](/blog/eventcatalog-cli.md) [ - ](/blog/eventcatalog-cli.md) [Access your EventCatalog from the command line](/blog/eventcatalog-cli.md) * [January 21](/blog/data-products.md) [ - ](/blog/data-products.md) [Document, visualize and discover your data products](/blog/data-products.md) * [January 29](/blog/visualizer-layout-persistence.md) [ - ](/blog/visualizer-layout-persistence.md) [Rearrange and save your visualizer layouts](/blog/visualizer-layout-persistence.md) * [January 30](/blog/focus-mode.md) [ - ](/blog/focus-mode.md) [Click any node to explore its connections in Focus Mode](/blog/focus-mode.md) * [February 1](/blog/eventcatalog-january-2026.md) [ - ](/blog/eventcatalog-january-2026.md) [What's new in EventCatalog - January 2026](/blog/eventcatalog-january-2026.md) * [February 3](/blog/slack-integration.md) [ - ](/blog/slack-integration.md) [EventCatalog Slack integration](/blog/slack-integration.md) * [February 16](/blog/visualizer-improvements.md) [ - ](/blog/visualizer-improvements.md) [See your architecture clearly: Major visualizer improvements](/blog/visualizer-improvements.md) * [February 19](/blog/resource-docs.md) [ - ](/blog/resource-docs.md) [The right documentation, in the right place](/blog/resource-docs.md) * [March 5](/blog/architecture-change-detection.md) [ - ](/blog/architecture-change-detection.md) [Your architecture is changing. Do you know about it?](/blog/architecture-change-detection.md) * [March 11](/blog/message-usage-examples.md) [ - ](/blog/message-usage-examples.md) [Document examples with your schemas](/blog/message-usage-examples.md) * [March 17](/blog/field-usage.md) [ - ](/blog/field-usage.md) [Which fields are your consumers actually using?](/blog/field-usage.md) * [March 18](/blog/flow-wizard.md) [ - ](/blog/flow-wizard.md) [Describe the workflow, let the agent build the flow](/blog/flow-wizard.md) * [March 23](/blog/schema-fields-explorer.md) [ - ](/blog/schema-fields-explorer.md) [Trace every field across your schemas and architecture](/blog/schema-fields-explorer.md) * [March 25](/blog/openapi-consumer-services.md) [ - ](/blog/openapi-consumer-services.md) [Document who consumes your APIs, not just who owns them](/blog/openapi-consumer-services.md) * [March 30](/blog/eventcatalog-miro-app.md) [ - ](/blog/eventcatalog-miro-app.md) [Your documentation is a design artifact, not just a wiki page](/blog/eventcatalog-miro-app.md) * [March 31](/blog/eventcatalog-march-2026.md) [ - ](/blog/eventcatalog-march-2026.md) [Whats new in EventCatalog - March 2026](/blog/eventcatalog-march-2026.md) * [April 14](/blog/external-systems.md) [ - ](/blog/external-systems.md) [Model external systems in EventCatalog](/blog/external-systems.md) * [April 15](/blog/custom-icons.md) [ - ](/blog/custom-icons.md) [Your catalog nodes now show what they actually are](/blog/custom-icons.md) --- # AsyncAPI integration with EventCatalog September 1, 2024 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm happy to share the first integration plugin for EventCatalog has been released. The [EventCatalog AsyncAPI plugin](https://github.com/event-catalog/generators) connects your [AsyncAPI](https://www.asyncapi.com/en) files to [EventCatalog](https://www.eventcatalog.dev/) and automates the hydration of your catalog, versioning and schema management. ### What is AsyncAPI?[​](#what-is-asyncapi "Direct link to What is AsyncAPI?") [The AsyncAPI specification](https://www.asyncapi.com/en) is the industry standard for defining asynchronous APIs, with AsyncAPI you can define your servers, channels and messages. This gives architects and developers the ability to document their asynchronous APIs using an open standard. From the website directly: > AsyncAPI is an open source initiative that seeks to improve the current state of Event-Driven Architectures (EDA). Our long-term goal is to make working with EDAs as easy as working with REST APIs. That goes from documentation to code generation, from discovery to event management, and beyond. [(read more)](https://www.asyncapi.com/docs) AsyncAPI is [part of the Linux foundation ](https://www.asyncapi.com/blog/asyncapi-joins-linux-foundation)has a [fantastic tools](https://www.asyncapi.com/tools) defined and [community](https://www.asyncapi.com/community) behind the project. ### Why integration with EventCatalog[​](#why-integration-with-eventcatalog "Direct link to Why integration with EventCatalog") Over the past few years AsyncAPI has gained momentum and has become a great standard to help you document and govern your event-driven architectures. [Many companies](https://www.asyncapi.com/casestudies) including LEGO, Zora Robotics, Walmart and Ebay are using AsyncAPI to help them build their event-driven architectures. Our vision with EventCatalog is to help companies manage event-driven architecture discoverability and it's complexity through documentation and integration tools. Part of this vision is to automate some of this complexity and documentation for you. That's why we have integrated with AsyncAPI. ### How the plugin works[​](#how-the-plugin-works "Direct link to How the plugin works") EventCatalog can be powered by [generators](https://www.eventcatalog.dev/docs/plugins/generators). Generators can be used to automate the creation of your EventCatalog. The [AsyncAPI generator](https://github.com/event-catalog/generators) takes your AsyncAPI files and transform them into living documentation. ![Image](/assets/images/asyncapi-9f7d51ce066b37fe03a97f974f43d39d.jpeg) The AsyncAPI generator will: * 📃 Document domains, services and messages from your AsyncAPI file (example) * 📊 Visualise your architecture (demo) * ⭐ Download your AsyncAPI files and message schemas form EventCatalog (e.g Avro, JSON) (demo) * 💅 Custom MDX components (read more) * 🗄️ Auto versioning of your domains, services and messages * ⭐ Discoverability feature (search, filter and more) (demo) * ⭐ And much more... ### Getting started[​](#getting-started "Direct link to Getting started") To get started you can [read the documentation](/docs/plugins/asyncapi/intro.md) or see [the example project](https://github.com/event-catalog/generators/tree/main/examples/generator-asyncapi). You [can also watch the video](https://x.com/boyney123/status/1829540907680477612) to learn more. ### Summary[​](#summary "Direct link to Summary") EventCatalog is vendor and technology agnostic. This allow us to integrate with any system in the world and we already have a backlog of plugins [(Backstage, OpenAPI, GitHub, AWS, Azure, Google, Solace, Gravitee and more...)](https://www.eventcatalog.dev/integrations). Today we launched our [first integration with AsyncAPI](https://github.com/event-catalog/generators) which allows you to automate your EventCatalog. If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [AsyncAPI](/blog/tags/async-api.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-09-01-introducing-asyncapi-integration.md) --- # Introducing Authentication and SSR Mode June 13, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Today we are excited to announce the release of the [EventCatalog Authentication](/docs/development/authentication/introduction.md) and [EventCatalog SSR Mode](/docs/development/deployment/build-ssr-mode.md). These new features are designed to help you get the most out of EventCatalog. ![EventCatalog Authentication](/img/auth.png)[Get started with EventCatalog Authentication](/docs/development/authentication/introduction.md) ## Authentication[​](#authentication "Direct link to Authentication") EventCatalog now provides [secure authentication](/docs/development/authentication/introduction.md) to control access to your documentation. Whether you're a small team getting started or a large enterprise with complex identity requirements, EventCatalog's flexible authentication system grows with your needs. On the initial release we support the following identity providers: * [GitHub](/docs/development/authentication/providers/setting-up-github.md) * [Auth0](/docs/development/authentication/providers/setting-up-auth0.md) * [Okta](/docs/development/authentication/providers/setting-up-okta.md) * [Azure AD (Entra ID)](/docs/development/authentication/providers/setting-up-azure-ad.md) If we are missing your identity provider, [please let us know](mailto:hello@eventcatalog.io) and we will add support for it. #### How it works[​](#how-it-works "Direct link to How it works") EventCatalog uses industry-standard OpenID Connect (OIDC) and OAuth 2.0 protocols to integrate with your identity provider. Here's the authentication flow: 1. User visits EventCatalog and attempts to access protected documentation (everything is protected by default) 2. Redirects to your identity provider (GitHub, Google, Auth0, etc.) 3. User authenticates with their existing credentials 4. Provider confirms identity and sends user back to EventCatalog 5. User gains access to your documentation and architecture To get started with authentication, you can read our [quick guide in our documentation here](/docs/development/authentication/introduction.md). ## SSR Mode[​](#ssr-mode "Direct link to SSR Mode") By default EventCatalog exports a static HTML site. This means you can deploy your application anywhere you want. We have found for users with large catalogs, the build time can be slow, as every page is rendered and built. We are excited to announce that EventCatalog now supports [SSR mode (Server side rendering)](/docs/development/deployment/build-ssr-mode.md), this means you can use EventCatalog as a server-side rendered application. This is perfect for large catalogs, for users with slow deployment times and for users that are using EventCatalog features that require a server (e.g [EventCatalog Chat](/features/ai-assistant.md), [EventCatalog Authentication](/docs/development/authentication/introduction.md)) Rather than building the entire catalog into HTML files, EventCatalog will render the pages on the fly (using server-side rendering). To enable SSR mode, you need to update your `eventcatalog.config.js` file to use SSR mode. eventcatalog.config.js ``` export default { // defaults to static output: 'server', } ``` This tells EventCatalog to build the application as a server-side rendered application. You can then deploy your application to a server that can run Node.js. If you want to learn more about how to host your SSR applications, you can read our [quick guide in our documentation here](/docs/development/deployment/hosting-options.md). ## Summary[​](#summary "Direct link to Summary") EventCatalog Authentication and SSR Mode are designed to help you get the most out of EventCatalog. EventCatalog Authentication provides secure authentication to control access to your event-driven architecture documentation. EventCatalog SSR Mode is perfect for large catalogs, for users with slow deployment times and for users that are using EventCatalog features that require a server (e.g EventCatalog Chat, Authentication) ## What's next?[​](#whats-next "Direct link to What's next?") We will continue to add more support for more identity providers, and explore role based access control (RBAC) for EventCatalog. We will also be exploring bringing your own middleware to EventCatalog, this will let you add your own authentication and authorization logic to EventCatalog. If you have any questions, feel free to join over 1,100 EventCatalog users on [Discord](https://discord.com/invite/3rjaZMmrAm), we are happy to help you get started. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Authentication](/blog/tags/authentication.md) * [SSR](/blog/tags/ssr.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-06-13-authentication-and-ssr-mode.md) --- # Integrate Azure Schema Registry with EventCatalog November 4, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [YouTube video player](https://www.youtube.com/embed/rNDa2JDyr_A?si=uFAbZbAiAxiy9dqJ) I'm happy to announce the release of the [EventCatalog Azure Schema Registry plugin](/docs/plugins/azure-schema-registry/intro.md). This plugin allows you to import schemas from Azure Schema Registry into EventCatalog and keep them in sync alongside your documentation. Importing your schemas into EventCatalog gives you the ability to: * Add more value to your schemas with business context and ownership * Bring discoverability to your schemas with the [EventCatalog Schema Explorer](/docs/development/guides/schemas/schema-explorer.md) * Assign ownership (users and teams) to your schemas * Visualize the bigger picture with the [EventCatalog Visualizer](/features/visualization.md) * Getting access to your schemas with the [EventCatalog Schema API](/docs/development/guides/schemas/schema-api.md) for your LLMs or testing * Connect your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) to get schemas for your LLMs * And more... In this blog post I'll walk you through the features of the plugin and how to get started. *** ### What is Azure Schema Registry?[​](#what-is-azure-schema-registry "Direct link to What is Azure Schema Registry?") [Azure Schema Registry](https://learn.microsoft.com/en-us/azure/event-hubs/schema-registry-overview) is a feature of Azure Event Hubs that provides a centralized repository for managing schemas in event-driven and message-based architectures. For architects building on Azure, Schema Registry offers a managed solution for schema validation, versioning, and governance. ### Why integrate Azure Schema Registry with EventCatalog?[​](#why-integrate-azure-schema-registry-with-eventcatalog "Direct link to Why integrate Azure Schema Registry with EventCatalog?") EventCatalog helps organizations understand and manage their event-driven architectures by providing comprehensive documentation of domains, services, and messages. **While schema registries capture the technical contract of your events, EventCatalog preserves the crucial context often lost in traditional documentation**: ownership details, business context, schema evolution history, and visual representations of your message flows. The Azure Schema Registry plugin creates a seamless connection between your Azure Schema Registry and EventCatalog, giving you the best of both worlds. You maintain all the powerful features of Azure's schema management while enriching your developer experience with EventCatalog's visualization capabilities, detailed documentation, governance tools, and enhanced discoverability. This integration helps teams not just track what schemas exist, but understand how they fit into the broader architectural landscape and how they've evolved over time. ### How the plugin works[​](#how-the-plugin-works "Direct link to How the plugin works") [The Azure Schema Registry plugin](/docs/plugins/azure-schema-registry/intro.md) maps your schemas into logical services and domains within your organization. Teams can configure which schemas each service produces or consumes, creating clear boundaries and relationships in your architecture. When Azure schemas are imported into EventCatalog, they become more than just technical contracts - they gain rich contextual information that helps teams understand their broader impact. This includes crucial details like schema ownership, business context, and the producer-consumer relationships between services. Any markdown and documentation added to your messages are persisted between versions, so you can add more value to your schemas and keep your documentation up-to-date. ### Getting started[​](#getting-started "Direct link to Getting started") To get started with the Azure Schema Registry integration, you'll need: * An Azure Event Hubs namespace with Schema Registry enabled * Schemas registered in your Azure Schema Registry * An EventCatalog license key for Azure Schema Registry integration ([14-day free trial](https://eventcatalog.cloud)) The setup takes just a few minutes. [Read the installation guide](/docs/plugins/azure-schema-registry/installation.md) to configure your integration, or explore the [example project](https://github.com/event-catalog/generators/tree/main/examples/generator-azure-schema-registry) to see it in action. ### Summary[​](#summary "Direct link to Summary") Azure Schema Registry is a powerful tool for managing schemas in event-driven architectures on Azure. We created our [Azure Schema Registry integration](https://github.com/event-catalog/generators) to help you unlock more value from your schema registries. The Azure Schema Registry plugin allows you to map your schemas to services and domains within your organization, helping your team understand how schemas are produced and consumed across your architecture. EventCatalog syncs with your schema registry and persists any additional contextual information you add, including documentation, ownership, and relationships. This context carries forward as your schemas evolve, creating a living history of your event-driven architecture. Using the Schema Explorer you can quickly find schemas in your architecture, and understand the history of your schemas, or connect your schemas to your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md). Getting started should take just a few minutes and [you can read our guide here](/docs/plugins/azure-schema-registry/intro.md). If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Azure](/blog/tags/azure.md) * [Schema Registry](/blog/tags/schema-registry.md) * [Event Hubs](/blog/tags/event-hubs.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-11-04-azure-schema-registry-integration.md) --- # EventCatalog now includes a built-in MCP server January 11, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that we've improved and simplified our MCP server for EventCatalog. Previously, to use EventCatalogs MCP server you had to install and run the standalone `@eventcatalog/mcp-server` package separately, the previous MCP server would use the llms.txt file to provide context to the LLM. Although this worked, it was not the most efficient way to use EventCatalog with MCP clients... We have reviewed the MCP server and made it much more efficient and easier to use. Every EventCatalog instance now includes a built-in MCP server at `/docs/mcp/` and now uses more performant ways to provide your models with the information they need. This means you can connect your preferred MCP clients directly to your EventCatalog instance and start asking questions about your architecture in natural language. ## Why use EventCatalog's MCP server[​](#why-use-eventcatalogs-mcp-server "Direct link to Why use EventCatalog's MCP server") **EventCatalog is documentation for both humans and AI**. Your teams browse the catalog to understand [services](/docs/services.md), [events](/docs/events.md), and [domains](/docs/domains.md). Your AI tools can now do the same. The MCP server gives LLMs and MCP clients (Claude Desktop, Cursor, [Windsurf](https://codeium.com/windsurf), [VS Code](https://code.visualstudio.com)) direct access to your architecture documentation. Ask questions about message schemas, trace service dependencies, or analyze change impact. **The AI works with the same source of truth your team uses.** This is the best of both worlds. Humans get a visual catalog they can browse and search. AI gets structured access to query, filter, and reason about your architecture. Both stay in sync because they read from the same place. ## Getting started[​](#getting-started "Direct link to Getting started") To get started, you need to update your EventCatalog instance to the latest version and configure it to run in SSR mode. First you need to update your EventCatalog instance to the latest version. Updating EventCatalog ``` npm install @eventcatalog/eventcatalog@latest ``` Then you need to update your `eventcatalog.config.js` file to use SSR mode. (mcp requires SSR mode) eventcatalog.config.js ``` export default { output: 'server', // ... other config options } ``` Once EventCatalog is running you can connect your preferred MCP client to your EventCatalog instance at `/docs/mcp/`. To get started, see our [MCP server documentation](/docs/development/ask-your-architecture/mcp-server/getting-started.md). ## Example usage[​](#example-usage "Direct link to Example usage") Once connected, you can ask questions about your architecture in natural language. This can be useful for: * Finding messages for features you're building * Accessing catalog directly in code editors * Defining standards and creating schemas * Exploring OpenAPI and AsyncAPI files * Understanding service impact from changes * Discovering resource ownership Here are some examples: *** **"What's the blast radius if I change the OrderCreated event?"** > The OrderCreated event (v2.0.0) is consumed by 4 services: > > | Service | Team | Impact | > | ------------------- | -------------- | ------------------------ | > | InventoryService | Platform | Updates stock levels | > | NotificationService | Communications | Sends order confirmation | > | AnalyticsService | Data | Tracks order metrics | > | BillingService | Finance | Initiates payment flow | > > **Total blast radius: 4 services across 4 teams.** Consider coordinating with Platform and Finance teams before making breaking changes. *** **"Which services does the Payment team own?"** > The Payment team owns 3 services: > > * **PaymentGateway** (v1.2.0) - Processes credit card transactions > * **RefundService** (v1.0.0) - Handles refund requests and chargebacks > * **PaymentWebhooks** (v2.1.0) - Receives payment provider callbacks > > These services produce 5 events and consume 3 events total. *** **"Show me the schema for UserRegistered"** > Here's the UserRegistered event schema (v1.0.0): > > ``` > { > "userId": "string (UUID)", > "email": "string (email format)", > "registeredAt": "string (ISO 8601 datetime)", > "source": "enum: web | mobile | api", > "marketingConsent": "boolean" > } > ``` > > This event is produced by AuthService and consumed by NotificationService, CRMSync, and AnalyticsService. *** **"Explain the checkout business flow"** > The Checkout flow consists of 5 steps: > > 1. **Cart Validation** - CartService validates items and availability > 2. **Price Calculation** - PricingService applies discounts and taxes > 3. **Payment Processing** - PaymentGateway charges the customer > 4. **Order Creation** - OrderService creates the order record > 5. **Fulfillment Trigger** - Emits OrderCreated to start shipping > > Average completion time: 2.3 seconds. *** ## Tools and resources[​](#tools-and-resources "Direct link to Tools and resources") The MCP server includes 15 tools for querying your architecture and 9 resources for bulk data access. [View all tools and resources →](/docs/development/ask-your-architecture/mcp-server/getting-started.md) ## Migrating from standalone server[​](#migrating-from-standalone-server "Direct link to Migrating from standalone server") The standalone `@eventcatalog/mcp-server` package still works, but we plan to deprecate it in a future release. The built-in server is faster, uses less context, and requires no external setup. We recommend migrating to the built-in MCP server when possible. ## Summary[​](#summary "Direct link to Summary") The built-in MCP server simplifies deployment by eliminating external server management. It provides faster queries through direct content collection access and supports custom tools for domain-specific integrations. The built-in MCP server requires SSR mode and a Scale license. [Get a free trial at eventcatalog.cloud](https://eventcatalog.cloud). **Learn more:** * [MCP server documentation](/docs/development/ask-your-architecture/mcp-server/introduction.md) * [Complete API reference](/docs/development/ask-your-architecture/mcp-server/getting-started.md) **Get help:** * [Discord community](https://eventcatalog.dev/discord) * [GitHub issues](https://github.com/event-catalog/eventcatalog) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [MCP](/blog/tags/mcp.md) * [AI](/blog/tags/ai.md) * [Scale](/blog/tags/scale.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-11-built-in-mcp-server.md) --- # Modelling more message patterns in EventCatalog December 1, 2025 · 7 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm happy to share that **EventCatalog 2.65.0** is now out. This release includes the following highlights: * [New: Channel updates in EventCatalog](#channel-updates-in-eventcatalog) * A new way to model more message patterns in EventCatalog, chain channels together and much more... * [New: Producers and consumers are now visualized](#producers-and-consumers-are-now-visualized) * The visualizer now shows Producers and Consumers for your messages. Not just the service, to help you understand the bigger picture. * [New: Message colors added to the visualizer](#message-colors-added-to-the-visualizer) * The visualizer now shows colored messages (nodes). This allows you to keep track of how messages flow in your architecture. Files will be automatically migrated When you upgrade EventCatalog to 2.65.0 our migration script will migrate your channels for you ❤️. This will change files in your EventCatalog that will be need to be reviewed and updated. ## Channel updates in EventCatalog[​](#channel-updates-in-eventcatalog "Direct link to Channel updates in EventCatalog") Channels in EventCatalog have been updated to support more complex messaging patterns and flows. Channels represent the transportation method of messages between producers and consumers. Examples of channels could be: * Kafka * RabbitMQ * AWS SQS * AWS SNS * AWS SNS ### What has changed with Channels?[​](#what-has-changed-with-channels "Direct link to What has changed with Channels?") Previously in EventCatalog you would define and assign your channel to your messages. This would tell EventCatalog that the `OrderPlaced` message is published to the `orders.events` channel. /events/OrderPlaced/index.mdx (example) ``` --- id: OrderPlaced ... # other event frontmatter channels: - id: orders.events --- ``` **Although this worked, it limited the ability to model more complex messaging patterns and flows.** Moving forward you will now define **how** your messages are transported when documenting who is publishing and consuming these messages. ### Define how your producers and consumers transport messages[​](#define-how-your-producers-and-consumers-transport-messages "Direct link to Define how your producers and consumers transport messages") When you define produces and consumers in EventCatalog, you use the `sends` and `receives` fields in your service frontmatter. This example shows: * The `OrderService` sending an `OrderPlaced` message * The `OrderService` receiving a `PaymentProcessed` /services/Orders/index.mdx (example) ``` --- id: OrderService ... # other service frontmatter sends: - id: OrderPlaced receives: - id: PaymentProcessed --- ``` In EventCatalog 2.65.0 you can now define how your messages are transported using the new `to` and `from` fields. #### Example of assigning channels to producers and consumers[​](#example-of-assigning-channels-to-producers-and-consumers "Direct link to Example of assigning channels to producers and consumers") Here is an example of an `OrderService` that sends an `OrderPlaced` message and receives a `PaymentProcessed` message. But now, we define the transport method for the message (e.g broker, queue, topic, etc.) /services/Orders/index.mdx (example) ``` --- id: OrderService ... # other service frontmatter sends: - id: OrderPlaced # OrderPlaced is published to the orders.events channel (e.g broker) to: - id: orders.events receives: - id: PaymentProcessed # PaymentProcessed is consumed from the payments.events channel (e.g queue) from: - id: payments.events --- ``` This way allows you to model and visualize many more complex messaging patterns and flows. In the example below, we implemented a simple publish/subscribe pattern with channels and routing. ![Example](/assets/images/channels-example-dc2f3420a62dd3a1147b649be5e80b2b.png) But we can also model more complex messaging patterns and flows. ### Chain channels together to model more complex messaging patterns and flows[​](#chain-channels-together-to-model-more-complex-messaging-patterns-and-flows "Direct link to Chain channels together to model more complex messaging patterns and flows") In some cases you may want to chain channels together, to document how messages are transported, filtered, changed and consumed. Using channel to channel routing you can model more complex messaging patterns and flows. Other examples of this could be: * Broker -> Queue -> Processor -> Topic * Queue -> Processor -> Topic * Processor -> Topic * Topic -> Queue * Queue -> Broker * Broker -> Queue -> Processor -> Topic -> Queue * Broker -> Queue -> Processor -> Topic -> Queue -> Broker To do this we have now added the new `routes` field in your channels. The `routes` field tells EventCatalog the possible routes/destinations for the messages going through the channel. ![Example](/assets/images/channel-chains-9647e1fa616589511ee0088ff041761f.png) If you want to learn more about chaining channels together, you can read our [chaining channels together guide](/docs/development/guides/channels/adding-messages-to-services.md#chaining-channels). ### Channels documentation can belong anywhere[​](#channels-documentation-can-belong-anywhere "Direct link to Channels documentation can belong anywhere") Previously in EventCatalog, channels were only defined in the root `/channels` directory. We have now changed this, and you can now defined channels in any directory you like. This can be useful if you want to group channels by domain, service, team, etc. ``` /domains/ /MyDomain/ /channels/ /services/ /MyService/ /channels/ ``` To get started you can create your `channels` folder in any directory you like (\*\*/channels) You can learn more reading our [channels guide](/docs/development/guides/channels/introduction.md). *** ## Producers and consumers are now visualized[​](#producers-and-consumers-are-now-visualized "Direct link to Producers and consumers are now visualized") Previously in EventCatalog, the visualizer would show you messages your services are consuming and producing (seen below) ![Example](/assets/images/before-ded743a9c4181ef732b19dfff25ec075.png) **The problem is, that it does not show you the bigger picture. Who is producing the messages you are consuming or who is consuming the messages you are producing.** So In EventCatalog 2.65.0 we made a few changes to help visualize the bigger picture better. ### See who is producing and consuming messages[​](#see-who-is-producing-and-consuming-messages "Direct link to See who is producing and consuming messages") The new visualizer will now show you exactly who is producing and consuming the messages you are sending and receiving. ![Example](/assets/images/after-a4d8fd5ee01032c5a447025d091d7093.png) This can help your teams understand the bigger picture of your architecture and how messages are flowing. ## Message colors added to the visualizer[​](#message-colors-added-to-the-visualizer "Direct link to Message colors added to the visualizer") We have also added colors to add animated messages to the visualizer, and added support for multi animated messages between producers and consumers. This visual guide can help you see how your messages are flowing through your architecture, without them all being the same color. ![Example](/assets/images/color-messages-edf32a0cef4e29f4e15e69dcf9ed9db1.png) *** ## What's next?[​](#whats-next "Direct link to What's next?") More and more users are coming to EventCatalog to help them bring discoverability to their event-driven architecture and save teams time. Our next goal is focus more on stability and focus on bug fixing and patching. So if you have any issues or feedback, please let us know. Our next major features include: * [Adding domain level events (RFC)](https://github.com/event-catalog/eventcatalog/issues/1816) * [Added support for Containers In EventCatalog (RFC)](https://github.com/event-catalog/eventcatalog/issues/1819) * [Adding Data Products In EventCatalog (RFC)](https://github.com/event-catalog/eventcatalog/issues/1818) * [Adding Webhooks In EventCatalog (RFC)](https://github.com/event-catalog/eventcatalog/issues/1814) Many people have given us awesome feedback over the past year, and we have made the new RFCs to help you model the architectures you want to document. And we are excited to see the new features and improvements coming to EventCatalog. If you like EventCatalog, [I would love a ⭐️ on GitHub](https://github.com/event-catalog/eventcatalog), and feel free to join our [Discord Channel](https://eventcatalog.dev/discord), which now has over 1,200 members! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Channels](/blog/tags/channels.md) * [2](/blog/tags/2.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-12-01-channels-2.0.md) --- # Your catalog nodes now show what they actually are April 15, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.28.1 adds custom icons to every resource type. Set `styles.icon` in any frontmatter and that icon appears across your entire catalog: visualiser nodes, sidebar navigation, documentation headers, and search results. ![The EventCatalog visualiser showing service and channel nodes with custom brand icons instead of generic shapes](/img/blogs/custom-icons/icon-visualizer.png)Custom icons on visualiser nodes — each node communicates the actual technology, not just its resource type ## Why icons matter[​](#why-icons-matter "Direct link to Why icons matter") A visualiser full of generic coloured boxes tells you what *kind* of thing each node is: service, channel, event. It doesn't tell you what it actually *is*. Add a Postgres icon, a Kafka icon, and a Stripe logo and the same diagram communicates the shape of your system at a glance. Your team sees "the Kafka pipeline into Snowflake" instead of "a channel connected to a data product". **Icons are optional, but they change how quickly people read a diagram.** The difference between a diagram that needs a legend and one that's self-explanatory is often just a handful of recognizable logos. ## How it works[​](#how-it-works "Direct link to How it works") Add `styles.icon` to any resource's frontmatter. The value is either a path under your catalog's `public/` folder or an absolute URL: services/OrdersService/index.mdx ``` --- id: OrdersService name: Orders Service version: 0.0.1 styles: icon: /icons/languages/dotnet.svg --- ``` Drop your SVG, PNG, or WEBP files into the `public/` folder and reference them by path. For brand logos you don't want to download and host yourself, point straight at a URL instead: services/PaymentService/index.mdx ``` --- id: PaymentService name: Payment Service version: 0.0.1 styles: icon: https://cdn.simpleicons.org/stripe --- ``` The same `styles.icon` field works on [events](/docs/development/guides/messages/events/adding-events.md), [commands](/docs/development/guides/messages/commands/adding-commands.md), [queries](/docs/development/guides/messages/queries/adding-queries.md), [services](/docs/development/guides/services/introduction.md), [channels](/docs/development/guides/channels/introduction.md), containers, and [data products](/docs/development/guides/data-products/introduction.md). ## Simple Icons CDN[​](#simple-icons-cdn "Direct link to Simple Icons CDN") [Simple Icons](https://cdn.simpleicons.org) provides SVG logos for over 3,000 brands, served directly from a CDN. No account, no download, no hosting required. The URL pattern is `https://cdn.simpleicons.org/{slug}` where slug is the lowercase brand name. It's the fastest way to add recognizable logos to third-party services like Stripe, Kafka, Snowflake, or Postgres. ## Beyond the visualiser[​](#beyond-the-visualiser "Direct link to Beyond the visualiser") The icon doesn't just appear on visualiser nodes. It shows up everywhere a resource is referenced inside EventCatalog. ![EventCatalog showing custom icons in the sidebar navigation and documentation page headers alongside the visualiser](/img/blogs/custom-icons/full-screen-icons.png)The same icon appears in the sidebar, the documentation page header, and the search modal — not just the visualiser Set an icon once and it propagates to the sidebar navigation, the documentation page title, and the header search modal. That consistency matters when you have a large catalog where people navigate between resources frequently. ## Default icons out of the box[​](#default-icons-out-of-the-box "Direct link to Default icons out of the box") Even if you don't set any custom icons, the catalog now looks more consistent. **EventCatalog 3.28.1 ships sensible default Lucide icons per collection**: bolt for events, chat for commands, search for queries, server for services, arrows for channels, database for containers, and package for data products. Resources that previously showed no icon now have one automatically. ## Getting started[​](#getting-started "Direct link to Getting started") Add `styles.icon` to any resource frontmatter and restart your catalog. The [services guide](/docs/development/guides/services/adding-services.md) covers the custom icon option in full detail, and the same section exists on every resource type's documentation page. As always, questions and feedback are welcome on [Discord](https://discord.gg/eventcatalog) or on [GitHub](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualiser](/blog/tags/visualiser.md) * [Icons](/blog/tags/icons.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-04-15-custom-icons.md) --- # Introducing Search v2 July 29, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that EventCatalog introduces a completely redesigned search experience that makes discovering and exploring your event-driven architecture faster and more intuitive than ever before. Say goodbye to basic search and hello to powerful, categorized discovery. ![EventCatalog Entity Map](/img/search-v2.png)[View the demo](https://demo.eventcatalog.dev/docs/) ## The Challenge with Search v1[​](#the-challenge-with-search-v1 "Direct link to The Challenge with Search v1") ![EventCatalog Entity Map](/img/search-v1.png)Previous search experience (Search v1) As EventCatalogs grow larger with hundreds of domains, services, events, and documentation pages, finding the right information quickly becomes increasingly difficult. Traditional search implementations often fall short by: * **Showing overwhelming results** without any organization or context * **Lacking category filtering** to narrow down what you're looking for * **Missing visual hierarchy** to distinguish between different types of resources * **Providing poor user experience** on complex architectures For teams managing large-scale event-driven systems, efficient discovery isn't just nice to have—it's essential for productivity and maintaining architectural understanding across the organization. ## Introducing Search v2[​](#introducing-search-v2 "Direct link to Introducing Search v2") The new custom search transforms how you explore your EventCatalog with a powerful, modal-based interface that puts everything at your fingertips. Built specifically for static output (with SSR support coming soon), this search experience is designed to scale with your architecture. ![EventCatalog Entity Map](/img/search-v2-events.png)Filter by resource type (e.g. Domains, Services, Events, Commands, Queries, Entities, Teams, Users, API Specifications) ### Key Features at a Glance[​](#key-features-at-a-glance "Direct link to Key Features at a Glance") **🔍 Advanced Filtering**: Filter by resource type including domains, services, events, commands, queries, entities, teams, users, and API specifications **⚡ Instant Results**: Lightning-fast search powered by Pagefind with real-time highlighting and excerpts **🎯 Smart Categorization**: Organized sidebar with visual icons and result counts for each category **📊 Visual Hierarchy**: Color-coded results with type badges and descriptions for easy scanning **⌨️ Keyboard Shortcuts**: Quick access with `⌘K` (or `Ctrl+K`) for power users **🎨 Beautiful Design**: Modern, responsive interface that matches your EventCatalog theme ## Using the New Search[​](#using-the-new-search "Direct link to Using the New Search") ### Getting Started[​](#getting-started "Direct link to Getting Started") First you need to update your EventCatalog to the latest version: ``` npm install @eventcatalog/core@latest ``` The new search is automatically available in your EventCatalog. Simply: 1. Click the search bar in your EventCatalog header 2. Or use the keyboard shortcut `⌘K` (Mac) or `Ctrl+K` (Windows/Linux) 3. Start typing to see instant results with highlighting Indexing your catalog The search index is automatically generated during your EventCatalog build process. ``` npm run build ``` Once you run the build, you can run `npm run dev` to start the development server and see the new search experience. ### Exact Match Filtering[​](#exact-match-filtering "Direct link to Exact Match Filtering") When you need precise results, enable "Exact match in title" to filter results that contain your search term in the resource name. Perfect for finding specific services or events when you know exactly what you're looking for. ### Keyboard Shortcuts[​](#keyboard-shortcuts "Direct link to Keyboard Shortcuts") * `⌘K` or `Ctrl+K`: Open search modal * `Escape`: Close search modal * `Enter`: Navigate to selected result ## Conclusion[​](#conclusion "Direct link to Conclusion") The new custom search experience represents a significant step forward in making EventCatalog more discoverable and useful for teams of all sizes. By combining powerful filtering, beautiful design, and instant results, we're making it easier than ever to explore and understand your architecture. Whether you're a developer looking for a specific service, an architect reviewing domain boundaries, or a product manager understanding system capabilities, the new search puts everything you need at your fingertips. Try it out in your EventCatalog today and let us know what you think! We'd love to hear how the new search improves your team's productivity and architectural understanding. *** *Have feedback or suggestions for the search experience? [Join our Discord community](https://eventcatalog.dev/discord) or [open an issue on GitHub](https://github.com/event-catalog/eventcatalog) to share your thoughts.* **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Search](/blog/tags/search.md) * [User Experience](/blog/tags/user-experience.md) * [Static Sites](/blog/tags/static-sites.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-07-29-custom-search-experience.md) --- # Document, visualize and discover your data products January 21, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [EventCatalog 3.8.0](/changelog.md) introduces data products as a first-class resource type. If your organization is building a data mesh or transforming raw events into analytics-ready tables, you can now document those data products directly in your catalog alongside your events, services, and domains. **Data products are now discoverable, versioned, and queryable through the same tools you use for the rest of your architecture.** ![Example](/assets/images/data-products-633020b2b8e252de9406a55aa9adc873.png) You can now document how your events impact the data systems downstream, visualize the complete lineage, and understand the bigger picture between your event-driven architecture and your data platforms. For teams running data platforms, this means your analysts, architects, and engineers can find the metrics they need without hunting through Slack channels or outdated wikis. They also gain visibility into where their data comes from and how it flows through the system. ## Why data products matter[​](#why-data-products-matter "Direct link to Why data products matter") Your event-driven systems generate thousands of events daily. OrderConfirmed, PaymentProcessed, ShipmentDelivered. But business stakeholders don't ask "How many OrderConfirmed events fired yesterday?" They ask "What was our revenue?" or "What's our fulfillment rate?" Data products bridge that gap. They transform raw events into business-ready metrics. They're the aggregated sales dashboards, the fulfillment KPI tables, the customer segmentation datasets that power decisions. In a data mesh architecture, each domain owns its data products. The orders domain produces order analytics. The payments domain produces payment metrics. Just like services in a microservices architecture, data products are independently owned, versioned, and evolved. ## What EventCatalog data products give you[​](#what-eventcatalog-data-products-give-you "Direct link to What EventCatalog data products give you") EventCatalog treats data products the same way it treats events and services. Full versioning, ownership tracking, and relationship mapping. **Inputs and Outputs**: Document what goes into a data product and what comes out. Your order analytics data product might consume OrderConfirmed and PaymentProcessed events or an ETL pipeline, then output to a Snowflake table and an analytics service. ![Example](/assets/images/data-products-visualizer-ce9c235d434fc7ba57d0708426081a1f.png) **Contracts**: Attach any data contract to your outputs (e.g JSON Schema, ODCS YAML, etc). Your downstream consumers can see exactly what fields, types, and SLAs they're working with. The Schema Explorer renders these contracts inline. **Versioning**: Data products evolve. When you add a new metric or change an aggregation, you version it. The catalog tracks all versions and highlights the latest. **Ownership**: Assign teams and users as owners. When someone has questions about payment metrics, they know who to contact. **Relationships**: Data products connect to the rest of your architecture. They consume events from services, write to containers (databases, data warehouses), and may even produce new events. The node graph visualizes these connections. ## Integration With Existing Features[​](#integration-with-existing-features "Direct link to Integration With Existing Features") Data products aren't isolated. They integrate with everything EventCatalog already offers. **Domains**: Nest data products inside domains and subdomains. **Sidebar Navigation**: Data products appear in the sidebar under their domain, just like services and events. **Discover Page**: Filter, search, and browse data products across your entire catalog. Sort by domain, owner, or version. **Node Graphs**: The visualizer shows inputs flowing into data products and outputs flowing to consumers. If a data product consumes an event produced by a service, the graph renders that relationship. **AI Chat**: Ask your catalog "Which data products consume OrderConfirmed?" or "Show me all payment metrics." The AI understands data products as a resource type. **MCP Server**: Query data products programmatically through the MCP Server. Your architects can ask [Claude Desktop](https://www.anthropic.com/news/claude-desktop), [Cursor](https://www.cursor.com/), or [Windsurf](https://windsurf.dev/) about data product schemas and relationships. **Schema Explorer**: Attach any data contract to your outputs (e.g JSON Schema, ODCS YAML, etc). The Schema Explorer renders them with syntax highlighting and field-level details. Click a field to see its type, description, and validation rules. ## SDK Support[​](#sdk-support "Direct link to SDK Support") The [EventCatalog SDK](/docs/sdk.md) includes full support for data products. You can create, update, and manage them programmatically. ``` import { writeDataProduct } from '@eventcatalog/sdk'; await writeDataProduct({ id: 'order-analytics', name: 'Order Analytics', version: '1.0.0', inputs: [ { id: 'OrderConfirmed' }, { id: 'PaymentProcessed' } ], outputs: [ { id: 'orders-db', contract: { path: 'fact-orders-contract.json', name: 'Fact Orders Contract', type: 'json-schema' } } ], markdown: 'Your markdown content...' }); ``` This makes it easy to generate data products from your existing data platform metadata or automate documentation as part of your CI/CD pipeline. ## Getting Started[​](#getting-started "Direct link to Getting Started") Data products are available in EventCatalog 3.8.0. Create a `data-products` directory in your catalog, add an `index.mdx` file, and start documenting. The structure mirrors events and services. You can nest them in domains or place them at the root. Read the [data products documentation](/docs/data-products.md) for full configuration options, schema contract formats, and node graph customization. ## Beta status and feedback welcome[​](#beta-status-and-feedback-welcome "Direct link to Beta status and feedback welcome") Data products are in beta. The core features work. Inputs, outputs, contracts, versioning, node graphs, SDK support. But we want your feedback before we finalize the API. If you're building data products, try this out. Tell us what's missing, what's confusing, what could be better. We're particularly interested in feedback on contract formats, visualization preferences, and workflow integration. Join the [Discord](https://discord.gg/eventcatalog) to share your thoughts or [open an issue on GitHub](https://github.com/event-catalog/eventcatalog) with suggestions. Data products are how you turn events into insights. Now they're documented alongside the rest of your architecture. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [Data Products](/blog/tags/data-products.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-21-data-products.md) --- # Documenting sync and async APIs with EventCatalog July 3, 2025 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Modern applications rarely live in isolation. They combine synchronous REST APIs for immediate operations with asynchronous messaging for resilient, scalable communication. But documenting this hybrid architecture presents unique challenges—until now. EventCatalog's **OpenAPI and AsyncAPI generators** solve the critical problem of unified API documentation, helping companies bridge the gap between synchronous and asynchronous communication patterns in one cohesive catalog. ## The documentation divide problem[​](#the-documentation-divide-problem "Direct link to The documentation divide problem") Most companies today operate in a multi-API world: * **REST APIs** handle immediate operations like user authentication, data retrieval, and real-time interactions * **Event-driven architectures** manage background processing, system integration, and scalable communication Yet these two worlds often exist in documentation silos. REST APIs get documented with tools like Swagger UI, while event schemas live in separate systems or wikis. This creates several critical problems: ### **Governance Gaps**[​](#governance-gaps "Direct link to governance-gaps") Without unified documentation, teams struggle to maintain consistent naming conventions, schema standards, and ownership across sync and async APIs. What starts as minor inconsistencies grows into architectural debt. ### **Discovery Challenges**[​](#discovery-challenges "Direct link to discovery-challenges") Developers waste time hunting across multiple tools to understand how systems communicate. Finding the right API endpoint or event schema becomes an archaeological expedition through scattered documentation. ### **Context Loss**[​](#context-loss "Direct link to context-loss") When sync and async APIs are documented separately, teams lose sight of how they work together. The relationship between a REST API that triggers an event and the downstream services that consume it becomes invisible. ### **Ownership Confusion**[​](#ownership-confusion "Direct link to ownership-confusion") Who owns which API? Which team maintains that event schema? Without centralized ownership tracking, accountability becomes fuzzy, leading to technical debt and governance failures. ## How EventCatalog solves the unified API documentation challenge[​](#how-eventcatalog-solves-the-unified-api-documentation-challenge "Direct link to How EventCatalog solves the unified API documentation challenge") EventCatalog's **OpenAPI and AsyncAPI generators** create a single source of truth for both synchronous and asynchronous APIs. Here's how it works: ### **Automatic API Discovery and Documentation**[​](#automatic-api-discovery-and-documentation "Direct link to automatic-api-discovery-and-documentation") Both generators automatically parse your specification files and transform them into living documentation: ``` // eventcatalog.config.js generators: [ // OpenAPI Generator - Document your REST APIs [ '@eventcatalog/generator-openapi', { services: [ { path: './openapi/user-service.yml', id: 'user-service' }, { path: './openapi/order-service.yml', id: 'order-service' }, ], domain: { id: 'core', name: 'Core Services', version: '1.0.0' }, }, ], // AsyncAPI Generator - Document your event-driven APIs [ '@eventcatalog/generator-asyncapi', { services: [ { path: './asyncapi/payment-events.yml', id: 'payment-service' }, { path: './asyncapi/inventory-events.yml', id: 'inventory-service' }, ], domain: { id: 'commerce', name: 'Commerce', version: '1.0.0' }, }, ], ], ``` ### **Unified Message Classification**[​](#unified-message-classification "Direct link to unified-message-classification") EventCatalog bridges the conceptual gap between REST and messaging by classifying all operations as **commands**, **queries**, or **events**: * **OpenAPI operations** can be mapped as commands or queries using the `x-eventcatalog-message-type` extension * **AsyncAPI messages** can be classified using the same extension ``` # In your OpenAPI file paths: /orders: post: summary: Create a new order x-eventcatalog-message-type: command /orders/{id}: get: summary: Get order details x-eventcatalog-message-type: query # In your AsyncAPI file components: messages: OrderCreated: description: 'Event triggered when an order is created' x-eventcatalog-message-type: event ``` ### **Cross-Domain Visualization**[​](#cross-domain-visualization "Direct link to cross-domain-visualization") EventCatalog's visualizer shows how your REST APIs and events work together across domain boundaries, making it easy to spot integration points and dependencies. ![EventCatalog OpenAPI and AsyncAPI Integration](/img/hero-banner-6.png)[View the demo](https://demo.eventcatalog.dev/visualiser) ### **Automatic Versioning and Schema Management**[​](#automatic-versioning-and-schema-management "Direct link to automatic-versioning-and-schema-management") Both generators automatically track API versions and schemas: * **REST API changes** in OpenAPI specs trigger new service and message versions * **Event schema evolution** in AsyncAPI files creates versioned event documentation * **Schemas are downloadable** for both REST payloads and event structures ## The value of unified API documentation[​](#the-value-of-unified-api-documentation "Direct link to The value of unified API documentation") ### **Faster Developer Onboarding**[​](#faster-developer-onboarding "Direct link to faster-developer-onboarding") New team members can explore your entire API landscape—both sync and async—in one place. No more bouncing between Swagger docs, wiki pages, and Confluence to understand how systems communicate. ### **Improved Governance**[​](#improved-governance "Direct link to improved-governance") Centralized ownership tracking, consistent naming conventions, and unified schema standards reduce architectural debt and improve system maintainability. ### **Better System Understanding**[​](#better-system-understanding "Direct link to better-system-understanding") Teams can see the complete communication flow: how a REST API call triggers events, which services consume those events, and how data flows through your architecture. ### **Reduced Documentation Overhead**[​](#reduced-documentation-overhead "Direct link to reduced-documentation-overhead") Instead of maintaining separate documentation systems, teams can generate comprehensive API docs directly from their specification files, keeping documentation in sync with code. ## Getting started: From specifications to documentation[​](#getting-started-from-specifications-to-documentation "Direct link to Getting started: From specifications to documentation") ### 1. **Prepare Your Specification Files**[​](#1-prepare-your-specification-files "Direct link to 1-prepare-your-specification-files") Ensure your OpenAPI and AsyncAPI files include the EventCatalog extensions for better message classification and ownership. ### 2. **Configure the Generators**[​](#2-configure-the-generators "Direct link to 2-configure-the-generators") Add both generators to your EventCatalog configuration, pointing to your local files or remote URLs. ### 3. **Run the Generation**[​](#3-run-the-generation "Direct link to 3-run-the-generation") Execute `npx eventcatalog generate` to automatically populate your catalog with both sync and async APIs. ### 4. **Enhance with Context**[​](#4-enhance-with-context "Direct link to 4-enhance-with-context") Add custom markdown, diagrams, and business context to your generated documentation. EventCatalog preserves your additions across regenerations. Ready to get started? You can try both generators with a 14-day free trial. Visit [EventCatalog Cloud](https://eventcatalog.cloud) to get your license key and start documenting your APIs today. ## Key features that drive adoption[​](#key-features-that-drive-adoption "Direct link to Key features that drive adoption") ### **Flexible URL Support**[​](#flexible-url-support "Direct link to flexible-url-support") Both generators can pull specification files from local filesystem or remote URLs, integrating seamlessly with your CI/CD pipeline. ### **Custom Extensions**[​](#custom-extensions "Direct link to custom-extensions") EventCatalog-specific extensions let you define message ownership, versioning, and relationships beyond what standard specifications support. ### **Persistent Documentation**[​](#persistent-documentation "Direct link to persistent-documentation") Your custom markdown and business context persists across generator runs, so you never lose the valuable context you've added. ### **Interactive Visualizations**[​](#interactive-visualizations "Direct link to interactive-visualizations") Explore your API landscape through interactive diagrams that show relationships, dependencies, and data flow. ## The future of API documentation is unified[​](#the-future-of-api-documentation-is-unified "Direct link to The future of API documentation is unified") The days of maintaining separate documentation for REST APIs and event-driven architectures are ending. Companies that adopt unified API documentation gain significant advantages in developer productivity, system governance, and architectural understanding. EventCatalog's OpenAPI and AsyncAPI generators provide the foundation for this unified approach, helping teams bridge the gap between synchronous and asynchronous communication patterns. Whether you're building microservices, implementing event-driven architectures, or managing hybrid systems, unified API documentation isn't just a nice-to-have—it's becoming a competitive necessity. If you have any questions or want to join our community of over 1,200 people exploring EventCatalog and event-driven architecture, [feel free to join us on Discord](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAPI](/blog/tags/open-api.md) * [AsyncAPI](/blog/tags/async-api.md) * [API Documentation](/blog/tags/api-documentation.md) * [Event-Driven Architecture](/blog/tags/event-driven-architecture.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-07-03-documenting-sync-and-async-apis-with-eventcatalog.md) --- # Document events at the domain level January 15, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [domains](/docs/development/guides/domains/introduction.md) in EventCatalog 3.7.0 can now directly specify which messages they send and receive. This gives your team more flexibility in how you document your architecture. ![Domain-level messages](/assets/images/domain-messages-170b8dc6210cae74861d85bb9612328c.png) If you practice [Domain-Driven Design](/docs/development/guides/domains/introduction.md) or think about messaging at the domain level, this update makes EventCatalog work the way you think. ## The problem[​](#the-problem "Direct link to The problem") Until now, messages in EventCatalog had to be tied to [services](/docs/development/guides/services/introduction.md). Services send [events](/docs/development/guides/messages/events/introduction.md), [commands](/docs/development/guides/messages/commands/introduction.md) and [queries](/docs/development/guides/messages/queries/introduction.md). Services receive them. This works well for many teams. But some architectures think about messaging differently. You might define "domain events" or "integration events" that represent what a domain publishes, independent of which specific service implements it. The service is just the implementation detail. **There was no clean way to model this in EventCatalog.** ## What's new[​](#whats-new "Direct link to What's new") Domains can now use `sends` and `receives` properties in their frontmatter. Document which messages your domain publishes and consumes, just like you do with services. ``` --- id: E-Commerce name: E-Commerce Domain version: 1.0.0 sends: - id: OrderCreated version: 1.0.0 - id: PaymentComplete receives: - id: PaymentInitiated - id: FraudDetected version: 0.0.1 --- ``` Domain messages appear in the sidebar on the domain page under "Publishes Messages" and "Consumes Messages". They link to the message documentation just like service-level messages do. ## When you'd use it[​](#when-youd-use-it "Direct link to When you'd use it") Use domain-level messages when you think about events at a higher level of abstraction. Common scenarios: * **Domain-Driven Design**: You define domain events as part of your [ubiquitous language](/docs/development/guides/domains/introduction.md#ubiquitous-language). Services are the implementation. * **Integration events**: You document what domains publish to other domains, regardless of which service actually sends it. * **Architecture planning**: You're designing domain boundaries before implementing services. You can mix approaches. Some domains use `sends` and `receives`. Some domains only have services that send and receive. Both work. Use what makes sense for your architecture. Events can live anywhere in your catalog, at the domain level or within the service folder. You just need to reference them in your domain frontmatter. **Example of a message living at the domain level** Here we have the `OrderCreated` event living at the domain level. The event can still be referenced by any service or domain that needs it. ``` domains/ Orders/ events/ OrderCreated/ index.mdx ``` **Example of a message living at the service level** Here we have the `OrderCreated` event living at the service level. The event can still be referenced by any domain that needs it. ``` services/ Orders/ events/ OrderCreated/ index.mdx ``` ## How it works[​](#how-it-works "Direct link to How it works") Add `sends` and `receives` to any domain's frontmatter: ``` --- id: Payment name: Payment Domain version: 1.0.0 sends: - id: PaymentComplete - id: PaymentFailed version: 2.0.0 receives: - id: PaymentInitiated --- ``` Messages appear in the domain's sidebar under "Publishes Messages" and "Consumes Messages" sections. **Versions are optional.** If you omit the version, EventCatalog uses the latest version of that message. Specify a version when you need to reference a specific one. Domain messages work with all message types: [events](/docs/events.md), [commands](/docs/commands.md), and [queries](/docs/queries.md). ## SDK support[​](#sdk-support "Direct link to SDK support") The [EventCatalog SDK](/docs/sdk.md) supports domain-level messages. Use `addEventToDomain()`, `addCommandToDomain()` or `addQueryToDomain()` to programmatically add messages when generating your catalog: ``` import { addEventToDomain } from '@eventcatalog/sdk'; await addEventToDomain( 'E-Commerce', { id: 'OrderCreated', version: '1.0.0' }, { type: 'sends' } ); ``` This is useful when you're generating your catalog from external sources like schemas, AsyncAPI specs, or code analysis tools. ## Getting started[​](#getting-started "Direct link to Getting started") Upgrade to EventCatalog 3.7.0: ``` npm install @eventcatalog/core@latest ``` Add `sends` and `receives` to any domain's frontmatter. That's it. The sidebar updates automatically. **Visualizer support is coming soon.** Domain-level messages will appear in architecture visualizations in a future release. ## Summary[​](#summary "Direct link to Summary") Domain-level messaging provides another way to model your architecture in EventCatalog. Use it when you think about events at the domain level, or stick with service-level messages if that fits your model better. Both approaches work. Both can coexist in the same catalog. Use what makes sense for your team. **Learn more:** * [Domain API documentation](/docs/api/domain-api.md) * [Adding messages to domains guide](/docs/development/guides/domains/creating-domains/adding-messages-to-domains.md) **Get help:** * [Discord community](https://eventcatalog.dev/discord) * [GitHub issues](https://github.com/event-catalog/eventcatalog) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [domains](/blog/tags/domains.md) * [events](/blog/tags/events.md) * [commands](/blog/tags/commands.md) * [DDD](/blog/tags/ddd.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-15-domain-level-messages.md) --- # Amazon EventBridge integration with EventCatalog November 10, 2024 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog ![](/assets/images/eventbridge-eventcatalog-17b144b97461bce7c417b8ab619381db.png); [Amazon EventBridge](https://aws.amazon.com/eventbridge/) is an AWS service that helps developers build event-driven applications at scale. Amazon EventBridge offers multiple services including [Event Bus](https://aws.amazon.com/eventbridge/), [Amazon EventBridge Pipes](https://aws.amazon.com/eventbridge/) and [Amazon EventBridge Scheduler](https://aws.amazon.com/eventbridge/). At its core, EventBridge's EventBus acts as a central hub where events flow between AWS services and applications. EventBridge EventBus gives you the ability to define rules and filters that determine where events should go, whether that's to other AWS services or external APIs via [API destinations](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-api-destinations.html). This flexibility makes it a popular choice when building event-driven architectures on AWS. **One the many challenges developers have with EventBridge is managing event schemas and versioning.** Publishers define the payload of the events for downstream consumers and control how they are versioned. Managing schemas and versions can be challenging as your event-driven architecture grows in your organization but luckily EventBridge provides a [schema registry](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-schema.html) that can help. ## Why use the EventBridge schema registry?[​](#why-use-the-eventbridge-schema-registry "Direct link to Why use the EventBridge schema registry?") The managed [schema registry](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-schema.html) provides developers with useful features that can be used as you build your event-driven architecture. These include the ability to store and download your schemas in JSONDraft or OpenAPI formats, give you the ability to download code models (code bindings) and automatic schema discovery. ![EventBridge Schema Registry](https://serverlessland.com/assets/visuals/services/eventbridge/schema-registry.png)[EventBridge Visuals](https://serverlessland.com/serverless/visuals/eventbridge) When you enable schema discovery, EventBridge will automatically create your event schemas, manage their versions and provide you with a “discovered” schema registry *(some say the versioning is aggressive, so you may want to check this and version them yourself anyway by including a version id within your payload).* Although these features can be great (especially as you scale) there are still problems you will encounter. Questions start to emerge within your organization: * Who is publishing and consuming these events? * What events do we have? * Where can I find them? * Why do they exist? * What service owns these events? * Whats the context behind these events? * How can I version them? *The list goes on.* Schema registry is a great feature, but we believe there is more we can do with our schemas and governance. That’s why we created the EventBridge EventCatalog integration. ### Why integrate with Amazon EventBridge with EventCatalog?[](https://www.eventcatalog.dev/blog/openapi-eventcatalog#why-integration-with-eventcatalog)[​](#why-integrate-with-amazon-eventbridge-with-eventcatalog "Direct link to why-integrate-with-amazon-eventbridge-with-eventcatalog") EventCatalog helps organizations understand and manage their event-driven architectures by providing comprehensive mapping and documentation of domains, services, and messages. **While schema registries capture the technical contract of events, EventCatalog preserves the crucial context often lost in traditional documentation**: ownership details, creation context, schema evolution history, and visual representations of your event flows. The EventBridge plugin creates a seamless bridge between your AWS Schema Registry and EventCatalog, offering the best of both worlds. You maintain all the powerful features of EventBridge's schema management while enriching your developer experience with EventCatalogs visualization capabilities, detailed documentation, governance tools, and enhanced discoverability. This integration helps teams not just track what events exist, but understand how they fit into the broader architectural landscape and how they've evolved over time. ### How the plugin works[](https://www.eventcatalog.dev/blog/openapi-eventcatalog#how-the-plugin-works)[​](#how-the-plugin-works "Direct link to how-the-plugin-works") ![Example](/img/integrations/eventbridge/eventbridge.png) [EventCatalog's plugin system](/integrations.md) provides powerful integration capabilities, allowing teams to connect with any external API, system, or specification file. [Through its SDK](/docs/sdk.md), developers gain programmatic access to their catalogs, enabling custom scripts and automation that fit their specific needs. [The EventBridge plugin](/docs/plugins/eventbridge/intro.md) maps your AWS events into logical domains and services using [customizable filters](https://www.eventcatalog.dev/docs/plugins/eventbridge/intro#using-filters-to-map-events-to-your-services). Teams can define precise mapping rules based on event prefixes, suffixes, detailTypes, and sources, creating clear boundaries around which events each service produces or consumes. When EventBridge events are mapped into EventCatalog, they become more than just technical schemas - they gain rich contextual information that helps teams understand their broader impact. This includes crucial details like event ownership, business context, and the producer-consumer relationships. What makes this particularly powerful is how EventCatalog handles schema versioning. As your events evolve and schemas update, all this valuable context persists. Your team's documentation, ownership details, and relationship mappings carry forward with each new version, creating a living history of the event's purpose and impact. This persistent context helps developers and teams make informed decisions, quickly identify event owners, and understand downstream impacts of changes. If you want to gain more value from your EventBridge schema registries you can get started by [reading the plugin documentation](/docs/plugins/eventbridge/intro.md). ### Summary[​](#summary "Direct link to Summary") Amazon EventBridge is a popular service to build event-driven architectures on AWS. We created our  [EventBridge integration](https://github.com/event-catalog/generator-eventbridge) to help you get more value from your schema registries. The EventBridge plugin allows you to map your events (with custom filters) into domains and services within your organiszation and help your developers understand how your events are being produced and consumed. EventCatalog syncs with your schema registry and will persist any additional contextual information you add to your events including producers, consumers, services, domains and ownership. Getting started should take a few minutes and [you can read our guide here](/docs/plugins/eventbridge/intro.md). If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [EventBridge](/blog/tags/event-bridge.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-11-10-introducing-eventbridge-integration.md) --- # 2.13.0 November 13, 2024 · 7 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm happy to share that EventCatalog 2.13.0 is now out. This release includes the following highlights: * ⭐️ [Document your message channels, supporting any protocol in the world](#introducing-channels). * ⭐️ [Simulate your messages in the visualizer](#simulate-messages-in-the-visualizer) * ⭐️ [Visualizer improvements](#visualizer-improvements) In this blog post we will go over the new features, help you understand them and how you can get started. ## Introducing Channels[​](#introducing-channels "Direct link to Introducing Channels") EventCatalog 2.13.0 introduces the [new resource type **Channels**](/docs/development/guides/channels/introduction.md). ![Example](/assets/images/channel-page-example-c78d760eda239e4f0e7ad8e80d69a248.png) [See in EventCatalog demo →](https://demo.eventcatalog.dev/docs/channels/inventory.%7Benv%7D.events/1.0.0) In EventCatalog a channel represents the organization and transmission of messages. Channels in EventCatalog describe how messages transport between producers and consumers. You can use the channel resource to help your team understand which protocol/technology is used. [Channels are resources](/docs/development/guides/channels/adding-channels.md) in EventCatalog that you can define in your `/channels` directory. Any message ([event](/docs/development/guides/messages/events/introduction.md), [command](/docs/development/guides/messages/commands/introduction.md) or [query](/docs/development/guides/messages/queries/introduction.md)) can be associated to one or many channels. Once you define your channels and [attach your messages to the channels](/docs/development/guides/channels/adding-messages-to-services.md), the visualizer will update with the channel between messages and services. ![Example](/assets/images/visualizer-36e57560762a3af8d60bae77a5a39b57.png) [See in EventCatalog demo →](https://demo.eventcatalog.dev/visualiser/services/InventoryService/0.0.2) Documenting channels can help your teams understand how your messages are transported between producers and consumers. You can specify the [address](/docs/api/channel-api.md#address) of the channel, [parameters](/docs/development/guides/channels/adding-channels.md#using-parameters-in-channel-names) and [protocols](/docs/development/guides/channels/adding-channels.md#using-protocols-in-channels). Channels also support dynamic channel names. This let's you document your channel address dynamically, letting your messages specify their parameters. ### Examples of Channels in EventCatalog[​](#examples-of-channels-in-eventcatalog "Direct link to Examples of Channels in EventCatalog") First let's define a channel in EventCatalog. This example is a kafka channel (topic) with dynamic address `inventory.{env}.events`. /channels/inventory.{env}.events/index.mdx ``` --- # id of the channel id: inventory.{env}.events # friendly name for the channel name: Inventory Events # The address of the channel, this is using params for dynamic channel name address: inventory.{env}.events # here we define a list of protocols the channel can use protocols: - kafka # optionally document the params for your channel name # here we know that the channel address "env" value can be "dev,stg,or prod" parameters: env: # What values for the parameter? (optional) enum: - dev - stg - prod # what is the default value (optional) default: dev # Any examples if you want to list them examples: - dev - stg - prod # Describe the channel information (optional) description: 'Environment to use' --- ``` Now let's map our event to the channel we have just defined. Here we map the `InventoryAdjusted` to this channel. This tells EventCatalog that this event uses this channel when users publish or subscribe to it. /events/InventoryAdjusted/index.mdx ``` --- # id of the event id: InventoryAdjusted # friendly name for the channel name: Inventory Adjusted # list of channels the message uses channels: - id: inventory.{env}.events # optional version of the channel resource, defaults to latest if not provided version: 0.0.1 # maps to the address of the channel # here we say this message uses the "inventory.dev.events" channel parameters: env: dev # Rest of event frontmatter... --- ``` So now we have documented that the event `InventoryAdjusted` uses the channel `inventory.{env}.events` over Kafka (protocol). When we view this message in EventCatalog, the visualizer will know to put the new Channel node between the services and their consumers. As seen in the example below. ![Example](/assets/images/channels-example-dc2f3420a62dd3a1147b649be5e80b2b.png) [See in EventCatalog demo →](https://demo.eventcatalog.dev/docs/channels/inventory.%7Benv%7D.events/1.0.0) ### Channel Protocols[​](#channel-protocols "Direct link to Channel Protocols") EventCatalog is technology agnostic, which means it can integrate with any broker in the world, this also includes any protocols. EventCatalog supports a [list of protocols](/docs/development/guides/channels/introduction.md#protocols) including: kafka, mqtt, pulsar, http, nats, mercure, redis, sns, sqs, eventbridge, googlepubsub, and many more. [You can see the list of protocols here](/docs/development/guides/channels/introduction.md#protocols). ### Getting started with channels[​](#getting-started-with-channels "Direct link to Getting started with channels") If you already have an EventCatalog instance you can update `@eventcatalog/core` to `2.13.0` and follow the [channel guide](/docs/development/guides/channels/introduction.md). If you are new to EventCatalog, you can get setup within minutes. The demo application you get includes an EventCatalog with channel support. ``` npx @eventcatalog/create-eventcatalog@latest my-catalog ``` Or, you can view the [EventCatalog demo](https://demo.eventcatalog.dev/) which includes channels. *** ## Simulate messages in the visualizer[​](#simulate-messages-in-the-visualizer "Direct link to Simulate messages in the visualizer") EventCatalog now has the ability to simulate messages in the visualizer. Using the new visualizer settings panel you can turn simulation on/off for your architecture. ![Example](/assets/images/animated-nodes-2523d7c02f97045ac871695431d558b9.png) [See in EventCatalog demo →](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3) The messages that are animated between nodes are also color coded. This helps you identify what message type (query, command, event) is being sent between your domains and services. To use this feature, you need to update `@eventcatalog/core` to `2.13.0`. ## Visualizer improvements[​](#visualizer-improvements "Direct link to Visualizer improvements") 2.13.0 also includes some minor improvements to the visualizer. We now use `bezier` lines between nodes on the graph, this helps visually see how your architecture works without the issue of over lapping lines and labels. We have also made the legend interactive. Clicking on a resource in the legend will highlight these nodes. ![Example](/assets/images/filtered-events-4b78c8cd366bd56bd0608f18d898b363.png) [See in EventCatalog demo →](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3) ## Getting started[​](#getting-started "Direct link to Getting started") Update your eventcatalog version to `@eventcatalog/core: 2.13.0`. or create your new catalog using the command: ``` npx @eventcatalog/create-eventcatalog my-catalog ``` *** ## Summary[​](#summary "Direct link to Summary") We hope this new release helps you on your journey to document and govern your event-driven architectures. If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord), or reach out to arrange a 30 minutes call with you and your team. If you need help building your EventCatalog, defining your governance strategy or educating your teams on event-driven architecture we also offer [services to help](/services.md). Enjoy! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Channels](/blog/tags/channels.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-11-13-2.13.0.md) --- # 2.5.0 August 16, 2024 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 2.5.0 is out now! This release includes the new resource flows, visualizer improvements, and various bug fixes.
This release includes the following highlights: * ⭐️ Document business features and workflows with the new content type "Flows" * ⭐️ Simplified visualizer and visual changes * ⭐️ Fixing domains visualizer * ⭐️ Astro updates ## Introducing Flows[​](#introducing-flows "Direct link to Introducing Flows") EventCatalog 2.5.0 introduces the [new resource type **Flows**](/docs/development/guides/flows/introduction.md). ![Example](/assets/images/flow-example-59e47d42d538c3deffbfce479b10980d.png) [See in EventCatalog demo →](https://demo.eventcatalog.dev/docs/flows/CancelSubscription/0.0.1) Flows give you the ability to document business features, workflows and [EDA choreography](https://eda-visuals.boyney.io/visuals/choreography-vs-orchestration). Interactions with your systems may happen across many services, external services, domains and messages. **Flows gives you the ability to document these for your architects and developers.** ### Example of a flow[​](#example-of-a-flow "Direct link to Example of a flow") An example of a flow could be when a user cancels a subscription in your system [(see example)](https://demo.eventcatalog.dev/docs/flows/CancelSubscription/0.0.1). When a user cancels a subscription many services and messages can be send between each other. 1. User clicks to cancel subscription (CancelSubscription command is sent) 2. Subscription Service accepts command, and processes cancellation (e.g external system Stripe) 3. Subscription service publishes Success/Failed events (SubscriptionCancelled, SubscriptionCancellationFailed event) 4. Notification service listens for events and sends emails (Email ) 5. and so on... These steps define what happens when a user would cancel a subscription in our business. This single transaction for a user may cross across many services, publish and consume many messages and also interact with external systems. EventCatalog allows you to document these flows linking to your existing services and messages. /events/InventoryOutOfStock/index.mdx (example) ``` --- # id of the flow id: "CancelSubscriptionFlow" # Display name of the flow, rendered in EventCatalog name: "User Cancels Subscription" # version for your flow version: "0.0.1" # Short summary of your event summary: "Flow for when a user has cancelled a subscription" # A list of steps for your flow steps: # id of your step, required for linking between stages in your flow - id: "cancel_subscription_initiated" # rendered title of your step title: "Cancels Subscription" # Short summary of a step summary: "User cancels their subscription" # Defining an actor will render an actor node in the graph. actor: name: "User" # What happens next? Define the next step next_step: id: "cancel_subscription_request" label: "Initiate subscription cancellation" - id: "cancel_subscription_request" title: "Cancel Subscription" # This step is a message, include the message and version message: id: "CancelSubscription" version: "0.0.1" next_step: id: "subscription_service" label: "Proceed to subscription service" - id: "stripe_integration" title: "Stripe" # This is an external system (e.g Stripe) externalSystem: name: "Stripe" summary: "3rd party payment system" url: "https://stripe.com/" next_step: id: "subscription_service" label: "Return to subscription service" - id: "subscription_service" title: "Subscription Service" # This node is a service, include that. service: id: "SubscriptionService" version: "0.0.1" # Define multiple steps next_steps: - id: "stripe_integration" label: "Cancel subscription via Stripe" - id: "subscription_cancelled" label: "Successful cancellation" - id: "subscription_rejected" label: "Failed cancellation" - id: "subscription_cancelled" title: "Subscription has been Cancelled" message: id: "UserSubscriptionCancelled" version: "0.0.1" next_step: id: "notification_service" label: "Email customer" - id: "subscription_rejected" title: "Subscription cancellation has been rejected" - id: "notification_service" title: "Notifications Service" service: id: "NotificationService" version: "0.0.2" --- This flow documents what happens when a User Cancels Subscription in our system. ``` Flows let you visualize your [services](/docs/services.md), [commands](/docs/commands.md), [events](/docs/events.md), [external services](/docs/api/flow-api.md#external-services-nodes) and [actors](/docs/api/flow-api.md#actor-nodes). Read the [getting started guide](/docs/flows.md) to get started or [API documentation](/docs/api/flow-api.md). ### Embedding flows into your pages[​](#embedding-flows-into-your-pages "Direct link to Embedding flows into your pages") Flows can also be added to your domains, services and messages pages in EventCatalog with the new [``](/docs/development/components/components/flow.md) component. Adding a flow component into your page will render the flow directly into your page. This can be a great way to document business workflows, features and event choreography and attach them to your domains and services. ![Example of flows in domain](/assets/images/flows-ff1e6767d6c734327335fcf3c4f0e297.png) [See example of the Flow component on EventCatalog demo](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3#flows) ## Simplified visualizer and visual changes[​](#simplified-visualizer-and-visual-changes "Direct link to Simplified visualizer and visual changes") The [EventCatalog visualizer](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3) allows architects and developers to visualize their event-driven architectures. Previously the visualizer showed all versions in the navigation bar, making it hard for folks to find resources they need if many versions are shown. The visualizer now shows the latest version of domain, service or message. Simplifying the navigation. Visualizer edges have also been adjusted, making it easier to see the lines between nodes and arrows between domains, services and message ![Example](/assets/images/visualizer-aacfc4a9dbea90174afba221851b4f3a.png) [Simplified navigation and UI change. See in EventCatalog demo →](https://demo.eventcatalog.dev/visualiser/events/InventoryAdjusted/1.0.1) *If you still need to see a previous version of the resource, you can change the version in the URL*. ## Astro updates[​](#astro-updates "Direct link to Astro updates") EventCatalog is powered by [Astro](https://astro.build/blog/astro-4140/). EventCatalog has now been updated to [4.14](https://astro.build/blog/astro-4140/). ## Getting started[​](#getting-started "Direct link to Getting started") Update your eventcatalog version to `@eventcatalog/core: 2.5.1`. or create your new catalog using the command: ``` npx @eventcatalog/create-eventcatalog my-catalog ``` *** Want to work together? Are you looking for help with your event-driven architecture? Do you need help with? * [EventStorming](https://eda-visuals.boyney.io/visuals/event-storming) and [Domain-driven design](https://eda-visuals.boyney.io/visuals/eda-and-ddd)? * Transforming the output into your EventCatalog * Documenting your domains, bounded context, services, events, commands and flows. * [Managing event-driven architecture complexity](https://www.youtube.com/watch?v=VLUvfIm9wnQ) * [EDA governance and standards](https://eda-visuals.boyney.io/visuals/importance-of-governance-in-event-driven-architecture) * Designing and implementing your EventCatalog * Automating/Deploying your EventCatalog **Let's work together.** Hi, I’m [Dave Boyne](https://twitter.com/boyney123), and I specialize in helping companies worldwide understand and build event-driven architectures. I’m the author of [EDA Visuals](https://eda-visuals.boyney.io/) and the [founder of EventCatalog](https://www.eventcatalog.dev/). My contributions extend to open-source specifications for event-driven architectures [(AsyncAPI)](https://www.asyncapi.com/en), as well as [creating tools](https://www.boyney.io/projects), [keynoting](https://www.youtube.com/watch?v=VLUvfIm9wnQ) and [speaking](https://www.boyney.io/talks), and delivering workshops at conferences (e.g AWS:reInvent, GOTO Conference) If you're interested in consultancy or workshops, don’t hesitate to reach out at . **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Flows](/blog/tags/flows.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-08-16-2.5.0.md) --- # Whats new in EventCatalog - April 2025 April 30, 2025 · 12 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog, here you find what's new in EventCatalog, what's coming next, and how to get started. * [EventCatalog Growth update 🚀](#eventcatalog-project-update) * [Subdomains are now supported in EventCatalog](#subdomains-are-now-supported-in-eventcatalog) * [Bring your own documentation to EventCatalog](#bring-your-own-documentation-to-eventcatalog) * [Bring your own AI keys (OpenAI) to EventCatalog Chat](#bring-your-own-ai-keys-to-eventcatalog-chat) * [Embed diagrams into EventCatalog](#embed-diagrams-into-eventcatalog) * [Resources can now be marked as deprecated](#resources-can-now-be-marked-as-deprecated) * [Flow improvements](#flow-improvements) * [Other project improvements](#other-project-improvements) **What’s coming in May?** * [What’s coming in May?](#whats-coming-in-may) * [We are coming to Current London](#we-are-coming-to-current-london) ### EventCatalog Project update[​](#eventcatalog-project-update "Direct link to EventCatalog Project update") EventCatalog community continues to grow ❤️, now we have 1,127 [Discord](https://discord.com/invite/3rjaZMmrAm) members (^3%), 2.1k Stars on GitHub (^5%), 879 new catalogs have been created in April (^7.20%) and 14.8k catalogs built into production (^32.59%). EventCatalog continues to grow every month, and super excited to see where the project can go! ![EventCatalog Growth](/img/blogs/april-2025-update/growth.png) EventCatalog sponsors [OSO](https://oso.sh/) and [Gravitee](https://www.gravitee.io/) continue their sponsorship for the project (thank you!) 🙏. This sponsorship helps my goal towards open source sustainability. EventCatalog is free to use and open source, if you want to support the project checkout the [tiers on GitHub](https://github.com/sponsors/event-catalog) or contact me directly at `dave@eventcatalog.dev` , I really appreciate any support ❤️ In April we introduced [Subdomain support](#subdomains-are-now-supported-in-eventcatalog), [Bring your own documentation to EventCatalog with custom documentation](#bring-your-own-documentation-to-eventcatalog), with [EventCatalog Chat](/features/ai-assistant.md) you can now bring your own AI keys starting with [OpenAI support](#bring-your-own-ai-keys-to-eventcatalog-chat), [embed diagrams](#embed-diagrams-into-eventcatalog) (Miro, Lucid, FigJam and DrawIO) into your pages with realtime editing, [mark messages as deprecated](#resources-can-now-be-marked-as-deprecated) and much more. In this blog post we will dive deeper into features and improvements that were released in April, and how you can get started. ## Subdomains are now supported in EventCatalog[​](#subdomains-are-now-supported-in-eventcatalog "Direct link to Subdomains are now supported in EventCatalog") Many users of EventCatalog are following domain driven design practices. One thing missing from EventCatalog was the ability to [create subdomains](/docs/development/guides/domains/creating-domains/adding-domains.md). Subdomains look and behave the same as domains in EventCatalog, but they introduce a new way to group domains together. An example of a domain and subdomain relationship is: * `Domain: Ecommerce` * `Subdomain: Orders` * `Service: Payment` * `Service: Shipping` * `Subdomain: Customers` * `Service: Profile` * `Service: Address` * `Subdomain: Inventory` * `Service: Products` * `Service: Warehouse` In this example, the `Ecommerce` domain contains the `Orders`, `Customers` and `Inventory` subdomains. Each subdomain contains services that are related to that subdomain. When you add a subdomain to a domain, your users will be able to see the relationship between the domain and subdomain, navigate between them and see subdomains within the visualizer. **What do subdomains look like in EventCatalog?** You can now quickly see domains/subdomain relationships in EventCatalog. The page below shows a parent domain, with subdomains. Users can quickly navigate to subdomains using the sidebar or navigation panel. ![EventCatalog Growth](/img/blogs/april-2025-update/subdomains.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) Subdomains are also visualized in EventCatalog. Using the filter you can highlight resources that belong to a certain domain. This let’s your teams get a visual of the whole domain (including the services, and messages) and dive deeper if they need into their subdomains. ![EventCatalog Growth](/img/blogs/april-2025-update/subdomain-visualizer.png)[View the demo](https://demo.eventcatalog.dev/visualiser/domains/E-Commerce/1.0.0) To start adding subdomains to your documentation you [read the documentation](/docs/development/guides/domains/creating-domains/adding-domains.md). ## Bring your own documentation to EventCatalog[​](#bring-your-own-documentation-to-eventcatalog "Direct link to Bring your own documentation to EventCatalog") In April we released a new feature called [Custom Documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). This gives you the ability to add any documentation you want to EventCatalog. This can be a great way to extend your catalog beyond what is provided, and bring your own documentation to EventCatalog, rather than having documentation spread across multiple tools. [YouTube video player](https://www.youtube.com/embed/auzmEf0AdJg?si=wHe-3X6b6uLN39sB) Custom documentation also supports all components in EventCatalog, this let’s you embed the EventCatalog Visualizer into your documentation, your diagrams from Miro, Lucid or [Draw.io](http://Draw.io) and much more. Custom documentation is flexible and let’s you document anything you want. For example you could document Architecture Decision Records, Infrastructure & Operations, CI/CD configurations, team processed, onboarding information and much more…. ![EventCatalog Growth](/img/blogs/april-2025-update/custom-docs.png)[View the demo](https://demo.eventcatalog.dev/docs/custom/guides/creating-new-microservices/01-index) To start adding custom documentation you can read our [getting started guide](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). ### Bring your own AI keys to EventCatalog Chat[​](#bring-your-own-ai-keys-to-eventcatalog-chat "Direct link to Bring your own AI keys to EventCatalog Chat") EventCatalog is technology agnostic, and can integrate with any broker and specification in the world. This let’s you document your architecture, topics, messages, services, and domains into EventCatalog, once captured, this context can be used within LLMs. [EventCatalog Chat](/features/ai-assistant.md) gives you the talk to your architecture, and can help your team find insights in seconds rather than hours or days. ![EventCatalog Growth](/img/blogs/openai/eventcatalog-chat.png) EventCatalog Chat support browser based models, and now supports OpenAI models. You can now bring your own OpenAI keys into EventCatalog, deploy EventCatalog on a server and let your teams start to get insights about your architecture. You can [choose your model](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md#models) and [embedding models](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md#install-the-eventcataloggenerator-ai-plugin) for your catalog information. EventCatalog also provides a prompt store. This gives you the ability to provide a library of prompts for your teams to get started with, and also create dynamic prompts for your teams. ![EventCatalog Prompt Store](/img/blogs/openai/eventcatalog-list-of-events.png) To get started you can watch the video below, or read our [OpenAI getting started guide](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md), and you can learn more about our prompt store reading the [prompt store guide](/docs/development/ask-your-architecture/eventcatalog-assistant/bring-your-own-tools.md). [YouTube video player](https://www.youtube.com/embed/vhjRX4yAGIk?si=MehvKkJ9hFKe7hgH) ### Embed diagrams into EventCatalog[​](#embed-diagrams-into-eventcatalog "Direct link to Embed diagrams into EventCatalog") You can now [embed diagrams](/docs/embed-diagrams.md) with EventCatalog, including [Miro](/docs/development/components/components/embed-diagrams/miro.md), [Lucid](/docs/development/components/components/embed-diagrams/lucid.md), [DrawIO](/docs/development/components/components/embed-diagrams/drawio.md) and [FigJam](/docs/development/components/components/embed-diagrams/figjam.md) ![EventCatalog Miro Example](/img/blogs/miro/miro-example1.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) No longer have diagrams that sit and get stale, embed them into your documentation for your teams to quickly find, edit and collaborate. To learn more you can read [our component documentation](/docs/embed-diagrams.md). ## Resources can now be marked as deprecated[​](#resources-can-now-be-marked-as-deprecated "Direct link to Resources can now be marked as deprecated") Sometimes your messages or services may get deprecated. You can now use the new `deprecated` property in EventCatalog to mark your resources as deprecated. When you mark a resource as deprecated you can specify the date and message to show to your teams. This lets you deprecate things in the future, and help your teams understand what they should do to migrate away from a message, version or service. ``` --- id: OrderService ... # other service frontmatter # deprecatd as an object (Recommended) deprecated: # Date the service will be or was deprecated (YYYY-MM-DD) date: 2025-01-01 # Reason the service is deprecated, supports markdown (optional) message: | This service has been deprecated and replaced by the new service **InventoryServiceV2**. Please contact the [team for more information](mailto:inventory-team@example.com) or visit our [website](https://eventcatalog.dev). # deprecated as a boolean deprecated: true --- ``` To get started, you can read our guide on [how to deprecate a service](/docs/development/guides/services/versioning-and-lifecycle/deprecating.md), or [deprecate a message](/docs/development/guides/messages/common/deprecating.md). ## Flow improvements[​](#flow-improvements "Direct link to Flow improvements") [EventCatalog Flows](/docs/development/guides/flows/introduction.md) allow you to document interactions between services and messages. Flows give you the ability to document event-driven architecture choreography. Flows can now reference other flows, helping you manage large scale flows in your diagram. This let’s you break out business processes in subflows and visualize them in your architecture ``` steps: - id: "step-1" title: "Example Step of a Event" # here we define the id and version of the flow we want to use in the flow diagram flow: id: "order-flow" version: 0.0.1 ``` You can also now create your [own custom nodes](/docs/development/guides/flows/flow-nodes.md#custom) in your flow diagrams. This gives you the flexibility to create any type of visualization for your documentation. ![EventCatalog Flows](/img/blogs/april-2025-update/flow-custom-nodes.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) To learn more, you can read our [getting started with flows guide](/docs/development/guides/flows/introduction.md), and explore [the custom nodes in our documentation](/docs/development/guides/flows/flow-nodes.md#custom). ### Other project improvements[​](#other-project-improvements "Direct link to Other project improvements") * [EventCatalog SDK](/docs/sdk.md) has been updated to match all the new features. * We added [ResourceLink](/docs/development/components/components/resource-link.md) and [Link](/docs/development/components/components/link.md) components to help you create links in your catalog * Badges now support icons in EventCatalog * GRPC and ZMQ protocols have been added to [channel documentation](/docs/development/guides/channels/introduction.md) * Visualizer can now be embedded into custom docs ## What’s coming in May?[​](#whats-coming-in-may "Direct link to What’s coming in May?") In May we are releasing even more integrations with EventCatalog, including [Confluent Schema Registry](https://docs.confluent.io/platform/current/schema-registry/index.html), Azure messaging services and [Azure schema registry](https://learn.microsoft.com/en-us/azure/event-hubs/schema-registry-overview), [Apicurio schema registry](https://www.apicur.io/) and GitHub integrations (for those that keep schemas in GitHub). These new integrations will let you add semantic meaning to your schemas, and keep your schemas in sync with your documentation, giving your teams the ability to quickly find the information they need in your architecture. We are also adding [Anthropic](https://www.anthropic.com/) and [Gemini](https://ai.google.dev/gemini-api/docs/models) support for [EventCatalog Chat.](/features/ai-assistant.md) This will let you bring even mode models to your documentation, allowing you to query and gain insights using the models you use in your organization. We also want to release the first version of our Schema API. This will let you call EventCatalog as an API to get your schemas, which could be useful for contract testing, validation and much more. [We are looking to follow the xRegistry specification for this](https://xregistry.io/). Many users of EventCatalog, are using EventCatalog as a design > implement > documentation tool. We are exploring ways to draft messages, services and resources in EventCatalog. We expect to release the first version of this in May. We know a lot of people are waiting for [EventCatalog Studio](https://eventcatalog.studio/). We are still working on this, and aim to get an initial version out soon. ### We are coming to Current London[​](#we-are-coming-to-current-london "Direct link to We are coming to Current London") We are coming to in May! If you are coming to the conference, we would love to hang out, just reach out! ![Current](/assets/images/current-048d5e716a5e0df8565dc28aa68dc125.png) If you have any questions or want to join our community of over 1100 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! *** **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-04-30-april-2025.md) --- # Introducing Attachments for EventCatalog September 22, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that EventCatalog now supports **Attachments** - a powerful new feature that allows you to link external resources, diagrams, and documentation directly to your domains, services, events, commands, queries, and channels. Many teams and organizations have information scattered across different tools and platforms. This makes it difficult to find the information you need when you need it. With Attachments, you can now link to external resources, diagrams, and documentation directly to your EventCatalog resources. ## What are Attachments?[​](#what-are-attachments "Direct link to What are Attachments?") Attachments provide a clean, organized way to reference external resources that are related to your EventCatalog resources. Whether you want to link to: * Architecture Decision Records (ADRs) * System diagrams and flowcharts * External documentation or wikis * Design documents * API specifications * Runbooks and operational guides Attachments make it easy for your team to discover and access all the relevant information about your architecture in one place. ## Why use Attachments?[​](#why-use-attachments "Direct link to Why use Attachments?") **Centralized Documentation**: Keep all related resources accessible from your EventCatalog, reducing context switching between different tools and platforms. **Improved Discovery**: Team members can easily find relevant documentation, diagrams, and decisions related to specific services or events. **Better Context**: Provide additional context and background information that helps teams understand the "why" behind your architecture decisions. **Organized Resources**: Group related attachments by type (e.g., architecture-decisions, diagrams, documentation) for better organization. ## Getting Started[​](#getting-started "Direct link to Getting Started") Adding attachments to your EventCatalog resources is straightforward. You can add them to any resource by including an `attachments` array in your frontmatter. ### Simple URL Attachment[​](#simple-url-attachment "Direct link to Simple URL Attachment") events/OrderAccepted/index.mdx ``` --- id: OrderAccepted name: Order Accepted attachments: - https://example.com/adr/001-event-sourcing-decision --- ## Overview This event is triggered when an order has been accepted in our system. ``` ### Rich Attachments with Metadata[​](#rich-attachments-with-metadata "Direct link to Rich Attachments with Metadata") For more detailed attachments, you can provide additional properties: services/PaymentService/index.mdx ``` --- id: PaymentService name: Payment Service attachments: - url: https://example.com/adr/001-kafka-messaging title: ADR-001 - Use Kafka for asynchronous messaging description: Learn more about why we chose Kafka for asynchronous messaging type: 'architecture-decisions' icon: FileTextIcon - url: https://example.com/diagrams/payment-flow.png title: Payment Processing Flow description: Detailed flow diagram of our payment processing system type: 'diagrams' icon: FileBoxIcon --- ## Service Overview The Payment Service handles all payment processing operations. ``` ### How they look in EventCatalog[​](#how-they-look-in-eventcatalog "Direct link to How they look in EventCatalog") ![Example output](/assets/images/attachment-example-a73bec4847a90ef96428b26686a3e7b4.png) ## Organizing Your Attachments[​](#organizing-your-attachments "Direct link to Organizing Your Attachments") Attachments can be grouped by type, making it easier for your team to find specific kinds of resources. You can choose any type you want and we will group them together in the UI. Some examples include: * **architecture-decisions**: ADRs, technical decisions, design rationale * **diagrams**: System diagrams, flowcharts, architecture visualizations * **documentation**: User guides, API docs, operational runbooks * **external-tools**: Links to monitoring dashboards, admin panels, etc. You can choose from any icon in the [Lucide Icons](https://lucide.dev/icons/) library to represent your attachments. ## Supported Resources[​](#supported-resources "Direct link to Supported Resources") The Attachments feature works across all EventCatalog resource types: * Domains * Services * Events * Commands * Queries * Channels * Custom documentation pages ## Get Started Today[​](#get-started-today "Direct link to Get Started Today") If you already have an EventCatalog, simply upgrade to the latest version to start using Attachments. **Don't have a catalog yet?** Create a new EventCatalog to try out Attachments: ``` npx @eventcatalog/create-eventcatalog@latest my-catalog ``` ### SDK[​](#sdk "Direct link to SDK") If you are using the EventCatalog SDK, you can update the latest version to get the Attachments feature. ## Summary[​](#summary "Direct link to Summary") Attachments provide a simple yet powerful way to connect all your relevant documentation, diagrams, and external resources directly to your EventCatalog resources. This feature can help you and your team maintain better context, improves documentation discovery, and creates a more comprehensive view of your architecture. If you have any questions, feature ideas, or would like to discuss EventCatalog features with your team, [join our Discord community](https://eventcatalog.dev/discord). *** ## Using EventCatalog?[​](#using-eventcatalog "Direct link to Using EventCatalog?") Want to learn more about EventCatalog and how it can help you? Reach out to me on socials or [Discord](https://eventcatalog.dev/discord), and I would be happy to join a call with you and your team. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Attachments](/blog/tags/attachments.md) * [Documentation](/blog/tags/documentation.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-09-22-introducing-attachments.md) --- # EventCatalog August 2024 update August 29, 2024 · 7 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog It’s been a couple of months since I left my full time job at AWS to pursue my passion for event-driven architecture ([EventCatalog](https://github.com/event-catalog/eventcatalog)) and cloud computing ([Wing](https://www.winglang.io/)). I wanted to share an update on the exciting changes we rolled out for EventCatalog in August, it's been a busy month. ## Introduced Flows[​](#introduced-flows "Direct link to Introduced Flows") Version 2.5.0 introduced [Flows](https://www.eventcatalog.dev/blog/eventcatalog-250). Flows give you the ability to document business features, workflows and EDA [choreography](https://eda-visuals.boyney.io/visuals/choreography-vs-orchestration). ![Example](/assets/images/flow-example-59e47d42d538c3deffbfce479b10980d.png) [See in EventCatalog demo →](https://demo.eventcatalog.dev/docs/flows/CancelSubscription/0.0.1) I’m super excited with this feature as it lets you connect your documented services and messages in a way that wasn't possible before. Hopefully flows can help you visualize and document your business workflows, that can be shared with new engineers, product owners and others that may be interested. EventCatalog is not just a tool for technical teams, I believe it has the ability to bring the organization together, following practices I believe can add huge value to your event-driven architecture including domain-driven design, event storming, event modelling. If you would like to learn more about flows you can [read the announcement,](https://www.eventcatalog.dev/blog/eventcatalog-250) [read the docs](https://www.eventcatalog.dev/docs/development/guides/flows/introduction) are even [try it yourself](https://demo.eventcatalog.dev/visualiser/flows/CancelSubscription/1.0.0) on the demo. ## Audit changes with changelogs[​](#audit-changes-with-changelogs "Direct link to Audit changes with changelogs") When we build our event-driven architectures, things are changing all the time, this can be implementation details, business requirements or messages being added or removed. **Either way, things are changing and the context to change gets lost over time.** EventCatalog now supports [changelogs](https://www.eventcatalog.dev/blog/eventcatalog-changelogs) which give you the ability to audit your changes, do diffs between messages, and give engineers context to why things have changed. A simple example could be documenting why a property on a schema was removed, or why a service no longer accepts a command. Changelogs are powered by markdown files, and simple to get started. Once you define your changelog users can view your domain, service or message change log in it’s own dedicated page on your Catalog. ![Example](/assets/images/changelog-b60ba4ecaafb228a61fd5a517d3c1428.png) [Get started with the changelog documentation →](/docs/development/guides/messages/common/changelog.md) To get started you can read the [documentation](https://www.eventcatalog.dev/docs/development/guides/services/versioning-and-lifecycle/changelog) or read the [announcement](https://www.eventcatalog.dev/blog/eventcatalog-changelogs). ## Introducing custom components[​](#introducing-custom-components "Direct link to Introducing custom components") EventCatalog now supports [custom components](https://www.eventcatalog.dev/blog/eventcatalog-components). This gives you the ability to add custom UI components into your pages. This allows you to create dynamic templates, reuse markdown across pages, client side JavaScript and more. Custom components allows you to: * Share snippets across pages * [Style with Tailwind CSS](https://www.eventcatalog.dev/docs/development/customization/custom-components/component-styling) * [Embed client side JavaScript into your catalog](https://www.eventcatalog.dev/docs/development/customization/custom-components/javascript-components) * Dynamic templating To get started you can [read the announcement](https://www.eventcatalog.dev/blog/eventcatalog-components) or checkout the docs to [create your first component](https://www.eventcatalog.dev/docs/custom-components). ## Semver support for resources in your Catalog[​](#semver-support-for-resources-in-your-catalog "Direct link to Semver support for resources in your Catalog") EventCatalog lets you document your domains, services and messages. At the moment domains contain services and services contain messages. ![Example](/assets/images/semver-5e40d04c0350481ca10479b87db737f1.png) To connect resources together you used to have to specify the exact version and the resource to the resource, but now versions are optional and also support semver syntax! Exact versioning it still supported, but semver gives you more options. ``` //before --- id: InventoryService version: 0.0.2 receives: - id: OrderConfirmed version: 0.0.1 - id: OrderCancelled version: 0.0.1 sends: - id: InventoryAdjusted version: 0.0.4 - id: OutOfStock version: 0.0.3 --- //after --- id: InventoryService version: 0.0.2 receives: // No version given, latest is assumed - id: OrderConfirmed // Latest minor version - id: OrderCancelled version: 0.0.x sends: // latest version - id: InventoryAdjusted version: latest // exact version - id: OutOfStock version: 0.0.3 --- ``` ## Other things to celebrate[​](#other-things-to-celebrate "Direct link to Other things to celebrate") EventCatalog continues to gain traction and help the community which is great to see. Here are a few more things worth mentioning and celebrating! **Improvements to EventCatalog** * New UI improvements to the visualizer * Embed flows into your pages with the [new Flow component](https://www.eventcatalog.dev/docs/development/components/components/flow). * [Create custom landing pages](https://www.eventcatalog.dev/docs/development/guides/custom-pages/introduction) * Added new functions to the [EventCatalog SDK](https://www.eventcatalog.dev/docs/sdk) **Project updates** * EventCatalog got it first project sponsor from [Hookdeck](https://hookdeck.com/?ref=eventcatalog-sponsor) ♥️ * [EDA Visuals](https://eda-visuals.boyney.io/) (my other project) has now reached 10,000 downloads! * *Free content to learn about event-driven architectures* * [EventCatalog discord](https://eventcatalog.dev/discord) now has 749 members 🙏 * 1000 catalogs were created in August * New contributors added total of 41 contributors to EventCatalog ## Need help?[​](#need-help "Direct link to Need help?") EventCatalog now offers [professional services](https://www.eventcatalog.dev/services). These range from workshops, to getting hands on to help you and your teams build your EventCatalog, setup automation and host your catalog. If you are interested in talking you can reach out to me on [LinkedIn](https://www.linkedin.com/in/david-boyne/) or email at `hello@eventcatalog.dev` **Want to learn more about event-driven architectures?** I have created free resources for you to dive deeper into event-driven architectures called E[DA Visuals](https://eda-visuals.boyney.io/). EDA visuals are designs I have made with extra resources. You can view them and download the book for free! ![Example](/assets/images/eda-visuals-4f1679c3c82bf61795462064b784cc17.png) [Download the free book →](https://eda-visuals.boyney.io/download) Want to understand why EventCatalog exists? I explain the problems with event-driven architecture and complexity and ways you can solve it with standards, practices and open source solutions. ![Example](/assets/images/goto-video-63e6c71d35615e6765c9b1d87eb6f0df.png) [Watch the video →](https://www.youtube.com/watch?v=VLUvfIm9wnQ) ## **Want to sponsor EventCatalog?**[​](#want-to-sponsor-eventcatalog "Direct link to want-to-sponsor-eventcatalog") EventCatalog is open source, if you want to help make the project sustainable we welcome sponsors to the project. As a sponsor of EventCatalog we will add your logo to our website, EDA visuals and more. If you are interested please feel free to reach out! ## Summary[​](#summary "Direct link to Summary") August has been a busy month, with the help of the EventCatalog community we were able to ship some great features, see growth in the project and start to stabilise the project. [I’m super passionate about event-driven architecture governance](https://www.youtube.com/watch?v=VLUvfIm9wnQ) and solving complexity issues and I believe EventCatalog is on the way to help solve many of these issues. We still have many more features to explore, and problems to solve and I can’t wait to see what’s possible. If you have any questions, get stuck or want to join our community you can join us on our [Discord server.](https://eventcatalog.dev/discord) Until next time!, Dave **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-08-29-august-2024.md) --- # Whats new in EventCatalog - August 2025 August 30, 2025 · 7 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to EventCatalog's monthly update! August brought a welcome change of pace as many in our community took well-deserved summer breaks. While things were quieter overall, we stayed focused on two key areas: advancing [EventCatalog Studio](https://eventcatalog.studio/) and strengthening the core platform through stability improvements and bug fixes. In this update, we'll dive into: * The exciting progress on [EventCatalog Studio](https://eventcatalog.studio/) and what's on the horizon * Recent fixes and improvements to the platform * A preview of what's coming next Let's explore what we've been building while you've been recharging! *** ## EventCatalog Studio[​](#eventcatalog-studio "Direct link to EventCatalog Studio") During August we have been busy, working on our new open source project called [EventCatalog Studio](https://eventcatalog.studio/). This is a visual editor that allows you to design, gather feedback, collaborate with your teams, define schemas and much more. ![EventCatalog Studio](/img/blogs/august-2025/studio-docs.png) Before we get into the details, it’s important to understand why we are focusing in this area. ## Life-cycle of event-driven architecture[​](#life-cycle-of-event-driven-architecture "Direct link to Life-cycle of event-driven architecture") Over the past 3 years we have learnt from the community and users of EventCatalog that the life-cycle of defining messages, schemas, ideas, collaboration with teams, documentation and governance is a mess. EventCatalog was born from a personal problem. That discoverability with event—driven architecture is hard. So we built an open source project to help folks discover what events they have, assign them to services and domains, and provide their teams with a platform where they can get a better understanding of what is going on in their architecture. The project has grown far beyond the initial release and is now being used by companies around the world, helping them document and govern their architectures, and continues to be adopted. Whilst this solves documentation and governance, I feel we still have a gap in the life-cycle. I feel we have gaps in the ability to capture ideas, drafts, schema designs, get feedback from teams, capture breaking changes, notifying teams of changes, understand how events are used in their architecture, and the list goes on…. As I dive deeper into this topic, I've started to learn from community members and teams using EventCatalog that the life-cycle for event-driven architecture is broken. What if we could make this easier? What if we had tools that let us explore new drafts, ideas, plan work, get feedback, design diagrams that can be exported into artifacts that we can actually use in our code, our documentation and specifications? **Could we close the gap between ideas, design, implementation and documentation?** I think it’s possible, and that’s why we have been exploring EventCatalog Studio. ## What is EventCatalog Studio?[​](#what-is-eventcatalog-studio "Direct link to What is EventCatalog Studio?") EventCatalog Studio is a local first open source visual designer, that focuses on architecture primitives (e.g messages, channels, data stores, etc). Your designs are owned by you and can be shared with your teams and committed to source control. You will be able to run EventCatalog on the cloud or run locally on your machine. Either way your data is owned by you, and nothing is shared, keeping your designs private to your organization. To start you can create new designs, or use custom templates to start from. You can define workflows, business processes, or architecture patterns. You can start from predefined templates to get started. In future versions you will be able to define your own templates for your teams to get started. Below is an example of the welcome dashboard you will see. Allowing you to open a design from disk, or create a new one from scratch or from a predefined template. ![EventCatalog Studio](/img/blogs/august-2025/studio-dashboard.png) In EventCatalog Studio you will be able to create designs, simply dragging your primitives onto the canvas (e.g Service, Events, Command, Query, Domain etc). This will let you create design concepts for your teams, simulate messages on the design, define schemas and much more. Then you will be able to export this design into EventCatalog (or any other tool), and use your designs as a living reference. ![EventCatalog Studio](/img/blogs/august-2025/studio-primitives.png) Using the documentation editor you can reference any node in your canvas. This lets you document your design and link to resources in your designs to guide your end users through the flow of your design. Helping them understand your architecture, choices, and changes. ![EventCatalog Studio](/img/blogs/august-2025/studio-docs.png) Similar to Figma, you will be able to leave comments on your designs, join the conversation and get feedback. Everything in your design is version controlled. ![EventCatalog Studio](/img/blogs/august-2025/studio-feedback.png) You will be able to import all resources from your EventCatalog documentation into your canvas. This will allow you to create new drafts, designs and ideas using your architecture patterns and components you already have. Giving you a foundation to start for new ideas, get feedback on schema design and much more…. ### Getting access to EventCatalog Studio[​](#getting-access-to-eventcatalog-studio "Direct link to Getting access to EventCatalog Studio") We are aiming to get EventCatalog Studio released very soon. If you would like to try it out you can sign up to our beta here EventCatalog documentation is helping teams govern and discover their architecture. EventCatalog Studio can help teams design, gather feedback and explore ideas. We want to make governing event-driven architecture easier, and we are super excited to see what you all think to EventCatalog Studio. ## Recent fixes and improvements to EventCatalog[​](#recent-fixes-and-improvements-to-eventcatalog "Direct link to Recent fixes and improvements to EventCatalog") ### New EventCatalog SDK Version[​](#new-eventcatalog-sdk-version "Direct link to New EventCatalog SDK Version") ![EventCatalog SDK](/img/blogs/august-2025/sdk.png) We have released a new version of the EventCatalog SDK. This new feature let’s you programmatically create [entities in EventCatalog](https://www.eventcatalog.dev/docs/development/guides/domains/entities/introduction). This means you can create [entity maps in EventCatalog](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3/entity-map) from any source you have. To get started, you can read the [EventCatalog SDK documentation](https://www.eventcatalog.dev/docs/sdk). ### Other improvements to EventCatalog[​](#other-improvements-to-eventcatalog "Direct link to Other improvements to EventCatalog") * EventCatalog visualizer is now ready to import designs from EventCatalog Studio. * Architecture pages for messages, services, and domains are now single column. * Added support for avsc files in changelog diffs. * SchemaViewer now supports array rooted schemas. * Reduced pagesize of EventCatalog. ## What’s coming in September?[​](#whats-coming-in-september "Direct link to What’s coming in September?") In September, we are focused on releasing [EventCatalog Studio](https://eventcatalog.studio/). We are also focusing on implementing offline license checks (for those that want to use EventCatalog in regulated environments) and exploring support for **Azure messaging services, Azure Schema Registry**, and **Apicurio Schema Registry**. We are also exploring and working on **notifications**. These will be webhook notifications you can setup and listen to when things in your catalog change. Examples of these are schema changes, breaks, new versions, etc. Use cases include: * Teams getting notified when a new version of a schema is published. * Trigger contract tests or infrastructure when schemas change. * Provision new infrastructure when a new version of a service is published. * Trigger a build when a new version of a service is published. If you have any questions or want to join our community of over 1200 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [August](/blog/tags/august.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-08-30-august-2025.md) --- # Announcing Changelogs for EventCatalog August 2, 2024 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [EventCatalog 2.2.0](https://github.com/event-catalog/eventcatalog/releases) is now available, featuring support for changelogs. You can now add changelogs to your [domains](/docs/development/guides/domains/versioning-and-changelogs/changelog.md), [services](/docs/development/guides/services/versioning-and-lifecycle/changelog.md) and messages ([events](/docs/development/guides/messages/common/changelog.md)/[commands](/docs/development/guides/messages/common/changelog.md)). ## Why changelogs?[​](#why-changelogs "Direct link to Why changelogs?") In event-driven architectures, various components like domains, services, schemas, formats, and boundaries are constantly evolving. Unfortunately, **the context or reason behind these changes often gets lost**. As a result, developers may begin to question architectural decisions, schema formats, service boundaries, and more. Without historical information, it can be challenging to share this knowledge, especially as team members leave or join the company. **EventCatalog changelogs are designed to address this issue.** ### Getting started[​](#getting-started "Direct link to Getting started") EventCatalog gives you the ability to document your event-driven architecture through domains, services and messages. These resource types can be [versioned](/docs/development/guides/domains/versioning-and-changelogs/versioning.md) and now EventCatalog provides the ability to add changelogs by providing a `changelog.mdx` file along side your resource. ### Example[​](#example "Direct link to Example") Changelog files are located along side your domain, service or message, this also includes any versioned resource. * Events * Services * Domains /events/OrderPlaced/changelog.mdx ```` --- createdAt: 2024-08-01 badges: - content: ⭐️ JSON Schema backgroundColor: purple textColor: purple --- ### Added support for JSON Schema InventoryAdjusted uses Avro but now also supports JSON Draft 7. ```json title="Employee JSON Draft" // labeled-line-markers.jsx { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "title": "Employee", "properties": { "Name": { "type": "string" }, "Age": { "type": "integer" }, "Town": { "type": "string" } }, "required": ["Name", "Age", "Town"] } `` ```` /services/Inventory/changelog.mdx ``` --- createdAt: 2024-08-01 --- ### Service receives additional events Service now receives [OrderAmended](/docs/events/OrderAmended/0.0.1) and [UpdateInventory](/docs/commands/UpdateInventory/0.0.3) events. ``` /domains/Order/changelog.mdx ``` --- createdAt: 2024-08-01 --- ### New service added to the Payment domain Service now receives [OrderAmended](/docs/events/OrderAmended/0.0.1) and [UpdateInventory](/docs/commands/UpdateInventory/0.0.3) events. ``` Changelogs will be rendered into their own page. All `changelog.mdx` files for a given domain, service or message are gathered and listed in order of version number. [See example on the demo project](https://demo.eventcatalog.dev//docs/events/InventoryAdjusted/1.0.1/changelog). ![Example](/assets/images/changelog-b60ba4ecaafb228a61fd5a517d3c1428.png) #### Adding schema diffs, labels and more[​](#adding-schema-diffs-labels-and-more "Direct link to Adding schema diffs, labels and more") Changelogs are a great way to document diffs in your schemas. Add code blocks to your changelog and use the diff syntax in the codeblock. Read more about code block features including [diffs, labels, and frames for code blocks](/docs/api/code-blocks.md). ### Summary[​](#summary "Direct link to Summary") EventCatalog now supports changelogs for [domains](/docs/development/guides/domains/versioning-and-changelogs/changelog.md), [services](/docs/development/guides/services/versioning-and-lifecycle/changelog.md) and messages ([events](/docs/development/guides/messages/common/changelog.md)/[commands](/docs/development/guides/messages/common/changelog.md)). You can use changelogs to audit and document changes within your architecture. Changelogs can be useful for teams and organizations that want to share historic information. Changelogs are powered by `changelog.mdx` files you can add to any resource. EventCatalog will find your changelog files and render them in order of version. **Read the documentation to learn more and get started:** * [Changelogs for domains](/docs/development/guides/domains/versioning-and-changelogs/changelog.md) * [Changelogs for services](/docs/development/guides/services/versioning-and-lifecycle/changelog.md) * Changelogs for [events](/docs/development/guides/messages/common/changelog.md) and [commands](/docs/development/guides/messages/common/changelog.md) If you have any questions, feature ideas, or would like to discuss EventCatalog features with your team, [join our Discord community](https://eventcatalog.dev/discord). *** Want to learn more about EventCatalog and how it can help you? Reach out to me on socials or [Discord](https://eventcatalog.dev/discord), and I would be happy to join a call with you and your team. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Changelogs](/blog/tags/changelogs.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-08-02-introducing-eventcatalog-changelogs.md) --- # Introducing EventCatalog Chat February 27, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I’m excited to share that EventCatalog [2.24.3](https://github.com/event-catalog/eventcatalog/releases/tag/v2.24.3) is now available. This release introduces the new [EventCatalog Chat](/features/ai-assistant.md) feature (in beta). This feature allows you to understand your architecture through natural conversation. [YouTube video player](https://www.youtube.com/embed/BbxzNBAYKIY?si=xPmio53TV5ZTs3B0) *** ### How can EventCatalog Chat help?[​](#how-can-eventcatalog-chat-help "Direct link to How can EventCatalog Chat help?") Here are some examples of how EventCatalog Chat can help you understand your architecture: * **Building a new feature? Want to know what messages you already have?** * Don’t know what messages your company has already? Ask the catalog, get insights in seconds, not days. * EventCatalog will point in you in the right location, with links directly to your messages, services and domains. * **Want to know the impact of breaking changes?** * EventCatalog knows who produces/consumes messages (powered by AsyncAPI, OpenAPI, or any broker in the world). That chat interface can tell you in seconds the impact of your changes. * **Want to find gaps in your event architecture?** * Ask your catalog what events are missing, it can help suggest some naming conventions for you and get you started. * **Talk to enterprise architecture?** * Save time across your organization. Use [EventCatalog Federation](/federation.md) to build a single source of truth for your event-driven architecture * Use EventCatalog Chat to talk to large architectures across your organization. * **Talk to any broker in the world** * EventCatalog is tech agnostic, integrate with any system you want either using our integrations or by using the [EventCatalog SDK](/docs/sdk.md). * Integrate [OpenAPI](/integrations/openapi.md), [AsyncAPI](/integrations/asyncapi.md), or brokers with EventCatalog. * Use [EventCatalog Chat](/features/ai-assistant.md) to ask questions about your spec files, schemas, messages, services and domains. * Ask your catalog who owns what. Quickly get contact details. * **The possibilities are endless...** Governance first mindsets can unlock huge amounts of value for your developers, architects and organizations. EventCatalog Chat can help you understand your architecture, **get insights in seconds, not days.** ## How does EventCatalog Chat work?[​](#how-does-eventcatalog-chat-work "Direct link to How does EventCatalog Chat work?") **EventCatalog Chat is privacy first**. All models are downloaded to your browser (you can configure which model) and run locally. This helps keep your data safe, local and private. ![How EventCatalog Chat works](/assets/images/ai-how-it-works-458dde04386717e39a683adbf374f633.png) EventCatalog Chat is using [WebLLM](https://webllm.mlc.ai/) to power this integration. You can configure which model you prefer to use, and fine tune your own models. EventCatalog Chat is only supported in Chrome and Edge (nightly builds of FireFox), so for now you will have to use these browsers to get access to this feature. If you want to learn more how it works, you can read the documentation or use the demo here. ## Getting started[​](#getting-started "Direct link to Getting started") To get started you need to install the latest version of EventCatalog and install the new `@eventcatalog/generator-ai` generator. The steps include: 1. Install and run the `@eventcatalog/generator-ai` generator (see documentation) 2. Configure your model (recommend the default one) 3. Build and run your catalog. For further instructions and configuration you can read the documentation. ## Summary[​](#summary "Direct link to Summary") If you are interested in bringing your own models (API Keys) (OpenAI, Anthropic, etc) let us know as this is on our roadmap, if more folks vote we can prioritize the feature. We are also building [EventCatalog Studio](https://eventcatalog.studio/) a visual editor for event-driven architectures. You can [sign up to the beta here](https://eventcatalog.studio/). If you have any feedback or suggestions please [create an issue](https://github.com/event-catalog/eventcatalog/issues/new) or [join the community on Discord](https://discord.com/invite/3rjaZMmrAm). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-02-27-eventcatalog-chat.md) --- # Access your EventCatalog from the command line January 21, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share something that's going to change how teams automate their EventCatalog. **Every SDK operation now works directly from the command line.** No code needed. Just simple commands that output JSON. ## The problem with code-only APIs[​](#the-problem-with-code-only-apis "Direct link to The problem with code-only APIs") The [EventCatalog SDK](/docs/sdk.md) has been programmatic since day one. You write TypeScript or JavaScript to manage your catalog. This works great for plugin authors and complex integrations. But it's overkill for simple tasks. Want to fetch an event during a build? You need to create a Node.js script, handle imports, and run it. Want to add events from a shell script? Not possible without wrapping it in code. **Teams kept asking for a simpler way.** They wanted to pipe catalog data to tools like `jq`, call operations from shell scripts, and integrate with CI/CD without writing application code. ## What's new[​](#whats-new "Direct link to What's new") The `@eventcatalog/sdk` package now includes a CLI. Every SDK function is available as a command. Run it with `npx` without installing anything. ``` npx @eventcatalog/sdk --dir ./my-catalog getEvent "OrderCreated" ``` That's it. No imports. No compilation. Just the command, your catalog path, and arguments. All output is JSON. Pipe it anywhere. Parse it with any tool. Store it in environment variables. The CLI gets out of your way. ## When you'd use it[​](#when-youd-use-it "Direct link to When you'd use it") **CI/CD integration.** Your build pipeline needs to validate that events in your message broker match your catalog. Read the catalog during builds and compare schemas. **Automation scripts.** You're migrating 50 services to a new domain. Write a bash script that loops through services and updates their domain references. **External system integration.** Your monitoring tool detected a new event type in production. Trigger a webhook that creates a draft event in your catalog for review. **DevOps workflows.** Manage your catalog like infrastructure-as-code. Script bulk operations. Version control the automation itself. If you've wanted EventCatalog operations in shell scripts, makefiles, or any non-Node environment, this is for you. ## How it works[​](#how-it-works "Direct link to How it works") The CLI exposes every SDK function. Arguments are parsed automatically. JSON objects, arrays, booleans, numbers, and strings all work as expected. ### List available functions[​](#list-available-functions "Direct link to List available functions") See everything you can do: ``` npx @eventcatalog/sdk list ``` This shows all functions organized by category: Events, Commands, Queries, Services, Domains, Channels, Data Products, Teams, and more. ### Basic operations[​](#basic-operations "Direct link to Basic operations") ``` # Get an event (latest version) npx @eventcatalog/sdk --dir ./catalog getEvent "OrderCreated" # Get a specific version npx @eventcatalog/sdk --dir ./catalog getEvent "OrderCreated" "1.0.0" # Get all events (only latest versions) npx @eventcatalog/sdk --dir ./catalog getEvents '{"latestOnly":true}' ``` ### Write operations[​](#write-operations "Direct link to Write operations") ``` # Create a new event npx @eventcatalog/sdk --dir ./catalog writeEvent '{ "id":"OrderCreated", "name":"Order Created", "version":"1.0.0", "markdown":"# Order Created\n\nRaised when a new order is placed." }' # Add an event to a service npx @eventcatalog/sdk --dir ./catalog addEventToService \ "InventoryService" \ "sends" \ '{"id":"OrderCreated","version":"1.0.0"}' ``` ### Pipe to tools[​](#pipe-to-tools "Direct link to Pipe to tools") Output is JSON. Use `jq` for filtering, transformation, or extraction: ``` # Filter events by version npx @eventcatalog/sdk --dir ./catalog getEvents \ | jq '.[] | select(.version == "1.0.0")' # Count total events npx @eventcatalog/sdk --dir ./catalog getEvents | jq 'length' # Extract just event IDs npx @eventcatalog/sdk --dir ./catalog getEvents | jq '.[].id' # Get services that send a specific event npx @eventcatalog/sdk --dir ./catalog getServices \ | jq '.[] | select(.sends[] | select(.id == "OrderCreated"))' ``` ### Real-world example[​](#real-world-example "Direct link to Real-world example") Here's a script that validates your catalog has schemas for all events: ``` #!/bin/bash CATALOG_DIR="./my-catalog" # Get all events events=$(npx @eventcatalog/sdk --dir "$CATALOG_DIR" getEvents) # Check each event for a schema missing_schemas=() for event_id in $(echo "$events" | jq -r '.[].id'); do event=$(npx @eventcatalog/sdk --dir "$CATALOG_DIR" getEvent "$event_id") schema_count=$(echo "$event" | jq '.schemas | length') if [ "$schema_count" -eq 0 ]; then missing_schemas+=("$event_id") fi done # Report results if [ ${#missing_schemas[@]} -eq 0 ]; then echo "✓ All events have schemas" exit 0 else echo "✗ Events missing schemas:" printf '%s\n' "${missing_schemas[@]}" exit 1 fi ``` Run this in your CI pipeline. Fail the build if events lack schemas. Enforce documentation standards automatically. ## Available operations[​](#available-operations "Direct link to Available operations") The CLI includes every SDK function, grouped by resource type: **Messages:** `getEvent`, `getEvents`, `writeEvent`, `rmEventById`, `versionEvent`, `addSchemaToEvent`, `addFileToEvent`. Similar functions exist for commands (`getCommand`, `writeCommand`, etc.) and queries (`getQuery`, `writeQuery`, etc.). **Services:** `getService`, `getServices`, `writeService`, `rmServiceById`, `versionService`, `addEventToService`, `addCommandToService`, `addQueryToService`. **Domains:** `getDomain`, `getDomains`, `writeDomain`, `rmDomainById`, `versionDomain`, `addServiceToDomain`, `addEventToDomain`, `addCommandToDomain`. **Channels:** `getChannel`, `getChannels`, `writeChannel`, `addEventToChannel`, `addCommandToChannel`. **Data Products:** `getDataProduct`, `getDataProducts`, `writeDataProduct`, `versionDataProduct`. **Teams and Users:** `getTeam`, `getTeams`, `writeTeam`, `getUser`, `getUsers`, `writeUser`. **Utilities:** `dumpCatalog` (exports entire catalog structure), `getEventCatalogConfigurationFile` (reads catalog config). Run `npx @eventcatalog/sdk list` to see the complete list with descriptions. ## Getting started[​](#getting-started "Direct link to Getting started") No installation required. Just `npx`: ``` npx @eventcatalog/sdk --dir ./your-catalog-path [args...] ``` If you've already installed the SDK (`npm i @eventcatalog/sdk`), the `eventcatalog` command is available directly: ``` eventcatalog --dir ./your-catalog-path [args...] ``` Arguments are parsed automatically: * JSON objects: `'{"key":"value"}'` * JSON arrays: `'["item1","item2"]'` * Booleans: `true` or `false` * Numbers: `42` or `3.14` * Strings: anything else Start with `npx @eventcatalog/sdk list` to see what's possible. Then try a simple read operation like `getEvent` or `getService`. The output is JSON. Pipe it, parse it, or store it. ## Summary[​](#summary "Direct link to Summary") The EventCatalog CLI makes automation simple. Every SDK function works from the command line. Output is JSON. No code required. This opens up CI/CD integration, shell scripting, and external system connections that were harder before. If you've wanted to automate your catalog without writing Node.js code, this is for you. Read the full [CLI documentation](/docs/cli.md) for detailed examples and API references. Questions? Join us on [Discord](https://discord.com/invite/3rjaZMmrAm). Issues or ideas? Open them on [GitHub](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [SDK](/blog/tags/sdk.md) * [CLI](/blog/tags/cli.md) * [Automation](/blog/tags/automation.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-21-eventcatalog-cli.md) --- # Introducing EventCatalog Cloud and Plugin Licensing February 5, 2025 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog has been another great month for EventCatalog with almost 2k stars on [GitHub](https://github.com/event-catalog/eventcatalog), and 1000 [Discord](https://discord.com/invite/3rjaZMmrAm) members. Our project continues to grow about 10/15% every month in usage. We are happy to share our first initial release of [EventCatalog Cloud](https://eventcatalog.cloud). ![EventCatalog Cloud](/assets/images/eventcatalog-cloud-4345c8e09274b11b60d5503445811d32.png) Our vision here is to offer you a new way to experience EventCatalog, which will include: * **Hosting** - Manage hosting for your EventCatalog instance * **Licensing** - Manage your plugin licenses and updates * **Ask your Catalog questions** - Using AI to answer questions about your Catalog, quickly get answers to your questions * **Collaborate** - Design with [EventCatalog Studio](https://eventcatalog.studio/), and collaborate with your team ### Integration licenses on EventCatalog Cloud[​](#integration-licenses-on-eventcatalog-cloud "Direct link to Integration licenses on EventCatalog Cloud") To help keep the project sustainable and open source we have now introduced license keys for our plugins. All our plugins were dual licensed, but did not require any license key to run or use them. This small change allows us to offer a better experience for our users and a sustainable project. All plugins will now have a 14 day trial period (you can extend contacting us), after which you will need to purchase a license key to continue using the plugin. To obtain a license key for a plugin or a trial you can login to [EventCatalog Cloud](https://eventcatalog.cloud) and navigate to the [integrations page](https://eventcatalog.cloud). ### What's next?[​](#whats-next "Direct link to What's next?") We will be adding more features to EventCatalog Cloud in the coming months, including: * **Plugin improvements** - We will be adding more plugins (e.g GitHub, GitLab) and improving the existing ones * **Improvements to EventCatalog** - New features and customization options for EventCatalog. * **EventCatalog Studio** - A new way to design and collaborate on your EventCatalog (Beta launch) * **AI** - Ask your Catalog questions, and get answers quickly #### Summary[​](#summary "Direct link to Summary") January was slightly a slow month in terms of maintenance and features as I was focused on EventCatalog Cloud, and talks for NDC and FOSDEM. These events were great and I met a lot of new people, and got to catch up with old friends. I am looking forward to February, we have a lot of great features and quality of life improvements planned. If you want to join us on this journey feel free to join our [Discord community](https://discord.com/invite/3rjaZMmrAm), and if you want to sponsor the project you can do so [here](https://github.com/sponsors/event-catalog). Speak soon! *David Boyne* **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page]() --- # Introducing Custom Components August 8, 2024 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [EventCatalog 2.3.1](https://github.com/event-catalog/eventcatalog/releases) is now available, featuring support for custom components. You can now add [custom components](/docs/development/customization/custom-components/introduction.md) to your domains, services and messages. Custom components allows you to create dynamic templates, reuse markdown across pages, client-side JavaScript and more. **Example of a new custom component** 1. Define your custom component in the new **/components** folder. /components/my-component.astro ``` --- # Import data from your eventcatalog.config.js file import config from "@config" # Access passed-in component props, like `` const { subtitle } = Astro.props; ---
This catalog belongs to the company:{config.organizationName} Data given to this component {subtitle}
``` 2. Import and use your component in EventCatalog events/OrderAccepted/index.mdx ``` --- id: OrderAccepted name: Order Accepted # ... other event data --- import MyComponent from '@catalog/components/my-component.astro" export const subtitle = "This is my new subtitle" # Overview This event represents when an order has been accepted on our system. ``` ## Why custom components?[​](#why-custom-components "Direct link to Why custom components?") EventCatalog provides a list of [components out the box](/docs/development/components/using-components.md) including [Accordions, Schemas, OpenAPI and NodeGraphs](/docs/components.md). Users of EventCatalog can now define their own components and use them across their catalog. This provides extra functionality and customization for your catalogs. **Component features include:** * Share snippets across pages * [Style with Tailwind CSS](/docs/development/customization/custom-components/component-styling.md) * [Embed client side JavaScript into your catalog](/docs/development/customization/custom-components/javascript-components.md) * Dynamic templating ## Getting started[​](#getting-started "Direct link to Getting started") If you already have an EventCatalog you need to upgrade to the version `@eventcatalog/core@2.3.0`. **Don't have a catalog?** You can try out the new features by installing a new catalog ``` npx @eventcatalog/create-eventcatalog@latest my-catalog ``` ### Summary[​](#summary "Direct link to Summary") EventCatalog now supports [custom components](/docs/development/customization/custom-components/introduction.md). Custom components give you the ability to build and share components across your domains, services and messages. Custom components support styling with TailwindCSS, Client side JavaScript, Dynamic templating, data fetching and more. If you have any questions, feature ideas, or would like to discuss EventCatalog features with your team, [join our Discord community](https://eventcatalog.dev/discord). *** ## Using EventCatalog?[​](#using-eventcatalog "Direct link to Using EventCatalog?") Want to learn more about EventCatalog and how it can help you? Reach out to me on socials or [Discord](https://eventcatalog.dev/discord), and I would be happy to join a call with you and your team. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Components](/blog/tags/components.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-08-08-introducing-eventcatalog-components.md) --- # Introducing EventCatalog Custom Documentation April 1, 2025 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I’m excited to share that EventCatalog [2.33.0](https://github.com/event-catalog/eventcatalog/releases/tag/v2.33.0) is now available. This release introduces the new [EventCatalog Custom Documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md) feature. This feature allows you to bring your own documentation to EventCatalog. [YouTube video player](https://www.youtube.com/embed/auzmEf0AdJg?si=wHe-3X6b6uLN39sB) *** ### What does "Custom Documentation" mean?[​](#what-does-custom-documentation-mean "Direct link to What does \"Custom Documentation\" mean?") In the past EventCatalog has been focused on documenting your domains, services and messages. This has been great for EventCatalog users, but many people wanted the ability to extend the documentation capabilities of EventCatalog. This is why we are introducing the new [EventCatalog Custom Documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md) feature. This feature allows you to **bring your own documentation to EventCatalog**. ![EventCatalog Custom Documentation](/img/blogs/custom-docs.png)[View the demo](https://demo.eventcatalog.dev/docs/custom/technical-architecture-design/architecture-decision-records/01-architecture-desicion-record) You can now document anything you want in EventCatalog, assign owners to the documentation and use EventCatalog components inside your documentation. The use cases are endless, but here are some examples: * Architecture Decision Records (ADRs) * Product documentation * Infrastructure documentation * Guides and Tutorials * Company policies * Meeting notes * And much more... ### What does custom documentation look like in EventCatalog?[​](#what-does-custom-documentation-look-like-in-eventcatalog "Direct link to What does custom documentation look like in EventCatalog?") A new sidebar icon has been added to EventCatalog. Clicking this icon will render your custom documentation. In your EventCatalog you can customize the sidebar of your documentation and the content that is displayed. ![EventCatalog Custom Documentation](/img/blogs/custom-docs-2.png)[View the demo](https://demo.eventcatalog.dev/docs/custom/technical-architecture-design/architecture-decision-records/01-architecture-desicion-record) All your custom documentation is stored in the `/docs` folder, and can be organized in anyway you want. You then configure the sidebar in your `eventcatalog.config.js` file to configure your sidebar. You can read the documentation [here](/docs/development/bring-your-own-documentation/custom-pages/introduction.md) to get started and start building your own documentation. ## Getting started[​](#getting-started "Direct link to Getting started") You can start adding your custom documentation to your EventCatalog in minutes. You can read the documentation [here](/docs/development/bring-your-own-documentation/custom-pages/introduction.md) to get started and start building your own documentation. ### Roamap for custom documentation[​](#roamap-for-custom-documentation "Direct link to Roamap for custom documentation") This is the first version of custom documentation, in April we are aiming to get the following features out: * **Import EventCatalog resources into your documentation** * Import any EventCatalog resource into your documentation, using components * **Embed EventCatalog visualizations into your documentation** * Add visualizations to your documentation using new components * **SDK support for custom documentation** * Programmatically add documentation to your EventCatalog * **Adding custom documentation to [EventCatalog Chat](/features/ai-assistant.md)** * Ability to ask questions about your documentation, privacy first, unlimited tokens ## Summary[​](#summary "Direct link to Summary") I'm super excited about this release, it's the first step in our journey to make EventCatalog the best tool for documenting your architectures. If you have any feedback or suggestions please [create an issue](https://github.com/event-catalog/eventcatalog/issues/new) or [join the community on Discord](https://discord.com/invite/3rjaZMmrAm). I look forward to seeing what you build with this new feature! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-04-01-eventcatalog-custom-docs.md) --- # EventCatalog December 2024 update December 23, 2024 · 9 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog, here you can find what’s next, how to get started, and what’s coming next. EventCatalog community continues to grow ❤️, now we have 937 [Discord](https://discord.com/invite/3rjaZMmrAm) members, 1.9k Stars on GitHub, [we hit over 1000 pull requests into the project](https://x.com/boyney123/status/1864654128053354669), 423 new Catalogs have been created in December and over 5,000 catalogs built into production this month. EventCatalog got a great [shoutout at re:Invent 2024](https://x.com/boyney123/status/1864705257164374416), and the project continues with 15-20% growth every month. EventCatalog sponsors [OSO](https://oso.sh/) and [Gravitee](https://www.gravitee.io/) continue their sponsorship for the project (thank you!) 🙏. *Sponsorships help our goal towards open source sustainability. EventCatalog is free to use and open source, if you want to support the project checkout the [tiers on GitHub](https://github.com/sponsors/event-catalog) or contact me directly at `dave@eventcatalog.dev` , I really appreciate any support ❤️* Our [integration platform continues](https://www.eventcatalog.dev/integrations) to grow, including [OpenAPI](https://www.eventcatalog.dev/integrations), [AsyncAPI](https://www.eventcatalog.dev/integrations) and [Amazon EventBridge](https://www.eventcatalog.dev/integrations), [Backstage](https://www.eventcatalog.dev/docs/development/plugins/backstage/intro), [GitHub](https://www.eventcatalog.dev/federation) and [GitLab](https://www.eventcatalog.dev/federation). Automate your documentation with any of these integrations or contact us to build a custom integration. In December we introduced the ability to filter resources by custom badges, ability to document Ubiquitous Language, over 200,000 icons support with Mermaid v11, new tab components, 80% increased build times and we launched [EventCatalog Federation](https://www.eventcatalog.dev/federation). In this blog post we will dive deeper into features that were released in December, why they were built and how they can help you govern your architectures. At the end of the blog post I will share a personal update and what’s planned for January 2025. ## Introducing EventCatalog Federation[​](#introducing-eventcatalog-federation "Direct link to Introducing EventCatalog Federation") In December we launched our first version of [EventCatalog Federation](https://www.eventcatalog.dev/federation). EventCatalog federation let’s you unify your documentation across your organization into one view. EventCatalog Federation takes many catalogs and merges them into one view for your organization. This let’s your teams keep their own documentation, schemas and spec files close to their code, and merge this information into one view for the organization. ![EventCatalog Federation](/assets/images/federation-03875bef64cf3944efc47794e8a263e3.png) [Get started with EventCatalog Federation →](https://www.eventcatalog.dev/federation) **Federation benefits to organizations include:** * Give your architects and company the ability to get a holistic view of the whole architecture * See ownership of domains, services and messages and contact them * Let your teams quickly find events, schemas and specs they want to start consuming * Let’s your team own their own documentation, focusing on their domain and service Our vision with EventCatalog is to bring discoverability to architectures for teams saving them time from discovering a message to the implementation phase. We believe EventCatalog Federation can help scale EventCatalog within your teams and business. To get started you can [read the documentation here](https://www.eventcatalog.dev/federation), or if you would prefer to walk through your problems and how EventCatalog can help you can email [`hello@eventcatalog.dev`](mailto:hello@eventcatalog.dev) for a walkthrough/demo. ## Introducing the ubiquitous language dictionary[​](#introducing-the-ubiquitous-language-dictionary "Direct link to Introducing the ubiquitous language dictionary") Event-driven architecture and domain-driven design work very well together ([see visual here](https://eda-visuals.boyney.io/visuals/eda-and-ddd)). Many teams are embracing domain-driven design practices whilst building their event-driven architecture. Part of this process includes understanding and defining a **ubiquitous language**. Ubiquitous language is the language (terms) you use within a particular domain. For example a `Policy` in a **Underwriter Domain** might be completely different to a `Policy` in a **User Domain**. This language often get’s translated into code/models within your architecture, but the meaning of these terms/words can often get lost or confused. The EventCatalog ubiquitous language dictionary gives you the ability to document your domains language with a simple markdown file. These definitions will get rendered into EventCatalog and can help your teams understand terms used within your architectures domain, helping with any confusion that may occur. The ubiquitous language dictionary is powered by markdown files, this let’s you document short or large descriptions of your language and users can quickly filter and search for terms in your domain. ![Ubiquitous Language Dictionary](/assets/images/ubiquitous-lang-sidebar-9f08c4f029fb475bbea1293ac0904032.png) [See example →](https://demo.eventcatalog.dev/docs/domains/Orders/language) To get started you need to create a [`ubiquitous-language.mdx`](http://ubiquitous-language.md) in your domain folder, and then EventCatalog will render this for your users. To understand more and get started you can read the [documentation here](https://www.eventcatalog.dev/docs/development/guides/domains/adding-ubiquitous-language). ## Introducing custom filters in EventCatalog[​](#introducing-custom-filters-in-eventcatalog "Direct link to Introducing custom filters in EventCatalog") EventCatalog has a discover feature ([see demo](https://demo.eventcatalog.dev/discover/events)) that allows you to quickly search and filter domains, services and messages. ![Custom Filters](/assets/images/filter-badges-8ef3c9777fd190cc0c26e1355617f35a.png) [See demo →](https://demo.eventcatalog.dev/discover/events) We have now added the ability to search and filter by badges. Badges are custom tags you can add to your resources in EventCatalog, this let’s you add any metadata you like to your domains, services, flows and messages. If you want to enable quick filtering/search based on custom information you can use badge filters to do this. To get started, you need to [add badges to your resources](https://www.eventcatalog.dev/docs/api/event-api#badges) and EventCatalog will render the filters for you. ### Mermaid v11 and 200,000 icons have beed added[​](#mermaid-v11-and-200000-icons-have-beed-added "Direct link to Mermaid v11 and 200,000 icons have beed added") EventCatalog let’s you use [mermaid code blocks i](https://www.eventcatalog.dev/docs/development/components/mermaid)n all resources, this is handy if you want to provide extra visualisations or information about your domains, services or messages. In December we updated Mermaid to V11. This gives you the ability to render [Architecture Diagrams](https://www.eventcatalog.dev/docs/development/components/mermaid#architecture-diagrams-with-mermaid) and now supports over 200,000 icons for your diagrams. You can also render Block Diagrams, C4 Diagrams, Mind maps and much more ([see examples](https://mermaid.js.org/intro/)). ![Mermaid v11](/assets/images/mermaid-example-3ef26b32a0367a8626d2217f30a98d01.jpeg) [See documentation →](https://www.eventcatalog.dev/docs/development/components/mermaid) Mermaid can be a great way to provide additional information for your developers and teams in EventCatalog. To get started you can read our documentation on [how to use mermaid in EventCatalog](https://www.eventcatalog.dev/docs/development/components/mermaid). ## Other improvements made in December[​](#other-improvements-made-in-december "Direct link to Other improvements made in December") * EventCatalog builds are now 80% faster! * EventCatalog now renders Avro Schemas in the UI (with [AsyncAPI files](/docs/plugins/asyncapi/intro.md)) * EventCatalog got updated to [Astro v5](https://astro.build/) * You can now [use Tab components in EventCatalog](https://www.eventcatalog.dev/docs/development/components/components/tabs) * You can now add Microsoft teams (contact information) to your users and teams in EventCatalog ## EventCatalog Studio[​](#eventcatalog-studio "Direct link to EventCatalog Studio") In November we started working on [EventCatalog Studio](https://eventcatalog.studio/). This visual editor for EventCatalog, letting you quickly explore, experiment and design your architecture with a drag and drop interface. The vision is to go from design to implementation faster than ever. ![EventCatalog Studio](/assets/images/studio-landing-6a53d9d8f9c9a81fafc295bc2a9fb681.png) [Sign up for early access →](https://eventcatalog.studio/) We continue to work on this in Q1 2025, if you would like to sign up to the beta [you can sign up here](https://eventcatalog.studio/). Or if you want to understand how it can help your teams feel free to reach out to us at `hello@eventcatalog.dev` . ## Whats next in 2025[​](#whats-next-in-2025 "Direct link to Whats next in 2025") **Our vision is to help companies bring discoverability to their event-driven architecture** through open source community and software. The project usage is growing 15-20% a month and we aim to at least double this in 2025. #### Community[​](#community "Direct link to Community") Our aim is to work backwards from the community and EventCatalog users to define a public roadmap and continue to grow our community. **The community and open source is the core of the project and we want to do everything we can to help maintain this and grow**. We will focus on making a welcoming community, have community meetings and create a place where people can learn, explore and help each other. #### Working with companies[​](#working-with-companies "Direct link to Working with companies") We have started to work with companies to help them govern their event-driven architectures and make best use of EventCatalog. If you want to work with us reach out at [`hello@eventcatalog.dev`](mailto:hello@eventcatalog.dev) , we would love to help you understand how EventCatalog can help your organization, provide value and solve problems you may be facing. #### Sponsors[​](#sponsors "Direct link to Sponsors") We will continue to explore project sponsors. This helps keep the core of the project free and open source. If you or your company would like to sponsor our project we would love to connect. You can reach out at [`hello@eventcatalog.dev`](mailto:hello@eventcatalog.dev) and we can share details with you on what you can get from sponsoring the project. We currently have 2 sponsors, our 2025 goal is to double this. #### Integration platform[​](#integration-platform "Direct link to Integration platform") We will continue to grow [our integration platform](https://www.eventcatalog.dev/integrations). This includes working with cloud providers, broker providers and companies to integrate EventCatalog into their eco-system. If you would to see an integration or get help building a custom integration we can help. #### EventCatalog ecosystem[​](#eventcatalog-ecosystem "Direct link to EventCatalog ecosystem") We will continue to explore the EventCatalog eco system. Looking at tools like [EventCatalog Studio](https://eventcatalog.studio/) and other tools that users may find useful. We believe that EventCatalog can had a huge amounts of value to businesses and teams, and we are just starting. With the EventCatalog ecosystem we believe we can save teams time and money and get them building and documenting event-driven architectures faster than ever. #### Summary[​](#summary "Direct link to Summary") We are excited for what 2025 has in store for EventCatalog, we have a lot of ideas and plans to help grow the project and community. We are looking forward to working with you and your teams to help you document and govern your event-driven architectures. If you have any questions or feedback please reach out to us at [`hello@eventcatalog.dev`](mailto:hello@eventcatalog.dev) and we can help you get started. Happy New Year! *David Boyne* **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page]() --- # Bring your diagrams to EventCatalog April 16, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Many teams use diagrams to capture their architecture, event modeling, and event storming sessions, often these artifacts are left in [Miro](https://miro.com/), [Lucid](https://lucid.app/), or [Draw.io](https://draw.io/) and can be difficult to find when you need them. EventCatalog now supports embedding these diagrams into your documentation, making it easier to collaborate and get more value from your diagrams. We have introduced new components which can be used in your domains, services, and messages: * [\](/docs/development/components/components/embed-diagrams/miro.md) * [\](/docs/development/components/components/embed-diagrams/lucid.md) * [\](/docs/development/components/components/embed-diagrams/drawio.md) We have also introduce a new [EventCatalog Miro Plugin](https://github.com/event-catalog/eventcatalog-miro-app?tab=readme-ov-file) which allows you to bring EventCatalog into Miro. *** ## Miro[​](#miro "Direct link to Miro") The Miro component allows you to embed Miro boards into your documentation. These boards can be embedded into your domains, services, and messages. ![EventCatalog Miro Example](/img/blogs/miro/miro-example1.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) To get started you can use the new `` component in your documentation. /events/OrderAmended/index.mdx ``` --- #event frontmatter --- ## Event storming session ``` You can also configure the Miro board to be editable, full screen, and more. To get started you can read more about the [Miro component](/docs/development/components/components/embed-diagrams/miro.md) and how to use it. ## Miro Plugin[​](#miro-plugin "Direct link to Miro Plugin") We have launched our first version of the EventCatalog Miro plugin. This plugin allows you to bring EventCatalog into Miro, making it easier to collaborate and get more value from your diagrams. ![EventCatalog Miro Example](/img/blogs/diagrams/miro-plugin.png)[Install the plugin](https://miro.com/app-install/?response_type=code\&client_id=3458764623600229458\&redirect_uri=%2Fapp-install%2Fconfirm%2F) You can import all your resources into Miro, including services, messages, and more. Then drag these resources into your diagrams. Miro Plugin - Roadmap The Miro Plugin is open source and can be found on [GitHub](https://github.com/event-catalog/eventcatalog-miro-app). The plugin is read-only for now, but we are working on adding edit capabilities soon. The plugin is still in early stages and we would love to hear your feedback. To get started you can read more about the [Miro plugin](/integrations/miro.md) and how to use it. *** ## Lucid[​](#lucid "Direct link to Lucid") The Lucid component allows you to embed Lucid diagrams into your documentation. These diagrams can be embedded into your domains, services, messages and custom documentation pages. ![EventCatalog Lucid Example](/img/blogs/diagrams/lucid-eventcatalog-embed.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) To get started you can use the new `` component in your documentation. /events/OrderAmended/index.mdx ``` --- #event frontmatter --- ## Event storming session ``` To get started you can read more about the [Lucid component](/docs/development/components/components/embed-diagrams/lucid.md) and how to use it. *** ## Draw\.io (diagrams.net)[​](#drawio-diagramsnet "Direct link to Draw.io (diagrams.net)") The `` component allows you to embed Draw\.io diagrams into your documentation. These diagrams can be embedded into your domains, services, messages and custom documentation pages. ![EventCatalog Draw.io Example](/img/blogs/diagrams/drawio-eventcatalog-embed.png)[View the demo](https://demo.eventcatalog.dev/docs/custom/guides/event-storming/01-index) To get started you can use the new `` component in your documentation. /events/OrderAmended/index.mdx ``` --- #event frontmatter --- ## Event storming session ``` To get started you can read more about the [Lucid component](/docs/development/components/components/embed-diagrams/lucid.md) and how to use it. ## Summary[​](#summary "Direct link to Summary") Miro, Lucid, and Draw\.io are all great tools for capturing and sharing diagrams. With our new embedding feature, you can now bring those diagrams directly into your EventCatalog documentation—making it easier to collaborate, share context, and get more value from your visual workflows. If you have any feedback or suggestions, please [open an issue](https://github.com/event-catalog/eventcatalog/issues/new) and we will look into it. Our community has grown to over 1,100 members and continues to expand! If you haven’t already, join us on [Discord](https://discord.com/invite/3rjaZMmrAm) and be part of the conversation. Hope you enjoy the new feature! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Miro](/blog/tags/miro.md) * [Lucid](/blog/tags/lucid.md) * [Draw.io](/blog/tags/draw-io.md) * [Component](/blog/tags/component.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-04-16-diagrams.md) --- # Introducing EventCatalog Directory February 11, 2025 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog [2.20.2](https://github.com/event-catalog/eventcatalog/releases/tag/v2.20.2) is now available. This release introduces the [EventCatalog Directory](https://demo.eventcatalog.dev/directory/users), a new way to find users and teams using EventCatalog. ![EventCatalog Directory](/img/blogs/directory-page.png)[View the EventCatalog Directory demo](https://demo.eventcatalog.dev/directory/users) When event-driven architectures get to a certain size it becomes difficult to know who owns a service, event, query or command. This is why we are introducing the EventCatalog Directory. Using the EventCatalog Directory you can quickly find users or teams by services, events, queries and commands that they own. If you need to quickly find out who owns a service, event, query or command you can use the directory to find them. ## What has changed?[​](#what-has-changed "Direct link to What has changed?") Previously the users and teams were listed in the documentation sidebar. We have now moved them to their own directory page keeping the documentation sidebar focused on your domains, services and messages in your catalog. To upgrade to the new version you can run the following command: ``` npm install @eventcatalog/eventcatalog@latest ``` ## How does it work?[​](#how-does-it-work "Direct link to How does it work?") A new page has been added to EventCatalog. Clicking on the new directory page will show a list of users and teams. To add users and teams to your EventCatalog you can read our guides: * [Add users to your EventCatalog](/docs/development/guides/owners/users/introduction.md) * [Add teams to your EventCatalog](/docs/development/guides/owners/teams/introduction.md) When you add a user or team as owners of your domains, services, events, queries and commands they will appear in the directory and on your documentation pages. ![EventCatalog Directory](/img/blogs/service-owners.png)[View the service ownership demo](https://demo.eventcatalog.dev/docs/services/InventoryService/0.0.2) Each user and team has their own page in EventCatalog. This page helps you understand more information about the owner and quickly see what services, events, queries and commands they own. ![EventCatalog Directory](/img/blogs/user-page.png)[View the user page demo](https://demo.eventcatalog.dev/docs/users/asmith) #### Summary[​](#summary "Direct link to Summary") As your event-driven architecture grows, the EventCatalog Directory will become more useful. The EventCatalog Directory can be used to help your developers, architects and stakeholders understand the ownership of your event-driven architecture. Each team or user in [EventCatalog has their own page](https://demo.eventcatalog.dev/docs/users/asmith), this page helps you understand more information about the owner and quickly see what services, events, queries and commands they own. EventCatalog Directory works well with the [EventCatalog Federation plugin](https://www.eventcatalog.dev/docs/plugins/eventcatalog-federation/introduction). Federation allows you to pull in users and teams from other catalogs into your main catalog, this means you can have a single source of truth for your event-driven architecture. There is much more we want to do here, and we are just getting started. If you have any feedback or suggestions please [create an issue](https://github.com/event-catalog/eventcatalog/issues/new) or [join the community on Discord](https://discord.com/invite/3rjaZMmrAm). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page]() --- # EventCatalog February 2025 update March 3, 2025 · 8 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog, here you can find what’s next, how to get started, and what’s coming next. EventCatalog community continues to grow ❤️, now we have 1,030 [Discord](https://discord.com/invite/3rjaZMmrAm) members, [2k Stars on GitHub](https://github.com/event-catalog/eventcatalog), 759 new catalogs have been created in February and 8.5k catalogs built into production. EventCatalog continues with 15-20% growth every month. We are currently on track for open source sustainability in 2025. EventCatalog sponsors [OSO](https://oso.sh/) and [Gravitee](https://www.gravitee.io/) continue their sponsorship for the project (thank you!) 🙏. This sponsorship helps my goal towards open source sustainability. EventCatalog is free to use and open source, if you want to support the project checkout the t[iers on GitHub](https://github.com/sponsors/event-catalog) or contact me directly at `dave@eventcatalog.dev` , I really appreciate any support ❤️ In February [EventCatalog Cloud](/blog/eventcatalog-cloud.md), [EventCatalog Chat](/blog/eventcatalog-chat.md), [EventCatalog Directory](/blog/eventcatalog-directory.md), new [Amazon API Gateway integration](/integrations/amazon-api-gateway.md), [RSS Catalog feeds](/docs/development/configuration/rss-feed.md), progress on [EventCatalog Studio](https://eventcatalog.studio/), [new consulting services](/services.md), [a brand new look for the website](/index.md), and many features were introduced. In this blog post we will dive deeper into features and improvements that were released in February, and how you can get started. * [Introducing EventCatalog Cloud](#introducing-eventcatalog-cloud) * [Introducing EventCatalog Chat](#introducing-eventcatalog-chat) * [Introducing LLMS.txt for developer tools](#introducing-llmstxt-for-developer-tools) * [New integration with Amazon API Gateway](#new-integration-with-amazon-api-gateway) * [Introducing a new user/team directory](#introducing-a-new-userteam-directory) * [New sidebar for EventCatalog Documentation](#new-sidebar-for-eventcatalog-documentation) * [EventCatalog Examples Repository](#eventcatalog-examples-repository) * [New consulting/workshop services](#new-consultingworkshop-services) ## Introducing EventCatalog Cloud[​](#introducing-eventcatalog-cloud "Direct link to Introducing EventCatalog Cloud") [EventCatalog Cloud](https://eventcatalog.cloud/) was introduced giving people the ability to create accounts and get trial licenses for EventCatalog integrations, including [OpenAPI](https://www.eventcatalog.dev/integrations/openapi), [AsyncAPI](https://www.eventcatalog.dev/integrations/asyncapi), [Amazon EventBridge](https://www.eventcatalog.dev/integrations/amazon-eventbridge), and many more. ![EventCatalog Cloud](/img/eventcatalog-cloud.png)[View the EventCatalog Cloud](https://eventcatalog.cloud/) EventCatalog documentation can be automated from any system or broker in the world ([using the SDK](https://www.eventcatalog.dev/docs/sdk)) or EventCatalog integrations, this cloud platform was designed to give users the ability to trial integrations before deciding to purchase integration licenses. In the future EventCatalog Cloud will offer hosting, organizations/users, ability to design event-driven architectures (with [EventCatalog Studio](https://eventcatalog.studio/)) and much more. ## Introducing EventCatalog Chat[​](#introducing-eventcatalog-chat "Direct link to Introducing EventCatalog Chat") You can now use natural language to talk to your EventCatalog. This new feature let’s your teams get access to information they need in seconds rather than hours or days. [YouTube video player](https://www.youtube.com/embed/BbxzNBAYKIY?si=xPmio53TV5ZTs3B0) EventCatalog Chat is a local first, and privacy first AI feature, that runs locally in your browser. No data is shared, which allows you to keep your data private to your organization. Use cases include: * Ask your catalog what messages you have related to a new feature you want to build * Ask your catalog what messages a service publishes/consumes * Find gaps in your messages or naming conventions in your architecture * Highlight messages that are not following certain conventions * And much more… EventCatalog Chat is still in beta, and you can access it by enabling it on your catalog and following these instructions. If you want to try it yourself, you can view the demo here (Chrome and Edge browser support only). ## Introducing LLMS.txt for developer tools[​](#introducing-llmstxt-for-developer-tools "Direct link to Introducing LLMS.txt for developer tools") [LLMS.txt](https://llmstxt.org/) is a proposed standard that helps AI-powered development tools better understand and interact with your documentation. Similar to how robots.txt guides web crawlers, LLMS.txt provides structured information that makes it easier for AI assistants like Claude, ChatGPT, and GitHub Copilot to process your EventCatalog documentation. EventCatalog now supports LLMS.txt standard, [you can read more here to get started.](https://www.eventcatalog.dev/docs/development/developer-tools/llms.txt) ## New integration with Amazon API Gateway[​](#new-integration-with-amazon-api-gateway "Direct link to New integration with Amazon API Gateway") You can now integrate your APIs built with [Amazon API Gateway into EventCatalog](https://www.eventcatalog.dev/integrations/amazon-api-gateway). This allows you to sync your API Gateway configuration with EventCatalog, and hydrate your routes/apis with semantic meansing. ![Amazon API Gateway](/img/integrations/covers/api-gateway.png)[Automate EventCatalog with Amazon API Gateway →](https://www.eventcatalog.dev/integrations/amazon-api-gateway) EventCatalog will connect to your AWS account, download the OpenAPI formats for your API Gateways and hydrate them with custom EventCatalog features. Using this integration you can document your APIs in seconds, and keep your documentation up to date with your API in the cloud. [To get started you can read the documentation.](https://www.eventcatalog.dev/integrations/amazon-api-gateway) ## Introducing a new user/team directory[​](#introducing-a-new-userteam-directory "Direct link to Introducing a new user/team directory") A new user directory feature has been added to EventCatalog. This new feature let’s you quickly find resources that belong to users or teams. If you want to know who owns a particular message, or which team owns a particular service you can now quickly find this information. ![EventCatalog Directory](/img/blogs/directory-page.png)[View the EventCatalog Directory demo](https://demo.eventcatalog.dev/directory/users) You can use filters to filter by owned events, commands and queries, or services and teams. [You can view the demo here](https://demo.eventcatalog.dev/directory/users). ## New sidebar for EventCatalog Documentation[​](#new-sidebar-for-eventcatalog-documentation "Direct link to New sidebar for EventCatalog Documentation") Thanks to [Carlos Rodrigues](https://github.com/carlosallexandre) we now have a new way to navigate documentation in EventCatalog. ![EventCatalog Sidebar](/img/blogs/feb-2025-update/tree-view.png)[View the new sidebar demo](https://demo.eventcatalog.dev/) Using the new `TREE_VIEW` setting the sidebar will now render your catalog resources in a nested structure (which mirrors your directory structure). This can be particularly useful for large catalogs To get started you [can configure the tree view setting in your configuration file.](https://www.eventcatalog.dev/docs/api/config#docssidebar-options) ## EventCatalog Examples Repository[​](#eventcatalog-examples-repository "Direct link to EventCatalog Examples Repository") Want to learn how EventCatalog can help you? A new [examples repository](https://github.com/event-catalog/generators/tree/main/examples) has been created, with over 10 examples of how to use EventCatalog with [OpenAPI](https://github.com/event-catalog/generators/tree/main/examples/generator-openapi), [AsyncAPI](https://github.com/event-catalog/generators/tree/main/examples/generator-asyncapi), [Amazon API Gateway](https://github.com/event-catalog/generators/tree/main/examples/generator-amazon-apigateway/basic), [Amazon EventBridge](https://github.com/event-catalog/generators/tree/main/examples/generator-eventbridge), and [EventCatalog Federation](https://github.com/event-catalog/generators/tree/main/examples/generator-federation/basic). Hopefully these new examples can help you understand how EventCatalog works with our integrations, and how you can get value from automating your documentation, or scaling your documentation in your organization using [EventCatalog federation](https://www.eventcatalog.dev/federation). ## New consulting/workshop services[​](#new-consultingworkshop-services "Direct link to New consulting/workshop services") We continue to work with companies around the world helping them lay the foundations for their event-driven architecture governance. This includes best practices, patterns and diving deep into their problems. If this is something you would be interested in, [please get in touch](https://www.eventcatalog.dev/services). Happy to explore how we can help. ### Other improvements and fixes[​](#other-improvements-and-fixes "Direct link to Other improvements and fixes") * [RSS feeds are available for all resource types in EventCatalog](https://www.eventcatalog.dev/docs/development/configuration/rss-feed) * AsyncAPI and OpenAPI plugins now group resources using directory structures making it easier to mange them. * [EventCatalog Studio](https://eventcatalog.studio/) still on target for initial release in Q1 2025. ## What’s coming in March?[​](#whats-coming-in-march "Direct link to What’s coming in March?") EventCatalog has huge potential to help people govern their event-driven architecture. Surrounding this includes a wide range of tools and value it can unlock for you and your teams. Our vision in 2025 is make this happen, and here is a diagram of where we are heading. ![EventCatalog Vision](/img/blogs/feb-2025-update/vision.jpeg) In March we hope to improve the visualizer, add the ability to add events to domains, and visualize integration events between domains. We aim to [get EventCatalog Studio](https://eventcatalog.studio/) in front of the first batch of early beta users to help them design and edit their catalogs. If you have any questions or want to join our community of over 1000 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-03-03-february-2025.md) --- # Introducing EventCatalog Federation December 20, 2024 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog We are happy to share the first initial release of [EventCatalog Federation](/federation.md). ![EventCatalog Federation](/assets/images/federation-03875bef64cf3944efc47794e8a263e3.png) EventCatalog Federation is a [new plugin](https://github.com/event-catalog/generators) that allows you to merge multiple EventCatalog instances into one for a single source of truth. In this blog post we will cover why federation might be useful for you and your teams, how it works, and how you can get started. ## Why EventCatalog Federation?[​](#why-eventcatalog-federation "Direct link to Why EventCatalog Federation?") In 2024 we have seen a lot of companies and teams adopting EventCatalog. We have seen teams use EventCatalog to document their event-driven architectures and microservices. Many teams are using EventCatalog as a single source of truth for their [domains](/docs/domains.md), [services](/docs/services.md) and [messages](/docs/messages.md) . This gives organizations a single source of truth for their documentation. EventCatalog is helping developers, architects and business stakeholders understand their architectures and quickly find the information they need. Whilst speaking to our community we have learned that many teams want the ability to keep their documentation close to their code and still continue to have the single source of truth for their organization. EventCatalog Federation allows your teams to have their own EventCatalog, [stub out dependencies](/docs/plugins/eventcatalog-federation/setup-team-catalog.md) and provide an ability to merge multiple catalogs into one main catalog. This allows your teams to keep their documentation close to their code, store their documentation in git whilst continuing to provide value to the organization. ## How does EventCatalog Federation work?[​](#how-does-eventcatalog-federation-work "Direct link to How does EventCatalog Federation work?") ![EventCatalog Federation](/assets/images/federation-example-5e771272a1287069b29da78fcf14183b.png) ### Teams owning their own documentation[​](#teams-owning-their-own-documentation "Direct link to Teams owning their own documentation") Your teams create their own EventCatalog instance, [they can use the `eventcatalog` CLI to create a new catalog](/docs/development/getting-started/installation.md). Your teams own their own documentation, domains, services and messages (all optional). This allows your teams to focus, document what they are doing and what they are consuming. If your team consumes a dependency from another team, you can use the new [EventCatalog stubs to mock them out in your own catalog](/docs/plugins/eventcatalog-federation/setup-team-catalog.md). Once teams commit their documentation to their repository, they can run the federation generator to merge their documentation into a main catalog. This main catalog provides the organization with a single source of truth for the entire architecture. To dive deeper and get started with EventCatalog Federation, read our [EventCatalog Federation Setup Team Catalog](/docs/plugins/eventcatalog-federation/setup-team-catalog.md) guide. ### Organization EventCatalog[​](#organization-eventcatalog "Direct link to Organization EventCatalog") You will [create a main EventCatalog instance](/docs/plugins/eventcatalog-federation/configuration.md) that uses the [federation generator](/docs/plugins/eventcatalog-federation/introduction.md) to merge all the EventCatalog instances from your teams. Using the federation generator you can specify the source repository to pull from, the branch to pull from, the files to copy from the source repository to your main catalog and if you want to override any conflicts (`last-write-wins`). Merging many catalogs into one provides your developers, architects and business stakeholders with a single source of truth for your organization. The single source of truth lets you see the entire architecture of your organization, and provides a way to understand the dependencies between your teams. Developers can quickly understand and search for the information they need, and business stakeholders can understand the entire architecture of the organization and start to define business processes (flows) for EventCatalog. ## Getting started[​](#getting-started "Direct link to Getting started") To get started you can read the following guides: * [EventCatalog Federation Setup Team Catalog](/docs/plugins/eventcatalog-federation/setup-team-catalog.md) * [EventCatalog Federation Configuration](/docs/plugins/eventcatalog-federation/configuration.md) * [EventCatalog Federation Introduction](/docs/plugins/eventcatalog-federation/introduction.md) ## Summary[​](#summary "Direct link to Summary") [EventCatalog Federation](/federation.md) is [a new plugin](https://github.com/event-catalog/generators) that allows you to merge multiple EventCatalog instances into one for a single source of truth. This allows your teams to keep their documentation close to their code, store their documentation in git whilst continuing to provide value to the organization. We are excited to see what you build with EventCatalog Federation and we are looking forward to seeing the EventCatalog community grow in 2025. If you have any questions or feedback, please let us know in the [EventCatalog Discord](https://discord.com/invite/3rjaZMmrAm). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-12-20-eventcatalog-federation.md) --- # Embed IcePanel Diagrams in EventCatalog January 8, 2026 · 2 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [IcePanel](https://icepanel.io/) is a powerful tool for visualizing software architecture using the [C4 model](https://c4model.com/). Now you can embed your IcePanel diagrams directly into EventCatalog, bringing your architecture documentation to life. ![Example output](/img/ice-panel.png)Embedding an IcePanel diagram in EventCatalog Introducing the new [`` component](/docs/development/components/components/embed-diagrams/icepanel.md). Embed interactive C4 diagrams into any EventCatalog page, from [domains](/docs/development/guides/domains/introduction.md) and [services](/docs/development/guides/services/introduction.md) to [messages](/docs/messages.md) and [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). ### How does it work?[​](#how-does-it-work "Direct link to How does it work?") To embed an IcePanel diagram in your documentation, use the following code: /services/OrderService/index.mdx ``` --- # service frontmatter --- ## Architecture Overview ``` You can also add a title and description: /services/OrderService/index.mdx ``` ``` ### Full-Screen Mode[​](#full-screen-mode "Direct link to Full-Screen Mode") Each embedded diagram includes a full-screen button, giving your team more space to explore complex architectures without leaving EventCatalog. ![Full-screen mode](/img/ice-panel-full-screen.png)Full-screen mode ### Getting started[​](#getting-started "Direct link to Getting started") Update your EventCatalog to the latest version: ``` npm install @eventcatalog/core@latest ``` Then start using the `` component in your documentation. ## Summary[​](#summary "Direct link to Summary") If your team uses IcePanel for C4 architecture diagrams, you can now bring those diagrams directly into EventCatalog. Check out the [documentation](/docs/development/components/icepanel.md) to get started. We'd love to hear your thoughts. Feel free to [open an issue](https://github.com/event-catalog/eventcatalog/issues/new) with any feedback. Join our community of over 1,100 members on [Discord](https://discord.com/invite/3rjaZMmrAm)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [IcePanel](/blog/tags/ice-panel.md) * [Component](/blog/tags/component.md) * [C4](/blog/tags/c-4.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-08-eventcatalog-icepanel.md) --- # What's new in EventCatalog - January 2026 February 1, 2026 · 13 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the first EventCatalog update of 2026! EventCatalog turned 4 years old this month and we are excited to share what we have been working on. We launched [**EventCatalog v3**](/blog/eventcatalog-v3.md), [introduced themes and dark mode](/blog/eventcatalog-themes-dark-mode.md), added [data products as a first-class resource](/blog/data-products.md), shipped [domain-level messaging](/blog/domain-level-messages.md), and released a [built-in MCP server](/blog/built-in-mcp-server.md). Plus improvements to the visualizer, [new CLI capabilities](/blog/eventcatalog-cli.md), and [diagram resources](/blog/2026/01/09/diagrams-as-first-class-resources.md). In this post, we will get you up to speed on what shipped, and how to get started. * [EventCatalog v3](#eventcatalog-v3) * Our next generation of EventCatalog * [Themes and Dark Mode](#themes-and-dark-mode) * Customize your catalog with built-in themes and dark mode * [Custom Tools for EventCatalog Assistant](#custom-tools-for-eventcatalog-assistant) * Bring your own models and tools to your documentation * [Embed IcePanel Diagrams](#embed-icepanel-diagrams) * Visualize your architecture with IcePanel diagrams * [Diagrams as First-Class Resources](#diagrams-as-first-class-resources) * Bring your own diagrams to your documentation * [Domain-Level Messages](#domain-level-messages) * Document messaging at the domain level * [Built-In MCP Server](#built-in-mcp-server) * Query your architecture with MCP * [Data Products](#data-products) * Document data products as a first-class resource * [EventCatalog CLI](#eventcatalog-cli) * Manage your catalog with the CLI * [Visualizer Improvements](#visualizer-improvements) * Improve the visualizer with layout persistence and focus mode *** ## EventCatalog v3[​](#eventcatalog-v3 "Direct link to EventCatalog v3") After 18 months of v2, we released [EventCatalog v3](/blog/eventcatalog-v3.md). The community has grown to over 1,200 members on [Discord](https://eventcatalog.dev/discord). We've shipped more than 70 releases and added features teams asked for. **v3 refines EventCatalog for larger catalogs and more complex architectures.** ### New context-aware navigation[​](#new-context-aware-navigation "Direct link to New context-aware navigation") The biggest change is the navigation system. The sidebar now adapts based on what you're viewing, showing relevant information and supporting drilldown exploration through domains, services, and messages. This can help your team find what they need faster. You can customize the sidebar to exactly how you want it, and also favorite resources to quickly access them. ![EventCatalog Sidebar](/img/blogs/3.0.0/docs-sidebar.png)[View the demo](https://demo.eventcatalog.dev) ### Performance improvements[​](#performance-improvements "Direct link to Performance improvements") We have made some performance improvements to EventCatalog, making it faster and more responsive. **Results:** Faster page loads, instant search without build steps, and 100/100 Lighthouse scores on the demo catalog. ### Simplified AI with EventCatalog Assistant[​](#simplified-ai-with-eventcatalog-assistant "Direct link to Simplified AI with EventCatalog Assistant") We have simplified the way AI can be integrated into your documentation which allows you to bring your own models and tools to your documentation. ![EventCatalog Assistant](/img/blogs/3.0.0/ai.png)[View the documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md) The new EventCatalog Assistant is simpler and more powerful. Bring any AI model you want (OpenAI, Anthropic, local models). Use custom tools for your integrations. One config file for AI settings. Context-aware conversations with your resources. Every resource type has it's own question set when you load it into your assistant. Viewing an OpenAPI schema will give you questions about the schema, and you can also ask about the schema in natural language. If you are looking at your visualizations of your architecture you can ask questions about the nodes and how systems are connected. To get started, you can follow the [EventCatalog Assistant setup guide](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md). ### Store business workflows with services and domains[​](#store-business-workflows-with-services-and-domains "Direct link to Store business workflows with services and domains") A highly requested feature: you can now assign [flows](/docs/development/guides/flows/introduction.md) (business workflows) to services and domains. Document business workflows, user journeys, and feature flows alongside your technical architecture. ``` --- id: Orders flows: - id: checkout-flow - id: refund-flow --- ``` Read the [v3 upgrade guide](/docs/development/upgrading/v3.md) for full details on changes and migration steps. *** ## Themes and Dark Mode[​](#themes-and-dark-mode "Direct link to Themes and Dark Mode") EventCatalog now supports [themes and dark mode](/blog/eventcatalog-themes-dark-mode.md). ![EventCatalog Dark Mode](/img/blogs/dark-theme.png)[View the demo](https://demo.eventcatalog.dev) Dark mode automatically detects system preferences. Users can manually switch themes using the header toggle. Their choice persists across visits and syncs across tabs. EventCatalog ships with five built-in themes: `default` (purple), `ocean` (teal), `sapphire` (blue), `sunset` (orange), and `forest` (dark green). For complete brand control, create custom themes using CSS variables in `eventcatalog.styles.css`. Custom themes are available on Starter, Scale, and Enterprise plans. ``` export default { theme: 'sapphire', }; ``` Read the [themes documentation](/docs/development/customization/themes.md) for CSS variable references and examples. *** ## Custom Tools for EventCatalog Assistant[​](#custom-tools-for-eventcatalog-assistant "Direct link to Custom Tools for EventCatalog Assistant") [Custom tools](/blog/live-data-meets-architecture-documentation.md) let you extend EventCatalog Assistant with your own integrations. ![EventCatalog Assistant Tool 1](/img/ai-assistant-tool-1.png)Calling custom tool to ask who is on call for a service Your documentation is valuable, but it only tells part of the story. With custom tools, you can ask EventCatalog "Is OrderService healthy?" or "Who's on-call for PaymentService?" and get answers based on live data from your production systems. Connect to any system you use: Datadog or Prometheus for metrics, PagerDuty or OpsGenie for on-call schedules, Kafka or RabbitMQ for queue depths. Your stack, your integrations, your data. ``` import { tool } from 'ai'; import { z } from 'zod'; export const tools = { getServiceHealth: tool({ description: 'Get the current health status of a service.', inputSchema: z.object({ serviceName: z.string(), }), execute: async ({ serviceName }) => { const health = await datadogClient.getServiceHealth(serviceName); return { status: health.status, uptime: health.uptime }; }, }), }; ``` Custom tools are available on Scale and Enterprise plans. Read the [documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/bring-your-own-tools.md) for setup and examples. *** ## Embed IcePanel Diagrams[​](#embed-icepanel-diagrams "Direct link to Embed IcePanel Diagrams") [IcePanel](https://icepanel.io/) is a tool for visualizing software architecture using the C4 model. You can now [embed IcePanel diagrams](/blog/eventcatalog-icepanel.md) directly into EventCatalog. ![Example output](/img/ice-panel.png)Embedding an IcePanel diagram in EventCatalog Use the new `` component to embed interactive C4 diagrams into any page: domains, services, messages, or custom documentation. ``` ``` Each embedded diagram includes a full-screen button for exploring complex architectures without leaving EventCatalog. *** ## Diagrams as First-Class Resources[​](#diagrams-as-first-class-resources "Direct link to Diagrams as First-Class Resources") EventCatalog 3.3.0 lets you bring custom diagrams to your documentation as [first-class, versioned resources](/blog/2026/01/09/diagrams-as-first-class-resources.md). ![Diagram page](/img/diagrams.png)Example of PlantUML diagram Your custom diagrams are now standalone resources with their own dedicated pages. Version them, link them to domains and services, and ask AI about them. **Features:** * **Versioning**: Track how your architecture evolves over time * **Version comparison**: See what changed between versions (Scale) * **Cross-references**: Link diagrams to domains, services, messages, and containers * **LLM support**: Every diagram is accessible via `.mdx` endpoints for AI tools * **Interactive controls**: Zoom, pan, and copy diagram code for better exploration Create diagrams anywhere in your catalog. Put them at the root level for system-wide diagrams or nest them within domains and services. ``` # Root level /diagrams/target-architecture/index.mdx # Nested within a domain /domains/Orders/diagrams/order-flow/index.mdx ``` Use code blocks for Mermaid or PlantUML, or use EventCatalog's built-in components like ``, ``, or ``. Read the [diagrams documentation](/docs/development/guides/diagrams/introduction.md) for more details. *** ## Domain-Level Messages[​](#domain-level-messages "Direct link to Domain-Level Messages") Domains in EventCatalog 3.7.0 can now [directly specify which messages they send and receive](/blog/domain-level-messages.md). If you practice Domain-Driven Design or think about messaging at the domain level, this update makes EventCatalog work the way you think. ``` --- id: E-Commerce version: 1.0.0 sends: - id: OrderCreated version: 1.0.0 - id: PaymentComplete receives: - id: PaymentInitiated - id: FraudDetected --- ``` Domain messages appear in the sidebar under "Publishes Messages" and "Consumes Messages". You can mix approaches. Some domains use `sends` and `receives`. Some only have services that send and receive. Both work. The [EventCatalog SDK](/docs/sdk.md) supports domain-level messages with `addEventToDomain()`, `addCommandToDomain()`, and `addQueryToDomain()`. Read the [adding messages to domains guide](/docs/development/guides/domains/creating-domains/adding-messages-to-domains.md) for setup instructions. *** ## Built-In MCP Server[​](#built-in-mcp-server "Direct link to Built-In MCP Server") Every EventCatalog instance now includes a [built-in MCP server](/blog/built-in-mcp-server.md) at `/docs/mcp/`. The MCP server gives LLMs and MCP clients ([Claude Desktop](https://www.anthropic.com/news/claude-desktop), [Cursor](https://www.cursor.com/), [Windsurf](https://windsurf.dev/), [VS Code](https://code.visualstudio.com)) direct access to your architecture documentation. Ask questions about message schemas, trace service dependencies, or analyze change impact. The AI works with the same source of truth your team uses. **Example questions:** * "What's the blast radius if I change the OrderCreated event?" * "Which services does the Payment team own?" * "Show me the schema for UserRegistered" * "Explain the checkout business flow" The MCP server includes 15 tools for querying your architecture and 9 resources for bulk data access. It requires SSR mode and a Scale license. Read the [MCP server documentation](/docs/development/ask-your-architecture/mcp-server/introduction.md) for setup and API reference. *** ## Data Products[​](#data-products "Direct link to Data Products") EventCatalog 3.8.0 introduces [data products](/blog/data-products.md) as a first-class resource type. ![Example](/assets/images/data-products-633020b2b8e252de9406a55aa9adc873.png) Data products transform raw events into analytics-ready tables. If your organization is building a data mesh or turning events into business metrics, you can now document those data products alongside your events, services, and domains. **Features:** * **Inputs and Outputs**: Document what goes into a data product and what comes out * **Contracts**: Attach data contracts (JSON Schema, ODCS YAML) to outputs * **Versioning**: Track how data products evolve over time * **Ownership**: Assign teams and users as owners * **Relationships**: Connect to services, containers, and events ``` import { writeDataProduct } from '@eventcatalog/sdk'; await writeDataProduct({ id: 'order-analytics', name: 'Order Analytics', version: '1.0.0', inputs: [ { id: 'OrderConfirmed' }, { id: 'PaymentProcessed' } ], outputs: [ { id: 'orders-db', contract: { path: 'fact-orders-contract.json', type: 'json-schema' } } ], }); ``` Data products integrate with all existing EventCatalog features: domains, sidebar navigation, discover page, node graphs, AI chat, MCP server, and schema explorer. Data products are in beta. Read the [data products documentation](/docs/data-products.md) and share feedback on [Discord](https://discord.gg/eventcatalog). *** ## EventCatalog CLI[​](#eventcatalog-cli "Direct link to EventCatalog CLI") The `@eventcatalog/sdk` package now includes a [command-line interface](/blog/eventcatalog-cli.md). Every SDK operation works directly from the command line. ``` # Get an event npx @eventcatalog/sdk --dir ./catalog getEvent "OrderCreated" # Get all events npx @eventcatalog/sdk --dir ./catalog getEvents # Create a new event npx @eventcatalog/sdk --dir ./catalog writeEvent '{ "id":"OrderCreated", "version":"1.0.0", "markdown":"# Order Created" }' ``` All output is JSON. Pipe it to `jq`, store it in environment variables, or use it in CI/CD pipelines. **Use cases:** * **CI/CD integration**: Validate events in your message broker match your catalog * **Automation scripts**: Bulk update services or domains with bash scripts * **External system integration**: Create draft events from monitoring tool webhooks * **DevOps workflows**: Manage your catalog like infrastructure-as-code Run `npx @eventcatalog/sdk list` to see all available functions. Read the [CLI documentation](/docs/cli.md) for detailed examples and API references. *** ## Visualizer Improvements[​](#visualizer-improvements "Direct link to Visualizer Improvements") ### Layout Persistence[​](#layout-persistence "Direct link to Layout Persistence") You can now [rearrange nodes in the visualizer and save those layouts](/blog/visualizer-layout-persistence.md) for your team. EventCatalog automatically arranges nodes when you add resources. Now you can drag nodes to custom positions, save the layout, and persist it for everyone. Layouts are saved to `_data/visualizer-layouts/` in your catalog. Commit them to git. Your team sees the same arrangement. When you add new resources, EventCatalog auto-positions them while keeping your saved positions for existing nodes. This works in dev mode. Run `npm run dev`, drag nodes, open the settings menu, and click Save Layout. ### Focus Mode[​](#focus-mode "Direct link to Focus Mode") [Focus Mode](/blog/focus-mode.md) makes exploring complex diagrams easier. Click any node in the visualizer to see its connections in isolation. ![Focus Mode](/assets/images/focus-mode-c86bd24d5c3d5e6a3d16417d16c00748.gif) Focus Mode shows the clicked node in the center with incoming connections on the left and outgoing connections on the right. Click any connected node to navigate through your architecture's relationships. This works across all visualizer types: services, domains, flows, entity maps, and designs. Read the [visualizer documentation](/docs/development/components/components/nodegraph.md) for more details. *** ## Summary[​](#summary "Direct link to Summary") January 2026 was a milestone month for EventCatalog. The v3 release brings improved navigation, better performance, and a simpler AI experience. New features like data products, domain-level messaging, and diagram resources expand what you can document. Visualizer improvements with layout persistence and focus mode give you more control over how your architecture is presented. The built-in MCP server and CLI open up new integration possibilities. The project vision remains the same: bring discoverability to event-driven architectures and save teams time. EventCatalog continues to evolve based on community feedback and real-world usage patterns. If you like EventCatalog, [give us a star on GitHub](https://github.com/event-catalog/eventcatalog). Join our [Discord community](https://eventcatalog.dev/discord) of over 1,200 members to share feedback and connect with other users. Thank you for being part of this journey. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [January](/blog/tags/january.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-02-01-january-2026.md) --- # Whats new in EventCatalog - July 2025 July 31, 2025 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog, here you can find what's next, how to get started, and what's coming next. * [EventCatalog Linter](#eventcatalog-linter) * [New Entity Resource and Entity Map](#new-entity-resource-and-entity-map) * [Fetching Schemas at Runtime](#fetching-schemas-at-runtime) * [Better Search Capabilities (Search v2)](#better-search-capabilities-search-v2) * [Customize Your Documentation Pages (Detail Panel)](#customize-your-documentation-pages-detail-panel) * [Updated Ubiquitous Language Explorer](#updated-ubiquitous-language-explorer) * [AsyncAPI and OpenAPI Generator Enhancements](#asyncapi-and-openapi-generator-enhancements) * [Other project improvements](#other-project-improvements) ## EventCatalog Linter[​](#eventcatalog-linter "Direct link to EventCatalog Linter") We're excited to introduce the [**EventCatalog Linter**](/blog/eventcatalog-linter.md) — a powerful tool to help you maintain consistency and quality across your architecture documentation. The linter helps catch common issues, enforces best practices, and ensures your EventCatalog stays well-organized as it grows. The linter can be integrated into your CI/CD pipelines to catch issues early and maintain documentation standards across your team. ``` $ npx @eventcatalog/linter services/user-service/index.mdx ✖ error version: Invalid semantic version format [version] (schema/valid-semver) ⚠ warning Summary is required for better documentation [summary] (best-practices/summary-required) ✖ 2 problems domains/sales/index.mdx ✖ error Referenced service "order-service" does not exist [services] (refs/resource-exists) ✖ 1 problem ✖ 3 problems (2 errors, 1 warning) 2 files checked ``` To get started with the EventCatalog Linter, you can read our [quick guide in our documentation here](/docs/development/developer-tools/eventcatalog-linter.md). ## New Entity Resource and Entity Map[​](#new-entity-resource-and-entity-map "Direct link to New Entity Resource and Entity Map") We've introduced [**Entity Resources**](/docs/development/guides/domains/entities/introduction.md) and the new [**EntityMap**](/docs/development/components/components/03a-entitymap.md) component to help you document and visualize your domain entities and their relationships. This new feature allows you to: * Document your domain entities with rich metadata * Visualize entity relationships across your architecture * Track how entities flow through your systems * Better understand your domain model ![EventCatalog Entity Map](/img/entity-map.png)[See Demo](https://demo.eventcatalog.dev/domains/orders-domain/1.0.0/entities) The Entity Map provides a visual representation of your domain entities and their relationships, making it easier to understand your domain model at a glance. Using the EntityMap component you can embed the entity map into your documentation pages and pick and choose which entities to display. ## Fetching Schemas at Runtime[​](#fetching-schemas-at-runtime "Direct link to Fetching Schemas at Runtime")
EventCatalog now supports **fetching schemas at runtime** with the new [**Remote Schemas**](/blog/remote-schema-component.md) component, allowing you to dynamically load and display schema information without needing to rebuild your catalog. This feature is particularly useful for: * Large organizations with frequently changing schemas * Dynamic schema registries * Keeping documentation in sync with live systems This capability ensures your documentation stays up-to-date with the latest schema changes without manual intervention. You can read more about the RemoteSchema component [here](/blog/remote-schema-component.md). ## Better Search Capabilities (Search v2)[​](#better-search-capabilities-search-v2 "Direct link to Better Search Capabilities (Search v2)") We've completely rebuilt our search experience with **Search v2**. The new search provides: * Faster, more accurate results * Better filtering options * Improved relevance scoring * Enhanced autocomplete * Search across all resource types including entities ![EventCatalog Search v2](/img/search-v2.png)[Try the new search](https://demo.eventcatalog.dev) The improved search makes it much easier to find the information you need across your entire EventCatalog. To get started, just update your EventCatalog with the command: ``` $ npm install @eventcatalog/core@latest ``` ## Updated Ubiquitous Language Explorer[​](#updated-ubiquitous-language-explorer "Direct link to Updated Ubiquitous Language Explorer") The **Ubiquitous Language Explorer** has been significantly improved with: * **Bigger, more prominent display** making it easier to browse your domain language * **Subdomain language integration** — terms from subdomains now appear in their parent domains * **Better organization** of domain-specific terminology * **Enhanced navigation** through your ubiquitous language ![Updated Ubiquitous Language Explorer](/img/ubiquitous-language-v2.png)[Explore the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/languagedomains) This makes it much easier for teams to discover and understand the shared language across domains and subdomains. ## AsyncAPI and OpenAPI Generator Enhancements[​](#asyncapi-and-openapi-generator-enhancements "Direct link to AsyncAPI and OpenAPI Generator Enhancements") Our [**AsyncAPI**](/integrations/asyncapi.md) and [**OpenAPI**](/integrations/openapi.md) generators have received significant updates: ### Draft Support for life cycle management[​](#draft-support-for-life-cycle-management "Direct link to Draft Support for life cycle management") You can now **mark resources as draft** during generation, allowing you to: * Tell your team that a message or endpoint is still in development * Iterate on designs without affecting live documentation * Maintain work-in-progress resources separately You can read more about the draft support [here](/docs/plugins/openapi/features.md#creating-draft-domains-services-and-messages). ### Markdown Templates[​](#markdown-templates "Direct link to Markdown Templates") The generators now support **custom markdown templates**, giving you: * Full control over generated documentation format * Ability to match your organization's documentation standards * Flexible content generation based on your needs These enhancements make the generators much more flexible and suitable for enterprise workflows. ### Other project improvements[​](#other-project-improvements "Direct link to Other project improvements") * Improved performance for large catalogs * Updated Astro Versions * New EventCatalog SDK version to support Entities ## What's coming in August?[​](#whats-coming-in-august "Direct link to What's coming in August?") In August, we are focused on [EventCatalog Studio](https://eventcatalog.studio/). We are working on a visual interface for managing your EventCatalog, making it even easier for non-technical team members to contribute to your documentation. You can sign up for the early access release [here](https://eventcatalog.studio). We are also working on **notifications**. These will be webhook notifications you can setup and listen to when things in your catalog change. Examples of these are schema changes, breaks, new versions, etc. Usecase's include: * Teams getting notified when a new version of a schema is published * Trigger contract tests or infustructure when schemas change * Provision new infrastructure when a new version of a service is published * Trigger a build when a new version of a service is published If you have any questions or want to join our community of over 1200 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [July](/blog/tags/july.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-07-31-july-2025.md) --- # Whats new in EventCatalog - June 2025 June 30, 2025 · 8 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog, here you can find what’s next, how to get started, and what’s coming next. * [Authentication and Role Based Access Control](#authentication-and-role-based-access-control) * [Domain Integration Map](#domain-integration-map) * [EventCatalog GitHub Action](#eventcatalog-github-action) * [EventCatalog MCP 1.0 release](#eventcatalog-mcp-10-release) * [EventCatalog Snippets](#introducing-eventcatalog-snippets) * [PlantUML Support](#plantuml-support) * [AWS Glue Schema Registry integration](#aws-glue-schema-registry-integration) * [Other project improvements](#other-project-improvements) ## Authentication and Role Based Access Control[​](#authentication-and-role-based-access-control "Direct link to Authentication and Role Based Access Control") We have introduced **Authentication and Role Based Access Control** to EventCatalog. This allows you to secure your EventCatalog instance and control access to your resources. [YouTube video player](https://www.youtube.com/embed/OVbXNP0Ns_U?si=TagMKL49ZD_G_HYE) EventCatalog now provides [secure authentication](/docs/development/authentication/introduction.md) to control access to your documentation. Whether you're a small team getting started or a large enterprise with complex identity requirements, EventCatalog's flexible authentication system grows with your needs. ![EventCatalog Authentication](/img/auth.png)[Get started with EventCatalog Authentication](/docs/development/authentication/introduction.md) To get started with authentication, you can read our [quick guide in our documentation here](/docs/development/authentication/introduction.md). ## Domain Integration Map[​](#domain-integration-map "Direct link to Domain Integration Map") We are excited to introduce the [Domain Integration Map](https://demo.eventcatalog.dev/visualiser/domain-integrations) — a powerful new visualizer designed to give you a clear view of how messages flow across domain boundaries in your event-driven architecture. This feature highlights all messages that are produced or consumed between domains, helping you instantly spot integration events and understand cross-domain communication at a glance. ![EventCatalog Domain Integration Map](/img/domain-integration-map.png)[View the demo](https://demo.eventcatalog.dev/visualiser/domain-integrations) If you're building systems using domain-driven design (DDD) and event-driven architecture (EDA), this should make it much easier to track message usage and reduce the time spent mapping interactions. The new page can be seen in EventCatalog at `/visualiser/domain-integrations` (see demo [here](https://demo.eventcatalog.dev/visualiser/domain-integrations)). ## EventCatalog GitHub Action[​](#eventcatalog-github-action "Direct link to EventCatalog GitHub Action") The EventCatalog GitHub action is a powerful tool that helps you catch issues early in your pull requests, ensuring your event-driven architecture stays healthy, aligned and governed. [YouTube video player](https://www.youtube.com/embed/xAQ20eAfKsI?si=VPp89tP6w05fKAit) The EventCatalog Action has the context of your EventCatalog, and can help you identify issues with producers, consumers, messages and much more. The action brings AI-powered insight into your Git workflows. It uses large language models (LLMs) to automatically review changes to your EventCatalog, helping you catch issues early—before they reach production (you can pick your model and provider). Think of it as a smart assistant for your pull requests. It doesn't just lint code—it understands the implications of your changes. You can learn more and how to get started in our release blog post [here](/blog/github-actions.md). ## EventCatalog MCP 1.0 release[​](#eventcatalog-mcp-10-release "Direct link to EventCatalog MCP 1.0 release") You can now connect any MCP Client (e.g Cursor, Claude) to your EventCatalog instance. Version 1.0 introduces new MCP tools and features, including: * Get resources (domains, services, messages, etc) * Find producers and consumers for a given message * Create flows based on your business requirements * Review schema changes * And much more. **When it comes to AI LLMs or Agents, context is key.** EventCatalog let's you document domains, models, messages, producers and consumers and much more. Using the MCP client, this context is given to your LLM's providing your models with the context they need to understand your architecture and domains. ![EventCatalog MCP](/img/mcp.png)[Get started](/docs/development/ask-your-architecture/mcp-server/introduction.md) With the EventCatalog MCP server you can give models the context they need to understand your architecture and domains. The best way to try it out is to install the MCP server and connect it to your EventCatalog instance. You can get get started with the MCP in our [documentation here](/docs/development/ask-your-architecture/mcp-server/introduction.md). ## Introducing EventCatalog Snippets[​](#introducing-eventcatalog-snippets "Direct link to Introducing EventCatalog Snippets") Keeping your documentation DRY just got easier. With [EventCatalog Snippets](/docs/development/components/snippets.md), you can now reuse markdown and variables across your EventCatalog documentation — whether it's domains, services, or events. Instead of duplicating content, simply define it once and import it wherever you need it. This is perfect for maintaining consistent, centralized information across your docs. And with variable support, you can easily customize shared content without repetition. To get started with snippets, you can read our [quick guide in our documentation here](/docs/development/components/snippets.md). ## PlantUML Support[​](#plantuml-support "Direct link to PlantUML Support") We have added support for PlantUML to EventCatalog. This allows you to create diagrams and visualizations of your architecture using PlantUML. The new `plantuml` code block allows you to define PlantUML diagrams in your documentation. ```` ```plantuml @startuml !define Table(name,desc) class name as "desc" << (T,#E5E7EB) >> !define PK(x) x !define FK(x) x ' ===== Core Tables ===== Table(Customers, "Customers") { PK(customerId): UUID firstName: VARCHAR lastName: VARCHAR email: VARCHAR phone: VARCHAR dateRegistered: TIMESTAMP } Table(Orders, "Orders") { PK(orderId): UUID FK(customerId): UUID orderDate: TIMESTAMP status: VARCHAR totalAmount: DECIMAL } Table(Products, "Products") { PK(productId): UUID name: VARCHAR description: TEXT price: DECIMAL stockQuantity: INT } Table(OrderItems, "Order Items") { PK(id): UUID FK(orderId): UUID FK(productId): UUID quantity: INT unitPrice: DECIMAL } Table(Payments, "Payments") { PK(paymentId): UUID FK(orderId): UUID amount: DECIMAL method: VARCHAR status: VARCHAR paidAt: TIMESTAMP } Table(InventoryEvents, "Inventory Events") { PK(eventId): UUID FK(productId): UUID eventType: VARCHAR quantityChange: INT eventTime: TIMESTAMP } Table(Subscription, "Subscriptions") { PK(subscriptionId): UUID FK(customerId): UUID plan: VARCHAR status: VARCHAR startDate: TIMESTAMP endDate: TIMESTAMP } ' ===== Relationships ===== Customers ||--o{ Orders : places Orders ||--o{ OrderItems : contains Products ||--o{ OrderItems : includes Orders ||--o{ Payments : paid_by Products ||--o{ InventoryEvents : logs Customers ||--o{ Subscription : subscribes @enduml ```_ ```` This will render the following diagram: ![EventCatalog PlantUML](/img/plantuml.png)[View the demo](/docs/development/components/plantuml.md) Using plantuml you can now bring more diagrams and context to your documentation. You can read more about it in our [documentation here](/docs/development/components/plantuml.md) ## AWS Glue Schema Registry integration[​](#aws-glue-schema-registry-integration "Direct link to AWS Glue Schema Registry integration") [YouTube video player](https://www.youtube.com/embed/cUQDdisz1wg?si=s8ZP0JablhU87Kvd) We have added support for [AWS Glue Schema Registry](/integrations/aws-glue-registry.md) to EventCatalog. This allows you to pull and sync your schemas from AWS Glue Schema Registry into EventCatalog. Schema registries are great, but they lack meaning, context, business context, history and much more. This new integration let's you document your schemas in ways that aren't possible with a schema registry. Providing you and your teams with more information, visualizations, AI capabilities and much more. You can import all your schemas, or just the ones you want to sync and use filtering to map them to your producers and consumers. To get started with the AWS Glue Schema Registry integration, you can read our [quick guide in our documentation here](/docs/plugins/aws-glue-registry/intro.md). ### Other project improvements[​](#other-project-improvements "Direct link to Other project improvements") * [EventCatalog now supports SSR mode](/docs/development/authentication/enabling-authentication.md#enable-eventcatalog-server-side-rendering-ssr) * [Configure EventCatalog with your environments](/docs/api/config.md#environment) * Faster build times (20%-50% reduced output size) * Ability to walk through EventCatalog Flows([see demo](https://demo.eventcatalog.dev/visualiser/flows/PaymentFlow/1.0.0)) * SchemaViewer now has search and expand features([see demo](https://demo.eventcatalog.dev/docs/events/InventoryAdjusted/1.0.1#architecture-diagram)) * All headings are now clickable and linkable * Sidebar now has better search, and collapsible buttons ## What’s coming in July?[​](#whats-coming-in-july "Direct link to What’s coming in July?") In June, we’re releasing **more integrations for EventCatalog**, including support for **Azure messaging services, Azure Schema Registry,** and **Apicurio Schema Registry**. These integrations will allow you to add semantic meaning to your schemas and keep them in sync with your documentation—making it easier for teams to find the information they need and maintain a shared understanding of your architecture. Many teams use EventCatalog as a **design > implement > document** workflow. We’re exploring ways to make drafting messages, services, and resources directly in EventCatalog easier—and we expect to release the first version of this feature in July. Lastly, we know many of you are eagerly waiting for [**EventCatalog Studio**](https://eventcatalog.studio/). We’re still hard at work on it and aim to release an initial version soon. Stay tuned! If you have any questions or want to join our community of over 1150 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [June](/blog/tags/june.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-06-30-june-2025.md) --- # Introducing the EventCatalog Linter July 4, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce the release of the [EventCatalog Linter](/docs/development/developer-tools/eventcatalog-linter.md), a comprehensive validation tool that helps you maintain high-quality, consistent documentation for your architecture. The EventCatalog Linter validates your frontmatter schemas and resource references, catching issues early in your development process—before they impact your team or reach production. ## What is the EventCatalog Linter?[​](#what-is-the-eventcatalog-linter "Direct link to What is the EventCatalog Linter?") The EventCatalog Linter is a comprehensive validation tool designed specifically for EventCatalog projects. It performs two critical types of validation: 1. **Documentation Validation** - Ensures your frontmatter follows the correct structure and data types 2. **Reference Validation** - Verifies that all resource references actually exist in your catalog Think of it as a quality gate for your documentation, similar to how ESLint works for JavaScript code. **What it validates:** * ✅ Required fields are present (id, name, version) * ✅ Field types are correct (strings, arrays, objects) * ✅ Semantic versions follow proper format (1.0.0, 2.1.3-beta) * ✅ Referenced services, events, domains, and entities exist * ✅ Version-specific references are valid * ✅ Email addresses are properly formatted * ✅ Owners (users/teams) exist in your catalog ## Why you need the EventCatalog Linter[​](#why-you-need-the-eventcatalog-linter "Direct link to Why you need the EventCatalog Linter") As your EventCatalog grows, maintaining consistency and accuracy becomes increasingly challenging. Without proper validation: * **Broken references** can lead to 404 errors and poor user experience * **Invalid frontmatter** can cause build failures or display issues * **Inconsistent documentation** reduces trust in your architecture documentation * **Manual reviews** are time-consuming and error-prone The EventCatalog Linter solves these problems by automating validation and providing immediate feedback. ## Key Features[​](#key-features "Direct link to Key Features") ### 🎯 Configurable Rules[​](#-configurable-rules "Direct link to 🎯 Configurable Rules") Create a `.eventcatalogrc.js` file to customize validation rules for your team's workflow: ``` // .eventcatalogrc.js module.exports = { rules: { // Schema validation rules 'schema/required-fields': 'error', 'schema/valid-semver': 'error', 'schema/valid-email': 'warn', // Reference validation rules 'refs/owner-exists': 'error', 'refs/valid-version-range': 'error', // Best practice rules 'best-practices/summary-required': 'warn', 'best-practices/owner-required': 'error', }, // Ignore certain paths ignorePatterns: ['**/archived/**', '**/drafts/**'], // Override rules for specific file patterns overrides: [ { files: ['**/experimental/**'], rules: { 'best-practices/owner-required': 'off' } } ] }; ``` ### 📦 Flexible Version Support[​](#-flexible-version-support "Direct link to 📦 Flexible Version Support") The linter supports various version patterns for resource references: ``` # Exact versions version: 1.0.0 # Latest version version: latest # Semver ranges version: ^1.0.0 # Compatible with 1.x.x version: ~1.2.0 # Compatible with 1.2.x # X-pattern matching version: 0.0.x # Matches 0.0.1, 0.0.5, etc. ``` ### 🎨 Clear Error Reporting[​](#-clear-error-reporting "Direct link to 🎨 Clear Error Reporting") The linter provides ESLint-inspired output with descriptive rule names: ``` $ npx @eventcatalog/linter services/user-service/index.mdx ✖ error version: Invalid semantic version format [version] (schema/valid-semver) ⚠ warning Summary is required for better documentation [summary] (best-practices/summary-required) ✖ 2 problems domains/sales/index.mdx ✖ error Referenced service "order-service" does not exist [services] (refs/resource-exists) ✖ 1 problem ✖ 3 problems (2 errors, 1 warning) 2 files checked ``` ## Getting Started[​](#getting-started "Direct link to Getting Started") Getting started with the EventCatalog Linter is simple: ### 1. Run the Linter[​](#1-run-the-linter "Direct link to 1. Run the Linter") Start linting your EventCatalog immediately with npx: ``` npx @eventcatalog/linter ``` ### 2. Configure Rules (Optional)[​](#2-configure-rules-optional "Direct link to 2. Configure Rules (Optional)") Create a `.eventcatalogrc.js` file to customize validation: ``` module.exports = { rules: { 'best-practices/summary-required': 'warn', 'refs/owner-exists': 'error' }, ignorePatterns: ['**/drafts/**'] }; ``` ### 3. Integrate with CI/CD[​](#3-integrate-with-cicd "Direct link to 3. Integrate with CI/CD") Add to your CI/CD pipeline for automated validation: ``` # GitHub Actions name: EventCatalog Lint on: [push, pull_request] jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '18' - run: npx @eventcatalog/linter --fail-on-warning ``` ## Available Rules[​](#available-rules "Direct link to Available Rules") The linter includes 10 configurable rules across three categories: | Rule Name | Description | Default | | --------------------------------- | ------------------------------------- | -------------- | | **Schema Validation** | | | | `schema/required-fields` | Validates required fields are present | `error` | | `schema/valid-type` | Validates field types are correct | `error` | | `schema/valid-semver` | Validates semantic version format | `error` | | `schema/valid-email` | Validates email address format | `error` | | **Reference Validation** | | | | `refs/owner-exists` | Ensures referenced owners exist | `error` | | `refs/valid-version-range` | Validates version references | `error` | | `refs/resource-exists` | Ensures referenced resources exist | Always enabled | | **Best Practices** | | | | `best-practices/summary-required` | Requires summary for documentation | `error` | | `best-practices/owner-required` | Requires at least one owner | `error` | ## Team Workflow Examples[​](#team-workflow-examples "Direct link to Team Workflow Examples") ### Development Team Configuration[​](#development-team-configuration "Direct link to Development Team Configuration") ``` // Relaxed rules for development module.exports = { rules: { 'best-practices/summary-required': 'warn', 'best-practices/owner-required': 'warn', 'refs/owner-exists': 'warn', }, ignorePatterns: ['**/drafts/**', '**/experimental/**'] }; ``` ### Production Configuration[​](#production-configuration "Direct link to Production Configuration") ``` // Strict rules for production module.exports = { rules: { 'schema/required-fields': 'error', 'refs/owner-exists': 'error', 'best-practices/summary-required': 'error', 'best-practices/owner-required': 'error', } }; ``` ## What's Next?[​](#whats-next "Direct link to What's Next?") The EventCatalog Linter is the first step in our vision to provide comprehensive quality tools for architecture documentation. Future releases will include: * Additional validation rules based on community feedback * Integration with popular CI/CD platforms * Custom rule development capabilities * Performance optimizations for large catalogs ## Summary[​](#summary "Direct link to Summary") The EventCatalog Linter brings quality assurance to your architecture documentation. By catching issues early and maintaining consistency, it helps your team build trust in your documentation and reduces time spent on manual reviews. **Key benefits:** * 🔍 **Early detection** - Catch issues before they reach production * ⚙️ **Configurable** - Customize rules for your team's workflow * 🚀 **Fast** - Efficiently scan large catalogs * 🎯 **Comprehensive** - Validates all EventCatalog resource types * 🔧 **CI/CD ready** - Easy integration with existing pipelines To get started, simply run: ``` npx @eventcatalog/linter ``` You can find the [complete documentation on our website](/docs/development/developer-tools/eventcatalog-linter.md). ## FAQ[​](#faq "Direct link to FAQ") **Q: Does the linter work with all EventCatalog versions?** A: The linter is designed to work with EventCatalog v2.x and later. It validates all current resource types including domains, services, events, commands, queries, flows, entities, users, and teams. **Q: Can I customize the validation rules?** A: Yes! Create a `.eventcatalogrc.js` file to configure rule severity levels, ignore patterns, and file-specific overrides. Each rule can be set to `error`, `warn`, or `off`. **Q: How do I integrate with my CI/CD pipeline?** A: Add `npx @eventcatalog/linter` to your CI/CD scripts. Use the `--fail-on-warning` flag to treat warnings as errors in production environments. **Q: What if I have draft or experimental content?** A: Use ignore patterns in your configuration to skip validation for specific paths like `**/drafts/**` or `**/experimental/**`. If you have any questions, feature ideas, or would like to discuss the EventCatalog Linter with your team, [join our Discord community](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Linter](/blog/tags/linter.md) * [Quality](/blog/tags/quality.md) * [CI/CD](/blog/tags/ci-cd.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-07-04-introducing-eventcatalog-linter.md) --- # EventCatalog March 2025 update March 31, 2025 · 12 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog, here you can find what’s next, how to get started, and what’s coming next. EventCatalog community continues to grow ❤️, now we have 1,097 [Discord](https://discord.com/invite/3rjaZMmrAm) members, 2.1k Stars on GitHub, 820 new catalogs have been created in March and 11.2k catalogs built into production. EventCatalog continues to grow every month, and we are on track with open source sustainability. EventCatalog sponsors [OSO](https://oso.sh/) and [Gravitee](https://www.gravitee.io/) continue their sponsorship for the project (thank you!) 🙏. This sponsorship helps my goal towards open source sustainability. EventCatalog is free to use and open source, if you want to support the project checkout the t[iers on GitHub](https://github.com/sponsors/event-catalog) or contact me directly at `dave@eventcatalog.dev` , I really appreciate any support ❤️ In March we introduced tiered pricing, EventCatalog MCP Server, Custom nodes to Flows, New Navigation Bar, More customization options, new components and many features were introduced. * [Introducing EventCatalog Tiered Pricing](#introducing-eventcatalog-tiered-pricing) * [Introducing Architecture Overviews](#introducing-new-architecture-overviews) * [Introducing EventCatalog MCP Server](#introducing-eventcatalog-mcp-server) * [Introducing custom nodes to flows](#introducing-custom-nodes-to-flows) * [Introducing MessageTable - Ability to see all messages a given domain](#introducing-messagetable---ability-to-see-all-messages-a-given-domain) * [Resource Groups with EventCatalog](#resource-groups-with-eventcatalog) * [Improved Search results in EventCatalog](#improved-search-results-in-eventcatalog) * [New navigation bar for your documentation](#new-navigation-bar-for-your-documentation) * [Customize your application sidebar](#customize-your-application-sidebar) * [Project improvements](#project-improvements) * [New talk - Managing Complexity with Event-Driven Architecture](#new-talk---managing-complexity-with-event-driven-architecture) * [What’s coming in April?](#whats-coming-in-april) In this blog post we will dive deeper into features and improvements that were released in March, and how you can get started. ## Introducing EventCatalog Tiered Pricing[​](#introducing-eventcatalog-tiered-pricing "Direct link to Introducing EventCatalog Tiered Pricing") In March we introduced [tiered pricing to EventCatalog](https://www.eventcatalog.dev/pricing), these plans include, Community Edition, Starter Plan, Scale Plan and Enterprise Plan, our aim is to help companies when they need it, and scale governance and documentation with them along their journey. After years of working with event-driven architecture, I’ve come to see it as a journey that many companies undertake. It often begins with simple broker-based pub/sub patterns, which are easy to understand and manage early on. At this stage, governance isn't a major concern. But as the architecture scales across the organization, complexity grows—and with it, the need for stronger governance and structure becomes increasingly clear. When you go from 10 events to 1000s of events, maintenance becomes hard and people fall into the same common mistakes around versioning strategy, lack of documentation, and wasted time trying to figure all this out. ([I have a talk about all this!](https://www.youtube.com/watch?v=hvGuqHp051c)) The new EventCatalog plans are designed to support you at every stage of your event-driven journey, scaling governance and documentation as your needs grow. Begin with the Community edition to get up and running quickly. As your requirements expand, the Start plan offers additional capabilities like custom documentation and conversational architecture insights. When it's time to scale your architecture, the Scale plan introduces automation and advanced features to streamline your workflow. And for organizations operating at mass scale, our Enterprise plan provides the tools and flexibility needed to manage complexity with confidence. You can [find the plans here](https://www.eventcatalog.dev/pricing) and features that are included in each tier, if you have any questions feel free to reach out, happy to help. ## Introducing new Architecture Overviews[​](#introducing-new-architecture-overviews "Direct link to Introducing new Architecture Overviews") Architecture pages were released into EventCatalog. This is another way to quickly visualize and understand what messages are doing to and from your services and domains. The architecture diagrams let you drill down into various different levels of information. Starting at domains, you can click into your services to see detailed information about what messages are sent/received from that service, and finally clicking on the message will take you to the documentation and schema for that message. ![EventCatalog Sidebar](/img/blogs/march-2025-update/architecture.png)[View the demo](https://demo.eventcatalog.dev/architecture/docs/services?serviceIds=InventoryService,OrdersService,NotificationService,ShippingService\&domainId=Orders\&domainName=Orders) Using the filters you can quickly filter by message type, or search for domains, services and messages you are interested in. If you are interested to learn more you can w[atch the video here](https://www.linkedin.com/posts/david-boyne_made-some-changes-to-eventcatalog-this-week-activity-7303718866885496833-1ln6/?utm_source=share\&utm_medium=member_desktop\&rcm=ACoAAALFS9EBtEJmVHEiFArzaU8v3mZA_5JcpTk) or [view the demo](https://demo.eventcatalog.dev/architecture/docs/services?serviceIds=InventoryService,OrdersService,NotificationService,ShippingService\&domainId=Orders\&domainName=Orders). ## Introducing EventCatalog MCP Server[​](#introducing-eventcatalog-mcp-server "Direct link to Introducing EventCatalog MCP Server") You can now use EventCatalog inside your IDE or any MCP client. This brings a huge amount of value to EventCatalog for your teams and developers. Your team can now talk to your catalog of information in the client of their choice (e.g IDE), and use that context to create code , get schemas or understand their architecture. [YouTube video player](https://www.youtube.com/embed/rTgNDPCZSdo?si=rlFNXoMeFVtMIugv) Teams waste a huge amount of time trying to find the information they need. In event-driven architectures this problem scales fast. Being able to quickly find producers/consumers, schemas, messages, and context can save a huge amount of time, and now using the MCP server I believe developers can save even more time. As developers are writing and exploring ideas, they can talk directly to your EventCatalog to get the information they need, and write code based on the context of your architecture. This is the first release of this feature, and we look to add more value in April. If you are interested and want to try the feature you [can read more in the release blog post](https://www.eventcatalog.dev/blog/eventcatalog-mcp). ## Introducing custom nodes to flows[​](#introducing-custom-nodes-to-flows "Direct link to Introducing custom nodes to flows") EventCatalog gives you the ability to document business workflows ([EventCatalog Flows](https://www.eventcatalog.dev/features/business-flows)). You can use your resource inventory (services and messages) and create business workflows. These workflows can help your organization understand and know what is happening in your architecture. ![EventCatalog Sidebar](/img/blogs/march-2025-update/custom-nodes.png)[View the demo](https://demo.eventcatalog.dev/visualiser/flows/SubscriptionRenewed/1.0.0) Flows can be used to help you get more value from EventCatalog. Think of a feature you have, from A to Z, and you want to document what happens and the events, messages, services, external systems that it interacts with. This is what flows help you document. In March we released the ability to add **any custom node** to your flow. To give you examples, you can now document schedules, decisions, timers, processors… anything you want! Using custom nodes you can now document any business flow you want in EventCatalog and embed these flows directly into your documentation [using the Flow component](https://www.eventcatalog.dev/docs/development/components/components/flow). [You can get started reading the documentation](https://www.eventcatalog.dev/docs/development/guides/flows/flow-nodes) or [view the demo](https://demo.eventcatalog.dev/visualiser/flows/SubscriptionRenewed/1.0.0). ## Introducing MessageTable - Ability to see all messages a given domain[​](#introducing-messagetable---ability-to-see-all-messages-a-given-domain "Direct link to Introducing MessageTable - Ability to see all messages a given domain") Some users want to see all the messages that belong to a domain, so we introduced a new component called [MessageTable](https://www.eventcatalog.dev/docs/development/components/components/message-table). ![EventCatalog Sidebar](/img/blogs/march-2025-update/messagetable.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3) The new message table component will list all messages in a domain or service on your documentation page and give your users the ability to quickly search for messages they are interested in and filter them by queries, commands or events. [To get started you can read the documentation](https://www.eventcatalog.dev/docs/development/components/components/message-table) or [view the demo](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3). ## Resource Groups with EventCatalog[​](#resource-groups-with-eventcatalog "Direct link to Resource Groups with EventCatalog") We introduced the idea of [Resource Groups](https://www.eventcatalog.dev/docs/development/guides/customize-sidebars/documentation-sections), this gives you the ability to document and group resources in EventCatalog in ways that EventCatalog wasn’t to before. With resource groups you can also define your own documentation sections in your sidebars. ![EventCatalog Sidebar](/img/blogs/march-2025-update/resourcegroup.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3) This feature just gives you more flexibility if you need it. [You can read the documentation to get started.](https://www.eventcatalog.dev/docs/development/guides/customize-sidebars/documentation-sections) ## Improved Search results in EventCatalog[​](#improved-search-results-in-eventcatalog "Direct link to Improved Search results in EventCatalog") Thanks to our community we now have better search results in EventCatalog. Using the search bar in EventCatalog will now return better results for your users, giving them the ability to quickly find what they need. AsyncAPI and OpenAPI documents are also added to the search results. ![EventCatalog Sidebar](/img/blogs/march-2025-update/search.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3) ## New navigation bar for your documentation[​](#new-navigation-bar-for-your-documentation "Direct link to New navigation bar for your documentation") In March we released a new navigation bar option to help organize your documentation. With this new navigation bar you can quickly find the information you need, use custom badges to highlight resources and also view OpenAPI and AsyncAPI specifications. ![EventCatalog Sidebar](/img/blogs/march-2025-update/new-nav.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3) To get started you can [read the documentation](https://www.eventcatalog.dev/docs/development/customization/customize-sidebars/documentation-sidebar), to learn how to opt into this navigation bar. ## Customize your application sidebar[​](#customize-your-application-sidebar "Direct link to Customize your application sidebar") You can now pick and choose which features are shown in your application side bar, giving you more flexibility for your catalog and documentation. ![EventCatalog Sidebar](/img/blogs/march-2025-update/application-sidebar.png) [To get started you can read the documentation](https://www.eventcatalog.dev/docs/development/customization/customize-sidebars/application-sidebar) ## Project improvements[​](#project-improvements "Direct link to Project improvements") * We moved over to MDX files for EventCatalog, for faster interactions with EventCatalog * [Custom landing pages now support components](https://www.eventcatalog.dev/docs/development/guides/custom-pages/introduction) * We added [ResourceLink](https://www.eventcatalog.dev/docs/development/components/components/resource-link) and [Link](https://www.eventcatalog.dev/docs/development/components/components/link) components to help you create links in your catalog * [Tile component](https://www.eventcatalog.dev/docs/development/components/components/tiles), now supports colors and icons * [Flows now have a sidebar to help you quickly see flow owners, versions and changelogs.](https://demo.eventcatalog.dev/docs/flows/SubscriptionRenewed/1.0.0) * [EventCatalog Studio](https://eventcatalog.studio/) still on target for initial release in Q2 2025. * OpenAPI Generator 5.0.2 is now out. [Adding `httpMethodsToMessages` property](https://www.eventcatalog.dev/docs/plugins/openapi/plugin-configuration) to the OpenAPI Generator plugin. Map HTTP methods to message types easier in EventCatalog. ## Upgrade your EventCatalog[​](#upgrade-your-eventcatalog "Direct link to Upgrade your EventCatalog") To get the most of all the new features, we recommend upgrading to the latest version of EventCatalog. ``` npm install @eventcatalog/core@latest ``` ## New Talk - Managing Complexity with Event-Driven Architecture[​](#new-talk---managing-complexity-with-event-driven-architecture "Direct link to New Talk - Managing Complexity with Event-Driven Architecture") Ealier in the year I gave a new talk about complexity with event-driven architecture, and how domain-driven design can help you manage complexity. If you are interested in learning more about event-driven architecture, and how to manage complexity, you can watch the talk below. [YouTube video player](https://www.youtube.com/embed/HpFWRpyyvrk?si=8nm1VDSXpvCNITdv) ## What’s coming in April?[​](#whats-coming-in-april "Direct link to What’s coming in April?") In April we are releasing the ability to add custom documentation to EventCatalog, this gives you the ability to bring your own docs to your catalog (e.g Runbooks, Product pages etc), this gives you flexibility on what you want to document, whilst using EventCatalog components to enhance it. We will also be adding custom docs to EventCatalog Chat and MCP server. We also want to release the first version of our Schema API. This will let you call EventCatalog as an API to get your schemas, which could be useful for contract testing, validation and much more. [We are looking to follow the xRegistry specification for this](https://xregistry.io/). Introducing the ability to add drafts to EventCatalog and letting teams use EventCatalog in early phases of your journey. Documenting your thoughts and getting feedback from your teams. We are aiming to get the Confluent schema registry plugin released, giving you the ability to pull in schemas from Confluent into EventCatalog. We are exploring runtime components, giving you the ability to write your own runtime components/blocks on your page to extend the catalog into more personal use cases (e.g self service for producers/consumers, datadog integrations). We want to spend more time on Event [EventCatalog Studio](https://eventcatalog.studio/). Giving you the ability to do all of this with a custom UI, and design your EventCatalog. As normal, things can change but this is the direction we are heading. If you have any questions or want to join our community of over 1100 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-03-31-march-2025.md) --- # Whats new in EventCatalog - March 2026 March 31, 2026 · 9 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog. March was a big month. We shipped governance capabilities, field-level intelligence, a redesigned schema explorer, a new Miro integration, AI-assisted flow creation, and upgraded the entire platform to Astro 6. * [Architecture Change Detection](#architecture-change-detection) * [Schema Insights - Trace Fields Across Your Architecture](#schema-insights---trace-fields-across-your-architecture) * [Field-Level Usage Tracking](#field-level-usage-tracking) * [Message Usage Examples](#message-usage-examples) * [Flow Wizard Skill](#flow-wizard-skill) * [OpenAPI Consumer Services](#openapi-consumer-services) * [EventCatalog Miro App v2](#eventcatalog-miro-app-v2) * [Astro 6 and Platform Upgrades](#astro-6-and-platform-upgrades) * [Other project improvements](#other-project-improvements) ## Architecture Change Detection[​](#architecture-change-detection "Direct link to Architecture Change Detection") A service starts consuming your `OrderPlaced` event. No ticket. No Slack message. No email. You find out weeks later when something breaks downstream. **Architecture Change Detection turns your catalog into an active monitoring system.** It compares your EventCatalog across git branches, detects when services start or stop producing or consuming messages, and notifies your teams automatically. You define governance rules in a `governance.yaml` file at the root of your catalog. Each rule specifies what to watch, what conditions to trigger on, and where to send notifications. This is designed for **service owners** who want to know the moment someone starts depending on their messages, **platform teams** who need to catch breaking changes before a PR merges, and **operations teams** who want an audit trail of every dependency change. We also added the `schema_changed` and `message_deprecated` governance triggers, and support for a `fail` action type so you can gate CI/CD pipelines on governance rules. You can read more about Architecture Change Detection in our [release blog post here](/blog/architecture-change-detection.md). ## Schema Insights - Trace Fields Across Your Architecture[​](#schema-insights---trace-fields-across-your-architecture "Direct link to Schema Insights - Trace Fields Across Your Architecture") As your architecture grows, schemas multiply. An `OrderPlaced` event gains fields. A `PaymentProcessed` event reuses some of those same fields. A `CustomerUpdated` command redefines one of them with a slightly different type. Nobody notices until a consumer breaks. **Schema Insights indexes every field from every message schema in your architecture and makes them searchable, traceable, and verifiable from a single page.** [YouTube video player](https://www.youtube.com/embed/PQIBATgtuKs?si=TagMKL49ZD_G_HYE) Available at `/schemas/fields` in your catalog, Schema Insights gives you: * **Field search and filtering** across every message in your architecture * **Type conflict detection** that flags when the same field name has different types across messages * **Interactive traceability graphs** showing how a field connects to messages and services * A **redesigned Schema Explorer** with a modern layout and dark mode support ![Schema Insights table view](/img/blogs/field-search.png)[Read the full release post](/blog/schema-fields-explorer.md) You can read more about Schema Insights in our [release blog post here](/blog/schema-fields-explorer.md). ## Field-Level Usage Tracking[​](#field-level-usage-tracking "Direct link to Field-Level Usage Tracking") EventCatalog already tells you which services consume a message. **Now it can also tell you which specific fields they use.** ![Field Usage view showing which fields each consumer depends on](/img/blogs/field-usage-2.png) When consumers declare which fields they depend on, the message page gains a **Field Usage** view showing every schema property alongside the services that use it. This makes it much easier to understand the blast radius of a schema change. If you're about to remove a field or change its type, you can see exactly who depends on it. Field usage is opt-in. Add a `fields` array to any entry in the `receives` pointer of a service, and EventCatalog surfaces it automatically. You can read more about field-level usage in our [release blog post here](/blog/field-usage.md). ## Message Usage Examples[​](#message-usage-examples "Direct link to Message Usage Examples") A schema tells you the **shape** of a message. An example shows you **how** it can be used. Schemas are necessary. Examples are what people actually reach for when they're writing a consumer, debugging a failed event, or onboarding to a service they've never touched. ![Message Usage Examples in Schema Explorer](/img/blogs/message-examples.png)[Start adding examples to your messages](/docs/development/guides/messages/common/examples.md) Drop JSON, YAML, XML, Protobuf, or any format your messages use alongside your schemas. EventCatalog renders them with syntax highlighting under a new **Usage Examples** tab in the Schema Explorer. Each example can carry metadata to describe the scenario it represents, a standard order, an international order, a failed payment. You can read more about message examples in our [release blog post here](/blog/message-usage-examples.md). ## Flow Wizard Skill[​](#flow-wizard-skill "Direct link to Flow Wizard Skill") [Flows](/docs/development/guides/flows/introduction.md) are one of the most popular resources documented in EventCatalog. They let you document end-to-end business workflows, giving your team the bigger picture of how everything connects. But creating them meant writing YAML by hand. ![EventCatalog flow visualization](/img/blogs/2.5.0/flows2.png)[See a flow in action](https://demo.eventcatalog.dev/visualiser/flows/SubscriptionRenewed/1.0.0) **The new `flow-wizard` skill lets you describe your workflow in plain language, and your AI agent builds the flow for you.** It scans your existing catalog resources, walks you through each stage of the workflow, and cross-references services, events, and commands you already have. Whether you're a product owner, architect, or developer, if you can describe a business workflow you can now document it. No YAML knowledge required. You can read more about the flow wizard in our [release blog post here](/blog/flow-wizard.md). ## OpenAPI Consumer Services[​](#openapi-consumer-services "Direct link to OpenAPI Consumer Services") Understanding who owns an API is useful. **Understanding who consumes it is what makes the documentation actually actionable.** [YouTube video player](https://www.youtube.com/embed/ePlCqnsRVBY) The [OpenAPI generator](/docs/plugins/openapi/intro.md) now supports a `consumers` array on each service configuration. Each entry defines a downstream service that calls endpoints produced by that API, with optional route-based filtering to scope which endpoints it cares about. ![Visualization showing consumer services for API endpoints](/img/blogs/openapi-with-producers.png) This means your architecture diagrams and documentation now show the full producer-consumer picture for your REST APIs, not just the owner. You can read more about OpenAPI consumer services in our [release blog post here](/blog/openapi-consumer-services.md). ## EventCatalog Miro App v2[​](#eventcatalog-miro-app-v2 "Direct link to EventCatalog Miro App v2") Every team has the same problem. The architecture lives in one place and the diagrams live in another. The Miro board from the last event storming session doesn't match what's actually running. **The [EventCatalog Miro App v2](/docs/miro/overview.md) turns your documentation into interactive, collaborative design artifacts, and brings your design decisions back into the catalog when you're done.** ![EventCatalog architecture on a Miro board](/img/miro/getting-started/example.png) The v1 integration embedded Miro boards into doc pages. V2 flips the direction. Your documented architecture flows into Miro, you design on top of real data, and the results flow back out. You can: * Browse, search, and drag your full catalog onto a Miro board * Drag services with their full dependency graphs * Edit resources inline and create new draft resources on the board * Navigate between connected resources with smart connectors You can read more about the Miro App in our [release blog post here](/blog/eventcatalog-miro-app.md). ## Astro 6 and Platform Upgrades[​](#astro-6-and-platform-upgrades "Direct link to Astro 6 and Platform Upgrades") We upgraded EventCatalog to **Astro 6, Zod 4, Vite 7, and Vitest 4**. This is a significant platform upgrade that improves build performance and keeps EventCatalog on the latest tooling. As part of this upgrade, we also replaced `better-sqlite3` with `sql.js` (WASM), removing the need for native binary compilation. This means fewer installation issues, especially in CI environments and Docker containers. To upgrade, run: ``` npm install @eventcatalog/core@latest ``` ### Other project improvements[​](#other-project-improvements "Direct link to Other project improvements") * Added `eventcatalog export` command for exporting your catalog programmatically * SDK now supports entities, containers, and flows in `dumpCatalog` * SDK changelog helper methods for programmatic access to changelogs * Added channels section to service sidebar * Entity map visualiser now available for services * Flows now support nested directories and work across domains/services * Added analytics integrations: GA4, GTM, and PostHog * Support for `governance.yml` in addition to `governance.yaml` * Improved generated README for new EventCatalog projects * Default template events now include usage examples * Fixed: circular refs in AsyncAPI spec rendering * Fixed: fields explorer crash with nullable JSON Schema types * Fixed: fields index build failing when catalogs have no messages * Fixed: auth behind reverse proxy (trustHost defaults to true) * Fixed: SSR compatibility for visualiser, schema/fields pages * Fixed: sidebar navigation losing sync with custom base path * Fixed: semver comparison for version sorting * Fixed: schema API returning empty response in SSR mode * Fixed: generator continues running when one generator fails ## What's coming in April?[​](#whats-coming-in-april "Direct link to What's coming in April?") If you have any questions or want to join our community exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [March](/blog/tags/march.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-03-31-march-2026.md) --- # Whats new in EventCatalog - May 2025 May 30, 2025 · 10 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog, here you can find what’s next, how to get started, and what’s coming next. * [Subdomain support to EventCatalog](#subdomain-support-to-eventcatalog) * [Introducing EventCatalog Reports](#introducing-eventcatalog-reports) * [New GitHub Plugin for EventCatalog](#new-github-plugin-for-eventcatalog) * [New Confluent Schema Registry](#new-confluent-schema-registry) * [Bring your own models to EventCatalog Chat](#bring-your-own-models-to-eventcatalog-chat) * [Entities are now supported in EventCatalog](#entities-are-now-supported-in-eventcatalog) * [Add multiple specifications to your services](#add-multiple-specifications-to-your-services) * [EventCatalog Visualizer updates](#eventcatalog-visualizer-updates) * [What’s coming in June?](#whats-coming-in-june) ## Subdomain support to EventCatalog[​](#subdomain-support-to-eventcatalog "Direct link to Subdomain support to EventCatalog") Many users of EventCatalog come from a Domain-Driven Design (DDD) background and rely on domains to organize their resources. To better support this approach, we’re excited to introduce **subdomains**. Subdomains provide an additional layer of flexibility, allowing you to group resources within domains. When you create a subdomain in EventCatalog, it will be displayed as part of the parent domain, enabling a clearer structure and easier navigation between domains and their subdomains. ![EventCatalog Growth](/img/blogs/may-2025-update/subdomains.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) If you’re following Domain-Driven Design (DDD) practices, subdomains can help you better organize your resources. You can find more details on how to get started in our documentation. ## Introducing EventCatalog Reports[​](#introducing-eventcatalog-reports "Direct link to Introducing EventCatalog Reports") We believe that establishing strong governance foundations is essential when building an event-driven architecture. This includes setting clear naming conventions, defining schema versioning strategies, establishing ownership, documenting producer/consumer relationships, and much more. Unfortunately, many teams skip over governance early on—only to face the consequences later. Without governance, architectures often suffer from poor discoverability, a lack of shared understanding, and missed opportunities for delivering value. EventCatalog already helps teams achieve better discoverability through documentation, schemas, visualization, and ownership. With the introduction of **EventCatalog Reports**, you can now **track and monitor governance** across your organization, ensuring your event-driven architecture stays healthy and aligned. ![EventCatalog Growth](/img/blogs/may-2025-update/report.png)[See generated reports for demo catalog](https://github.com/event-catalog/eventcatalog/tree/main/examples/default/reports) **EventCatalog Reports** generates a PDF that highlights areas where your governance practices could be improved across your documentation and architecture (see demo). These insights include: * Schema completeness across your services and messages * Identification of parts of your architecture that lack clear ownership * Detection of services using outdated versions or deprecated messages * And much more. Learn more about **EventCatalog Reports** in [our announcement blog post here](https://www.eventcatalog.dev/blog/introducing-eventcatalog-reports). Need help with your governance? Many companies ignore governance until it's too late. We can work with you to get your governance in place with custom workshops and support. If you are interested to explore more, feel free to get in touch at ## New GitHub Plugin for EventCatalog[​](#new-github-plugin-for-eventcatalog "Direct link to New GitHub Plugin for EventCatalog") Many teams use GitHub as their schema registry, and now EventCatalog makes it easy to integrate with your GitHub repositories. Our new plugin allows you to **pull and sync schemas directly from GitHub into EventCatalog**, ensuring your documentation stays up to date with your source of truth. [YouTube video player](https://www.youtube.com/embed/o2ryPdBa-68?si=2d1cynW_wgzNhbaV) Watch the video to see it in action, or [read the documentation](https://www.eventcatalog.dev/blog/github-as-a-schema-registry) to get started. ## New Confluent Schema Registry[​](#new-confluent-schema-registry "Direct link to New Confluent Schema Registry") We’re excited to announce that you can now **pull and sync schemas from Confluent Schema Registry** directly into EventCatalog. This integration allows you to keep your documentation and architecture in sync with your source of truth. With support for **custom filters**, you can easily select which schemas to pull—giving you full control over which messages get updated and how they are assigned within EventCatalog. [YouTube video player](https://www.youtube.com/embed/NMZKnPKx-L0?si=og1Nvnr3FfPfAqn4) Watch the video above for a quick demo, or [read the documentation](https://www.eventcatalog.dev/docs/plugins/confluent-schema-registry/intro) to get started. ## Bring your own models to EventCatalog Chat[​](#bring-your-own-models-to-eventcatalog-chat "Direct link to Bring your own models to EventCatalog Chat") **EventCatalog Chat** now supports [OpenAI, Gemini, and Anthropic models](https://www.eventcatalog.dev/docs/development/eventcatlaog-chat/models). This integration allows you to connect your own AI models with EventCatalog and gain insights into your architecture through natural language—helping you ask questions, understand relationships, and explore your event-driven system more intuitively. ![EventCatalog Growth](/img/blogs/may-2025-update/chat.png) With EventCatalog, you can **ask questions, define custom prompts**, and much more—giving you a powerful way to explore and interact with your event-driven architecture. [To get started you can read the documentation](https://www.eventcatalog.dev/docs/development/eventcatlaog-chat/models). ## Entities are now supported in EventCatalog[​](#entities-are-now-supported-in-eventcatalog "Direct link to Entities are now supported in EventCatalog") In Domain-Driven Design (DDD), **entities** are the core building blocks of a domain. They represent key concepts or objects—like `Order`, `Customer`, or `Invoice`—that have a unique identity and persist over time. Each entity lives within a **bounded context**, ensuring it adheres to the specific business rules and logic of that part of the system. With this release, EventCatalog introduces **Entities** as a new resource type. You can assign entities to domains and services, helping your teams better understand the concepts they work with. This makes it easier to build a shared understanding of your architecture and the real-world ideas it models. ![EventCatalog Growth](/img/blogs/may-2025-update/entity.png)[View the demo](https://demo.eventcatalog.dev/docs/entities/Order/1.0.0) If you want to get started with [entities you can read the documentation](https://www.eventcatalog.dev/docs/development/guides/domains/entities/adding-entities). ## Add multiple specifications to your services[​](#add-multiple-specifications-to-your-services "Direct link to Add multiple specifications to your services") EventCatalog now supports adding **multiple specifications** to a single service. This is especially useful for teams managing services that expose several interfaces—such as APIs, events, and schemas—under the same service. By assigning multiple specifications to a service, EventCatalog will display them for your users in a clear and organized way—helping your team better understand the capabilities and responsibilities of each service. ![EventCatalog Growth](/img/blogs/may-2025-update/multi-spec.png)[View the demo](https://demo.eventcatalog.dev/docs/services/OrdersService/0.0.3) If you want to get started with [multiple specifications you can read the documentation](https://www.eventcatalog.dev/docs/development/guides/services/adding-to-services/openapi#multiple-openapi-files). ## EventCatalog Visualizer updates[​](#eventcatalog-visualizer-updates "Direct link to EventCatalog Visualizer updates") ### Swap between multiple versions in Visualizer[​](#swap-between-multiple-versions-in-visualizer "Direct link to Swap between multiple versions in Visualizer") We’ve added the ability to **switch between different versions** of your architecture directly in the EventCatalog Visualizer. Using a simple dropdown, you can navigate across as many versions as you need—making it easy to compare changes, track evolution, and spot differences over time. ![EventCatalog Growth](/img/blogs/may-2025-update/visualizer1.png)[View the demo](https://demo.eventcatalog.dev/visualiser/services/InventoryService/0.0.2) ### Embed multiple Visualizers into your documentation[​](#embed-multiple-visualizers-into-your-documentation "Direct link to Embed multiple Visualizers into your documentation") You can now embed **multiple Visualizers** within your documentation. This allows you to embed **any domain, service, or message**—giving your team rich, visual context directly alongside your written documentation. This feature is perfect for helping teams explore and understand your architecture more easily, all within the same place. ![EventCatalog Growth](/img/blogs/may-2025-update/homepage.png)[View the demo](https://demo.eventcatalog.dev/) [You can see an example of the customised homepage for EventCatalog.](https://demo.eventcatalog.dev/) ### Copy markdown from any page in EventCatalog for your LLMs[​](#copy-markdown-from-any-page-in-eventcatalog-for-your-llms "Direct link to Copy markdown from any page in EventCatalog for your LLMs") A new pattern emerging in documentation is the ability to copy a page’s markdown for use in LLMs. We’ve made this easy in EventCatalog by adding a **dropdown on every page**—letting you quickly copy markdown to your clipboard for use in AI models or other tools. In addition, you can view any page as markdown and **copy schemas to your clipboard** just as easily. ![EventCatalog Growth](/img/blogs/may-2025-update/copy.png)[View the demo](https://demo.eventcatalog.dev/docs/services/OrdersService/0.0.3) ### Other project improvements[​](#other-project-improvements "Direct link to Other project improvements") * [EventCatalog SDK](https://www.eventcatalog.dev/docs/sdk) has been updated to match all the new features. * [Channels now have two render modes in your EventCatalog.](https://www.eventcatalog.dev/docs/api/config#visualiser) * [You can turn off changelogs in EventCatalog](https://www.eventcatalog.dev/docs/api/config#changelog) ## What’s coming in June?[​](#whats-coming-in-june "Direct link to What’s coming in June?") In June, we’re releasing **more integrations for EventCatalog**, including support for **Azure messaging services, Azure Schema Registry,** and **Apicurio Schema Registry**. These integrations will allow you to add semantic meaning to your schemas and keep them in sync with your documentation—making it easier for teams to find the information they need and maintain a shared understanding of your architecture. We’re also exploring improvements to the **EventCatalog MCP server** and working to bring EventCatalog closer to the tools your teams already use, like **Slack** and **Azure Chat**. We are exploring CI/CD GitHub actions to help find governance problems before they reach your environments. Many teams use EventCatalog as a **design > implement > document** workflow. We’re exploring ways to make drafting messages, services, and resources directly in EventCatalog easier—and we expect to release the first version of this feature in June. Lastly, we know many of you are eagerly waiting for [**EventCatalog Studio**](https://eventcatalog.studio/). We’re still hard at work on it and aim to release an initial version soon. Stay tuned! If you have any questions or want to join our community of over 1150 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-05-30-may-2025.md) --- # Introducing EventCatalog MCP Server March 18, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog The vision for EventCatalog is simple; to help companies bring discoverability to their architecture and reduce the time it takes to maintain, understand, and build new features. We want to build a platform that **enables developers** to quickly find and understand the information they need, whilst giving **architects** and **business stakeholders** the ability to govern their architecture and control the standards of their systems. Overtime distributed systems become more complex, the need for a governance and a single source of truth for your architecture becomes more important. We believe EventCatalog is a step in the right direction to help teams achieve this, and today we are happy to share that EventCatalog now supports the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/), which we believe can help teams **save time** by finding the information they need directly in their code editor or LLM. ![EventCatalog MCP Server](/assets/images/mcp-bb591f6457e26084c6ba48628029d2ce.png) Using the [EventCatalog MCP Server](/docs/development/ask-your-architecture/mcp-server/introduction.md) you can provide your EventCatalog data to any LLM or AI application that supports the MCP protocol. Some examples of what you can do with the EventCatalog MCP Server include: * **Improved Discoverability** - Ask questions about your architecture directly in your code editor or LLM. * **Schema Access** - Get access to schemas directly in your code editor or LLM and use them to build new features. * **Producers and Consumers** - Quickly understand who consumes the events you are about to change * **Context** - Use EventCatalog context to help you build new features, and explore what you already have. * **Saving time** - Reduce the time it takes to understand, find information you need to maintain or build new features. In this blog post we will cover what is the MCP protocol and how you can get started with the EventCatalog MCP Server. ### What is the MCP protocol?[​](#what-is-the-mcp-protocol "Direct link to What is the MCP protocol?") > MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools. ([MCP Introduction](https://modelcontextprotocol.io/introduction)) You can read more about the MCP protocol [here](https://modelcontextprotocol.io/introduction). ### Why use the EventCatalog MCP Server?[​](#why-use-the-eventcatalog-mcp-server "Direct link to Why use the EventCatalog MCP Server?") The EventCatalog MCP server can be installed on your machine and give you access to your EventCatalog data in your code editor or LLM (MCP Client, e.g Cursor, Windsurf, Claude Desktop). This can reduce the time it takes to understand and build new features, as you can ask questions about your architecture directly in your code editor or LLM. Rather than having to search through your code base, trying to find producers and consumers of the event you are about to change, you can ask the EventCatalog MCP server for this information, or maybe you want to know what other events are related to the one you are about to change, or you want to quickly find events based on the feature you want to build.... the possibilities are endless. We want to reduce the time it takes for developers to understand their architecture and we believe that the EventCatalog MCP server can help you achieve this. ### How to get started?[​](#how-to-get-started "Direct link to How to get started?") The EventCatalog MCP server is [available on GitHub](https://github.com/event-catalog/mcp-server) and can be installed by following the instructions [here](https://www.eventcatalog.dev/docs/development/ask-your-architecture/mcp-server/introduction). * **Setup Cursor MCP Client** * Download the Cursor IDE [here](https://www.cursor.com/) * [Configure the EventCatalog MCP Server in the Cursor IDE](/docs/development/ask-your-architecture/mcp-server/getting-started.md#connect-clients) * **Setup Windsurf MCP Client** * Download the Windsurf IDE [here](https://windsurf.dev/) * [Configure the EventCatalog MCP Server in the Windsurf IDE](/docs/development/ask-your-architecture/mcp-server/getting-started.md#connect-clients) * **Setup Claude Desktop MCP Client** * Download the Claude Desktop IDE [here](https://www.anthropic.com/news/claude-desktop) * [Configure the EventCatalog MCP Server in the Claude Desktop IDE](/docs/development/ask-your-architecture/mcp-server/getting-started.md#connect-clients) ### Demo[​](#demo "Direct link to Demo") If you prefer a video tutorial, you can watch the demo below. This demo shows how to use the EventCatalog MCP Server in the Cursor IDE. [YouTube video player](https://www.youtube.com/embed/rTgNDPCZSdo?si=2_bfjBd5PeUsxiUy) ## Summary[​](#summary "Direct link to Summary") We are excited to announce that EventCatalog now supports the MCP protocol. This is a big step forward for EventCatalog and we are looking forward to seeing what you can build with it. If you have any questions, please reach out to us on [Discord](https://eventcatalog.dev/discord) or [GitHub](https://github.com/event-catalog/eventcatalog). Happy building! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-03-18-eventcatalog-mcp.md) --- # Bring Your Miro Boards to Life in EventCatalog April 4, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Many teams turn to [Miro](https://miro.com/) to brainstorm, map out, and document their architecture. In the world of event-driven systems, techniques like [Event Modeling](https://eventmodeling.org/) and [Event Storming](https://eda-visuals.boyney.io/visuals/event-storming) are especially popular. Now, you can embed your Miro boards directly into your documentation—making it easier to collaborate, share insights with your team, and get more lasting value from your diagrams and workshops. ![EventCatalog Miro Example](/img/blogs/miro/miro-example1.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3) Introducing the new [Miro component](/docs/development/components/components/embed-diagrams/miro.md) — now you can seamlessly embed Miro boards into any EventCatalog page, from [domains](/docs/development/guides/domains/introduction.md) and [services](/docs/development/guides/services/introduction.md) to [messages](/docs/messages.md) and [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). This makes it easier to bring your architecture diagrams, event modeling, and brainstorming sessions into context, keeping everything in one place and driving better alignment across teams. ### How does it work?[​](#how-does-it-work "Direct link to How does it work?") EventCatalog [supports a range of components](/docs/development/components/using-components.md) you can embed into your documentation. The [`` component](/docs/development/components/components/embed-diagrams/miro.md) is the latest addition to this list. To embed a Miro board in your documentation, you can use the following code: /events/OrderAmended/index.mdx ``` --- #event frontmatter --- ## Event storming session ``` #### Rendered output[​](#rendered-output "Direct link to Rendered output") ![EventCatalog Miro Example](/img/blogs/miro/miro-example1.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3) **The miro component also supports:** * Editing the board live in EventCatalog * [Full screen mode](https://demo.eventcatalog.dev/miro?autoplay=true\&embedMode=view_only_without_ui\&moveToWidget=3074457347671667709\&boardId=uXjVIHCImos=/\&back=/docs/domains/Orders/0.0.3#undefined-miro-title) * Embedding multiple boards * Loading into a widget on the board You can read the documentation and props [here](/docs/development/components/components/embed-diagrams/miro.md) to get started and start building your own documentation. ### Full-Screen Mode for Miro Boards[​](#full-screen-mode-for-miro-boards "Direct link to Full-Screen Mode for Miro Boards") Need more space to explore your diagrams? Clicking the full-screen icon on an embedded Miro board will open it in a new tab, giving your team a larger canvas to work with. If you have edit permissions, you can collaborate in real time—perfect for live sessions and ongoing updates. ![EventCatalog Miro Example](/img/blogs/miro/miro-example2.png)[View the demo](https://demo.eventcatalog.dev/miro?autoplay=true\&embedMode=view_only_without_ui\&moveToWidget=3074457347671667709\&boardId=uXjVIHCImos%3D%2F\&back=%2Fdocs%2Fdomains%2FOrders%2F0.0.3\&edit=true#undefined-miro-title) ### Getting started[​](#getting-started "Direct link to Getting started") To get started update your EventCatalog to the latest version: ``` npm install @eventcatalog/core@latest ``` Then start using the new `` component in your documentation. ## Summary[​](#summary "Direct link to Summary") Many teams use Miro to capture architecture decisions, event modeling, and event storming sessions. With our new Miro embedding feature, you can now bring those boards directly into your EventCatalog documentation—making it easier to collaborate, share context, and get more value from your visual workflows. Check out the [docs and props](/docs/development/components/components/embed-diagrams/miro.md) to get started and start enhancing your documentation today. We’d love to hear your thoughts—feel free to [open an issue](https://github.com/event-catalog/eventcatalog/issues/new) with any feedback or suggestions. Our community has grown to over 1,100 members and continues to expand! If you haven’t already, join us on [Discord](https://discord.com/invite/3rjaZMmrAm) and be part of the conversation. Excited to see what you build with this new feature! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Miro](/blog/tags/miro.md) * [Component](/blog/tags/component.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-04-04-eventcatalog-miro.md) --- # Your documentation is a design artifact, not just a wiki page March 30, 2026 · 9 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Every team I've talked to has the same problem. The architecture lives in one place and the diagrams live in another. The documentation is accurate as of six months ago. The Miro board from the last [event storming](https://eda-visuals.boyney.io/visuals/event-storming) session doesn't match what's actually running. **Today I'm releasing the [EventCatalog Miro App v2](/docs/miro/overview.md)**, a [Miro](https://miro.com) app that turns your EventCatalog documentation into interactive, collaborative design artifacts — and brings your design decisions back into the catalog when you're done. ![EventCatalog architecture on a Miro board](/img/miro/getting-started/example.png)Your real architecture, imported into Miro with relationships intact ## The problem[​](#the-problem "Direct link to The problem") Teams do [event storming](https://eda-visuals.boyney.io/visuals/event-storming) in Miro, [event modeling](https://eventmodeling.org/) in Miro, [domain modeling](https://eda-visuals.boyney.io/visuals/bounded-context) in Miro, architecture reviews in Miro. But the design work happens in isolation from the actual documented architecture. You sketch what you think exists, not what actually exists. Then someone has to reconcile the diagram with the docs, and that job usually falls through the cracks. The v1 Miro integration embedded Miro boards into EventCatalog doc pages. It was useful, but it was one-way: your board lived in Miro and you linked to it from a doc. **V2 flips the direction.** Your documented architecture flows into Miro, you design on top of real data, and the results flow back out. ## What's new[​](#whats-new "Direct link to What's new") The EventCatalog Miro App v2 is a native Miro marketplace app. It runs entirely in the browser, requires no server and no API keys, and gives you a panel inside Miro where you can browse, search, and drag your full catalog onto the board. [Services](/docs/development/guides/services/introduction.md), [events](/docs/development/guides/messages/events/introduction.md), [commands](/docs/development/guides/messages/commands/introduction.md), [queries](/docs/development/guides/messages/queries/introduction.md), [channels](/docs/development/guides/channels/introduction.md), and data stores all come in with their relationships intact. You see the real names, versions, owners, and summaries — not stale copies from a spreadsheet. ![EventCatalog panel in Miro toolbar](/img/miro/getting-started/panel.png)The EventCatalog panel lives in your Miro toolbar, always accessible ## When you'd use it[​](#when-youd-use-it "Direct link to When you'd use it") This is for any team that uses Miro for architecture modeling and EventCatalog for documentation. If you're running an event storming, event modeling, or domain modeling session, planning a new feature, reviewing an existing service, or onboarding someone to a complex domain, the Miro App gives you a single place to do all of it against your real, documented architecture. ## How it works[​](#how-it-works "Direct link to How it works") ### Import your architecture[​](#import-your-architecture "Direct link to Import your architecture") Start by exporting a JSON snapshot from EventCatalog and importing it into the Miro App. This loads all your resources into the panel so you can browse and search them without leaving Miro. ### Drag resources onto the board[​](#drag-resources-onto-the-board "Direct link to Drag resources onto the board") Browse by category (services, events, commands, queries, channels, data stores) or use the search. Drag any resource onto the board and it appears as a card with its name, version, summary, and owners. ![Dragging resources from the panel onto the Miro board](/img/miro/guides/dragging-resources.gif)Browse your catalog in the panel and drag resources directly onto the board ### Two display modes: App Cards and Post-its[​](#two-display-modes-app-cards-and-post-its "Direct link to Two display modes: App Cards and Post-its") Resources render in one of two modes. **App Cards** show rich detail — version, owners, status badges, and a link back to the EventCatalog page. **Post-it notes** give you a compact, high-level view for when you need to think at a higher altitude. You can switch modes at any time and existing items convert automatically. ![App Card display mode with version and owner detail](/img/miro/guides/app-card.png)App Card mode shows version, owners, and status — everything you need to make decisions ![Post-it display mode for compact, high-level views](/img/miro/guides/post-it.png)Post-it mode keeps things compact when you're working at a higher level of abstraction ### Drag a service with its full dependency graph[​](#drag-a-service-with-its-full-dependency-graph "Direct link to Drag a service with its full dependency graph") When you drag a service onto the board, you can toggle whether to bring its complete dependency graph with it: the messages it publishes and consumes, the channels it uses, the data stores it reads and writes, and the related services it interacts with. ![Dragging a service with its full dependency graph](/img/miro/guides/services-with-deps.gif)Toggle to bring the full dependency graph — messages, channels, data stores, and related services This is genuinely useful for onboarding engineers to a complex service, running impact analysis before a change, or understanding the blast radius of a breaking event schema update. The whole picture lands on the board in one drag. ### Smart connectors that label themselves[​](#smart-connectors-that-label-themselves "Direct link to Smart connectors that label themselves") Draw a connection between two resources and the app reads the resource types to decide the label. Connecting a service to an event? It labels the arrow "publishes event." Connecting to a data store? "writes to." Connectors are color-coded and directional so the diagram reads clearly. ![Smart connectors that auto-label based on resource types](/img/miro/guides/connectors.gif)Connectors label themselves based on the types of resources you connect ### Create new resources on the board[​](#create-new-resources-on-the-board "Direct link to Create new resources on the board") Design services and events that don't exist yet. New resources are marked as drafts, visually distinct from imported resources, so it's clear what's real and what's proposed. Edit names, versions, and summaries inline without leaving the board. ![Editing a resource inline on the board](/img/miro/guides/edit-resource.gif)Edit resource details inline — name, version, summary — without leaving the board ![Creating a new draft resource on the board](/img/miro/guides/new-resource.png)New resources are marked as drafts so they're visually distinct from your existing architecture ### Navigate by following message flows[​](#navigate-by-following-message-flows "Direct link to Navigate by following message flows") Click a connected resource to zoom to it and follow the flow. Connections highlight in purple. Auto-layout produces clean directed graphs for any subgraph you select. The crosshair button locates any resource on the board if you've lost it in a large diagram. ![Navigating between connected resources on the board](/img/miro/guides/navigation.gif)Click connected resources to zoom and follow flows — connections highlight in purple ### Export back to EventCatalog with AI[​](#export-back-to-eventcatalog-with-ai "Direct link to Export back to EventCatalog with AI") This is the round-trip that makes the whole thing worth it. When your design session is done, click **Export to JSON** in the app. This downloads a `miro-board-export.json` containing everything on the board — resources, connections, positions, and labels. Feed that JSON to an AI agent (Claude, Cursor, Windsurf) with the [EventCatalog Skills](https://eventcatalog.dev/docs/development/ask-your-architecture/skills/introduction) loaded, and the agent generates proper documentation files: MDX with correct frontmatter, folder structure, relationship references, and version numbers. Review the output, commit via PR, and your catalog reflects what the team just designed. Your Miro board was never just a diagram. It was the design work. **Now it becomes the documentation too.** ### Works with AsyncAPI, OpenAPI, and schema registries[​](#works-with-asyncapi-openapi-and-schema-registries "Direct link to Works with AsyncAPI, OpenAPI, and schema registries") If your architecture is already described in specs, you can generate your EventCatalog from them and then bring everything into Miro. The app works with [AsyncAPI](/integrations/asyncapi.md), [OpenAPI](/integrations/openapi.md), and any of the supported schema registries: Confluent, AWS Glue, EventBridge, Apicurio, Azure Schema Registry, and GitHub. ## Getting started[​](#getting-started "Direct link to Getting started") Install the app directly from the [EventCatalog Miro App install page](https://miro.com/app-install/?response_type=code\&client_id=3458764623600229458\&redirect_uri=%2Fapp-install%2Fconfirm%2F). Once installed, open a board, click the EventCatalog icon in the toolbar, and import your catalog JSON. Full instructions are in the [Miro App documentation](/docs/miro/overview.md). The app is **open source** at [github.com/event-catalog/eventcatalog-miro-app](https://github.com/event-catalog/eventcatalog-miro-app). Everything runs in the browser. No server, no API keys, data stored in browser local storage. The app is currently in beta. If something doesn't work or you want a feature that isn't there yet, open an issue or let me know in Discord. ## Summary[​](#summary "Direct link to Summary") V1 embedded Miro boards into EventCatalog docs. V2 brings EventCatalog into Miro, with a full round-trip: real architecture in, collaborative design out, and AI to write the documentation when you're done. If you've ever run an event storming, event modeling, or domain modeling session and watched the output drift away from reality over the following months, this is the fix. Your design artifacts and your documentation are now the same thing. Read the full [Miro App documentation](/docs/miro/overview.md) to get set up. If you have questions or feedback, join the conversation in [Discord](https://discord.gg/eventcatalog) or open an issue on [GitHub](https://github.com/event-catalog/eventcatalog-miro-app). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Miro](/blog/tags/miro.md) * [Architecture](/blog/tags/architecture.md) * [Design](/blog/tags/design.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-03-30-eventcatalog-miro-app.md) --- # EventCatalog November 2024 update November 29, 2024 · 9 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog In this blog post we will dive deeper into features that were released in November, why they were built and how they can help you govern your architectures. At the end of the blog post I will share a personal update and what’s planned for December. ## Community, sponsors, and project growth[​](#community-sponsors-and-project-growth "Direct link to Community, sponsors, and project growth") EventCatalog community continues to grow ❤️, now we have 890 [Discord](https://discord.com/invite/3rjaZMmrAm) members, 409 new Catalogs have been created in November and over 4,000 catalogs built into production this month. EventCatalog is on track to hit 1.9k stars in November, and a shout out to [**Carlos Rodrigues**](https://github.com/carlosallexandre) and [Omid Eidivandi](https://github.com/XaaXaaX) for their support with the project and helping with issues, and community feedback ❤️. ![Stars](/assets/images/eventcatalog-november-stars-68218c1e2d40ac0d917fcf0de49c2a8b.png) EventCatalog got a new gold sponsor from [OSO](https://oso.sh/) and [Gravitee](https://www.gravitee.io/) continue their sponsorship (thank you!) 🙏. This sponsorship helps my goal towards open source sustainability. EventCatalog is free to use and open source, if you want to support the project checkout the [tiers on GitHub](https://github.com/sponsors/event-catalog) or contact me directly at `dave@eventcatalog.dev` , we appreciate any support to help project sustainability ❤️ ## Introducing EventCatalog Studio[​](#introducing-eventcatalog-studio "Direct link to Introducing EventCatalog Studio") ![EventCatalog Studio](/assets/images/studio-landing-6a53d9d8f9c9a81fafc295bc2a9fb681.png) [Sign up for early access →](https://eventcatalog.studio/) EventCatalog is proving to be a great tool to help companies govern and document their event-driven architecture. It’s great to see the project, usage and the community grow. Although this is great for folks that have event-driven architectures to document, we still feel there is a pain point when designing your event-driven architecture. **We feel there is a gap between design to implementation with event-driven architectures.** Many teams use whiteboards to design and explore their event-driven architecture (in person or virtual). During this process many discussions and ideas are captured but lost. Also there is an increasing effort to go from initial design to implementation. **We believe there must be better way.** This is why we are building [EventCatalog Studio](https://eventcatalog.studio/). ![EventCatalog Studio](/assets/images/studio-6df49a2aab65897eb4646a541a339c70.png) **EventCatalog Studio is a visual designer for event-driven architectures**. [EventCatalog Studio](https://eventcatalog.studio/) can sync with your local EventCatalog, and provide you with an editing experience, ability to collaborate with your teams, experiment ,and create draft designs to get feedback. With EventCatalog Studio you can design new architectures, draft new ideas, design and explore your schemas, ask questions about your architecture, and much more. Everything is mapped to your EventCatalog. EventCatalog Studio let’s you walk away from your white board sessions with something tangible, schemas to get your started and code models to help. We are aiming to get our MVP out in December 2024, and if this is something you could find useful [you can sign up to beta access here](https://eventcatalog.studio/). ## EventCatalog now supports channels[​](#eventcatalog-now-supports-channels "Direct link to EventCatalog now supports channels") EventCatalog let’s you document your [domains](https://www.eventcatalog.dev/docs/guides), [services](https://www.eventcatalog.dev/docs/guides) and [messages](https://www.eventcatalog.dev/docs/guides) (commands, queries and events). One core part missing was the ability to [document a channel](https://www.eventcatalog.dev/docs/development/guides/channels/introduction). In EventCatalog a channel represents the organization and transmission of messages. Channels in EventCatalog describe how a messages transport between producers and consumers. Documenting channels in EventCatalog gives your team deeper understand of how your messages are transmitted between producers and consumers, what broker they use and any other information you may find useful. As **EventCatalog is technology agnostic** this means you can document [any channel and protocol](https://www.eventcatalog.dev/docs/development/guides/channels/introduction#protocols) you like including http, amqp, eventbridge, googlepubsub, kafka, mercure, nats, pulsar, redis, sns, solace, sqs and ws (websockets). ### Adding channels to EventCatalog[​](#adding-channels-to-eventcatalog "Direct link to Adding channels to EventCatalog") Channels are resources in EventCatalog that you can define in your `/channels` directory. Any message ([event](https://www.eventcatalog.dev/docs/development/guides/messages/events/introduction), [command](https://www.eventcatalog.dev/docs/development/guides/messages/commands/introduction) or [query](https://www.eventcatalog.dev/docs/development/guides/messages/queries/introduction)) can be associated to one or many channels. When you assign a channel to a message, EventCatalog will render these channels between your messages and services ([see demo](https://demo.eventcatalog.dev/visualiser/services/InventoryService/0.0.2)) ![EventCatalog Channels](/assets/images/channels-6f0ea989192d702acdfcaa5900171bbc.png) [See demo of channels →](https://demo.eventcatalog.dev/visualiser/services/InventoryService/0.0.2) Our plugins for [AsyncAPI](https://www.eventcatalog.dev/docs/plugins/asyncapi/intro) and [Amazon EventBridge](https://www.eventcatalog.dev/docs/plugins/eventbridge/intro) have been updated, allowing you to document your [channels from your specification files](https://www.eventcatalog.dev/docs/development/plugins/async-api/features#mapping-channels-into-eventcatalog). If you want to learn more, and get started you can read our [getting started with channels guide](https://www.eventcatalog.dev/docs/development/guides/channels/introduction). ## Simulating message flow in the visualizer[​](#simulating-message-flow-in-the-visualizer "Direct link to Simulating message flow in the visualizer") You can now simulate messages in the [EventCatalog visualizer](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3). This new feature let’s you quickly see what type of events are flowing between your services. ![EventCatalog messages](/assets/images/messages-7316d41a1bf5677f79ff3bb322180a5a.png) [See demo →](https://demo.eventcatalog.dev/visualiser/services/InventoryService/0.0.2) To turn on the feature, use the **Visualizer Settings** and click **Simulate Messages.** This is the first version of message simulation, ideas we have is the ability to define frequency flow in your documentation to help your teams understand how busy messages are, and even connecting this to live systems. If you have any ideas or requests please join [Discord](https://eventcatalog.dev/discord) and let us know. ## Services can now send/receive the same message[​](#services-can-now-sendreceive-the-same-message "Direct link to Services can now send/receive the same message") Sometimes your service will send and receive the same message, previously in EventCatalog this was not possible, but we are happy to share that EventCatalog now supports this. In EventCatalog you can document what messages your [service sends and receives.](https://www.eventcatalog.dev/docs/development/guides/services/adding-messages-to-services) When the service sends and receives the same message, EventCatalog visualiser will now represent this. ``` --- id: OrderService ... # other service frontmatter receives: # id of the message this service receives - id: PaymentProcessed sends: # id of the message this service sends - id: PaymentProcessed --- ``` ![EventCatalog Channels](/assets/images/visualiser-messages-3f18889a9a07071225f7005751365c13.png) To learn how do document your services and messages with EventCatalog, [you can read our service guide](https://www.eventcatalog.dev/docs/development/guides/services/introduction). ### OpenAPI Generator 3.0 is now out[​](#openapi-generator-30-is-now-out "Direct link to OpenAPI Generator 3.0 is now out") You can automate [EventCatalog using your OpenAPI files](https://www.eventcatalog.dev/docs/plugins/openapi/intro). This plugin let’s you document services and messages ([commands, queries and events](https://www.eventcatalog.dev/docs/development/plugins/open-api/features)) through your OpenAPI files. EventCatalog will keep [track of changes](https://www.eventcatalog.dev/docs/development/plugins/open-api/features), [versions](https://www.eventcatalog.dev/docs/development/plugins/open-api/features) and let you add documentation to these messages. The 3.0 plugin now includes: * [Ability to document events, queries and commands (using the x-eventcatalog-message-type extension)](https://www.eventcatalog.dev/docs/development/plugins/open-api/features#mapping-messages-as-commands-queries-or-events) * [Ability to define custom names and ids for your messages (using x-eventcatalog-message-id and x-eventcatalog-message-name)](https://www.eventcatalog.dev/docs/development/plugins/open-api/features#define-eventcatalog-ids-and-names-in-your-openapi-specification-file) * By default all messages are now documented as queries (previously commands) If you and your teams have OpenAPI files, you can use EventCatalog to get discoverability for them. [To get started you can read the OpenAPI integration guide](https://www.eventcatalog.dev/docs/plugins/openapi/intro). ## New support levels added[​](#new-support-levels-added "Direct link to New support levels added") In November we have been working with companies to help them understand the importance of governance with event-driven architecture and getting them started. We offer a [range of support](https://www.eventcatalog.dev/services) including internal talks, internal workshops, and hands on catalog builds. If you are interested in working with us you can reach out on [LinkedIn](https://www.linkedin.com/in/david-boyne/) or email at `hello@eventcatalog.dev` **Want to learn more about event-driven architectures?** We have created free resources for you to dive deeper into event-driven architectures called [EDA Visuals](https://eda-visuals.boyney.io/). EDA visuals are designs I have made with extra resources. You can view them and download the book for free! ![Example](/assets/images/eda-visuals-4f1679c3c82bf61795462064b784cc17.png) [Download the free book →](https://eda-visuals.boyney.io/download) ## What’s next in December[​](#whats-next-in-december "Direct link to What’s next in December") In December we will be continuing the work for [EventCatalog Studio](https://eventcatalog.studio/) and getting an initial beta version out. If you want to keep up to date and get access [you can sign up here](https://eventcatalog.studio/). We will continue to review [feature requests](https://discord.com/channels/918092420338569216/1248308708732174467) and work backwards from the community. If you have any feature requests, ideas or bugs please let us know on [Discord](https://discord.com/channels/918092420338569216/1248308708732174467). Towards the end of the month we will be taking time off to recharge and focus on what’s next for 2025. I feel EventCatalog has a huge roadmap and vision ahead and we are only just getting started ❤️. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-11-29-november-2024.md) --- # EventCatalog October 2024 update October 31, 2024 · 13 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog October has been a busy month for EventCatalog. The community has grown from 800 [Discord](https://discord.com/invite/3rjaZMmrAm) members to 856, with 360 new Catalogs created and over 120 organizations actively using EventCatalog. EventCatalog got a new gold sponsor [Gravitee](https://gravitee.io/?utm_source=eventcatalog\&utm_medium=web\&utm_campaign=sponsorship) and [Hookdeck](https://hookdeck.com/?ref=eventcatalog-sponsor) continues their sponsorship 🙏, this is a great step towards open source sustainability. If you would like to sponsor the project you can check out the [tiers on GitHub](https://github.com/sponsors/event-catalog) or contact me directly at `dave@eventcatalog.dev`. Our open source community continues to grow with issues and pull requests also increasing. I want to give a personal shout out to [Omid Eidivandi](https://github.com/XaaXaaX) and [Carlos Rodrigues](https://github.com/carlosallexandre) for their contributions and helping the community with their issues and supporting them, thank you! We launched new official generators (integrations) with [Amazon EventBridge](https://www.eventcatalog.dev/docs/plugins/eventbridge/intro) and [Backstage](https://www.eventcatalog.dev/docs/development/plugins/backstage/intro) and our community have launched new generators for [Hookdeck](https://www.eventcatalog.dev/integrations) and [Atlassian Compass](https://www.eventcatalog.dev/integrations). A [new UI was built for EventCatalog](https://demo.eventcatalog.dev/) driven by user feedback and improvements were made to existing generator integrations, including the ability to fetch AsyncAPI files from remote urls. In this blog post I will dive deeper into features that were released in October, why they were built and how they can help you govern your architectures. At the end of the blog post I will share a personal update and what’s planned for November: ### ⭐️ Updates[​](#️-updates "Direct link to ⭐️ Updates") * [Personal update](#personal-update) * [New simplified user interface and user experience for EventCatalog](#new-simplified-user-interface-and-user-experience-for-eventcatalog) * [Added ability to add query (messages) to EventCatalog](#added-ability-to-add-query-messages-to-eventcatalog) * [Simplified folder structure for your EventCatalog](#simplified-folder-structure-for-your-eventcatalog) * [Embed EventCatalog into your Backstage portals](#embed-eventcatalog-into-your-backstage-portals) * [Connect Amazon EventBridge to EventCatalog](#connecting-amazon-eventbridge-to-eventcatalog) * [Fetch AsyncAPI files from remote URLS and generate your catalogs](#fetch-asyncapi-files-from-remote-urls-and-generate-your-catalogs) * [Summary](#summary) ## Personal update[​](#personal-update "Direct link to Personal update") I started EventCatalog 2 years ago as a random idea and side project, understanding that governance with event-driven architecture is a mess and not many solutions are out there to fix that problem. Since then EventCatalog has gained momentum and traction, the project is now at 1.8k stars, over 18k catalogs created and requires more time to maintain and manage. Since June I have been working on EventCatalog 2 days a week, this has given me time to focus on the project, integrations and build it to what we have today, but with the growth of the project, issues raising, pull requests management it’s becoming hard to maintain. **So from November, 2024 I will be spending more time on EventCatalog (from 2 days to 4 days a week) ❤️**. EventCatalog over the past few months has shown me signals of some great potential and growth, many conversations with companies and industry leaders have shown me that there is a space and need for this open source project. I truly believe in the project vision to bring discoverability to event-driven architectures and I think EventCatalog can truly help us. Using this extra time on the project will let me focus on more automation, community, documentation and project sustainability. The landscape I have identified with EventCatalog is huge, and I’m super excited to see what can be done in the space to make peoples life easier but it comes at one problem…. **Having sustainable open source projects is hard.** So over the next few months I will be exploring sponsorships, funding, generator licensing and consulting. So if any of these sound interesting to you or you would like to work with me, feel free to reach out to `dave@eventcatalog.dev` I will be reviewing my sustainability plan in Q1 2025 which could even include funding for the project *(angels or investors if you are reading, reach out ;))*. For now, I’m focusing on the community and the project. I believe EventCatalog has huge potential and I’m excited to see what we can do in this space. ## New simplified user interface and user experience for EventCatalog[​](#new-simplified-user-interface-and-user-experience-for-eventcatalog "Direct link to New simplified user interface and user experience for EventCatalog") We are always looking for ways to improve the user interface and developer experience of EventCatalog. Users have been providing feedback, and we are happy to share some improvements to the catalog. **Improved search functionality for your documentation** You can now search and filter your documentation using the new vertical navigation sidebar. This enables you to quickly find documentation for your domains, services or messages without having to scroll through hundreds of messages. ![Search EventCatalog](/assets/images/search-example-e9ffbef5ef0b7fd55b81be8835bef1d5.gif) This functionality has also been added to the visualiser, allowing you to quickly find visuals for your domains, services and messages. **Collapsible sidebar** Sometimes the sidebar can get in the way, so we made it collapsible. Clicking the icon in the vertical navigation bar will open/close the sidebar, giving your room for your documentation. ![Close sidebar](/assets/images/close-sidebar-ceb65ecefbc53b8427b9d59e85f5fd95.gif) **Minor improvements** Other minor improvements include: * Added GitHub and Discord links to Catalogs to help folks get help / request features * Increased space for all pages reducing padding * Vertical navigation bar introduced for future feature development * Fixing search bar (cmd K) across the application. If you have any more UI/UX improvements or requests, please let us know on [GitHub](https://github.com/event-catalog/eventcatalog) or our [Discord community](https://discord.com/invite/3rjaZMmrAm). ## Added ability to add query (messages) to EventCatalog[​](#added-ability-to-add-query-messages-to-eventcatalog "Direct link to Added ability to add query (messages) to EventCatalog") EventCatalog consists of many different resource types (domains, services and messages (commands and events)). We are happy to share that you can also [document your query (messages) in EventCatalog](/blog/introducing-queries.md). [Queries](https://www.eventcatalog.dev/docs/development/guides/messages/queries/introduction) allow you to clearly outline which messages a service accepts and which it invokes. Queries are often seen in protocols such as HTTP and gRPC. With the support of documenting [queries](/docs/development/guides/messages/queries/introduction.md), [events](/docs/development/guides/messages/events/introduction.md) and [commands](/docs/development/guides/messages/commands/introduction.md), you can now visually represent and document all the messages exchanged between services within your domains using EventCatalog. ![](/assets/images/query-example-2b5e6828c13de779999642ed20efef3b.png); [See a query example in the EventCatalog demo →](https://demo.eventcatalog.dev/docs/queries/GetPaymentStatus/0.0.1) To learn more you can read [the launch blog post](https://www.eventcatalog.dev/blog/introducing-queries), or get started [by reading our documentation](/docs/development/guides/messages/queries/adding-queries.md). ## Simplified folder structure for your EventCatalog[​](#simplified-folder-structure-for-your-eventcatalog "Direct link to Simplified folder structure for your EventCatalog") We want to make EventCatalog easy to use and be a delightful tool to use for developers, architects and leaders. Previously EventCatalog forced developers to categorise their resources into `/domains`, `/services`, `/events` and `/commands` folders. When you have many services and hundreds of messages this becomes hard to scale and organise. EventCatalog now now supports resource subfolders within your EventCatalog projects. This lets you embed domains, services and messages into various different subfolders. This can help you organise your EventCatalog as your catalog grows over time. ``` my-catalog ├── /domains │ ├── /Orders │ │ └──index.mdx │ │ └──openapi.yml │ │ └──index.mdx │ │ └──/versioned │ │ └──0.0.1 │ │ └──index.mdx │ │ └──/services │ │ └── /OrdersService │ │ └──index.mdx │ │ └──openapi.yml │ │ └── /events │ │ └──OrderPlaced │ │ └──index.mdx │ │ └── /OrderCancelled │ │ └──index.mdx │ └── /Payment │ │ └──index.mdx │ │ └──/services │ │ └──/PaymentService │ │ └── index.mdx │ │ └── asyncapi.yml │ │ └── /events │ │ └── /PaymentReceived │ │ └── /index.mdx │ │ └── /schema.json │ │ └── /PaymentCancelled │ │ └── /index.mdx │ │ └── /schema.avro │ │ └── /commands │ │ └── /VerifyPayment │ │ └── /index.mdx │ │ └── /schema.json │ │ └── /CancelPayment │ │ └── /index.mdx │ │ └── /schema.json ├── teams │ └──full-stack.mdx │ └──mobile-devs.mdx ├── users │ └──aSmith.mdx │ └──dboyne.mdx │ └──mSmith.mdx ├── eventcatalog.config.js ├── package.json └── README.md ``` To learn more you can read our [project structure guide on our documentation](/docs/development/getting-started/project-structure.md), we hope this helps, and if you have any more ideas for improvements feel free to raise a ticket on GitHub. ## Embed EventCatalog into your Backstage portals[​](#embed-eventcatalog-into-your-backstage-portals "Direct link to Embed EventCatalog into your Backstage portals") [Backstage](https://backstage.io/) is an open source developer portal to help people catalog their software and create an ecosystem of software for internal developers. Backstage provides software templates where your developers can provision new resources or you can build custom resources and plugins on top of their developer portal. One of the most requested features for EventCatalog was Backstage integration. Companies are using EventCatalog to help them document, govern and visualize their event-driven architecture and want some of the features exposed to backstage. We are happy to announce that a [new EventCatalog Backstage plugin](https://www.eventcatalog.dev/docs/development/plugins/backstage/intro) has been developed and is ready to help you embed EventCatalog features directly into your Backstage portal. ![Example](/assets/images/backstage-576cff6fd9b285cc0ff0b956630c16fe.png) Integrating EventCatalog into Backstage gives you the ability to see your event-driven architecture visualization, documentation and messages directly in backstage. Using the plugin you can map your Backstage APIS and Services into EventCatalog services and help your developers quickly find and explore your event-driven architecture within Backstage. To get started you [can read the documentation](https://www.eventcatalog.dev/docs/development/plugins/backstage/intro), [watch the video tutorial.](https://www.youtube.com/watch?v=mjf7qwoSAC4) or visit the [Backstage/EventCatalog demo on GitHub](https://github.com/event-catalog/backstage-eventcatalog-demo). This is the first version of the plugin. If you have any feature requests, ideas or problems feel to raise an [issue on GitHub](https://github.com/event-catalog/backstage-plugin-eventcatalog) or [join us on Discord](https://discord.com/invite/3rjaZMmrAm). ## Connecting Amazon EventBridge to EventCatalog[​](#connecting-amazon-eventbridge-to-eventcatalog "Direct link to Connecting Amazon EventBridge to EventCatalog") [Amazon EventBridge](https://aws.amazon.com/eventbridge/) is a collection of services ([scheduler](https://docs.aws.amazon.com/scheduler/latest/UserGuide/what-is-scheduler.html), [event bus](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-event-bus.html) and [event pipes](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-pipes.html)) provided by AWS to help developers build event-driven architectures. Since its launch in 2019 [Over 1.5 million AWS customers](https://aws.amazon.com/about-aws/whats-new/2024/02/amazon-eventbridge-event-bus-matching-event-ruler/) are using EventBridge to build event-driven architectures and applications and they process over 2.6 trillion events per month (impressive!). EventBridge additionally offers a [schema registry](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-schema.html). Users can create their own schema registries or EventBridge can version and manage schemas for you using the [schema discoverability feature](https://aws.amazon.com/blogs/compute/introducing-amazon-eventbridge-schema-registry-and-discovery-in-preview/). The registry also provides the ability to upload/download schemas, code binding support but we believe there is much more we can do to empower schema registries, this is where EventCatalog can help. Using EventCatalog and Amazon EventBridge you can visualize your event-driven architecture, add context to your EventBridge schemas and help your developers understand, download and visualise their architectures. ![EventBridge EventCatalog](/assets/images/eventbridge-5f5e2612d325ac4b00f864d861b01f41.png) [The EventCatalog EventBridge generator](https://www.eventcatalog.dev/docs/plugins/eventbridge/intro) pulls schemas from any schema registry, you can configure [custom prefix, suffix or match filters](https://www.eventcatalog.dev/docs/plugins/eventbridge/intro#using-filters-to-map-events-to-your-services) to match your schemas to your EventCatalog services. This gives you the ability to add governance and documentation to your architecture with automation from EventBridge schema registry. To get started, you install the generator and configure your `eventcatalog.config.js` file. eventcatalog.config.js ``` import path from 'path'; import url from 'url'; const __dirname = path.dirname(url.fileURLToPath(import.meta.url)); /** @type {import('@eventcatalog/core/bin/eventcatalog.config').Config} */ export default { // ... other configuration }, generators: [ [ '@eventcatalog/generator-eventbridge', { region: 'us-east-1', registryName: 'discovered-schemas', services: [ // Maps exact events to the service { id: 'Orders Service', version: '1.0.0', sends: [{ detailType: ['OrderPlaced', 'OrderUpdated'], receives:[{ detailType: "InventoryAdjusted"}]}] }, // Filter by source (all events that match the source get assigned). This example shows any event matching the source // "myapp.orders" will be assigned to the inventory service. The inventory service will publish these events. { id: 'Inventory Service', version: '1.0.0', sends: [{ source: "myapp.orders"}], receives:[{ detailType: "UserCheckedOut"}] }, // This service sends events that match the SchemaName prefixing myapp, and will receive events that end with Payment { id: 'Payment Service', version: '1.0.0', sends: [{ prefix: "myapp"}], receives:[{ suffix: "Payment" }] } ], // all services are mapped to this domain domain: { id: 'orders', name: 'Orders', version: '0.0.1' }, }, ], // Just import all events into the Catalog from a registry [ '@eventcatalog/generator-eventbridge', { region: 'us-east-1', registryName: 'discovered-schemas' }, ], // Example using optional credentials [ '@eventcatalog/generator-eventbridge', { region: 'us-east-1', registryName: 'discovered-schemas', credentials: { accessKeyId: 'X', secretAccessKey: 'X', accountId: 'X', }, }, ], ], }; ``` When you run or build your catalog, your schemas will be fetched and stored into the domains or services you specified. EventCatalog understands EventBridge schema versioning and will only download schemas if changes have been made, and version them for you in EventCatalog. If you are using Amazon EventBridge you can get started by [reading the documentation](https://www.eventcatalog.dev/docs/plugins/eventbridge/intro), or [watching the video tutorial](https://www.youtube.com/watch?v=MeBuwAflwM4). ## Fetch AsyncAPI files from remote URLS and generate your catalogs[​](#fetch-asyncapi-files-from-remote-urls-and-generate-your-catalogs "Direct link to Fetch AsyncAPI files from remote URLS and generate your catalogs") EventCatalog supports [integrations with your AsyncAPI specification files](/docs/plugins/asyncapi/intro.md). This lets you generate domains, services and messages from your AsyncAPI files. Users of EventCatalog are using this generator to pull in messages from teams across the organization to build a catalog of information that can help them discover services and messages with their architecture. Previously the [AsyncAPI generator](/docs/plugins/asyncapi/intro.md) only worked with file path support. This means you have to specify the path of the AsyncAPI on disk. Now the AsyncAPI generator supports fetching files from remote URLS. ``` [ '@eventcatalog/generator-asyncapi', { services: [ // Add AsyncAPI file by public URL { path: "https://raw.githubusercontent.com/event-catalog/eventcatalog-asyncapi-example/refs/heads/main/asyncapi-files/payment-service.yml", id: "Payment Service"}, // Add AsyncAPI file using file system { path: path.join(__dirname, 'asyncapi-files', 'fraud-detection-service.yml'), "Fraud Service"} ], domain: { id: 'payment', name: 'Payment', version: '0.0.1' }, // Run in debug mode, for extra output, if your AsyncAPI fails to parse, it will tell you why debug: true }, ], ``` This new feature lets you pull AsyncAPI files across many different locations. An example of this would be GitHub repositories. You can fetch AsyncAPI files from many different repositories, and have EventCatalog compile and parse them into a tool that helps you govern, document and discover your event-driven architecture. [To get started you read the documentation](https://www.eventcatalog.dev/docs/plugins/asyncapi/intro#fetch-asyncapi-files-by-url). ## Summary[​](#summary "Direct link to Summary") October has been a great month, the growth of the project has been incredible, and the feedback so far has been great. November is the first month I will be spending the majority of my time on the project. This will let me focus on growing the project, speaking with users, and working with users to help them improve their event-driven architecture and governance strategies. If you need any help with your event-driven architecture or governance strategies, I would love to work with you. Please reach out on `dave@eventcatalog.dev` At EventCatalog we still have many more features to explore, and problems to solve and I can’t wait to see what’s possible. If you have any questions, get stuck or want to join our community you can join us on our [Discord server.](https://eventcatalog.dev/discord) Until next time!, Dave **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-10-31-october-2024.md) --- # Whats new in EventCatalog - October 2025 November 7, 2025 · 8 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to another monthly update for EventCatalog. In this blog post I will summarise what was new to EventCatalog in October and how you can get started. *** ## EventCatalog Schema Explorer[​](#eventcatalog-schema-explorer "Direct link to EventCatalog Schema Explorer") Many teams building event-driven architectures have schema sprawl throughout their organization. Finding schemas can be hard. Most people are either directed to a schema registry (if you are lucky) or a random GitHub repo with the implementation details of the schema. We want to help people **save time** and make schemas more **discoverable** and **understandable** in organisations, not only for technical developers but for business stakeholders. This is why we built the [Schema Explorer](/docs/development/guides/schemas/schema-explorer.md). A new page to help teams save time and find the information they need. Teams can still have any schema registry as the source of truth, but with EventCatalog the schemas can be aggregated, filtered, and searchable helping teams find the information they need. ![EventCatalog Schema Explorer](/img/blogs/october-25/schema-explorer.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) Using the [Schema Explorer](/docs/development/guides/schemas/schema-explorer.md) teams can quickly filter and find the schema they need (e.g JSON, Avro, Proto, OpenAPI, AsyncAPI, GraphQL), and find the producers and consumers of these schemas. Teams can also track the versions of their schemas and quickly see a version has changed over time. ![EventCatalog Schema Explorer](/img/blogs/october-25/schema-diff.png)Schema diffs between versions Using the new [Schema API](/docs/development/guides/schemas/schema-api.md), teams can also programmatically get access to their schemas to help them with any local testing or integrations they need to do. This supports any specification or schema format you are using in your organization. ![EventCatalog MCP Schema Tools](/img/blogs/october-25/schema-api.png) For folks using AI and MCP servers, we also added new tools in the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) to help you get the information you need in the context you need it. We our new schema tools you can ask questions about your schemas and fetch them in your IDE, giving your teams the context they need when they need it. Saving them time searching for the information they need. ![EventCatalog MCP Schema Tools](/img/blogs/october-25/mcp-example.png)[Learn more about the EventCatalog MCP server →](/docs/development/ask-your-architecture/mcp-server/introduction.md) If you want to get started with the Schema Explorer you can read our [documentation page](/docs/development/guides/schemas/schema-explorer.md). ## Introduced Data stores into EventCatalog[​](#introduced-data-stores-into-eventcatalog "Direct link to Introduced Data stores into EventCatalog") After speaking to users of EventCatalog, we felt one thing missing, was the ability to model and document [data stores](/docs/development/guides/data/introduction.md) (e.g databases, caches, objectStores, searchIndex etc). So this is our first iteration into data architecture, starting with the data stores (containers). Data stores are like any other resource type in EventCatalog. You define them with markdown and frontmatter. When you define your data store they are given their own page in your catalog. Like any other resource type in EventCatalog, you can visualize them, assign schemas to them, version them, and more. ![EventCatalog Data Stores](/img/blogs/october-25/data-example.png)[Explore the data store example →](https://demo.eventcatalog.dev/docs/containers/order-metadata-store/0.0.1) Using the new data store resource you can document databases, caches, object stores, search indexes, and more, assign schemas to them and create read/write relationships with your services. You can now assign your services to to data stores using the new `readsFrom` and `writesTo` properties in your services. EventCatalog will then render and visualize the relationship between your services and their data layers. ![EventCatalog Studio](/img/blogs/october-25/visual-2.png) A new version of the [EventCatalog SDK](https://www.eventcatalog.dev/docs/sdk) has been released with support for data stores, and if you want to start documenting your data stores today you can [read our data store documentation](https://www.eventcatalog.dev/docs/data). Coming soon... We also want to start looking and how we can help data architects catalog information using EventCatalog. To do this we are exploring more channel to channel patterns in EventCatalog, and data product support in EventCatalog. If this is something you would be interested, reach out to me I would love to talk to you! ## EventCatalog MCP Server improvements[​](#eventcatalog-mcp-server-improvements "Direct link to EventCatalog MCP Server improvements") The [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) has been updated with new tools to help you get the information you need in the context you need it. You can ask questions about your schemas and fetch them in your IDE, giving your teams the context they need. **EventStorming to EventCatalog** This is more of an experimental tool, that will take a picture of your event storm and automatically create an EventCatalog for you. Upload your photo to your LLM and tell it to create you an EventCatalog. [Embedded post](https://www.linkedin.com/embed/feed/update/urn:li:ugcPost:7388597362094665728?compact=1) The EventCatalog MCP server gives your teams the ability to query, and find information you need in your MCP clients (e.g Cursor, Claude Desktop), giving you even more value from your documented architecture and saving time. You can find our [MCP server on GitHub](https://github.com/event-catalog/mcp-server), or [setup our MCP server with our guides.](https://www.eventcatalog.dev/docs/development/ask-your-architecture/mcp-server/introduction) ## Import all your resources into EventCatalog Studio[​](#import-all-your-resources-into-eventcatalog-studio "Direct link to Import all your resources into EventCatalog Studio") We want to make it easier to document flows in EventCatalog. How information flows across your organization with your messages, domains and services. We introduced a new feature that let’s you import all your resources from EventCatalog straight into EventCatalog Studio. This let’s you create new designs in Studio using our drag and drop editor and import them back into your documentation page, giving you more value from your documented architecture. [Embedded post](https://www.linkedin.com/embed/feed/update/urn:li:ugcPost:7381350769196756992?collapsed=1) ## Integration updates[​](#integration-updates "Direct link to Integration updates") The OpenAPI, AsyncAPI and GraphQL plugins for EventCatalog have been updated. You can now fetch schemas giving a remote URL. This will sync your schemas with your EventCatalog documentation. We have [many integrations with specifications and schema registries](/integrations.md), to help you integration with systems you already have. You can find the list of integrations here. ## Avro Schema Viewer Support[​](#avro-schema-viewer-support "Direct link to Avro Schema Viewer Support") Our [SchemaViewer](/docs/development/components/components/schema-viewer.md) now supports avro schemas, whilst will render your avro schemas in a new UI. This gives you the ability to render and filter your avro properties in the UI. ![EventCatalog Schema Viewer](/img/blogs/october-25/schema-reviewer.png) ## Summary[​](#summary "Direct link to Summary") October was a busy month for EventCatalog, and the project continues to grow. My project vision remains the same; bring discoverability to event-driven architectures and save teams time. A few things we want to focus on next include, channel to channel support, ability for domains to send and receive messages, exploring data products and flows, and stability of the project. If you like EventCatalog, [I would love a ⭐️ on GitHub](https://github.com/event-catalog/eventcatalog), and feel free to join our [Discord Channel](https://eventcatalog.dev/discord), which now has over 1,200 members! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [October](/blog/tags/october.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-11-07-october-2025.md) --- # EventCatalog now integrates with OpenAI April 23, 2025 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog We’re excited to announce that EventCatalog now supports seamless integration with [OpenAI](https://openai.com/). This new feature allows you to harness the power of OpenAI models and embeddings directly within your catalog. With this new feature you can bring your own OpenAI keys to EventCatalog and get architecture insights in seconds using [**EventCatalog Chat**](/features/ai-assistant.md). ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-chat.png)[View the documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md) ## How does it work?[​](#how-does-it-work "Direct link to How does it work?") **EventCatalog Chat** transforms how your team interacts with your event-driven architecture. Instead of digging through documentation or tracking down who produces what, you can simply ask. Want to know what events exist, how schemas are structured, or who’s publishing and consuming them? Just chat with your catalog and get instant answers—saving you time and effort. EventCatalog Chat can also **generate code** on the fly and supports custom prompts, allowing you to define reusable queries aligned with your organization's best practices and governance standards. Whether it's architecture insights or scaffolding code, your team can move faster with AI-powered support built right into your catalog. Previously, EventCatalog Chat relied solely on browser-based models—open-source models that ran entirely within the browser environment. While this offered a lightweight and privacy-conscious option, we heard your feedback loud and clear. Now, we’re excited to introduce support for bringing your own OpenAI models to EventCatalog, unlocking even more powerful capabilities for exploring and understanding your architecture. To get started you can read the [EventCatalog Chat Guide](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md) or watch the video below. [YouTube video player](https://www.youtube.com/embed/vhjRX4yAGIk?si=MehvKkJ9hFKe7hgH) ## Bring your own prompts[​](#bring-your-own-prompts "Direct link to Bring your own prompts") We're introducing a powerful new concept in EventCatalog Chat: **Bring Your Own Prompts**. This feature allows teams and organizations to define custom prompts tailored to their own standards, best practices, and workflows. With predefined prompts, you can guide how EventCatalog Chat responds—ensuring consistency, compliance, and faster results across your team. Here are a few examples of what you can do: * "Generate a JSON schema Following FlowwMart Standards" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-an-example-schema.mdx) * "Create a Kafka producer code for event" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-producer-code-for-event.mdx) * "Create Kafka consumer code for event" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-consumer-code-for-event.mdx) * "Create AWS Lambda function to Consume EventBridge Event" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-consumer-code-for-eventbridge-event.mdx) With BYO Prompts, your event-driven architecture just got a whole lot smarter—and more tailored to you. You can also make your prompts **dynamic**, allowing EventCatalog Chat to ask users for input before sending the prompt to your OpenAI model. For example, if you want to generate a JSON schema that follows your company’s best practices, you can first prompt the user to enter the **event name** they’re working with. This adds flexibility and interactivity to your custom prompts—making them more useful across different teams and scenarios. ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-chat-input.png)[View the prompt example](https://raw.githubusercontent.com/event-catalog/eventcatalog/refs/heads/main/examples/default/chat-prompts/code/create-an-example-schema.mdx) When the user submits the form, the AI model uses their input to generate a JSON schema—fully aligned with the standards and conventions your company defines. This ensures consistency while saving your team valuable time on repetitive tasks. ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-chat-input-output.png) Custom prompts can also capture **multiple inputs**, making them even more powerful. For instance, you can prompt users to select an **event** from a generated list based on your catalog, and choose a **programming language** from a predefined list. This gives your team a flexible and guided way to generate highly specific outputs—like language-specific producer or consumer code for a particular event. ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-list-of-events.png)[View the prompt example](https://raw.githubusercontent.com/event-catalog/eventcatalog/refs/heads/main/examples/default/chat-prompts/code/create-producer-code-for-event.mdx) The prompt is then sent to your OpenAI model, which generates the code based on the inputs provided. In the example above, a **TypeScript Kafka producer** is generated using the **Delivery Failed** event as the foundation—automatically tailored to your architecture and development standards. ## How to get started[​](#how-to-get-started "Direct link to How to get started") Check out our [EventCatalog Chat Guide](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md) to get started. If you have any questions or want to connect with the community, feel free to [join us on Discord](https://eventcatalog.dev/discord). ## Whats next?[​](#whats-next "Direct link to Whats next?") We’re just getting started. Up next, we’re working on expanding model support in EventCatalog—including the ability to configure additional providers like **Anthropic**, giving you more flexibility and choice in how you power your architecture insights. We’re also building features that let you **ask questions directly within your documentation pages**, so teams can get instant, contextual answers while exploring or working on your event-driven systems—saving even more time and reducing friction. Have questions or feedback? [Join us on Discord](https://eventcatalog.dev/discord)—we’d love to hear from you. Want a tailored walkthrough? [Book a custom demo](https://calendly.com/boyneyy123/30min)—we’re happy to help! ## FAQ[​](#faq "Direct link to FAQ") ### Can I configure which OpenAI model is used?[​](#can-i-configure-which-openai-model-is-used "Direct link to Can I configure which OpenAI model is used?") Yes, you can configure which OpenAI model is used by updating the `model` property in the `eventcatalog.config.js` file. You can also configure which embedding model is used. ### Is it secure?[​](#is-it-secure "Direct link to Is it secure?") Yes, it is secure. If you want to use your own OpenAI keys you can build EventCatalog as a `server` and bring your own OpenAI keys. A new `server` output type is available in EventCatalog. This will output a `server` application that you can run locally or in a cloud provider. You can read more about hosting a `server` in the [EventCatalog documentation](/docs/development/deployment/hosting-options.md#hosting-as-a-server). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAI](/blog/tags/open-ai.md) * [AI](/blog/tags/ai.md) * [Assistant](/blog/tags/assistant.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-04-23-openai.md) --- # Announcing the new EventCatalog SDK July 18, 2024 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce the release of the new [JavaScript/TypeScript EventCatalog SDK](https://github.com/event-catalog/sdk). This SDK is designed to help users programmatically interact with their EventCatalogs, streamlining the process of managing event-driven architectures. EventCatalog aims to facilitate the discovery and documentation of event-driven architectures, regardless of the broker or technology used. The EventCatalog SDK is a step towards this vision. Many EventCatalog users have requested integration support and automation capabilities (i.e GitHub Actions). With this SDK, we are starting to provide these options. Future releases will include broker integrations and plugins, expanding the SDK's functionality. The new SDK enables CRUD operations on your domains, services, and messages within your Catalog. Additionally, it allows you to add files and schemas to these resources, enhancing your ability to manage and document your event-driven architecture efficiently. ## Getting Started[​](#getting-started "Direct link to Getting Started") First, install the SDK by running: * pnpm * yarn * npm ``` pnpm add @eventcatalog/sdk ``` ``` yarn add @eventcatalog/sdk ``` ``` npm i @eventcatalog/sdk ``` Next, you need to initialize the SDK with the location of your catalog: ``` import utils from '@eventcatalog/sdk'; // tell utils where your EventCatalog path is const { getEvent, writeEvent, versionEvent, rmEventById } = utils('/my-eventcatalog'); // Write an event to EventCatalog (this would go to events/InventoryAdjusted) await writeEvent({ id: 'InventoryAdjusted', name: 'Inventory Adjusted', summary: 'Event raised when inventory has been adjusted', version: '1.0.0', markdown: `## Overview Inventory Adjusted is triggered when the inventory has been changed. ` }) // Get an event based on it's ID const event = await getEvent('InventoryAdjusted'); // Get an event based on its ID and version const event = await getEvent('InventoryAdjusted', '0.0.1'); // Take the latest event and version it await versionEvent('InventoryAdjusted'); // Remove the event from EventCatalog await rmEventById('InventoryAdjusted'); ``` You can find the [complete documentation for the SDK on our documentation website](https://www.eventcatalog.dev/docs/sdk). ### What's next?[​](#whats-next "Direct link to What's next?") We will continue to add new features to the SDK, with a major focus on open-source plugins and broker integrations. A variety of open-source [EventCatalog plugins will be developed](https://www.eventcatalog.dev/integrations), along with a CLI to create new plugins. EventCatalog will support configuration with both custom and off-the-shelf plugins, allowing integration with schema registries, [AsyncAPI](https://www.asyncapi.com/) files, and more. If you have any questions, feature ideas, or would like to discuss EventCatalog features with your team, [join our Discord community](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [SDK](/blog/tags/sdk.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-07-18-introducing-eventcatalog-sdk.md) --- # EventCatalog September 2024 update September 29, 2024 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog September 2024 has been a great month for EventCatalog. In this blog post I want to highlight some growth and new features you can start using with EventCatalog. ### 📈 Growth[​](#-growth "Direct link to 📈 Growth") * 1,258 new catalogs were created, bringing the total to 16,974. * Our [Discord community](https://eventcatalog.dev/discord) now has over 800 members. * 1,703 total GitHub stars ### ⭐️ Features and improvements[​](#️-features-and-improvements "Direct link to ⭐️ Features and improvements") * [OpenAPI and AsyncAPI integrations](#openapi-and-asyncapi-integrations) * [New landing page for all catalogs](#new-landing-page-for-all-catalogs) * [UX improvements to visualizer](#ux-improvements-to-visualizer) * [New components to use in your Catalog (Tiles and Steps)](#new-tile-and-steps-components) * [Build your own generators with the new plugin generator](#plugin-generator-template) ## OpenAPI and AsyncAPI integrations[​](#openapi-and-asyncapi-integrations "Direct link to OpenAPI and AsyncAPI integrations") EventCatalog now has OpenAPI and AsyncAPI integrations using [EventCatalog generators](https://www.eventcatalog.dev/docs/plugins/generators). Generators are custom scripts or plugins that you can run before the build process of your Catalog. ![Plugins](/assets/images/plugins-04c531a2208bd2cd17cba85ff98daa7e.png) Generators give you the ability to automate the build and contents of your EventCatalog. In September we launched the integrations with [AsyncAPI](https://www.eventcatalog.dev/blog/asyncapi-eventcatalog) and [OpenAPI](https://www.eventcatalog.dev/blog/openapi-eventcatalog). These generators allow you to generate business domains, services and messages from your specification files. The generators also include the ability to handle automatic versioning, combine generators together ([see example](https://github.com/event-catalog/eventcatalog-multi-generator-example)) and host your specification files inside your catalog ([see demo application](https://demo.eventcatalog.dev/docs/services/OrdersService/0.0.3)). If you are using AsyncAPI or OpenAPI specifications for your architectures you can automate your catalog creation and maintenance. To get started you can read the guides: * [Getting started with AsyncAPI generator](https://www.eventcatalog.dev/docs/plugins/asyncapi/intro) * [Getting started with OpenAPI generator](https://www.eventcatalog.dev/docs/plugins/openapi/intro) ## New landing page for all Catalogs[​](#new-landing-page-for-all-catalogs "Direct link to New landing page for all Catalogs") A new landing page has been created for all catalogs. This loads on the route of your catalog and allows you to see how many domains, services and messages are in your Catalog at a high level. ![image.png](/assets/images/landing-page-246e33d60aaecfb18183fba9ec383fb3.png) [View the demo to see it in action.](https://demo.eventcatalog.dev/) ## UX improvements to visualizer[​](#ux-improvements-to-visualizer "Direct link to UX improvements to visualizer") New UX improvements to the [visualizer](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3) have been added. When viewing your domains, services and messages you can now go full screen mode. ![Visualizer example](/assets/images/visualizer-0c86da4f46f6650c5184ffbaaa6fcea3.png) Clicking on your services and messages in your visualizer will now highlight the attached nodes. This gives you the ability to quickly find what messages a service is sending and receiving. ![Visualizer zoom](/assets/images/visualizer-zoom-7d337ae8b5f57173994039ece38e0a4b.gif) [You can try the new visualizer out in the demo application.](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3) ## New tile and steps components[​](#new-tile-and-steps-components "Direct link to New tile and steps components") The new [Tiles](https://www.eventcatalog.dev/docs/development/components/components/tiles) and [Steps](https://www.eventcatalog.dev/docs/development/components/components/steps) components have been added to EventCatalog. These let you organise your content in different ways. **Tiles example** ![Tiles component](/assets/images/tiles-e7443792183f81c94a72c6fed703f272.png) **Steps example** ![Steps component](/assets/images/steps-809ffee08d03d11bbe0223e28631d25b.png) To get started with the new components you can read the documentation: * [Getting started with Tiles component](https://www.eventcatalog.dev/docs/development/components/components/tiles) * [Getting started with Steps component](https://www.eventcatalog.dev/docs/development/components/components/steps) ## Automatic diffs in Changelogs[​](#automatic-diffs-in-changelogs "Direct link to Automatic diffs in Changelogs") EventCatalog allows you to store schemas, API specifications and custom files along side your domains, services and messages. For [example you can add specifications to a service](https://www.eventcatalog.dev/docs/development/guides/services/adding-to-services/openapi). When you version your resources, you can also version the files. When you do this, EventCatalog will match the current version to it's previous version and calculate if any diffs should be displayed in your changelog page. ![Visualizer zoom](/assets/images/change-logs-c49a1dce2b22fd6355d901b29295dd13.png) With this new feature EventCatalog can show your teams diffs between your schemas, and you can add custom markdown to these diffs to document the changes between domains, services and messages. To learn more you can get started [via the documentation](https://www.eventcatalog.dev/docs/development/guides/changelogs/automated-changelogs). ## Plugin generator template[​](#plugin-generator-template "Direct link to Plugin generator template") Want to write your own generator or custom integrations with EventCatalog? You can now get started using our [generator template on GitHub](https://github.com/event-catalog/generator-template). **This is a template project to help you get started creating your own automations with EventCatalog.** If you want a custom integration, we also offer [services to help.](https://www.eventcatalog.dev/services) We can help you get up and running with EventCatalog, create custom Catalogs and custom integrations with your system. If you want to learn more send us an email at `hello@eventcatalog.dev`. ## **Sponsor EventCatalog**[](https://www.eventcatalog.dev/blog/eventcatalog-august-2024#want-to-sponsor-eventcatalog)[​](#sponsor-eventcatalog "Direct link to sponsor-eventcatalog") We are happy to announce that [Hookdeck](https://hookdeck.com/?ref=eventcatalog-sponsor) have continued to Sponsor the project through October 2024, this helps us keep EventCatalog free and make the project sustainable. If you or your company would like to support EventCatalog you can reach out to us on [`hello@eventcatalog.dev`](mailto:hello@eventcatalog.dev) to learn more about our sponsor packages or sponsor our work through [GitHub](https://github.com/sponsors/event-catalog). ## Work with us[​](#work-with-us "Direct link to Work with us") [](https://www.eventcatalog.dev/blog/eventcatalog-august-2024#need-help) EventCatalog offers [professional services](https://www.eventcatalog.dev/services). These range from workshops, to getting hands on to help you and your teams build your EventCatalog, setup automation and host your catalog. If you are interested in talking you can reach out to me on [LinkedIn](https://www.linkedin.com/in/david-boyne/) or email at `hello@eventcatalog.dev` ## Summary[](https://www.eventcatalog.dev/blog/eventcatalog-august-2024#summary)[​](#summary "Direct link to summary") On a personal note September has been a great month. It’s been awesome to see EventCatalog continue to grow and more companies using EventCatalog. I appreciate the community helping out with issues and their pull requests, and I believe we are onto something great here. [I’m super passionate about event-driven architecture governance](https://www.youtube.com/watch?v=VLUvfIm9wnQ) and solving complexity issues and I believe EventCatalog is on the way to help solve many of these issues. We still have many more features to explore, and problems to solve and I can’t wait to see what’s possible. If you have any questions, get stuck or want to join our community you can join us on our [Discord server.](https://eventcatalog.dev/discord) Until next time!, Dave *** ### **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-09-29-september-2024.md) --- # Whats new in EventCatalog - September 2025 October 2, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to EventCatalog’s monthly update! 🎉 September was a big month — we launched [**EventCatalog Studio**](#eventcatalog-studio), introduced a new [**GraphQL Plugin**](#the-new-graphql-plugin), added [**Data Stores**](#eventcatalog-data-stores) as a new resource type, and shipped a range of smaller improvements. In this post, we’ll take a look at what’s new, what’s coming next, and how you can get started. *** ## EventCatalog Studio[​](#eventcatalog-studio "Direct link to EventCatalog Studio") We’re excited to announce the launch of [EventCatalog Studio](https://www.eventcatalog.studio/) — our new visual design tool for distributed systems. Many developers already love the [EventCatalog visualizer](https://demo.eventcatalog.dev/visualiser/domains/E-Commerce/1.0.0), which gives you a static view of your architecture. With EventCatalog Studio, you can **take that experience further**: design diagrams interactively, collaborate with your team, and save drafts locally — all using architecture primitives. ![EventCatalog Studio](/img/blogs/september-25/studio.png)[Explore the playground →](https://app.eventcatalog.studio/playground) Our goal is to make designing and collaborating on event-driven architectures easier than ever. With EventCatalog Studio you can: * Import your existing EventCatalog diagrams. * [Add documentation to your designs](https://www.eventcatalog.dev/docs/studio/diagrams/adding-documentation) * Explore and sketch out new ideas. * [Save designs locally for offline work](https://www.eventcatalog.dev/docs/studio/diagrams/import-export). * [Re-import designs back into EventCatalog when ready](https://www.eventcatalog.dev/docs/studio/diagrams/import-export). * [Embed diagrams directly into your documentation](https://www.eventcatalog.dev/docs/studio/diagrams/eventcatalog-embed). You can jump straight in today. Try [EventCatalog Studio](https://www.eventcatalog.studio/) or experiment in our [playground](https://app.eventcatalog.studio/playground). ## EventCatalog Data Stores[​](#eventcatalog-data-stores "Direct link to EventCatalog Data Stores") You can now document your [data stores in EventCatalog](/docs/development/guides/data/introduction.md) — whether they’re databases, caches, object stores, search indexes, or anything else — and define which services read from or write to them. This new feature gives your teams a clearer picture of how data flows across your architecture: who owns the data, and which services depend on it. ![Example](/assets/images/data-example-147f3041afae6ef63c0a283762e9e704.png) We’ve also updated the visualizer to include two new perspectives: * Service view → see which data stores a service uses ([see demo](https://demo.eventcatalog.dev/visualiser/services/BillingService/0.0.1/data)) * Data store view → see which services depend on a specific data store ([see demo](https://demo.eventcatalog.dev/visualiser/containers/inventory-readmodel/0.0.1)) Data stores take inspiration from the C4 model (containers), giving you a more complete way to document and explore your systems. You can start adding Data Stores today — check out the [documentation](https://www.eventcatalog.dev/docs/development/guides/data/introduction) to get going. ## The new GraphQL Plugin[​](#the-new-graphql-plugin "Direct link to The new GraphQL Plugin") GraphQL has become a go-to for many teams building distributed systems. With our [new **GraphQL Plugin**](https://www.eventcatalog.dev/integrations/graphql), you can now turn your GraphQL schemas directly into EventCatalog documentation. The plugin automatically maps your GraphQL operations into EventCatalog concepts: * **Queries → Queries** * **Mutations → Commands** * **Subscriptions → Events** You can also assign your GraphQL schemas to specific services and domains in your architecture, making it easier to see how everything connects. [YouTube video player](https://www.youtube.com/embed/J352QYLWQkw?si=hwwKr-k2IENfICmR) This unlocks powerful automation — your catalogs can now be generated directly from your GraphQL schemas. And when combined with our [**OpenAPI**](https://www.eventcatalog.dev/integrations/openapi) and [**AsyncAPI**](https://www.eventcatalog.dev/integrations/asyncapi) plugins, you have a strong foundation for documenting a wide range of services and technologies. Get started by checking out the [GraphQL Plugin docs](https://www.eventcatalog.dev/integrations/graphql) or watch the [demo video](https://www.youtube.com/watch?v=J352QYLWQkw). *** ## Introducing Attachments to all Resources[​](#introducing-attachments-to-all-resources "Direct link to Introducing Attachments to all Resources") We added the ability to add attachments to any resource type in EventCatalog. A new feature that allows you to link external resources, diagrams, and documentation directly to your domains, services, events, commands, queries, and channels. Many teams and organizations have information scattered across different tools and platforms. This makes it difficult to find the information you need when you need it. With Attachments, you can now link to external resources, diagrams, and documentation directly to your EventCatalog resources. ![EventCatalog Attachments](/img/blogs/attachments-blog/attachment-example.png) To learn more and get started you [can read our blog post on attachments](https://www.eventcatalog.dev/blog/eventcatalog-attachments). ## Other improvements[​](#other-improvements "Direct link to Other improvements") As usual we have updated our dependencies in the project and we have also added support for [Structurizr](https://www.eventcatalog.dev/docs/development/components/structurizr). If you have any issues or want to join our community of over 1200 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [September](/blog/tags/september.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-10-02-september-2025.md) --- # Introducing Themes and Dark Mode January 8, 2026 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that EventCatalog now supports **Themes and Dark Mode**, giving you full control over the look and feel of your catalog. Whether you prefer working in a dark environment, want to match your company's brand colors, or simply want a fresh new look, EventCatalog has you covered. ## Dark Mode[​](#dark-mode "Direct link to Dark Mode") ![EventCatalog Dark Mode](/img/blogs/dark-theme.png)[View the demo](https://demo.eventcatalog.dev) Dark mode has been a requested feature, and it's finally here. EventCatalog now automatically detects your system preference and displays the appropriate theme. ### How it works[​](#how-it-works "Direct link to How it works") * **System preference by default**: New visitors see light or dark mode based on their operating system preference * **Theme toggle**: Users can switch between light and dark mode using the toggle in the header * **Remembers your choice**: Once you manually select a theme, your preference is saved for future visits * **Syncs across tabs**: Theme changes automatically sync across browser tabs ## Built-in Themes[​](#built-in-themes "Direct link to Built-in Themes") EventCatalog comes with five carefully crafted themes out of the box: | Theme | Description | | ---------- | --------------------------------------------- | | `default` | Purple accent, the original EventCatalog look | | `ocean` | Teal accent, calm and professional | | `sapphire` | Blue accent, premium enterprise feel | | `sunset` | Orange accent, warm and energetic | | `forest` | Dark green accent, natural and grounded | To set a theme, simply add it to your `eventcatalog.config.js`: eventcatalog.config.js ``` export default { // ... other config theme: 'sapphire', }; ``` ## Custom Themes[​](#custom-themes "Direct link to Custom Themes") For teams that need complete brand alignment, EventCatalog supports fully custom themes. Define your own colors using CSS variables in `eventcatalog.styles.css`. eventcatalog.styles.css ``` /* Light Mode */ :root[data-catalog-theme="my-brand"], :root[data-catalog-theme="my-brand"][data-theme="light"] { --ec-accent: 220 38 38; --ec-accent-hover: 185 28 28; --ec-button-bg: 185 28 28; --ec-sidebar-active-bg: 185 28 28; } /* Dark Mode */ :root[data-catalog-theme="my-brand"][data-theme="dark"] { --ec-accent: 248 113 113; --ec-accent-hover: 239 68 68; --ec-button-bg: 220 38 38; } ``` Then reference your custom theme in the config: eventcatalog.config.js ``` export default { theme: 'my-brand', }; ``` Custom themes give you control over every aspect of the UI, from headers and sidebars to buttons and form inputs. Custom Themes Availability Custom themes are available on Starter, Scale and Enterprise plans. [Learn more about our plans](/pricing.md). ## Get Started[​](#get-started "Direct link to Get Started") Upgrade to the latest version of EventCatalog to start using themes and dark mode: ``` npm install @eventcatalog/core@latest ``` Check out the [themes documentation](/docs/development/customization/themes.md) for the full list of CSS variables and examples. *** ## Join the Community[​](#join-the-community "Direct link to Join the Community") Have questions or want to share your custom theme? [Join our Discord community](https://eventcatalog.dev/discord). We'd love to see what you create! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Themes](/blog/tags/themes.md) * [Dark Mode](/blog/tags/dark-mode.md) * [Customization](/blog/tags/customization.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-08-introducing-themes-and-dark-mode.md) --- # Introducing EventCatalog v2 July 4, 2024 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Event-driven architectures share a common challenge: their complexity can quickly escalate as more domains, services, and messages are added. As business requirements evolve and teams adapt, **governing and understanding this distributed architecture becomes increasingly difficult**. What begins as a straightforward system often transforms into a complex structure with minimal documentation and discoverability, leaving most people struggling to comprehend it *([I share my thoughts on EDA complexity in this GOTO EDA Day 2024 keynote](https://youtu.be/VLUvfIm9wnQ?si=knTL9MABy-ubmdcs))*. In [January 2022 EventCatalog v1 was launched](https://www.boyney.io/blog/2022-01-11-introducing-eventcatalog) to help bring discoverability and documentation to event-driven architectures. Since its inception, EventCatalog has seen over 13,000 catalogs created, attracted 45 contributors, grown a community of more than 600 members on [Discord](https://eventcatalog.dev/discord) and was added to [Thoughtworks Technology Radar](https://www.thoughtworks.com/en-gb/radar/tools/eventcatalog). The growing popularity of EventCatalog in recent years highlights the challenges of complexity in building event-driven architectures. It also highlights the importance of discoverability and documentation. That's why I'm excited to announce the release of EventCatalog v2. ## EventCatalog V2[​](#eventcatalog-v2 "Direct link to EventCatalog V2") ![Example of EventCatalog v2](/assets/images/hero-banner-4-139607c7a0d29fb1e36eb9915dc323ca.png) EventCatalog (v2) has been completely rewritten from the ground up, incorporating lessons from EventCatalog v1 and introducing a host of new features on a fresh foundation. These enhancements include: * A refreshed UI and improved developer experience ([demo](https://demo.eventcatalog.dev)) * Documentation for new resources: domains, services, and messages (commands, events, and soon, queries) * [Visualizer support](https://eventcatalog-v2-eventcatalog-2.vercel.app/visualiser) for all resources within EventCatalog * A new discoverability feature that enables quick filtering and searching for resources in a tabular format ([demo](https://eventcatalog-v2-eventcatalog-2.vercel.app/discover/events)) * Versioning capabilities for domains, services, and messages * New landing pages for users and teams ([demo](https://demo.eventcatalog.dev/docs/teams/full-stack)) * Rewritten using [Astro](https://astro.build/) for faster build times and reduce complexity * Hot-reload support for catalog changes * New components for your catalogs ([read more](/docs/development/components/using-components.md)) * Ability to search your catalog ([demo](https://eventcatalog-v2-eventcatalog-2.vercel.app/docs)) * [Enterprise support](/enterprise.md) * And much more... This new foundation enables faster development and future feature support, including schema registry, API support, broker integrations (plugins), and more. If you already have a previous version of EventCatalog you can [read the migration guide](/docs/starting-a-new-project/getting-started.md). ## Getting started[​](#getting-started "Direct link to Getting started") You can use the EventCatalog CLI tool you can create an EventCatalog in seconds. ``` # Install your new catalog npx @eventcatalog/create-eventcatalog@latest [name] # Example npx @eventcatalog/create-eventcatalog@latest my-catalog ``` Read the [installation guide for more information](/docs/development/getting-started/installation.md). *Already have an EventCatalog? [Read the migration guide](/docs/starting-a-new-project/getting-started.md).* ## Introducing enterprise support[​](#introducing-enterprise-support "Direct link to Introducing enterprise support") EventCatalog now offers [enterprise support](/enterprise.md), this support includes **priority support**, **private support channels**, **custom integrations**, **priority feature development** and more. If you are using EventCatalog and would like to work together you can contact us on `hello@eventcatalog.dev` or read more details on the [enterprise support page](/enterprise.md). ## What’s next?[​](#whats-next "Direct link to What’s next?") **EventCatalog v2 is just the start**, next on the roadmap (July 2024) is plugin support and plugin documentation. EventCatalog's vision is to integrate with any broker in the world, which will be powered by custom plugins. ![Integrations into EventCatalog](/assets/images/integrations-e3dacf1e1c9239965942ef4615bd3b64.png) Other features include EventCatalog as a schema registry, API support, single sign on support, hosting options and much more. If you have an idea for a feature or any questions feel free to [raise an issue](https://github.com/event-catalog/eventcatalog) or join us on [Discord](https://eventcatalog.dev/discord). ## Summary[​](#summary "Direct link to Summary") **Complexity in event-driven architectures is inevitable**, but we believe it can be managed through effective governance and documentation. EventCatalog was initially created to assist teams in documenting their event-driven architectures and has proven valuable to hundreds of companies worldwide. The new version of EventCatalog builds on this vision and mission, offering enhanced tools for managing the complexity of event-driven architectures through improved documentation and discoverability. We are excited to see the possibilities and path that lie ahead. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-07-04-introducing-eventcatalog-v2.md) --- # Introducing EventCatalog v3 January 7, 2026 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog It's been over 18 months since EventCatalog v2 was released, and what a journey it's been. Since then, EventCatalog has grown beyond anything I could have imagined. The community on [Discord](https://eventcatalog.dev/discord) has now surpassed 1,200 members, we've shipped over 70 releases, introduced countless new features, and watched teams around the world use EventCatalog to bring discoverability and documentation to their architectures. Today, I'm excited to announce **EventCatalog v3**. ## Why v3?[​](#why-v3 "Direct link to Why v3?") Over the past 18 months, we've listened carefully to the community. As catalogs grew larger with more domains, services, messages, and resources, we saw common patterns emerge around navigation, performance, and customization. **EventCatalog v3 is our response to these challenges.** We've worked hard to minimize breaking changes while delivering meaningful improvements to how teams discover and navigate their architecture documentation. This release focuses on three key areas: 1. **Navigation**: A completely redesigned navigation system that scales with your architecture 2. **Performance**: New caching and state management for faster load times 3. **Simplicity**: Streamlined AI integrations and a cleaner, more focused experience ## What's new in EventCatalog v3[​](#whats-new-in-eventcatalog-v3 "Direct link to What's new in EventCatalog v3") ### New context-aware navigation[​](#new-context-aware-navigation "Direct link to New context-aware navigation") The most significant change in v3 is the completely redesigned navigation system. ![EventCatalog Sidebar](/img/blogs/3.0.0/docs-sidebar.png)[View the demo](https://demo.eventcatalog.dev) In v2, the sidebar navigation worked well for smaller catalogs but became increasingly difficult to manage as organizations scaled. Teams with hundreds of resources found themselves scrolling endlessly or struggling to find what they needed. **The new context-aware navigation solves this by:** * **Showing relevant information**: Navigation adapts based on the resource you're viewing * **Enabling drilldown exploration**: Navigate through your architecture naturally, drilling down into domains, services, and messages * **Supporting favorites**: Pin frequently accessed resources for quick access * **Being fully customizable**: Define your own navigation structure that fits your team's needs This change means the old `LIST_VIEW` and `SIDE_VIEW` sidebar options have been removed. The new system is more flexible and powerful than both combined. You can read more in the [documentation sidebar guide](/docs/development/customization/customize-sidebars/documentation-sidebar.md). ### Performance improvements[​](#performance-improvements "Direct link to Performance improvements") EventCatalog v3 introduces a new caching system and adopts `nanostores` for state management across pages. **What does this mean for you?** * Faster page loads and navigation * Search no longer requires a full build, it works instantly * The demo catalog now scores 100/100 on Lighthouse These improvements are especially noticeable on larger catalogs where the previous architecture could become sluggish. ### New search experience[​](#new-search-experience "Direct link to New search experience") We've replaced Pagefind with a new search implementation powered by nanostores. The old approach required running search indexing after every build. **Now, search just works.** No additional build steps, no waiting, just instant results as you type. ### Simplified AI with EventCatalog Assistant[​](#simplified-ai-with-eventcatalog-assistant "Direct link to Simplified AI with EventCatalog Assistant") We've retired EventCatalog Chat and the `@eventcatalog/generator-ai` package in favor of the new [EventCatalog Assistant](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md). ![EventCatalog Assistant](/img/blogs/3.0.0/ai.png)[View the documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md) The new approach is simpler and more powerful: * Bring any AI model you want: OpenAI, Anthropic, local models, and more * Control over the tools you want to use * Single configuration file for AI settings * Context aware conversations with your resources * More natural conversation flow with your architecture If you were using the old chat feature, migration is straightforward. Just remove the old package and follow the [AI Assistant setup guide](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md). ### Store business workflows with services and domains[​](#store-business-workflows-with-services-and-domains "Direct link to Store business workflows with services and domains") A highly requested feature: you can now assign **flows** to your services and domains. This allows you to document business workflows, user journeys, and feature flows alongside your technical architecture. It bridges the gap between business and technical documentation. domains/Orders/index.mdx ``` --- id: Orders flows: - id: checkout-flow - id: refund-flow --- ``` ### New homepage[​](#new-homepage "Direct link to New homepage") EventCatalog v3 introduces a fresh default homepage for your catalog. If you want to customize it, you can create a `/pages/homepage.astro` file with your own content. The old `/pages/index.mdx` approach has been removed in favor of this more flexible Astro-based customization. ## What's changed[​](#whats-changed "Direct link to What's changed") ### Breaking changes[​](#breaking-changes "Direct link to Breaking changes") We've worked hard to minimize breaking changes, but a few are necessary for v3: * **Domain hierarchy is now explicit**: Domains no longer automatically inherit all resources from subdomains. You now specify exactly what belongs in each domain. [Read more](/docs/development/upgrading/v3.md#changed-domain-hierarchy-changed). * **Authentication configuration**: If you're using authentication, you'll need to add `auth.enabled: true` to your config. [Read more](/docs/development/upgrading/v3.md#changed-authentication). * **Only MDX files supported**: EventCatalog no longer supports `.md` files. Run `eventcatalog convert` to convert any remaining markdown files. ### What's been removed[​](#whats-been-removed "Direct link to What's been removed") * The `/architecture/` overview pages have been replaced with per-domain and per-service architecture views * The resource sidebar (right-side panel) is now integrated into the new navigation * The visualizer sidebar icon (access the visualizer through the new navigation instead) * EventCatalog Chat prompts (custom prompts will return in a future update) ## Upgrading to v3[​](#upgrading-to-v3 "Direct link to Upgrading to v3") Upgrading is straightforward for most catalogs: ``` npm install @eventcatalog/core@latest ``` We recommend reviewing the [full upgrade guide](/docs/development/upgrading/v3.md) to understand all changes and ensure a smooth transition. If you're running v2, you can continue to reference the [v2 documentation](https://v2.eventcatalog.dev/) as needed. ## Looking ahead[​](#looking-ahead "Direct link to Looking ahead") EventCatalog v3 lays the foundation for what's coming next. With the new navigation system and improved performance, we're better positioned to deliver features the community has been asking for: * [Domain-level events and specifications](https://github.com/event-catalog/eventcatalog/issues/1816) * [Container support in EventCatalog](https://github.com/event-catalog/eventcatalog/issues/1819) * [Data products](https://github.com/event-catalog/eventcatalog/issues/1818) * [Webhook support](https://github.com/event-catalog/eventcatalog/issues/1814) We're also continuing to improve our integrations with schema registries, API gateways, and developer portals like Backstage. ## Thank you[​](#thank-you "Direct link to Thank you") EventCatalog wouldn't be where it is today without the community. Every bug report, feature request, Discord conversation, and GitHub star has helped shape this release. **Complexity in event-driven architectures is inevitable**, but it can be managed through effective documentation and discoverability. That vision hasn't changed since v1, and v3 brings us closer to making it a reality for teams of all sizes. If you like EventCatalog, [I would love a star on GitHub](https://github.com/event-catalog/eventcatalog), and feel free to join our [Discord community](https://eventcatalog.dev/discord) of over 1,200 members. Thank you for being part of this journey. Here's to the next chapter. *** **Ready to get started?** ``` # New catalog npx @eventcatalog/create-eventcatalog@latest my-catalog # Upgrade existing catalog npm install @eventcatalog/core@latest ``` [Read the upgrade guide](/docs/development/upgrading/v3.md) | [View the demo](https://demo.eventcatalog.dev) | [Join Discord](https://eventcatalog.dev/discord) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-07-introducing-eventcatalog-v3.md) --- # Model external systems in EventCatalog April 14, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.28.0 adds a small but useful flag to services: `externalSystem: true`. Set it on any service (like Stripe, Twilio, or Snowflake) and EventCatalog will treat it as a third-party dependency rather than something your team owns. ![Stripe rendered as a purple external system node in the visualiser, connected to ChargeCard, StripeChargeSucceeded, StripeChargeFailed, and PaymentGatewayService](/img/blogs/external-systems/stripe-visualiser.png)Stripe modelled as an external system, sending and receiving messages just like any other service ## Why add this?[​](#why-add-this "Direct link to Why add this?") Most production systems depend on third parties. You call Stripe to charge cards. You call Twilio to send SMS. You stream events into Snowflake for analytics. Before this release you had two options, and neither was great. You could model Stripe as a regular [service](/docs/development/guides/services/introduction.md), but then it looked identical to your own services on the visualiser, which made it hard to see where your system actually ends and a third party begins. Or you could leave third parties out of your catalog entirely, which meant the integration contracts lived in wikis, Slack threads, and engineers' heads. Now there is a third option. ## What changes[​](#what-changes "Direct link to What changes") External systems are **still services**. They share the whole services schema; they can send and receive messages, have owners, have specifications, have versions, appear in [flows](/docs/development/guides/flows/introduction.md). Nothing about that changes. What the flag changes is how they're presented: * On the **visualiser** they render purple with a Globe icon and an "External System" badge, so you can see at a glance which parts of your architecture you don't own. * In the **sidebar** they get their own "External Systems" section at the root, and an "External Integrations" group inside each domain, separate from your own services. * On the **discover** page there's a new "External Systems" tab alongside "Services", so you can inventory every third-party dependency in one place. ![Domain sidebar showing Services In Domain followed by a new External Integrations section containing Stripe](/img/blogs/external-systems/sidebar-external-integrations.png)Inside the Payment domain, Stripe sits under "External Integrations", separate from the services your team owns ## How to use it[​](#how-to-use-it "Direct link to How to use it") Add `externalSystem: true` to a service's frontmatter. That's it. Here's a minimal Stripe example: services/Stripe/index.mdx ``` --- id: Stripe name: Stripe version: 1.0.0 summary: External payment processor used to charge customer cards. externalSystem: true receives: - id: ChargeCard version: 0.0.1 sends: - id: StripeChargeSucceeded version: 0.0.1 - id: StripeChargeFailed version: 0.0.1 --- ``` Because external systems send and receive messages like any other service, the service that talks to Stripe just mirrors it. In this case `PaymentGatewayService` sends the `ChargeCard` command and receives the two webhook events back: services/PaymentGatewayService/index.mdx ``` --- id: PaymentGatewayService name: Payment Gateway Service version: 1.0.0 sends: - id: ChargeCard version: 0.0.1 receives: - id: StripeChargeSucceeded version: 0.0.1 - id: StripeChargeFailed version: 0.0.1 --- ``` That's your entire Stripe integration documented, and it shows up on the visualiser as a complete round trip. No manual diagrams to keep in sync. ![Stripe rendered as a purple external system node in the visualiser, connected to ChargeCard, StripeChargeSucceeded, StripeChargeFailed, and PaymentGatewayService](/img/blogs/external-systems/stripe-visualiser.png)Stripe on the visualiser as a purple external system, with the full integration contract to PaymentGatewayService visible ## Getting started[​](#getting-started "Direct link to Getting started") If you already have a service in your catalog that represents a third-party system, just add `externalSystem: true` to its frontmatter and restart your catalog. The sidebar and visualiser pick up the change automatically. If you're starting from scratch, the [creating an external system](/docs/development/guides/services/creating-external-systems.md) guide walks through the full Stripe example. For a refresher on how services work, see the [services introduction](/docs/development/guides/services/introduction.md). As always, questions and feedback are welcome on [Discord](https://discord.gg/eventcatalog) or on [GitHub](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Services](/blog/tags/services.md) * [Visualiser](/blog/tags/visualiser.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-04-14-external-systems.md) --- # Which fields are your consumers actually using? March 17, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.24.0 adds a new optional capability: **field-level usage tracking**. You can now document which specific fields each consuming service depends on, and see that information surfaced directly on the message page. ## Going one level deeper[​](#going-one-level-deeper "Direct link to Going one level deeper") EventCatalog already tells you which [services](/docs/development/guides/services/introduction.md) consume a message (example below). ![Producer and consumer](/img/blogs/producer-consumer.png)[See demo](https://demo.eventcatalog.dev/visualiser/services/OrdersService/0.0.3) Field Usage lets you go a level further. When consumers declare which fields they use, the message page gains a dedicated **Field Usage** view showing every schema property alongside the services that depend on it. ![Field Usage](/img/blogs/field-usage-2.png)[Field usage page - See which fields your consumer uses](#) Field usage is optional, and for those teams that want to document how their consumers are using the messages they consume. You can track all the fields, just key fields or no fields, it's up to you. ## How to declare field usage[​](#how-to-declare-field-usage "Direct link to How to declare field usage") Add a `fields` array to any entry in the `receives` pointer of a service or [domain](/docs/development/guides/domains/introduction.md): In this example we declare that the `NotificationService` consumes a message called `PaymentProcessed` and they fields it consumes (or are important to it) are the `orderId`, `amount` `currency` and `customerEmail`. services/NotificationService/index.mdx ``` --- id: NotificationService name: Notification Service receives: - id: PaymentProcessed version: 1.0.0 fields: - orderId - amount - currency - customerEmail --- ``` Once at least one service has declared fields for a message, a **Field Usage** link appears in that message's sidebar under "API & Contracts." ## What the Field Usage page shows[​](#what-the-field-usage-page-shows "Direct link to What the Field Usage page shows") The page renders a table of every schema property with four columns: field name, type, description, and which consumers depend on it. Field metadata is extracted automatically from the message's schema. **JSON Schema, Avro, and Protobuf are all supported.** A **"Consumed only" filter** lets you hide fields that no service has declared, so you can focus on the populated parts of the table. If a consumer declares a field name that does not exist in the schema, a **"Fields not found in schema"** warning section flags it. This catches typos and declarations that have drifted out of sync with the actual schema. ## A quick example[​](#a-quick-example "Direct link to A quick example") Say three services consume `PaymentProcessed` and their declarations look like this: | Field | NotificationService | AnalyticsService | FraudDetectionService | | ------------- | ------------------- | ---------------- | --------------------- | | orderId | yes | yes | yes | | amount | yes | yes | yes | | currency | yes | | yes | | customerEmail | yes | | | | processorRef | | | yes | | metadata | | yes | | That table is generated automatically from the `fields` declarations in each service's frontmatter. ## SDK support[​](#sdk-support "Direct link to SDK support") If you manage catalog content programmatically, the [EventCatalog SDK](/docs/sdk.md) accepts field declarations in `addEventToService`: ``` import { addEventToService } from '@eventcatalog/sdk'; await addEventToService('ShippingService', 'receives', { id: 'PaymentProcessed', version: '1.0.0', fields: ['orderId', 'amount', 'currency'], }); ``` ## Getting started[​](#getting-started "Direct link to Getting started") Upgrade to EventCatalog Core 3.24.0. Add a `fields` array to a `receives` entry in any service frontmatter. The Field Usage page appears automatically. **Existing catalogs are unaffected.** The `fields` array is optional, and nothing changes for services that don't use it. ## Summary[​](#summary "Direct link to Summary") Field Usage adds a new depth of documentation for teams that want it. EventCatalog already shows who consumes a message. Now it can also show what they consume. We're also exploring ways to automate this, for example, using AI to analyze consumer code and automatically update field-level dependencies in your catalog. If that's something you'd find useful, we'd love to hear from you on [Discord](https://discord.gg/eventcatalog). Read the full [Field Usage documentation](/docs/development/guides/schemas/field-usage.md) for details. Questions and feedback are welcome on [Discord](https://discord.gg/eventcatalog) or [GitHub](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Schema](/blog/tags/schema.md) * [Field Usage](/blog/tags/field-usage.md) * [Events](/blog/tags/events.md) * [Services](/blog/tags/services.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-03-17-field-usage.md) --- # Describe the workflow, let the agent build the flow March 18, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [Flows](/docs/development/guides/flows/introduction.md) are one of the most popular resources documented in EventCatalog. They let you document end-to-end business workflows in your architecture, giving you and your team the bigger picture of how everything connects together. ![EventCatalog flow visualization](/img/blogs/2.5.0/flows2.png)[Demo of a Subscription Renewed flow](https://demo.eventcatalog.dev/visualiser/flows/SubscriptionRenewed/1.0.0) Today, creating a flow means writing a YAML file by hand. We wanted to make that easier. **The new `flow-wizard` skill lets you describe your workflow in plain language, and your AI agent builds the flow for you.** ## The problem with flows today[​](#the-problem-with-flows-today "Direct link to The problem with flows today") Everyone on the team knows the workflow. They can describe it in a sentence: "customer places an order, we validate payment, notify the warehouse, and send a confirmation." That part is easy. The hard part is sitting down and turning that into a properly structured flow file. You need to know the YAML format, the right node types, and the correct IDs and versions for every service and message you reference. It takes time, and it breaks easily if you get a detail wrong. ## What's new[​](#whats-new "Direct link to What's new") [flow-wizard is a new skill](/docs/development/ask-your-architecture/skills/introduction.md#available-skills) for AI coding agents that support the skills format, such as [Claude Code](https://claude.ai/code). It turns flow creation into a guided session where you describe the business workflow in plain language and the agent builds it with you. The agent locates your EventCatalog project, scans the resources you already have, and asks what flow you want to document. It breaks the workflow into sections, walks through each stage one at a time, and suggests the right node types based on what you describe. As you talk through the workflow, the skill cross-references your catalog. When it finds an existing service, event, command, or query, it uses the exact `id` and `version`. When it does not, it creates a sensible placeholder so you can keep moving. ## When you'd use it[​](#when-youd-use-it "Direct link to When you'd use it") Whether you're a product owner, architect, or developer, if you can describe a business workflow you can now document it. You don't need to know the YAML format or the flow file structure. Checkout flows, onboarding journeys, payment retries, ticket triage, order fulfilment, approval paths all fit well here. It is particularly useful when you want to capture the bigger picture, not just one message or one service. The wizard helps you connect the people, systems, and messages involved across the whole workflow. It also handles branching: describe success and failure paths, or parallel work after a step, and the wizard confirms those paths before generating the correct structure. ## How it works[​](#how-it-works "Direct link to How it works") Install the skill into your project: ``` npx skills add event-catalog/skills --skill flow-wizard ``` Then open your agent and describe what you want to document: ``` Use the flow-wizard skill to help me document our checkout flow. ``` The agent guides the session from there. It asks where your catalog lives, scans your resources, proposes sections, confirms each section before moving on, and summarizes the full workflow before writing anything to disk. If you already have the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) connected, the agent queries your catalog directly. If you do not, it works by scanning the catalog folders locally. Here is the kind of output the wizard produces: flows/CheckoutFlow/index.mdx ``` steps: - id: "customer_submits_order" title: "Customer Submits Order" actor: name: "Customer" next_step: id: "place_order" label: "Submit order" - id: "place_order" title: "Place Order" message: id: "PlaceOrder" version: "1.0.0" - id: "orders_service" title: "Orders Service" service: id: "OrdersService" version: "2.1.0" ``` **The value is not just that the AI writes the YAML.** It is that the result is grounded in the catalog you already maintain, with correct IDs, correct versions, and a structure that matches how the workflow actually runs. ## Getting started[​](#getting-started "Direct link to Getting started") Install the skill, point your agent at your catalog, and describe the workflow you want to capture. The wizard handles the rest. Start with the [AI Skills documentation](/docs/development/ask-your-architecture/skills/introduction.md), then follow the [creating a flow with AI guide](/docs/development/guides/flows/create-flow-with-ai.md) for the full walkthrough. ## Summary[​](#summary "Direct link to Summary") `flow-wizard` turns flow documentation into a conversation. Instead of hand-writing YAML, you describe the workflow and the agent builds it step by step, cross-referenced against the catalog you already have. That means less friction and a much better chance that important business workflows actually get documented. Read the [documentation](/docs/development/guides/flows/create-flow-with-ai.md) for the full setup. If you have questions or feedback, join us in [Discord](https://discord.gg/eventcatalog) or open an issue on [GitHub](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [AI](/blog/tags/ai.md) * [Flows](/blog/tags/flows.md) * [Skills](/blog/tags/skills.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-03-18-flow-wizard.md) --- # Click any node to explore its connections in Focus Mode January 30, 2026 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share a feature that makes exploring complex diagrams significantly easier. **You can now click any node in the visualizer to open Focus Mode.** ![Focus Mode](/assets/images/focus-mode-c86bd24d5c3d5e6a3d16417d16c00748.gif) Focus Mode shows the clicked node in the center with all incoming connections on the left and outgoing connections on the right helping you understand how your architecture interacts. ## Problem with large architecture diagrams[​](#problem-with-large-architecture-diagrams "Direct link to Problem with large architecture diagrams") Large architecture diagrams get messy fast. You have 20 services, 50 events, and edges crossing everywhere. Finding what connects to a specific node means visually tracing lines across the entire graph. **Focus Mode isolates what you care about.** Click a node. See everything that feeds into it on the left. See everything it sends to on the right. No visual noise from unrelated parts of your architecture. ## When you'd use it[​](#when-youd-use-it "Direct link to When you'd use it") You're reviewing a service diagram with 30 nodes. You need to understand what the `OrderService` receives and what it produces. Click the `OrderService` node. Focus Mode opens. The left side shows three events it consumes: `PaymentProcessed`, `InventoryReserved`, `CustomerVerified`. The right side shows two events it produces: `OrderCreated`, `OrderConfirmed`. You want to check what consumes `OrderCreated`. Click that node on the right. The view slides smoothly. `OrderCreated` moves to center. The left now shows `OrderService` as the producer. The right shows consumers: `ShippingService`, `NotificationService`, `AnalyticsService`. This works across your entire graph. Click any connected node to navigate through your architecture's relationships. ## How it works[​](#how-it-works "Direct link to How it works") **Step 1: Click any node in the visualizer** When viewing a service, domain, or any page with a visualizer, click a node. Focus Mode opens in a modal. **Step 2: Review connections** The clicked node appears in the center. Incoming connections (sources) display on the left. Outgoing connections (targets) display on the right. If a node has no inputs or outputs, you see a placeholder: "No inputs found for OrderCreated in this diagram" or "No outputs found for OrderService in this diagram." **Step 3: Navigate between nodes** Click any connected node to switch focus. The view animates smoothly as nodes slide into their new positions. The center node becomes the new focus point. **Step 4: Access node details** Each node shows action buttons for quick access. View documentation or switch to that resource's page directly from Focus Mode. **Step 5: Close when done** Click the X button or press Escape to close Focus Mode and return to the full visualizer. ## Getting started[​](#getting-started "Direct link to Getting started") Update to EventCatalog v3.12.0 or later: ``` npm install @eventcatalog/core@latest ``` Open any visualizer page and click a node. Focus Mode opens automatically. That's it. ## Summary[​](#summary "Direct link to Summary") Focus Mode provides a cleaner way to explore node relationships in complex architecture diagrams. Click nodes to see their connections, navigate between nodes with smooth animations, and access node actions without leaving the focused view. For more details on visualizer features, see the [visualizer documentation](/docs/development/components/components/nodegraph.md). Have questions? Join us on [Discord](https://eventcatalog.dev/discord). Found a bug or want to contribute? Check out our [GitHub repository](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualizer](/blog/tags/visualizer.md) * [Focus Mode](/blog/tags/focus-mode.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-30-focus-mode.md) --- # Introducing the EventCatalog GitHub Action June 4, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Today we are excited to announce the release of the [EventCatalog GitHub Action](/docs/development/developer-tools/github-action.md#configuration-options). This action is a powerful tool that helps you catch issues early in your pull requests, ensuring your event-driven architecture stays healthy, aligned and governed. [YouTube video player](https://www.youtube.com/embed/xAQ20eAfKsI?si=ZNQMEcAkDSjfIa3b) ## What is the EventCatalog GitHub Action?[​](#what-is-the-eventcatalog-github-action "Direct link to What is the EventCatalog GitHub Action?") The EventCatalog GitHub Action is a GitHub Action that helps you catch issues early in your pull requests. You can pick which `tasks` you want to use from the Action from your pull requests. The EventCatalog Action has the context of your EventCatalog, and can help you identify issues with producers, consumers, messages and much more. ![EventCatalog GitHub Action](/img/github-actions.png)[Get started with the EventCatalog GitHub Action](/docs/development/developer-tools/github-action.md) The EventCatalog GitHub Action brings AI-powered insight into your Git workflows. It uses large language models (LLMs) to automatically review changes to your EventCatalog, helping you catch issues early—before they reach production. Think of it as a smart assistant for your pull requests. It doesn't just lint code—it understands the implications of your changes. **What it does:** * Detect breaking changes in schemas during pull requests * Score how likely a change is to cause issues * List affected consumers so you know who’s impacted * Recommend actions to resolve problems before merging By automating the review process, this GitHub Action saves your team hours of manual effort, reduces human error, and brings consistency to your EventCatalog maintenance. You’re always in control—the final merge decision is still up to you. But now, you’ll have the insights to make it with confidence. ## What are tasks?[​](#what-are-tasks "Direct link to What are tasks?") Tasks are the core of the EventCatalog GitHub Action. They are a range of tools you can use. With this initial version we are launching the **Schema Review** task. *We will be adding more tasks in the future.* ## How does the schema review task work?[​](#how-does-the-schema-review-task-work "Direct link to How does the schema review task work?") The schema review task is used to review schemas for breaking changes. This task let's you catch breaking changes in your schemas before they are deployed. The schema review supports any schema format, including (JSON, Avro, Protobuf, Thrift, etc.). **Why use the schema review task?** * Capture breaking changes in your schemas before they are deployed * Get a score of how likely the changes are to be breaking * See a list of consumers that will be affected by the changes * Take action to fix breaking changes before they are deployed **Workflow example:** 1. Your team member makes a change to a schema in EventCatalog (inside your events, queries or commands folders) 2. The action will review the schema for breaking changes using your configured LLM (OpenAI, Anthropic, Google) 3. The action will return a summary of changes, and give you a score of how likely the changes are to be breaking 4. The action will list affected consumers so you know who’s impacted 5. Your team member is still in control of the merge decision, but now has the information to make a more informed decision ![EventCatalog GitHub Action](/img/github-actions.png) ## How to get started?[​](#how-to-get-started "Direct link to How to get started?") To get started you can read our [quick guide in our documentation here](/docs/development/developer-tools/github-action.md#configuration-options). The EventCatalog GitHub Action uses LLMs to review your schemas, and find breaking changes. You can pick your provider and model from the following list: * [OpenAI](/docs/development/developer-tools/github-action.md#configuration-options) * [Anthropic](/docs/development/developer-tools/github-action.md#configuration-options) * [Google](/docs/development/developer-tools/github-action.md#configuration-options) ## Summary[​](#summary "Direct link to Summary") The EventCatalog GitHub Action is a powerful tool that helps you catch issues early in your pull requests, ensuring your event-driven architecture stays healthy, aligned and governed. Finding breaking schemas early can save you time and de-risk your production environment. To get started you can read our [quick guide in our documentation here](/docs/development/developer-tools/github-action.md#configuration-options). ## FAQ[​](#faq "Direct link to FAQ") * **What is the EventCatalog GitHub Action?** * The EventCatalog GitHub Action is a GitHub Action that helps you catch issues early in your pull requests. You can pick which `tasks` you want to use from the Action from your pull requests. * **Will the LLM hallucinate?** * Like all LLMs, the EventCatalog GitHub Action can hallucinate, although we provide the right context to the LLM to help it understand the context of the changes and the effected consumers. * You have configuration to pick which provider and models you want to use. If you are seeing hallucinations, you can try a different provider or model. * Think of EventCatalog GitHub Action as another member of your team. It is not a replacement for your team, but a tool to help you catch issues early, saving you time. * **Can I bring my own rules?** * We are working on it! * We want you to to have the ability to bring your own rules to the action. This will let you define your own rules for your organization and health checks for the LLM. * This will let you define specific rules for your organization and governance checks for the LLM to check for your reviews. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-06-04-github-actions.md) --- # Using GitHub as a schema registry with EventCatalog May 8, 2025 · 11 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [YouTube video player](https://www.youtube.com/embed/o2ryPdBa-68?si=2d1cynW_wgzNhbaV) *** Event-driven architecture (EDA) practitioners often rely on schema registries to manage their event schemas. Popular solutions include the [Confluent Schema Registry](https://docs.confluent.io/platform/current/schema-registry/index.html), [Apicurio Registry](https://www.apicur.io/), and cloud-based options like [AWS Glue Registry](https://docs.aws.amazon.com/glue/latest/dg/schema-registry.html), [Azure Schema Registry](https://learn.microsoft.com/en-us/azure/event-hubs/schema-registry-overview), and [Amazon EventBridge Schema Registry](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-schema.html). These tools offer ready-to-use solutions for versioning, managing, and retrieving schemas at runtime. However, through conversations with EventCatalog users, we discovered that many teams are also leveraging GitHub as a schema registry. GitHub’s built-in version control, collaborative feedback features, and ability to serve as a single source of truth make it a practical choice for managing schemas. Despite their utility, traditional schema registries often fall short in one key area: context. While they store the schema data (like JSON, Avro, or Protobuf), they lack insights into how schemas are used, who produces or consumes them, and which teams are responsible for maintaining them. EventCatalog aims to bridge this gap by enhancing the discoverability of event-driven architecture. We believe that by running EventCatalog alongside your existing schema registries, you can unlock greater value from your schemas and your organization. If you're using GitHub as your schema registry, this blog post will guide you through syncing your schemas with your documentation, associating them with producers and consumers, and extracting more meaningful insights from your JSON, Avro, or Protobuf schemas. *** ### Using GitHub as a schema registry[​](#using-github-as-a-schema-registry "Direct link to Using GitHub as a schema registry") There is no standardized approach for using GitHub as a schema registry—no universal folder structure or patterns. Typically, teams maintain a repository that houses their schemas. In this blog post, we will use an example schema registry called the **FlowMart Schema Registry** ([see on GitHub](https://github.com/event-catalog/flowmart-schema-registry)). ![EventCatalog Schema Registry](/img/blogs/github-eventcatalog/repo-screenshot.png)[View the example repository](https://github.com/event-catalog/flowmart-schema-registry) As shown, the repository organizes schemas into folders, each representing a specific context. Within these folders are the schemas themselves, which naturally benefit from version control through Git. Teams often update schemas by creating a new version file while deprecating older ones as needed. However, despite being versioned, these schemas lack contextual information. While it’s possible to add README files to explain their usage, this manual approach doesn’t offer a clear, visual representation of how schemas are applied or who is responsible for them. That’s where **EventCatalog** comes in. With the EventCatalog GitHub integration, you can seamlessly sync your schemas with your documentation. This integration not only keeps your schemas up to date from external sources but also enables you to add context, visualize your architecture, and better understand how your schemas are used across your applications. By leveraging EventCatalog, your teams can gain a clearer, more structured understanding of how schemas support your business processes. ![EventCatalog generated catalog](/img/blogs/github-eventcatalog/generated-catalog.png)EventCatalog generated from schemas in GitHub repository ### Integrating GitHub with EventCatalog[​](#integrating-github-with-eventcatalog "Direct link to Integrating GitHub with EventCatalog") EventCatalog supports integration with any broker or schema registry, providing flexibility to users regardless of their existing setup. We already offer integrations with popular tools such as Confluent Schema Registry, Backstage, OpenAPI, and AsyncAPI. Now, we’ve introduced a new integration with GitHub. If you want to explore examples right away, check out our GitHub repository: [EventCatalog GitHub Generators](https://github.com/event-catalog/generators/tree/main/examples/generator-github). **Step 1: Create a New Catalog** If you don’t already have a catalog, create one using the following command: ``` npx @eventcatalog/create-eventcatalog@latest my-catalog ``` **Step 2: Install the GitHub Plugin** Once your catalog is set up, you need to integrate it with your GitHub repository. For this example, we’ll use the **FlowMart Schema Registry** ([see on GitHub](https://github.com/event-catalog/flowmart-schema-registry)). First, install the GitHub generator plugin: ``` npm i @eventcatalog/generator-github ``` This command installs the necessary components to pull schemas from the remote repository. **Step 3: Configure the Plugin** To link your catalog with GitHub, update the `eventcatalog.config.js` file with the following configuration: ``` // rest of conf file generators: [ '@eventcatalog/generator-github', { // The URL of your GitHub repository source: 'https://github.com/event-catalog/eventcatalog', // The branch to pull schemas from (default: main) branch: 'main', // The root path to your schemas path: 'some-folder/schemas', // The producers and consumers (services) to assign schemas to (optional) services: [ { id: 'Orders Service', version: '1.0.0', // the messages this service sends sends: [{ id: 'place-order', version: '2.1', // The path to the schema file (relative to the root path, some-folder/schemas/place-order.avro) schemaPath: 'place-order.avro', // The type of message, can be 'command', 'event' or 'query' type: 'command', }], // the messages this service receives receives: [{ id: 'order-shipped', version: '1.0', // The path to the schema file (relative to the root path, some-folder/schemas/order-shipped.avro) schemaPath: 'order-shipped.avro', // The type of message, can be 'command', 'event' or 'query' type: 'event', }], }, { id: 'Inventory Service', version: '1.0.0', // the messages this service sends sends: [{ id: 'inventory-updated', version: '1.0', // The path to the schema file (relative to the root path, some-folder/schemas/inventory-updated.avro) schemaPath: 'inventory-updated.avro', // The type of message, can be 'command', 'event' or 'query' type: 'event', }], // the messages this service receives receives: [{ id: 'order-placed', version: '1.0', // The path to the schema file (relative to the root path, some-folder/schemas/order-placed.avro) schemaPath: 'order-placed.avro', // The type of message, can be 'command', 'event' or 'query' type: 'event', }], }, ], // We assign the services to a domain "Retail Domain" (optional) domain: { id: 'retail-domain', name: 'Retail Domain', version: '1.0.0', } }, ] ``` This configuration creates two services, **Orders Service** and **Inventory Service**, which both send and receive messages (commands and events). The services are grouped under the **Retail Domain**. **Step 4: Generate the Catalog** After configuring the plugin, generate the catalog using: ``` npm run generate ``` This command pulls your schemas from GitHub, assigns them to the relevant services, and organizes your architecture. If a service or message doesn’t exist in EventCatalog, it will be created, and on future imports, only the schema will be updated, preserving your existing documentation. **Step 5: Run the Catalog Locally** To view your catalog locally, start the development server: ``` npm run dev ``` Visit [localhost:3000](http://localhost:3000/) to see your generated catalog, complete with integrated schemas and documentation. By combining GitHub with EventCatalog, you can keep your schemas synchronized while also documenting producers, consumers, and service relationships—all within a unified, visual interface. To get started you can read the [GitHub integration documentation](/docs/plugins/github/intro.md). ## Unlocking the Full Potential of Your Schemas with EventCatalog[​](#unlocking-the-full-potential-of-your-schemas-with-eventcatalog "Direct link to Unlocking the Full Potential of Your Schemas with EventCatalog") Once you have imported and synced your schemas, EventCatalog offers a range of features designed to enhance their usability and discoverability. Here are some of the key features that can add value to your schema management process: #### **1. EventCatalog Visualizer**[​](#1-eventcatalog-visualizer "Direct link to 1-eventcatalog-visualizer") The **EventCatalog Visualizer** allows you to see the relationships between your producers and consumers, making it easy to understand how messages flow through your architecture. You can simulate message exchanges between services and access detailed documentation and schema information by right-clicking on any node. This visual insight helps you map interactions in your event-driven system effectively. ![EventCatalog Visualizer](/img/blogs/github-eventcatalog/visualizer.png)[View the demo](https://demo.eventcatalog.dev/visualiser/domains/E-Commerce/1.0.0) #### **2. Embed Schemas Directly in Documentation**[​](#2-embed-schemas-directly-in-documentation "Direct link to 2-embed-schemas-directly-in-documentation") Since it’s your documentation, you have the flexibility to include any content you want. EventCatalog makes it even better by providing **Schema** and **SchemaViewer** components, allowing you to embed schemas directly into your documentation. This integration ensures that your documentation remains accurate, comprehensive, and context-rich, while also being visually informative. ![EventCatalog Schema Embed](/img/blogs/github-eventcatalog/generated-catalog.png)[View the demo](https://demo.eventcatalog.dev/docs/events/InventoryAdjusted/1.0.1) #### **3. Quick Schema Downloads**[​](#3-quick-schema-downloads "Direct link to 3-quick-schema-downloads") Users can easily download schemas directly from the EventCatalog UI. This feature is especially useful for teams needing quick access to schema details without navigating through complex repositories. It saves time and ensures that your teams always have the latest schema versions on hand. ![EventCatalog Copy Schema to clipboard](/img/blogs/github-eventcatalog/copy-schema.png)[View the demo](https://demo.eventcatalog.dev/docs/events/InventoryAdjusted/1.0.1) #### **4. Conversational Insights with EventCatalog Chat**[​](#4-conversational-insights-with-eventcatalog-chat "Direct link to 4-conversational-insights-with-eventcatalog-chat") EventCatalog Chat leverages LLMs (Large Language Models) to let you interact with your architecture. You can query your producers, consumers, and schemas conversationally, helping you find insights faster than manually sifting through GitHub repositories. This feature is ideal for quickly understanding how different parts of your architecture are interconnected. You can also use EventCatalog MCP server to query your schemas directly in your code editors. ![EventCatalog Chat](/img/blogs/github-eventcatalog/chat.png)[Read the documentation](/features/ai-assistant.md) #### **5. Assign Ownership for Better Accountability**[​](#5-assign-ownership-for-better-accountability "Direct link to 5-assign-ownership-for-better-accountability") Assigning ownership to producers, consumers, and schemas within EventCatalog makes it easy to track who is responsible for specific parts of your architecture. This feature helps you quickly identify the right team or person when you need to update a schema or troubleshoot an issue. By clearly defining ownership, you reduce the risk of orphaned schemas and ensure accountability. ![EventCatalog Ownership](/img/blogs/github-eventcatalog/ownership.png)[View the demo](https://demo.eventcatalog.dev/docs/users/asmith) By leveraging these features, EventCatalog transforms your schema management from a static, isolated process into an interactive and insightful experience. Whether you need visualization, quick downloads, conversational insights, or clear ownership mapping, EventCatalog enhances how you manage and understand your event-driven architecture. ### Summary[​](#summary "Direct link to Summary") Event-driven architectures often rely on schema registries like Confluent, Apicurio, AWS Glue, and Azure Schema Registry to manage event schemas. However, these registries typically lack context, making it difficult to understand how schemas are used, who owns them, and how they fit into the broader architecture. Many teams also use GitHub as a schema registry due to its version control and collaboration features, but this approach also lacks visualization and contextual insights. EventCatalog addresses these challenges by integrating with both traditional registries and GitHub, enhancing schema discoverability and usability. With the GitHub integration, you can automatically sync schemas, visualize producer-consumer relationships, embed schemas in documentation, assign ownership, and use conversational insights with EventCatalog Chat. This holistic approach not only centralizes schema management but also makes it intuitive and insightful for development teams. If you want to learn more about how to use EventCatalog with GitHub you can read the [GitHub integration documentation](/docs/plugins/github/intro.md). *** ### We are coming to Current London 2025\![​](#we-are-coming-to-current-london-2025 "Direct link to We are coming to Current London 2025!") We are coming to in May! If you are coming to the conference, we would love to hang out, just reach out! ![Current](/assets/images/current-048d5e716a5e0df8565dc28aa68dc125.png) If you have any questions or want to join our community of over 1100 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! *** **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) [Edit this page]() --- # Introducing GraphQL integration with EventCatalog September 29, 2025 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share our latest integration plugin for EventCatalog: [the GraphQL plugin](/integrations/graphql.md). The [EventCatalog GraphQL plugin](/integrations/graphql.md) reads and parses your GraphQL schemas and transforms them into domains, services and messages in your catalog. With the GraphQL plugin you can transform your schemas into living documentation your teams can understand. [YouTube video player](https://www.youtube.com/embed/J352QYLWQkw?si=hwwKr-k2IENfICmR) ### How the plugin works[​](#how-the-plugin-works "Direct link to How the plugin works") EventCatalog can be powered by [generators](https://www.eventcatalog.dev/docs/plugins/generators). Generators can be used to automate the creation of your EventCatalog. The [GraphQL generator](/integrations/graphql.md) takes your GraphQL schema files and transforms them into living documentation. ![Image](/assets/images/graphql-70f78386b8150cd28b72ccbe816067ca.png) The GraphQL generator will: * ⭐️ Transform your queries, mutations and subscriptions into [commands, events and queries](/docs/messages.md) in your catalog * ⭐️ Let you map your services to [domains](/docs/domains.md) in your architecture. * ⭐️ Assign owners (your teams) to your services and messages all generated by your GraphQL schemas * ⭐️ Visualize your GraphQL queries, mutations and subscriptions as event streams in your catalog * ⭐️ Add semantic meaning to your GraphQL schemas, persist this meaning between versions * ⭐️ Automatically version your changes in EventCatalog in sync with your GraphQL schema versions * ⭐️ Ability to download your schemas and GraphQL files (also versioned) * ⭐️ Ability to draft services and operations in EventCatalog from your GraphQL schemas * ⭐️ Use [EventCatalog MCP](/docs/development/ask-your-architecture/mcp-server/introduction.md) to find information about your GraphQL schemas * ⭐️ And much more... ### Getting started[​](#getting-started "Direct link to Getting started") To get started you can [read the documentation](/docs/plugins/graphql/intro.md) or see [the example project](https://github.com/event-catalog/generators/tree/main/examples/generator-graphql). You can also start with our template if you don't have an EventCatalog project yet. ``` npx @eventcatalog/create-eventcatalog@latest my-catalog --template graphql ``` ### Summary[​](#summary "Direct link to Summary") Many folks have asked for a GraphQL integration with EventCatalog. Today we are excited to launch the [GraphQL plugin](/integrations/graphql.md) which allows you to automate your EventCatalog from your GraphQL schema files. With the GraphQL plugin you can transform your schemas into living documentation your teams can understand. We also support other integrations (e.g AsyncAPI, OpenAPI) with EventCatalog, check out our [integrations page](/integrations.md) to see all the plugins we support. If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [GraphQL](/blog/tags/graph-ql.md) [Edit this page]() --- # Introducing Data Stores with EventCatalog October 1, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [EventCatalog 2.59.0](https://github.com/event-catalog/eventcatalog/releases/tag/v2.59.0) is now out, and introduces the new resource type [**Data Stores**](/docs/development/guides/data/introduction.md). You can now document your data stores (e.g. databases, caches, objectStore, searchIndexes, etc) in EventCatalog, visualize them, version them, assign owners and much more. ([see example in EventCatalog demo](https://demo.eventcatalog.dev/docs/containers/order-metadata-store/0.0.1)) In this blog post I want to go over the new data store resource, what it is, how to use it, and how to get started. *** ## What are data stores?[​](#what-are-data-stores "Direct link to What are data stores?") Data stores (containers) are a way to document data in your architecture (e.g. databases, caches, objectStore, searchIndexes, etc). Using the new data store resource you can document and visualize your data in your architecture, and how your services read/write to them. This can help your teams understand how your services interact with data in your architecture. Inspired by the C4 model Rather than creating a new `data` resource directly, we choose to call these `containers`. This follows the C4 naming convention for containers (not docker containers!) in your architecture. You can read more about the C4 model [here](https://c4model.com/abstractions/container). ## What do data stores look like in EventCatalog?[​](#what-do-data-stores-look-like-in-eventcatalog "Direct link to What do data stores look like in EventCatalog?") Data stores are like any other resource type in EventCatalog. You define them with markdown and frontmatter. When you define your data store they are given their own page in your catalog. Like any other resource type in EventCatalog, you can visualize them, assign schemas to them, version them, and more. ![Example](/assets/images/data-example-147f3041afae6ef63c0a283762e9e704.png) *You can see an example of a data store in the [EventCatalog demo](https://demo.eventcatalog.dev/docs/containers/order-metadata-store/0.0.1).* Using the new data store resource you can document databases, caches, object stores, search indexes, and more, assign schemas to them and create read/write relationships with your services. ## Connecting services to data stores[​](#connecting-services-to-data-stores "Direct link to Connecting services to data stores") Services are a core resource type in EventCatalog. The tend to represent services, business logic, applications, or systems in your architecture. You can now use the new [`writesTo`](/docs/api/service-api.md#writesTo) and [`readsFrom`](/docs/api/service-api.md#readsFrom) fields in your service frontmatter to connect your services to data stores. This creates relationships between your services and data stores, helping your teams understand how your services interact with data in your architecture. ![Example](/assets/images/data-on-service-page-e2cea0d31ce1f6f687f1304286bbb824.png) ## Visualizing data stores[​](#visualizing-data-stores "Direct link to Visualizing data stores") The EventCatalog visualizer has been updated to display data stores. There are two ways to view your data stores in EventCatalog. 1. [Services Data Diagram](/docs/development/guides/data/introduction.md) * Shows which data stores (read/write) are connected to a given service. 2. [Data Store Diagram](/docs/development/guides/data/introduction.md) * Shows all the services that are reading/writing to that data store. ### Services Data Diagram[​](#services-data-diagram "Direct link to Services Data Diagram") When you assign services to read/write to data stores, EventCatalog will show a `Data Diagram` section in the visualizer for your service. Clicking on this will show you a diagram of the data stores that the service is reading/writing to. This can help your teams quickly understand which data stores are read/written to by a given service. Users can right click on any node to display the data store information. ![Example](/assets/images/visual-1-bd3618ac30ece6b2f5746ff95bbc68e3.png) *You can see an example of this in the [EventCatalog demo](https://demo.eventcatalog.dev/visualiser/services/OrdersService/0.0.3/data).* ### Data Store Diagram[​](#data-store-diagram "Direct link to Data Store Diagram") Clicking on the data store itself will show you all the services that are reading/writing to that data store. This view is helpful for understanding which services are reading/writing to a given data store. ![Example](/assets/images/visual-2-570711c59d44a4193b21151207e44a13.png) *You can see an example of this in the [EventCatalog demo](https://demo.eventcatalog.dev/visualiser/containers/order-metadata-store/0.0.1).* ## Rendering schemas for data stores[​](#rendering-schemas-for-data-stores "Direct link to Rendering schemas for data stores") As EventCatalog is technically agnostic, you can render any schema format you want in your data store page. To do this you can add codeblocks to your markdown files or use the `` component to render any file into the page. ``` ``` You can learn more you can read the [adding schemas to data stores](/docs/development/guides/data/03a-adding-schemas-to-data-stores.md) documentation. ## Getting started[​](#getting-started "Direct link to Getting started") To get started you can [read the data store documentation](/docs/data.md) and upgrade to the latest version of EventCatalog. You can also check out the [EventCatalog demo](https://demo.eventcatalog.dev/docs/containers/order-metadata-store/0.0.1) to see an example of a data store in EventCatalog. ## Summary[​](#summary "Direct link to Summary") Today we have introduced the new [data store resource](/docs/data.md) to EventCatalog, allowing you to document and visualize your data stores in your architecture. You can now assign services to read/write to data stores, visualize them, version them, assign owners and much more. ([see example in EventCatalog demo](https://demo.eventcatalog.dev/docs/containers/order-metadata-store/0.0.1)) We hope you find this new resource helpful in your architecture. In the new couple of weeks we will release [EventCatalog SDK](/docs/sdk.md) support for data stores, to help you programmatically create and manage data stores in your catalog. If you have any feedback or questions, please feel free to reach out to us on [GitHub](https://github.com/event-catalog/eventcatalog/issues) or [Discord](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Data](/blog/tags/data.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-10-01-introducting-data-resources.md) --- # Introducing Entity Maps July 3, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Understanding the relationships between entities in your domain model is crucial for building robust event-driven architectures. That's why we're excited to introduce **Entity Maps** — a powerful new visualization feature that helps you explore and understand entity relationships within your EventCatalog domains. ## What are Entity Maps?[​](#what-are-entity-maps "Direct link to What are Entity Maps?") Entity Maps provide a visual representation of how entities connect within your domains. In Domain-Driven Design, entities are the core building blocks that represent key concepts like `Order`, `Customer`, or `Invoice`. Entity Maps help you visualize these relationships at a glance, making it easier to understand your domain architecture and identify potential improvements. ![EventCatalog Entity Map](/img/entity-map.png)[View the demo](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3/entity-map) ## Why Entity Maps are useful[​](#why-entity-maps-are-useful "Direct link to Why Entity Maps are useful") Entity Maps solve several common challenges teams face when working with complex domain models: ### **Visual Domain Understanding**[​](#visual-domain-understanding "Direct link to visual-domain-understanding") Instead of piecing together entity relationships from scattered documentation, Entity Maps provide a comprehensive visual overview of your domain model. You can instantly see how entities connect and understand the flow of data through your system. ### **Architectural Insights**[​](#architectural-insights "Direct link to architectural-insights") By visualizing entity relationships, you can identify potential architectural improvements, spot missing connections, or discover opportunities to simplify your domain model. Entities that are referenced across domains are highlighted in yellow, making cross-domain dependencies immediately visible. ### **Team Collaboration**[​](#team-collaboration "Direct link to team-collaboration") Entity Maps serve as a common language for discussing domain models with both technical and non-technical stakeholders. They make it easier to communicate complex relationships and ensure everyone shares the same understanding of the domain. ### **Design Validation**[​](#design-validation "Direct link to design-validation") When designing new features or refactoring existing ones, Entity Maps help you validate that your entity relationships align with your business requirements and domain boundaries. ## How to get started[​](#how-to-get-started "Direct link to How to get started") Getting started with Entity Maps is straightforward if you already have entities documented in EventCatalog: Don't have entities yet? You can read the [Entity API documentation](/docs/development/guides/domains/entities/introduction.md) to learn how to create entities. ### 1. Define Entity Relationships[​](#1-define-entity-relationships "Direct link to 1. Define Entity Relationships") To create meaningful Entity Maps, you'll need to define relationships between your entities using reference fields: ``` --- id: OrderItem name: OrderItem version: 1.0.0 properties: - name: orderId type: UUID required: true description: Identifier for the parent Order references: Order relationType: hasOne referencesIdentifier: orderId --- ``` ### 2. View Your Entity Map[​](#2-view-your-entity-map "Direct link to 2. View Your Entity Map") Once you've defined entity relationships, you can view your Entity Map in two ways: **Full-screen Visualizer**: Navigate to `/visualiser/domains/{domain-name}/{version}/entity-map` for a comprehensive view with interactive controls, zoom capabilities, and filtering options. **Embedded Component**: Use the `` component to embed entity maps directly in your documentation pages. ### 3. Explore and Interact[​](#3-explore-and-interact "Direct link to 3. Explore and Interact") Entity Maps are fully interactive — click and drag to explore relationships, zoom in for detailed views, and hover over entities to see their properties and descriptions. To get started and learn more you can read the [Entity Maps documentation](/docs/development/guides/domains/entities/domain-entity-map.md). ## Embed Entity Maps in Backstage[​](#embed-entity-maps-in-backstage "Direct link to Embed Entity Maps in Backstage") If you're using Backstage, you can embed Entity Maps directly in your entity pages using the `` component from our Backstage plugin. This brings your domain visualizations right into your developer portal. ![EventCatalog Entity Map in Backstage](/img/integrations/backstage/eventcatalog-card-component-entitymap.png)[Learn more about the Backstage integration](/docs/plugins/backstage/installation.md) ## Start visualizing your domain today[​](#start-visualizing-your-domain-today "Direct link to Start visualizing your domain today") Entity Maps are available now in EventCatalog. If you're already documenting entities, you can start creating entity maps immediately by defining relationships between your entities. To learn more about Entity Maps and how to use them effectively, check out our [comprehensive documentation](/docs/development/guides/domains/entities/domain-entity-map.md) or explore the [interactive demo](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3/entity-map). Whether you're working with Domain-Driven Design principles or simply want to better understand your system's data model, Entity Maps provide the visual clarity you need to build better event-driven architectures. If you have any questions or want to join our community of over 1,200 people exploring EventCatalog and event-driven architecture, [feel free to join us on Discord](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Entity Maps](/blog/tags/entity-maps.md) * [Domain-Driven Design](/blog/tags/domain-driven-design.md) * [Visualization](/blog/tags/visualization.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-07-03-introducing-entity-maps.md) --- # Introducing EventCatalog Reports May 27, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I’m excited to announce that EventCatalog now includes Governance Reports! This new feature enables you to generate reports directly from your EventCatalog documentation. Each report provides a **Governance Score**—a helpful metric to track, measure, and improve the governance of your event-driven architecture. ![EventCatalog Governance Report](/img/blogs/reports/example.png)[View examples of generated reports](https://github.com/event-catalog/eventcatalog/tree/main/examples/default/reports) ### Lack of governance leads to chaos[​](#lack-of-governance-leads-to-chaos "Direct link to Lack of governance leads to chaos") Many teams use EventCatalog to avoid the common challenges of managing event-driven architectures—like the chaos of unknown producers and consumers, versioning issues, poor documentation, unclear ownership, and more. At first, event-driven architectures seem simple. You know who’s producing and consuming events. But as your architecture grows, so does the complexity. Teams multiply, events are raised from many producers, and understanding the distributed landscape becomes increasingly difficult. This is why teams are using EventCatalog. EventCatalog is designed to help you document your event-driven architecture effectively. With our [SDK](/docs/sdk.md) and [integrations](/integrations.md), EventCatalog works with any technology stack or broker, letting you sync schemas and documentation seamlessly. This gives your developers and stakeholders the clarity they need. And now, with EventCatalog Reports, you can **measure and track your governance**. Our Governance Score highlights areas for improvement, helping you build a more controlled, reliable, and scalable event-driven system. ## **How does the EventCatalog Report work?**[​](#how-does-the-eventcatalog-report-work "Direct link to how-does-the-eventcatalog-report-work") You can use the new `@eventcatalog/reports` CLI to generate two types of reports: the **Assessment Report** and the **Full Report**. This CLI tool analyzes your documentation, schemas, and relationships between resources to generate key metrics for your event-driven architecture: * **Message Schema Completeness**: Tracks messages (events, commands, queries) with defined schemas. * **Service Specification Completeness**: Identifies services with linked API specifications (e.g., OpenAPI, AsyncAPI). * **Ownership Coverage**: Shows which resources (domains, services, messages) have assigned owners. * **Orphaned Messages**: Detects messages without any producers. * **Service Message Drift**: Finds services sending or receiving outdated versions of messages. * **Deprecated Messages**: Flags services that are still using deprecated messages. Together, these metrics form your **Governance Score**, helping you measure and track your architecture’s health. The **Full Report** also highlights areas for improvement and provides actionable recommendations to strengthen your governance. ## How to get started[​](#how-to-get-started "Direct link to How to get started") Don't have an EventCatalog? If you don’t have an EventCatalog yet, you can [get started here](/docs/development/getting-started/installation.md). Once you’ve set up your EventCatalog and added your information—either through markdown files or using our [integrations](/integrations.md) (e.g., [OpenAPI](/integrations/openapi.md), [AsyncAPI](/integrations/asyncapi.md))—you can run the **Assessment Report**. From your EventCatalog directory, run the following command: ``` npx @eventcatalog/reports@latest generate-assessment ``` This will generate a **free Governance Report**, providing you with a **Governance Score** and highlighting key metrics that may need improvement. Want to go deeper? We also offer **Full Reports** for a more comprehensive analysis. If you’d like **beta access**, reach out to us at —we’d be happy to help! You can also read our documentation to learn why governance is important and how to get started. EventCatalog Reports are in beta EventCatalog Reports are currently in beta. We would love to hear your feedback! If you would like to get access to the full feature, please reach out to us at . We would love to work with you to improve the feature. ## Summary[​](#summary "Direct link to Summary") EventCatalog helps teams avoid the complexity and chaos that often comes with scaling event-driven architectures—like unclear ownership, versioning issues, and poor documentation. It provides a clear, structured way to document your architecture using markdown or integrations with tools like OpenAPI and AsyncAPI. With the new **`@eventcatalog/reports` CLI**, teams can generate two types of reports: * The **Assessment Report** (free), which gives you a **Governance Score** based on key metrics like schema completeness, ownership coverage, orphaned messages, and service message drift. * The **Full Report** (currently in beta), which provides deeper analysis and actionable recommendations for improving governance. These reports help teams measure, track, and improve their architecture governance, enabling them to scale event-driven systems with confidence. To get started, teams can install EventCatalog, set up their documentation, and run the `generate-assessment` command for their free governance report. For access to the full report, they can reach out [via email](mailto:hello@eventcatalog.dev). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Reports](/blog/tags/reports.md) * [Governance](/blog/tags/governance.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-05-27-introducing-eventcatalog-reports.md) --- # Introducing query messages for EventCatalog October 21, 2024 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog ![](/assets/images/query-messages-9c0ffa471ee107f36d4e986fdbf4d7ff.png); **Added in** `eventcatalog@2.10.0` In many distributed architectures, domains and services communicate through different types of messages, typically categorized as events, commands, and queries. EventCatalog now includes support for documenting queries, allowing you to clearly outline which queries a service accepts and which it invokes. Queries are often seen in protocols such as HTTP and gRPC. With the support of documenting queries, events and commands, you can now visually represent and document all the messages exchanged between services within your domains using EventCatalog. ![](/assets/images/query-example-2b5e6828c13de779999642ed20efef3b.png); [See a query example in the EventCatalog demo →](https://demo.eventcatalog.dev/docs/queries/GetPaymentStatus/0.0.1) With the addition of query support, you can now provide your developers with deeper insights into how your services operate while also keeping track of the different message versions being used across your architecture. ### Why document messages?[​](#why-document-messages "Direct link to Why document messages?") Documenting messages in a distributed architecture is crucial for several reasons: * **Clarity in Communication**: Messages are the backbone of communication between services in distributed systems. By documenting them, you create a clear reference point for understanding how different services interact, what data is being exchanged, and how the system as a whole operates. * **Improved Developer Understanding**: Detailed documentation of events, commands, and queries provides developers with a comprehensive view of the system's messaging flow. This helps them understand not only what messages are being sent and received but also the context and purpose of each message within the architecture. * **Version Control and Tracking**: As architectures evolve, message formats and protocols may change. By documenting messages, teams can track which versions of messages are being used, ensuring compatibility across services and avoiding communication breakdowns due to version mismatches. * **Enhanced Collaboration**: Documentation serves as a common language for developers, architects, and other stakeholders, facilitating better collaboration and alignment across teams. It helps ensure everyone has a unified understanding of how services communicate within the system. In short, documenting messages helps maintain a well-organized, understandable, and reliable system, ensuring smooth communication between services and easier management as your architecture grows. ### Getting started[​](#getting-started "Direct link to Getting started") To add a new query create a new folder within the /queries folder with an index.mdx file. * /queries/{Query Name}/index.mdx * (example /queries/GetOrder/index.mdx) New project structure support EventCatalog now supports nested structures, so you can add your queries inside your services if you prefer. This is recommeded as your catalog grows. You can read more [information in the documentation](/docs/development/getting-started/project-structure.md). Add frontmatter and markdown to your query ``` --- # id of your query, used for slugs and references in EventCatalog. id: GetOrder # Display name of the query, rendered in EventCatalog name: Get an order # Version of the query version: 0.0.1 # Short summary of your query summary: | GET request (query) that requests the latest information for a given order. # Optional owners, references teams or users owners: - dboyne # Optional badges, rendered to UI by EventCatalog badges: - content: New query backgroundColor: blue textColor: blue --- ## Overview The `GetOrder` message is a query used to retrieve detailed information about a specific order, identified by its `orderId`. It provides information such as the order status (e.g., pending, completed, shipped), the items within the order, billing and shipping details, payment information, and the order's total amount. This query is commonly used by systems managing order processing, customer service, or order tracking functionalities. This query can be applied in e-commerce systems, marketplaces, or any platform where users and systems need real-time order data for tracking, auditing, or managing customer purchases. ``` Once you start your Catalog and view your query you will be presented with a page that looks like this. ![](/assets/images/example-48818df845c00beaebc32171dc270cf9.png); Queries also support versioning, custom components and much more. You can [read the documentation to get started](/docs/development/guides/messages/queries/adding-queries.md) or [see the example on GitHub](https://github.com/event-catalog/eventcatalog/tree/main/examples/default/domains/Orders/services/InventoryService). ## Summary[​](#summary "Direct link to Summary") EventCatalog now includes support for documenting queries, allowing you to capture any queries your service accepts or sends. This feature enhances the ability to track and visualize the full range of messages within your architecture. Queries come with support for schemas, versioning, and custom components, offering flexibility in how you document them. However, including queries in your catalog is entirely optional and not a requirement. If you want to get started you can [read the query guide](/docs/development/guides/messages/queries/adding-queries.md) or see queries in the [EventCatalog demo](https://demo.eventcatalog.dev/). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Queries](/blog/tags/queries.md) * [Messages](/blog/tags/messages.md) * [EDA](/blog/tags/eda.md) * [Distributed System](/blog/tags/distributed-system.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2024-10-21-introducing-queries.md) --- # Live data meets architecture documentation January 8, 2026 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce **Custom Tools** for EventCatalog Assistant, allowing you to extend the AI with your own integrations and bring real-time data directly into your architecture conversations. Your documentation is valuable, but it only tells part of the story. With custom tools, you can now ask EventCatalog questions like "Is OrderService healthy?" or "Who's on-call for PaymentService?" and get answers based on **live data** from your production systems. ## What is EventCatalog Assistant?[​](#what-is-eventcatalog-assistant "Direct link to What is EventCatalog Assistant?") [EventCatalog Assistant](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md) is the built-in AI chat interface that lets you have conversations with your architecture documentation. Ask questions about your events, services, schemas, and their relationships, and get instant answers. ![EventCatalog Assistant](/img/ai-assistant.png)EventCatalog Assistant - Ask questions about your architecture documentation With v3 of EventCatalog, the Assistant has been completely revamped with improved performance and a streamlined experience. And the best part? **You bring your own model**. Whether you prefer OpenAI (GPT-4), Anthropic (Claude), Google (Gemini), or any other provider supported by the [Vercel AI SDK](https://ai-sdk.dev/docs/foundations/providers-and-models), you have full control over which model powers your conversations. Now with custom tools, you can extend what the Assistant knows beyond your static documentation. ## Beyond Static Documentation[​](#beyond-static-documentation "Direct link to Beyond Static Documentation") EventCatalog has always been great at documenting your architecture: events, services, schemas, and their relationships. But developers often need more than static documentation. They need to know: * Is this service actually healthy right now? * What's the current throughput for this event? * Who should I contact if something goes wrong? * Are there any backlogs building up in the queue? Previously, answering these questions meant switching between multiple tools: Datadog for metrics, PagerDuty for on-call schedules, Kafka UI for queue depths. Now, you can ask EventCatalog directly. ![EventCatalog Assistant Tool 1](/img/ai-assistant-tool-1.png)Calling custom tool to ask who is on call for a service Every company has different systems and integrations. You might use Datadog or Prometheus for monitoring, PagerDuty or OpsGenie for on-call, Kafka or RabbitMQ for messaging. With custom tools, you can connect to **any system** and pull live information directly into your conversations. Your stack, your integrations, your data. ![EventCatalog Assistant Tool 1](/img/ai-assistant-tool-2.png)Calling custom tool for the health of a service ## How It Works[​](#how-it-works "Direct link to How It Works") Custom tools are defined in your `eventcatalog.chat.js` file. Each tool has a description that tells the AI when to use it, and an execute function that fetches the data. eventcatalog.chat.js ``` import { anthropic } from '@ai-sdk/anthropic'; import { tool } from 'ai'; import { z } from 'zod'; export default async () => anthropic('claude-haiku-4-5'); export const tools = { getServiceHealth: tool({ description: 'Get the current health status of a service. Use when users ask if a service is up or healthy.', inputSchema: z.object({ serviceName: z.string(), }), execute: async ({ serviceName }) => { // Query your monitoring system const health = await datadogClient.getServiceHealth(serviceName); return { serviceName, status: health.status, uptime: `${health.uptime}%`, instances: health.activeInstances, }; }, }), }; ``` The AI automatically decides when to use your tools based on the user's question. Ask "Is OrderService healthy?" and the assistant will call your `getServiceHealth` tool, then use the response to provide a helpful answer. ## Example Use Cases[​](#example-use-cases "Direct link to Example Use Cases") #### Production Metrics[​](#production-metrics "Direct link to Production Metrics") Connect to Datadog, Prometheus, or CloudWatch to answer questions about event throughput, latency, and error rates. > "What's the current throughput for OrderCreated events?" #### On-Call Information[​](#on-call-information "Direct link to On-Call Information") Query PagerDuty or OpsGenie to instantly find out who's responsible for a service. > "Who's on-call for PaymentService right now?" #### Queue Health[​](#queue-health "Direct link to Queue Health") Monitor Kafka, RabbitMQ, or SQS to detect backlogs before they become incidents. > "Are there any processing delays for InventoryUpdated events?" #### Database State[​](#database-state "Direct link to Database State") Look up the current state of business entities directly from your databases. > "What's the current status of order #12345?" ## A single pane of glass[​](#a-single-pane-of-glass "Direct link to A single pane of glass") The real power of custom tools is bringing everything together. Instead of switching between six different dashboards, developers can ask natural language questions and get comprehensive answers: > "Tell me about OrderService. Is it healthy, who owns it, and what's the current event throughput?" EventCatalog combines your static documentation (architecture, schemas, relationships) with live operational data (metrics, health, on-call) to give complete answers. ## Built for enterprise workflows[​](#built-for-enterprise-workflows "Direct link to Built for enterprise workflows") Custom tools open up possibilities for enterprise-specific integrations: * **Cost tracking** - "How much did this event cost to process last month?" * **Compliance checks** - "Does this service meet our SLA requirements?" * **Incident history** - "What incidents has this service had this quarter?" * **Deployment info** - "When was this service last deployed?" * **Schema validation** - "Would this schema change break any consumers?" Whatever internal systems your team relies on, you can now surface that information through EventCatalog's conversational interface. ## How to get started[​](#how-to-get-started "Direct link to How to get started") *Custom tools are available on **Scale** and **Enterprise** plans (get a 14 day free trial at [EventCatalog Cloud](https://eventcatalog.cloud)).* To get started: 1. Enable the chat feature in your `eventcatalog.config.js` (see [documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md)) 2. Create your tools in `eventcatalog.chat.js` 3. Restart EventCatalog and start asking questions Check out the [complete documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/bring-your-own-tools.md) for detailed examples and best practices. *** ## Join the Community[​](#join-the-community "Direct link to Join the Community") Have questions about custom tools or want to share what you've built? [Join our Discord community](https://eventcatalog.dev/discord). We'd love to hear your ideas and see your implementations. *** Custom tools transform EventCatalog from a documentation site into a living knowledge hub. Your architecture documentation combined with real-time operational data, all accessible through natural language. [Try it today](/pricing.md) and let us know what you think. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [AI](/blog/tags/ai.md) * [Custom Tools](/blog/tags/custom-tools.md) * [Integrations](/blog/tags/integrations.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-08-bring-your-own-tools-to-eventcatalog.md) --- # Document examples with your schemas March 11, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog A schema tells you the **shape** of a message. An example shows you **how** it can be used. **Schemas are necessary. Examples are what people actually reach for** when they're writing a consumer, debugging a failed event, or onboarding to a service they've never touched. EventCatalog now supports the ability to add any amount of examples with your schemas, helping your teams understand exactly how your messages are used in your architecture. ## Schemas are not enough[​](#schemas-are-not-enough "Direct link to Schemas are not enough") You've documented your `OrderCreated` [event](/docs/development/guides/messages/events/introduction.md). It has a schema. It has properties. It has owners. But when a new team member sits down to write a consumer, or when an incident is in progress and someone needs to understand what that event carries, the schema only goes so far. **They need a real example.** Not a synthetic one from a property table. An actual payload that reflects how the message looks for a basic order, an international order, a failed payment, a retry. That context lives in someone's head, a Slack thread, or a test fixture buried in a repo. It is not in the catalog. ## Introducing Message Examples[​](#introducing-message-examples "Direct link to Introducing Message Examples") Message Examples lets you place real payload files alongside any [event](/docs/development/guides/messages/events/introduction.md), [command](/docs/development/guides/messages/commands/introduction.md), or [query](/docs/development/guides/messages/queries/introduction.md) in your catalog. Those files appear in the Schema Explorer under a new **Usage Examples** tab, with syntax-highlighted viewing, a copy button, and optional metadata for each example. ![New layout engine](/img/blogs/message-examples.png)[Start adding examples to your messages](/docs/development/guides/messages/common/examples.md) Drop in JSON, YAML, XML, Protobuf, or any other format your messages use. EventCatalog renders them with syntax highlighting automatically. ## When you'd use it[​](#when-youd-use-it "Direct link to When you'd use it") If your team onboards new engineers who need to understand what real payloads look like, this is for you. If you've ever pasted a sample event into Slack to help someone debug, this is where it should live instead. If you have multiple scenarios that your messages cover (a standard order, an international order, a partial refund) and those distinctions matter to consumers, this gives you a structured place to document each one. ## How it works[​](#how-it-works "Direct link to How it works") Create an `examples/` directory inside any event, command, or query directory and add your payload files there: ``` events/ OrderCreated/ index.mdx schema.json examples/ basic-order.json international-order.json ``` That's the minimum. EventCatalog picks up any files in that directory and displays them in the Schema Explorer under the Usage Examples tab, using the filename as the title. ### Adding rich metadata with examples.config.yaml[​](#adding-rich-metadata-with-examplesconfigyaml "Direct link to Adding rich metadata with examples.config.yaml") For production use, you'll want to add context to each example. Create an `examples.config.yaml` file in the same directory: events/OrderCreated/examples/examples.config.yaml ``` basic-order.json: name: Basic Order summary: A simple domestic order with a single item. usage: | curl -X POST http://localhost:3000/events/publish \ -H "Content-Type: application/json" \ -d @basic-order.json international-order.json: name: International Order summary: An order with international shipping and customs information. ``` The `name` field overrides the filename as the display title. The `summary` field appears in the examples list so your team can pick the right one at a glance. The `usage` field shows how to send or trigger the example, with its own copy button in the UI. **Everything in the config is optional.** Files without a config entry still appear using their filename as the title. The config supports `.yaml`, `.yml`, and `.json` formats if you prefer JSON. Nested folders are supported and displayed flat. ### Schema Explorer tab changes[​](#schema-explorer-tab-changes "Direct link to Schema Explorer tab changes") The Schema Explorer tabs have been renamed to make the new tab fit naturally alongside the others: | Before | After | | ------- | -------------- | | Code | Schema | | Schema | Properties | | *(new)* | Usage Examples | | Diff | Changes | | API | API | ### SDK support[​](#sdk-support "Direct link to SDK support") If you generate catalog content programmatically, the [EventCatalog SDK](/docs/sdk.md) has new methods for managing examples: ``` import { addExampleToEvent, getExamplesFromEvent, removeExampleFromEvent } from '@eventcatalog/sdk'; // Add an example to a versioned event await addExampleToEvent('OrderCreated', { fileName: 'basic-order.json', content: JSON.stringify({ orderId: 'ord_123', total: 49.99 }, null, 2), }, '1.0.0'); // Retrieve all examples for an event const examples = await getExamplesFromEvent('OrderCreated', '1.0.0'); // Remove an example await removeExampleFromEvent('OrderCreated', 'basic-order.json', '1.0.0'); ``` The same methods are available for commands (`addExampleToCommand`, `getExamplesFromCommand`, `removeExampleFromCommand`) and queries. ## Getting started[​](#getting-started "Direct link to Getting started") Upgrade to EventCatalog 3.22.1, then add an `examples/` directory to any message. A single JSON file is all you need to see the Usage Examples tab appear in the Schema Explorer. Add an `examples.config.yaml` when you want to add names, summaries, and usage snippets. ## Summary[​](#summary "Direct link to Summary") Message Usage Examples closes the gap between what the schema says and what the message actually looks like. Real payloads, organized by scenario, with the context your team needs to use them. Check the [documentation](/docs/development/guides/messages/common/examples.md) for the full configuration reference. If you have questions or feedback, join us in [Discord](https://discord.gg/eventcatalog) or open an issue on [GitHub](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Messages](/blog/tags/messages.md) * [Schema Explorer](/blog/tags/schema-explorer.md) * [Examples](/blog/tags/examples.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-03-11-message-usage-examples.md) --- # Document who consumes your APIs, not just who owns them March 25, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **Understanding who owns an API is useful. Understanding who consumes it is what makes the documentation actually actionable.** The [EventCatalog OpenAPI generator](/docs/plugins/openapi/intro.md) has always let you document the services that produce your APIs. Today it can also document the downstream services that consume them, with fine-grained control over which routes each consumer receives. [YouTube video player](https://www.youtube.com/embed/ePlCqnsRVBY) ## Half the picture was missing[​](#half-the-picture-was-missing "Direct link to Half the picture was missing") When you generate documentation from an OpenAPI spec, you get a clear view of the owner: the [service](/docs/development/guides/services/introduction.md) that owns the API, the routes it exposes, the schemas for each request and response. That's useful. ![Type conflict badge in the field table](/img/blogs/openapi-without-producers.png)Visualization of the endpoints for the Orders Services What it doesn't capture is the downstream side. Which services depend on the payment endpoint? Which team owns the mobile client that calls `/orders/*/status`? Who breaks when you change the `/shipments` response schema? That information exists somewhere, usually spread across wikis, Slack threads, and individual engineers' heads. It rarely makes it into the catalog because there was no structured place to put it. ## What's new[​](#whats-new "Direct link to What's new") **The OpenAPI generator now supports a `consumers` array on each service configuration.** Each entry defines a downstream service that calls endpoints produced by that API, with an optional `routes` filter to scope which endpoints it cares about. ![Type conflict badge in the field table](/img/blogs/openapi-with-producers.png)Visualization shows which services are calling what endpoints of the Orders Service ## When you'd use it[​](#when-youd-use-it "Direct link to When you'd use it") If you have a shared API gateway or platform API that multiple teams consume, this gives each consuming team a first-class presence in your catalog. If you're planning a schema change and need to know who would be affected, the consumer relationships are now queryable and visible in the visualizer. If your [domain](/docs/development/guides/domains/introduction.md) contains services that receive data from an OpenAPI-backed service, you can document those relationships without hand-editing every service file. ## How it works[​](#how-it-works "Direct link to How it works") Using your OpenAPI files you can automate documentation, visualizations, and schemas in EventCatalog. To document `consumers` of your API, you need to define the `consumers` in the EventCatalog configuration file. eventcatalog.config.js ``` generators: [ [ '@eventcatalog/generator-openapi', { services: [ { path: 'openapi.yml', id: 'order-api', consumers: [ // Payment service only cares about payment endpoints { id: 'payment-service', version: '1.0.0', routes: [{ suffix: '/payments' }] }, // Shipping service consumes shipment endpoints { id: 'shipping-service', version: '1.0.0', routes: [{ suffix: '/shipments' }] }, // Analytics consumes everything (no filter) { id: 'analytics-service', version: '1.0.0' }, // Mobile app uses wildcard to match specific patterns { id: 'mobile-app', routes: [{ match: '/orders/*/status' }] }, ], }, ], }, ], ], ``` EventCatalog will parse your OpenAPI file and will match any routes to your downstream services (consumers of the services). ### Route filtering[​](#route-filtering "Direct link to Route filtering") The `routes` filter gives you precise control over which endpoints each consumer is associated with. Four matching strategies are available: | Key | Behavior | | -------- | ---------------------------------------------------- | | `path` | Exact match on route path | | `prefix` | Matches routes that start with the given string | | `suffix` | Matches routes that end with the given string | | `match` | Wildcard pattern where `*` matches any path segments | Multiple keys within a single filter object are combined with AND logic (the route must satisfy all conditions). Multiple filter objects in the `routes` array are combined with OR logic (the route needs to satisfy at least one object). So `routes: [{ prefix: '/orders', suffix: '/status' }]` matches routes that start with `/orders` AND end with `/status`. And `routes: [{ suffix: '/payments' }, { suffix: '/shipments' }]` matches routes ending in either `/payments` OR `/shipments`. ## Getting started[​](#getting-started "Direct link to Getting started") Head over to our [OpenAPI Integration](/integrations/openapi.md), and install the plugin on your EventCatalog instance. If you have an OpenAPI file you try EventCatalog in a couple of seconds at [try.eventcatalog.dev](https://try.eventcatalog.dev/). Once you install the plugin for EventCatalog add a `consumers` array to your existing OpenAPI generator configuration and run the generator. **That's it.** No manual service file editing required. If you haven't set up the OpenAPI generator yet, start with the [installation guide](/docs/plugins/openapi/installation.md). For the full configuration reference including consumers, see the [plugin configuration docs](/docs/plugins/openapi/plugin-configuration.md). ## Summary[​](#summary "Direct link to Summary") The OpenAPI generator now captures both sides of the API relationship: who produces it and who consumes it. Consumer services are created or updated automatically, with route-based filtering so each service only receives the messages it actually cares about. **Your OpenAPI spec already knows your routes. Now your catalog can know your consumers too.** Questions and feedback are welcome on [Discord](https://discord.gg/eventcatalog) or open an issue on [GitHub](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAPI](/blog/tags/open-api.md) * [Services](/blog/tags/services.md) * [Generators](/blog/tags/generators.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-03-25-openapi-consumer-services.md) --- # OpenAPI integration with EventCatalog September 6, 2024 · 2 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Last week we launched the [new AsyncAPI Plugin](/blog/asyncapi-eventcatalog.md) and today I'm happy to share we have now launched our next integration: [OpenAPI Plugin](/docs/plugins/openapi/intro.md). The [EventCatalog OpenAPI plugin](https://github.com/event-catalog/generators) connects your [OpenAPI](https://swagger.io/specification/) files to [EventCatalog](https://www.eventcatalog.dev/) and automates the hydration of your catalog, versioning and schema management. ### What is OpenAPI?[​](#what-is-openapi "Direct link to What is OpenAPI?") The [OpenAPI specification](https://swagger.io/specification/) is a widely-adopted standard for defining and describing RESTful APIs in a structured, machine-readable format. It provides a way to document APIs, including the endpoints, parameters, request and response formats, authentication methods, and more, making it easier for both humans and machines to understand and interact with the API. ### Why integration with EventCatalog[​](#why-integration-with-eventcatalog "Direct link to Why integration with EventCatalog") For many years people have been using OpenAPI specifications to help document their APIS. Integrating with OpenAPI specifications allows users of EventCatalog to generate their services, map them to domains, visually see there architecture, parameters, responses and payloads. Our vision with EventCatalog is to help companies manage event-driven architecture discoverability and it's complexity through documentation and integration tools. Part of this vision is to automate some of this complexity and documentation for you. That's why we have integrated with OpenAPI. ### How the plugin works[​](#how-the-plugin-works "Direct link to How the plugin works") EventCatalog can be powered by [generators](https://www.eventcatalog.dev/docs/plugins/generators). Generators can be used to automate the creation of your EventCatalog. The [OpenAPI generator](https://github.com/event-catalog/generators) takes your OpenAPI files and transforms them into living documentation. ![Image](/assets/images/openapi-0844ea76bef695fcf87f45a94ea927bd.png) The OpenAPI generator will: * 📃 Document domains, services and messages from your OpenAPI file (example) * 📊 Visualise your architecture * ⭐ Download your OpenAPI files * 💅 Custom MDX components * 🗄️ Auto versioning of your domains, services and messages * ⭐ Discoverability feature (search, filter and more) * ⭐ And much more... ### Getting started[​](#getting-started "Direct link to Getting started") To get started you can [read the documentation](/docs/plugins/openapi/intro.md) or see [the example project](https://github.com/event-catalog/generators/tree/main/examples/generator-openapi). ### Summary[​](#summary "Direct link to Summary") EventCatalog is vendor and technology agnostic. This allow us to integrate with any system in the world and we already have a backlog of plugins [(Backstage, OpenAPI, GitHub, AWS, Azure, Google, Solace, Gravitee and more...)](https://www.eventcatalog.dev/integrations). Today we launched our [OpenAPI integration](https://github.com/event-catalog/generators) which allows you to automate your EventCatalog. If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAPI](/blog/tags/open-api.md) [Edit this page]() --- # Introducing Remote Schemas - Fetch and Sync Schemas at Runtime July 25, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that [EventCatalog 2.52.0](https://github.com/event-catalog/eventcatalog/releases) introduces a feature: the [**RemoteSchema** component](/docs/development/components/components/remote-schema.md). This new component enables you to fetch and render schemas directly from remote URLs at runtime, ensuring your documentation stays synchronized with your live systems automatically.
For companies managing complex event-driven architectures, keeping documentation in sync with rapidly evolving APIs has always been a challenge. The **RemoteSchema** component solves this by creating a direct bridge between your live API definitions and your EventCatalog documentation. ## Introducing the RemoteSchema Component[​](#introducing-the-remoteschema-component "Direct link to Introducing the RemoteSchema Component") The new `RemoteSchema` component gives you another way to add schemas into your documentation. Providing a URL to a schema will automatically fetch the schema and render it in your documentation. tip The `RemoteSchema` component only works in Server-Side Rendering (SSR) mode. Make sure your EventCatalog is configured to run in SSR mode to use this component. You can read more about how to configure your EventCatalog to run in SSR mode [here](/docs/development/deployment/build-ssr-mode.md). ### Basic Usage[​](#basic-usage "Direct link to Basic Usage") events/UserRegistered/index.mdx ``` --- id: UserRegistered name: User Registered --- The User Registered event is triggered when a new user signs up for our platform. ``` This simple addition automatically fetches and renders the latest schema from your API, ensuring the documentation always reflects the current state of your system. ### Advanced Features[​](#advanced-features "Direct link to Advanced Features") **Custom Authentication for Private APIs** For teams with private API endpoints, the component supports custom headers for authentication and environment variable mapping. EventCatalog Scale Private APIs are only available on the EventCatalog Scale plan. You can get a 14 day free trial [here](https://eventcatalog.cloud). ``` ``` **JSONPath Extraction** When working with large data sets you can extract specific schema definitions using [JSONPath](https://github.com/dchester/jsonpath). ``` ``` **Environment Variable Support** Keep sensitive information secure using environment variables: ``` ``` Loading environment variables Add your environment variables to the `.env` file in the root of your EventCatalog project. The RemoteSchema component will automatically map the environment variables to the template string. ## How can this help your team?[​](#how-can-this-help-your-team "Direct link to How can this help your team?") ### 1. **Single Source of Truth**[​](#1-single-source-of-truth "Direct link to 1-single-source-of-truth") The RemoteSchema component creates a direct connection between your live APIs and documentation. When schemas change in your API gateway, schema registry, or service endpoints, your documentation automatically reflects those changes without any manual intervention. ### 2. **Sync your schemas without manual updates**[​](#2-sync-your-schemas-without-manual-updates "Direct link to 2-sync-your-schemas-without-manual-updates") If you prefer to keep your schemas in a single source of truth, you can use the `RemoteSchema` component to fetch the schema from your API gateway, schema registry, or service endpoints. EventCatalog will automatically fetch the schema and render it in your documentation. ### 3. **Improved Developer Experience**[​](#3-improved-developer-experience "Direct link to 3-improved-developer-experience") New team members and API consumers can trust that the documentation accurately represents the current API state. This reduces confusion, speeds up onboarding, and improves overall developer productivity. ### 4. **Enterprise-Ready Security**[​](#4-enterprise-ready-security "Direct link to 4-enterprise-ready-security") With support for custom authentication headers and environment variables, the component works seamlessly with private APIs and enterprise security requirements. ### How is this different to EventCatalog Plugins?[​](#how-is-this-different-to-eventcatalog-plugins "Direct link to How is this different to EventCatalog Plugins?") EventCatalog provides a list of plugins that can fetch schemas from remote sources [(e.g OpenAPI, AsyncAPI plugins, Confluent Schema Registry, AWS Glue Schema Registry, etc)](/integrations.md). Using these plugins you can do advanced mapping and filtering of your schemas to your services, domains and messages. ## Next Steps[​](#next-steps "Direct link to Next Steps") The RemoteSchema component is available now in EventCatalog 2.52.0. To get started: 1. **[Upgrade your EventCatalog](https://www.eventcatalog.dev/docs/development/guides/upgrading)** to the latest version 2. **[Read the full documentation](/docs/development/components/components/remote-schema.md)** for detailed usage examples 3. **[Join our Discord](https://eventcatalog.dev/discord)** to share your use cases and get help from the community This feature represents a significant step forward in making EventCatalog a living, breathing documentation platform that stays synchronized with your evolving architecture. By connecting directly to your live systems, EventCatalog becomes not just documentation, but a real-time reflection of your event-driven architecture. The future of API documentation is dynamic, connected, and always current. The RemoteSchema is one step towards that future. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Remote Schema](/blog/tags/remote-schema.md) * [API Integration](/blog/tags/api-integration.md) * [Documentation](/blog/tags/documentation.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-07-25-introducing-remote-schema-component.md) --- # The right documentation, in the right place February 19, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.15.0 is out, and it introduces [resource-level documentation](/docs/development/bring-your-own-documentation/resource-docs/introduction.md). The catalog lives in one place. The runbooks live in Confluence. The ADRs are somewhere in Notion. The troubleshooting guides are in a Slack thread from six months ago. The catalog tells you *what* exists. Everything that explains *why* and *how* is somewhere else entirely. EventCatalog has had [custom documentation support](/docs/development/bring-your-own-documentation/custom-pages/introduction.md) for a while now. The ability to bring your own docs and create a global documentation section inside your catalog. Teams adopted it quickly. But one question kept coming up: *"Why can't I attach documentation to a specific resource? I want my runbook to live on the service, my ADR to live on the domain, my troubleshooting guide to live on the event."* That's exactly what [resource-level documentation](/docs/development/bring-your-own-documentation/resource-docs/introduction.md) does. ## Documentation that lives with the thing it describes[​](#documentation-that-lives-with-the-thing-it-describes "Direct link to Documentation that lives with the thing it describes") With resource-level documentation, you can now attach `.mdx` documentation files directly to any resource in your catalog: services, events, commands, queries, domains, flows, all of it. The docs live in a `docs/` directory alongside the resource, show up in the resource's sidebar, and can be grouped into categories so your teams can find the information they need in the right context. They're versioned with your resources, so when the schema changes, the ADR changes too. Full audit trail in Git. ![Resource-level documentation](/assets/images/resource-docs-39baae0ba68928f628cba7b56c16ac56.png) ## What this looks like in practice[​](#what-this-looks-like-in-practice "Direct link to What this looks like in practice") ### Services: runbooks where you actually need them[​](#services-runbooks-where-you-actually-need-them "Direct link to Services: runbooks where you actually need them") When something goes wrong at 2am, nobody wants to dig through Confluence to find the deployment runbook for `OrdersService`. With resource-level documentation, it's right there in the catalog: ``` services/ OrdersService/ index.mdx docs/ runbooks/ how-to-deploy.mdx rollback-procedure.mdx guides/ local-development.mdx ``` Anyone looking at `OrdersService` in the catalog sees those docs in the sidebar, directly alongside the service's producers, consumers, and schema. No hunting. No "do you know where the runbook lives?" ### Events: the reasoning behind the contract[​](#events-the-reasoning-behind-the-contract "Direct link to Events: the reasoning behind the contract") The people consuming `OrderPlaced` shouldn't have to guess why the schema looks the way it does. Attach the schema decision record right to the event: ``` events/ OrderPlaced/ index.mdx docs/ adrs/ why-we-chose-this-schema.mdx guides/ troubleshooting-missing-events.mdx ``` Now when a consuming team wonders "why is `customerId` a string and not a UUID here?" the answer is one click away, sitting next to the event definition itself. Context stays with the contract. ### Domains: ADRs attached to the bounded context[​](#domains-adrs-attached-to-the-bounded-context "Direct link to Domains: ADRs attached to the bounded context") This one is underrated. Architecture Decision Records are valuable precisely when they're connected to the thing they're about. An ADR explaining why the Orders domain owns customer address data means nothing floating in a wiki. Attached to the Orders domain in the catalog, it's immediately discoverable by anyone working in or around that domain: ``` domains/ Orders/ index.mdx docs/ adrs/ why-orders-owns-address-data.mdx bounded-context-decision.mdx ``` The domain page becomes more than a registry entry. It becomes a record of *why*: why you drew the boundary where you did, why you made those trade-offs, why the model looks the way it does. ## More than a catalog[​](#more-than-a-catalog "Direct link to More than a catalog") The shift here is subtle but important. EventCatalog has always been a place to *discover* your architecture. Resource-level documentation makes it a place to *understand* it too. Most documentation tools are focused purely on content storage. They have no understanding of your domains, your services, your events, or how everything fits together. You've probably been in this situation: you're about to make a change, you know there's an ADR about it somewhere, but by the time you find it you've already decided. The docs didn't fail you. The *distance* did. So you end up with a documentation page that exists in isolation. Easy to miss, and impossible to stumble across at the right moment. When documentation is attached to the actual entities in your architecture, it changes how your teams read and use it. An ADR isn't just a decision record, it's a decision record about *this domain*. A runbook isn't just a guide, it's a guide for *this service*. The context makes the documentation meaningful. When a new engineer joins the team, they can open the catalog and not just see what services exist. They can read the deployment guide, the architectural decisions, the troubleshooting runbooks, all in context. When someone is about to consume an event, the design rationale is right there next to the schema. Documentation that lives in a separate tool gets updated once, then orphaned. Documentation that lives alongside the resource has a much better chance of being found, read, and kept current. ## Getting started[​](#getting-started "Direct link to Getting started") Resource-level documentation is available on the [Scale plan](/pricing.md). To get started, create a `docs/` directory alongside any resource and drop in your `.mdx` files. Subdirectories like `adrs/`, `runbooks/`, and `guides/` work out of the box for grouping. Read the [resource-level documentation guide](/docs/development/bring-your-own-documentation/resource-docs/introduction.md) to get started and see the full configuration options. Not on Scale yet? [Start a 14-day free trial](https://eventcatalog.cloud). No credit card required. If you have questions or feedback, join us in the [EventCatalog Discord](https://discord.com/invite/3rjaZMmrAm). Drop in and let us know what you're attaching where. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Documentation](/blog/tags/documentation.md) * [Scale](/blog/tags/scale.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-02-19-resource-docs.md) --- # EventCatalog 2.64.0 - Schemas! October 31, 2025 · 10 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog ![EventCatalog Schema Explorer](/img/blogs/schemas.png) Schemas are at the heart of any message based architecture. Popular message formats include JSON, Avro, Protobuf and using specifications like OpenAPI, AsyncAPI and GraphQL to document these for services. Since the start, EventCatalog focused on being technology agnostic. This has allowed developers to document any message, service or schema format. Architects and developers either use EventCatalog as the source of truth for their schemas, or have [EventCatalog fetch and sync schemas from any schema registry or external repository using EventCatalog plugins](/docs/plugins/intro.md). EventCatalog is flexible and works with many different schema workflows. Although we already support schema documentation, some of our users told us that finding schemas was still hard, and can be time consuming for their teams. So today, I’m happy to share a few new features that can help: * [Schema Explorer](#what-is-the-schema-explorer) * [Schema API Access](#schema-api-access) * [Schemas.txt for LLMs](#schemas-txt-for-llms) * [Schema tools for EventCatalog MCP](#schema-tools-for-eventcatalog-mcp) ## What is the Schema Explorer[​](#what-is-the-schema-explorer "Direct link to What is the Schema Explorer") We are excited to share the new [EventCatalog Schema Explorer](/docs/development/guides/schemas/schema-explorer.md). The schema explorer is designed to save your team time when trying to find and understand schemas in your architecture. ![EventCatalog Schema Explorer](/img/blogs/schemas/schema-explorer.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) Using the schema explorer users can use filters to find the schemas they need, understand the producers/consumers of the schemas, see how a schema has evolved over time and much more… To get started you can read more about the [schema explorer in our documentation](/docs/development/guides/schemas/schema-explorer.md). ### Schema Panel[​](#schema-panel "Direct link to Schema Panel") This section on the schema explorer will show you information for each schema, who owns the schema (user or teams) and who is producing and consuming that schema. This can be useful information if you want to make changes to a schema or contact the team that owns the schema. ![EventCatalog Schema Evolution](/img/blogs/schemas/schema-panel.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) ### Schema Evolution[​](#schema-evolution "Direct link to Schema Evolution") Schemas evolve over time, and EventCatalog lets you capture [versions of your messages](/docs/development/guides/messages/common/versioning.md). If your schema has previous versions EventCatalog will show you diffs between each schema version. ![EventCatalog Schema Evolution](/img/blogs/schemas/schema-diff.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) *Note: Schema diffs is a EventCatalog Scale Feature.* ### Schema Property Search[​](#schema-property-search "Direct link to Schema Property Search") JSON and Avro schemas can be rendered as searchable information. This lets your teams quickly find properties in your schemas finding the information they need. ![EventCatalog Schema Property Search](/img/blogs/schemas/schema-search.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) ## Schema API Access[​](#schema-api-access "Direct link to Schema API Access") We have introduced a Schema [API in EventCatalog](/docs/development/guides/schemas/schema-api.md) that lets you fetch any version of your schemas for your events, queries, commands and services. Your teams can use this to fetch the latest schema of messages for validation or testing. ![EventCatalog Schema API Access](/img/blogs/schemas/schema-api.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) You can read more about the [Schema API](/docs/development/guides/schemas/schema-api.md) and how to get started with our documentation guide. *Note: Schema API is a EventCatalog Scale Feature.* ## Schemas.txt for LLMS[​](#schemastxt-for-llms "Direct link to Schemas.txt for LLMS") EventCatalog already supports [llms.txt](/docs/development/developer-tools/llms.txt.md) which is an emerging standard for documentation tools providing LLMs information they need. We introduced a new idea called the [schemas.txt](/docs/development/developer-tools/schemas.txt.md). Think of this as a table of content for your LLMs to understand what schemas are in your architecture, and how the LLM will get access to them. ![EventCatalog Schemas.txt](/img/blogs/schemas/schema-txt.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/docs/llm/schemas.txt) This can be useful if you are building custom AI agents or using LLMs to ask questions about your architecture. Give this URL to your AI Agent as a tool or as a URL to fetch the schemas.txt file, and then you can ask the LLM to fetch the schemas for you. ## Schema tools for EventCatalog MCP[​](#schema-tools-for-eventcatalog-mcp "Direct link to Schema tools for EventCatalog MCP") We added two new tools to our [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md), which allows your MCP clients to query and get the schemas they need in the given context. This means your LLM can ask questions about your schemas, get schema information for your services and messages, directly in your code editor or LLMs. ![EventCatalog MCP Schema Tools](/img/blogs/schemas/mcp-example.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/docs/llm/schemas.txt) The EventCatalog MCP allows you to connect your IDE to EventCatalog and make sure your AI model has the information it needs. With the new schema tools the AI models now have access to your schemas across your organization. To get started you can read more about our [MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md). ## Summary[​](#summary "Direct link to Summary") EventCatalog 2.64.0 introduces the new Schema Explorer, Schema API, Schemas.txt for LLMs and Schema tools for EventCatalog MCP. These new features can help your teams save time when finding and understanding schemas in your architecture. To get started you can read more about the [Schema Explorer](/docs/development/guides/schemas/schema-explorer.md), [Schema API](/docs/development/guides/schemas/schema-api.md), [Schemas.txt for LLMs](/docs/development/developer-tools/schemas.txt.md) and [Schema tools for EventCatalog MCP](/docs/development/ask-your-architecture/mcp-server/introduction.md). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Schema](/blog/tags/schema.md) * [Features](/blog/tags/features.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2025-10-31-schema-features.md) --- # Trace every field across your schemas and architecture March 23, 2026 · 8 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **EventCatalog now indexes every field from every message schema in your architecture and makes them searchable, traceable, and verifiable, all from a single page.** This is Schema Insights, available now at `/schemas/fields` in EventCatalog. [YouTube video player](https://www.youtube.com/embed/PQIBATgtuKs?si=TagMKL49ZD_G_HYE) ## The problem with growing schemas[​](#the-problem-with-growing-schemas "Direct link to The problem with growing schemas") As architectures grow, schemas multiply. An `OrderPlaced` [event](/docs/development/guides/messages/events/introduction.md) gains fields. A `PaymentProcessed` event reuses some of those same fields. A `CustomerUpdated` [command](/docs/development/guides/messages/commands/introduction.md) redefines one of them with a slightly different type. Nobody notices until a consumer breaks. Same field names, different types — hidden inconsistencies waiting to break consumers At small scale, you can track this manually. At any meaningful scale, you cannot. The questions that seem simple, *"where is `customerId` used across our architecture?"*, *"does `timestamp` mean the same thing everywhere?"*, become genuinely hard to answer. The information is buried across dozens of schema files across multiple [services](/docs/development/guides/services/introduction.md) and [domains](/docs/development/guides/domains/introduction.md). ## Introducing Schema Insights[​](#introducing-schema-insights "Direct link to Introducing Schema Insights") **Schema Insights indexes every field from every message schema and surfaces them in one place.** It supports JSON Schema, Avro, and Protobuf. At startup, EventCatalog builds a SQLite index of all fields across the latest version of every message in your catalog. The result is a searchable, filterable table that gives your whole team visibility into the data model of your architecture. ![Schema Insights table view](/img/blogs/field-search.png)Schema Insights shows every indexed field with its type, message, format, and usage count Every field entry shows its path, type, which message it belongs to, the schema format, whether it's required, and how many messages use it. Full-text search across field names is included for free. Filter by schema format (JSON Schema, Avro, Protobuf) or by message type (event, command, query) to narrow things down fast. ## What's included[​](#whats-included "Direct link to What's included") Schema Insights is available on all plans. You can browse and search all fields across every schema in your catalog, filter by format and message type, and see each field's type, required status, and which message it belongs to. With a **Scale** plan, you also get **Field Intelligence**: * **Shared field discovery**: see when a field like `customerId` appears across 12 different messages, with a count shown in the "Used In" column * **Interactive traceability graphs**: click any field to see a visual graph showing that field at the center, connected to every message that contains it, and the services that produce or consume those messages * **Type conflict detection**: when the same field name carries inconsistent types across schemas, EventCatalog flags it with an amber warning badge ## Type conflict detection[​](#type-conflict-detection "Direct link to Type conflict detection") When the same field name appears across multiple schemas with different types, that inconsistency is a ticking clock. A `timestamp` field that's a `string` in eight schemas and a `long` in one is a consumer integration bug waiting to happen. ![Type conflict badge in the field table](/img/blogs/type-conflicts-row.png)Amber "2 types" badge flags fields with inconsistent types across schemas EventCatalog surfaces these conflicts as amber badges directly in the field table. A filter lets you show only conflicting fields, so you can go straight to the problems. You can also filter to show only shared fields, for a quick audit of what your architecture is reusing. ![Type conflict details in the traceability graph side panel](/img/blogs/type-conflicts-visual.png)The traceability graph side panel shows the exact type conflict details, including which messages carry which type ## Interactive field traceability graphs[​](#interactive-field-traceability-graphs "Direct link to Interactive field traceability graphs") Clicking a field on a Scale plan opens a traceability graph. The field sits at the center. Every message that contains it connects to it. Every service that produces or consumes those messages is a node on the graph. ![Field traceability graph showing a field connected to messages and services](/img/blogs/field-search-graph.png)The field traceability graph shows a field connected to all its messages and the services that produce or consume them This answers the question *"where does this data flow?"* in seconds. You can see at a glance whether a shared field is consistent across producers, which services are involved, and whether anything looks unexpected. ## How it works[​](#how-it-works "Direct link to How it works") At build or start time, EventCatalog scans all message schemas in your catalog and builds a field index stored in `.eventcatalog/fields.db`. Only the latest version of each message is indexed. The index stores field path, type, required status, format, and the message it belongs to. **This feature requires SSR mode.** The `/schemas/fields` page is served dynamically and queries the SQLite index at request time. If you're already running EventCatalog in SSR mode, the page is available immediately after upgrading. If you're running in static mode, you'll need to enable SSR to use it. Schema Insights is accessible from the sidebar under "Schema Explorer", alongside the existing schema browsing, diff, and API features. ![Schema Explorer sidebar navigation](/img/blogs/schema-explorer.png)Schema Insights lives under Schema Explorer in the sidebar ## When you'd use it[​](#when-youd-use-it "Direct link to When you'd use it") If you're onboarding onto a new codebase and need to understand what data is flowing through the system, Schema Insights gives you an indexed view of every field in every schema without reading each file individually. If you're planning a schema change and want to know how widely a field is used, the shared field count and traceability graph tell you exactly which services would be affected. If you're running a data governance or contract review, the type conflict filter surfaces every inconsistency in your architecture in one list. Fix them before they surface as production incidents. ## Getting started[​](#getting-started "Direct link to Getting started") Upgrade to the latest version of EventCatalog. Start your catalog in SSR mode and navigate to `/schemas/fields`. The basic explorer is available on all plans. For Field Intelligence (traceability graphs, conflict detection, shared field analysis), you'll need a Scale plan license key. Not on Scale yet? [Start a 14-day free trial](https://eventcatalog.cloud). Read the full [Schema Insights documentation](/docs/development/guides/schemas/fields-explorer.md) for configuration details and feature reference. ## Summary[​](#summary "Direct link to Summary") Schema Insights gives your team visibility into the data that flows through your architecture. Community users get a searchable, filterable index of every field across every schema. Scale users get type conflict detection and interactive traceability graphs that show exactly where each field travels. **Your schemas are already there. Now you can actually understand them.** Questions and feedback are welcome on [Discord](https://discord.gg/eventcatalog) or [GitHub](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Schema](/blog/tags/schema.md) * [Field Intelligence](/blog/tags/field-intelligence.md) * [Events](/blog/tags/events.md) * [Services](/blog/tags/services.md) * [Scale](/blog/tags/scale.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-03-23-schema-fields-explorer.md) --- # EventCatalog Slack integration February 3, 2026 · 7 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **Your teams can now ask EventCatalog about your architecture, events, services, and schemas directly in Slack.** You know the pattern. Someone on your team needs to know which services consume the `OrderCreated` event. They check the wiki. Not there. They search Confluence. Wrong version. They ping three different people in Slack asking if anyone knows. **We've made this much simpler.** @mention the EventCatalog bot in any Slack channel or post in a dedicated architecture question channel. The bot reads your EventCatalog documentation and provides accurate, grounded answers in seconds. ![EventCatalog Slack Bot](/img/slack.png)Example of the EventCatalog Slack Bot in action asking about the OrderCreated event ## Finding architecture information is hard[​](#finding-architecture-information-is-hard "Direct link to Finding architecture information is hard") Your team spends hours every week hunting for architecture information. The knowledge exists somewhere. It's just scattered across wikis, Confluence pages, outdated diagrams, and people's heads. A developer needs to understand an event schema to fix a bug. They check the docs. Maybe it's there, maybe it's not. Maybe it's three versions old. So they go to the schema registry, the schema is there, but it has no business context, no ownership, no history, no visualizations. So they ask someone who worked on it last month. They waste 30 minutes tracking down the current schema from someone who worked on it last month... the list goes on. This happens constantly. Every new team member. Every cross-team collaboration. Every time someone touches code they didn't write. ## What's new[​](#whats-new "Direct link to What's new") The EventCatalog Slack Bot connects directly to your EventCatalog instance through the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md). Your team asks questions in Slack. The bot queries your catalog and responds with answers grounded in your actual documentation. The bot is self-hosted. You own your data and control your deployment. It uses Socket Mode, so no public URLs or webhooks needed. Configure it with your AI provider of choice (Anthropic, OpenAI, or Google) and deploy it wherever your infrastructure runs. ## When you'd use it[​](#when-youd-use-it "Direct link to When you'd use it") Your team needs quick answers about your architecture without context switching. **During code reviews.** A reviewer sees an event being published and wants to know what consumes it. They @mention the bot in the PR channel: "What services consume the PaymentProcessed event?" The bot responds with the current list from your catalog. **During incidents.** The payment service is down. Your on-call engineer needs to know what events it produces and what depends on them. They ask the bot in the incident channel. They get the architecture context immediately without leaving the conversation. **Onboarding new developers.** Someone joins the team and needs to understand the Orders domain. They post in your dedicated `#ask-eventcatalog` channel: "List all events in the Orders domain." The bot provides the overview. They follow up with questions about specific events. The bot uses thread context to provide relevant answers. **During planning.** Your team is designing a new feature that needs to emit events. They ask the bot what similar events exist and how they're structured. They get examples from your actual schemas, not outdated documentation. ## How it works[​](#how-it-works "Direct link to How it works") The bot connects to three things: your Slack workspace, your EventCatalog instance, and your chosen AI provider. **First, you create a Slack app.** EventCatalog provides a manifest that configures all the permissions automatically. Generate three credentials (bot token, app token, signing secret) and you're done. The [Slack app setup documentation](/docs/development/ask-your-architecture/slack-integration/slack-app-setup.md) walks through this in detail. **Second, you configure the bot.** Point it at your EventCatalog instance, choose your AI provider, and optionally set up auto-reply channels where the bot responds to every message without needing @mentions. ``` export default { eventCatalog: { url: 'https://your-catalog.example.com', }, ai: { provider: 'anthropic', maxSteps: 5, temperature: 0.4, }, slack: { autoReplyChannels: ['C0123456789'], // #ask-eventcatalog }, }; ``` **Third, you deploy it.** The bot runs as a long-lived process that maintains a connection to Slack. Deploy it with Docker, Railway, Fly.io, Render, or any cloud provider. Because it uses Socket Mode, you don't need load balancers, SSL certificates, or public endpoints. The bot automatically handles thread context. Ask a follow-up question in a thread and it remembers what you were discussing. "Tell me about OrderCreated" followed by "What are its consumers?" works naturally. ## Custom tools for real-time data[​](#custom-tools-for-real-time-data "Direct link to Custom tools for real-time data") The bot supports [custom tools](/docs/development/ask-your-architecture/eventcatalog-assistant/bring-your-own-tools.md) defined in your `eventcatalog.chat.js` file. This means you can bring live data into conversations. Query production metrics from Datadog or Prometheus. Check service health and uptime. Look up on-call engineers from PagerDuty. Fetch queue depths from Kafka. Any integration your team needs. The AI decides when to use custom tools based on the question. Ask "who is on-call for OrderService?" and get live PagerDuty data. Ask "what's the current error rate for PaymentService?" and get real-time metrics. This turns the bot into a single interface for both documentation and operational data. ## Getting started[​](#getting-started "Direct link to Getting started") **Prerequisites:** * EventCatalog instance running in [SSR mode](/docs/development/deployment/build-ssr-mode.md) with configured MCP server * [EventCatalog Scale license](https://eventcatalog.cloud) (14-day free trial available) * Slack workspace with app creation permissions * API key for your chosen AI provider **Quick start:** Clone the repository and install dependencies: ``` git clone https://github.com/event-catalog/eventcatalog-slack-bot.git cd eventcatalog-slack-bot npm install ``` Create a `.env` file with your credentials: ``` EVENTCATALOG_SCALE_LICENSE_KEY=your-license-key SLACK_BOT_TOKEN=xoxb-... SLACK_APP_TOKEN=xapp-... SLACK_SIGNING_SECRET=... ANTHROPIC_API_KEY=sk-ant-... ``` Create `eventcatalog-bot.config.ts` with your configuration, then start the bot: ``` npm run dev ``` Invite the bot to a channel and @mention it with a question. That's it. Full setup instructions, deployment guides, and configuration options are in the [Slack integration documentation](/docs/development/ask-your-architecture/slack-integration/introduction.md). ## Summary[​](#summary "Direct link to Summary") The EventCatalog Slack Bot brings your architecture documentation into Slack where your team already works. Teams can ask questions, get instant answers grounded in your catalog, and optionally integrate real-time data through custom tools. This saves time previously spent searching through wikis, reduces context switching during development and incidents, and makes architecture knowledge accessible to everyone on your team. **Learn more:** * [Slack integration documentation](/docs/development/ask-your-architecture/slack-integration/introduction.md) * [MCP server documentation](/docs/development/ask-your-architecture/mcp-server/introduction.md) * [Custom tools documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/bring-your-own-tools.md) **Get involved:** * Questions? Join us on [Discord](https://eventcatalog.dev/discord) * Found a bug or want to contribute? Check out [GitHub](https://github.com/event-catalog/eventcatalog-slack-bot) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Slack](/blog/tags/slack.md) * [Integration](/blog/tags/integration.md) * [AI](/blog/tags/ai.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-02-03-slack-integration.md) --- ## 2[​](#2 "Direct link to 2") * [21](/blog/tags/2.md) *** --- ## [Modelling more message patterns in EventCatalog](/blog/channels-20.md) December 1, 2025 · 7 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm happy to share that **EventCatalog 2.65.0** is now out. This release includes the following highlights: * [New: Channel updates in EventCatalog](#channel-updates-in-eventcatalog) * A new way to model more message patterns in EventCatalog, chain channels together and much more... * [New: Producers and consumers are now visualized](#producers-and-consumers-are-now-visualized) * The visualizer now shows Producers and Consumers for your messages. Not just the service, to help you understand the bigger picture. * [New: Message colors added to the visualizer](#message-colors-added-to-the-visualizer) * The visualizer now shows colored messages (nodes). This allows you to keep track of how messages flow in your architecture. Files will be automatically migrated When you upgrade EventCatalog to 2.65.0 our migration script will migrate your channels for you ❤️. This will change files in your EventCatalog that will be need to be reviewed and updated. ## Channel updates in EventCatalog[​](#channel-updates-in-eventcatalog "Direct link to Channel updates in EventCatalog") Channels in EventCatalog have been updated to support more complex messaging patterns and flows. Channels represent the transportation method of messages between producers and consumers. Examples of channels could be: * Kafka * RabbitMQ * AWS SQS * AWS SNS * AWS SNS ### What has changed with Channels?[​](#what-has-changed-with-channels "Direct link to What has changed with Channels?") Previously in EventCatalog you would define and assign your channel to your messages. This would tell EventCatalog that the `OrderPlaced` message is published to the `orders.events` channel. /events/OrderPlaced/index.mdx (example) ``` --- id: OrderPlaced ... # other event frontmatter channels: - id: orders.events --- ``` **Although this worked, it limited the ability to model more complex messaging patterns and flows.** Moving forward you will now define **how** your messages are transported when documenting who is publishing and consuming these messages. ### Define how your producers and consumers transport messages[​](#define-how-your-producers-and-consumers-transport-messages "Direct link to Define how your producers and consumers transport messages") When you define produces and consumers in EventCatalog, you use the `sends` and `receives` fields in your service frontmatter. This example shows: * The `OrderService` sending an `OrderPlaced` message * The `OrderService` receiving a `PaymentProcessed` /services/Orders/index.mdx (example) ``` --- id: OrderService ... # other service frontmatter sends: - id: OrderPlaced receives: - id: PaymentProcessed --- ``` In EventCatalog 2.65.0 you can now define how your messages are transported using the new `to` and `from` fields. #### Example of assigning channels to producers and consumers[​](#example-of-assigning-channels-to-producers-and-consumers "Direct link to Example of assigning channels to producers and consumers") Here is an example of an `OrderService` that sends an `OrderPlaced` message and receives a `PaymentProcessed` message. But now, we define the transport method for the message (e.g broker, queue, topic, etc.) /services/Orders/index.mdx (example) ``` --- id: OrderService ... # other service frontmatter sends: - id: OrderPlaced # OrderPlaced is published to the orders.events channel (e.g broker) to: - id: orders.events receives: - id: PaymentProcessed # PaymentProcessed is consumed from the payments.events channel (e.g queue) from: - id: payments.events --- ``` This way allows you to model and visualize many more complex messaging patterns and flows. In the example below, we implemented a simple publish/subscribe pattern with channels and routing. ![Example](/assets/images/channels-example-dc2f3420a62dd3a1147b649be5e80b2b.png) But we can also model more complex messaging patterns and flows. ### Chain channels together to model more complex messaging patterns and flows[​](#chain-channels-together-to-model-more-complex-messaging-patterns-and-flows "Direct link to Chain channels together to model more complex messaging patterns and flows") In some cases you may want to chain channels together, to document how messages are transported, filtered, changed and consumed. Using channel to channel routing you can model more complex messaging patterns and flows. Other examples of this could be: * Broker -> Queue -> Processor -> Topic * Queue -> Processor -> Topic * Processor -> Topic * Topic -> Queue * Queue -> Broker * Broker -> Queue -> Processor -> Topic -> Queue * Broker -> Queue -> Processor -> Topic -> Queue -> Broker To do this we have now added the new `routes` field in your channels. The `routes` field tells EventCatalog the possible routes/destinations for the messages going through the channel. ![Example](/assets/images/channel-chains-9647e1fa616589511ee0088ff041761f.png) If you want to learn more about chaining channels together, you can read our [chaining channels together guide](/docs/development/guides/channels/adding-messages-to-services.md#chaining-channels). ### Channels documentation can belong anywhere[​](#channels-documentation-can-belong-anywhere "Direct link to Channels documentation can belong anywhere") Previously in EventCatalog, channels were only defined in the root `/channels` directory. We have now changed this, and you can now defined channels in any directory you like. This can be useful if you want to group channels by domain, service, team, etc. ``` /domains/ /MyDomain/ /channels/ /services/ /MyService/ /channels/ ``` To get started you can create your `channels` folder in any directory you like (\*\*/channels) You can learn more reading our [channels guide](/docs/development/guides/channels/introduction.md). *** ## Producers and consumers are now visualized[​](#producers-and-consumers-are-now-visualized "Direct link to Producers and consumers are now visualized") Previously in EventCatalog, the visualizer would show you messages your services are consuming and producing (seen below) ![Example](/assets/images/before-ded743a9c4181ef732b19dfff25ec075.png) **The problem is, that it does not show you the bigger picture. Who is producing the messages you are consuming or who is consuming the messages you are producing.** So In EventCatalog 2.65.0 we made a few changes to help visualize the bigger picture better. ### See who is producing and consuming messages[​](#see-who-is-producing-and-consuming-messages "Direct link to See who is producing and consuming messages") The new visualizer will now show you exactly who is producing and consuming the messages you are sending and receiving. ![Example](/assets/images/after-a4d8fd5ee01032c5a447025d091d7093.png) This can help your teams understand the bigger picture of your architecture and how messages are flowing. ## Message colors added to the visualizer[​](#message-colors-added-to-the-visualizer "Direct link to Message colors added to the visualizer") We have also added colors to add animated messages to the visualizer, and added support for multi animated messages between producers and consumers. This visual guide can help you see how your messages are flowing through your architecture, without them all being the same color. ![Example](/assets/images/color-messages-edf32a0cef4e29f4e15e69dcf9ed9db1.png) *** ## What's next?[​](#whats-next "Direct link to What's next?") More and more users are coming to EventCatalog to help them bring discoverability to their event-driven architecture and save teams time. Our next goal is focus more on stability and focus on bug fixing and patching. So if you have any issues or feedback, please let us know. Our next major features include: * [Adding domain level events (RFC)](https://github.com/event-catalog/eventcatalog/issues/1816) * [Added support for Containers In EventCatalog (RFC)](https://github.com/event-catalog/eventcatalog/issues/1819) * [Adding Data Products In EventCatalog (RFC)](https://github.com/event-catalog/eventcatalog/issues/1818) * [Adding Webhooks In EventCatalog (RFC)](https://github.com/event-catalog/eventcatalog/issues/1814) Many people have given us awesome feedback over the past year, and we have made the new RFCs to help you model the architectures you want to document. And we are excited to see the new features and improvements coming to EventCatalog. If you like EventCatalog, [I would love a ⭐️ on GitHub](https://github.com/event-catalog/eventcatalog), and feel free to join our [Discord Channel](https://eventcatalog.dev/discord), which now has over 1,200 members! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Channels](/blog/tags/channels.md) * [2](/blog/tags/2.md) --- ## [Describe the workflow, let the agent build the flow](/blog/flow-wizard.md) March 18, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [Flows](/docs/development/guides/flows/introduction.md) are one of the most popular resources documented in EventCatalog. They let you document end-to-end business workflows in your architecture, giving you and your team the bigger picture of how everything connects together. ![EventCatalog flow visualization](/img/blogs/2.5.0/flows2.png)[Demo of a Subscription Renewed flow](https://demo.eventcatalog.dev/visualiser/flows/SubscriptionRenewed/1.0.0) Today, creating a flow means writing a YAML file by hand. We wanted to make that easier. **The new `flow-wizard` skill lets you describe your workflow in plain language, and your AI agent builds the flow for you.** **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [AI](/blog/tags/ai.md) * [Flows](/blog/tags/flows.md) * [Skills](/blog/tags/skills.md) [**Read more**](/blog/flow-wizard.md) --- ## [Documenting sync and async APIs with EventCatalog](/blog/documenting-sync-and-async-apis-with-eventcatalog.md) July 3, 2025 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Modern applications rarely live in isolation. They combine synchronous REST APIs for immediate operations with asynchronous messaging for resilient, scalable communication. But documenting this hybrid architecture presents unique challenges—until now. EventCatalog's **OpenAPI and AsyncAPI generators** solve the critical problem of unified API documentation, helping companies bridge the gap between synchronous and asynchronous communication patterns in one cohesive catalog. ## The documentation divide problem[​](#the-documentation-divide-problem "Direct link to The documentation divide problem") Most companies today operate in a multi-API world: * **REST APIs** handle immediate operations like user authentication, data retrieval, and real-time interactions * **Event-driven architectures** manage background processing, system integration, and scalable communication Yet these two worlds often exist in documentation silos. REST APIs get documented with tools like Swagger UI, while event schemas live in separate systems or wikis. This creates several critical problems: ### **Governance Gaps**[​](#governance-gaps "Direct link to governance-gaps") Without unified documentation, teams struggle to maintain consistent naming conventions, schema standards, and ownership across sync and async APIs. What starts as minor inconsistencies grows into architectural debt. ### **Discovery Challenges**[​](#discovery-challenges "Direct link to discovery-challenges") Developers waste time hunting across multiple tools to understand how systems communicate. Finding the right API endpoint or event schema becomes an archaeological expedition through scattered documentation. ### **Context Loss**[​](#context-loss "Direct link to context-loss") When sync and async APIs are documented separately, teams lose sight of how they work together. The relationship between a REST API that triggers an event and the downstream services that consume it becomes invisible. ### **Ownership Confusion**[​](#ownership-confusion "Direct link to ownership-confusion") Who owns which API? Which team maintains that event schema? Without centralized ownership tracking, accountability becomes fuzzy, leading to technical debt and governance failures. ## How EventCatalog solves the unified API documentation challenge[​](#how-eventcatalog-solves-the-unified-api-documentation-challenge "Direct link to How EventCatalog solves the unified API documentation challenge") EventCatalog's **OpenAPI and AsyncAPI generators** create a single source of truth for both synchronous and asynchronous APIs. Here's how it works: ### **Automatic API Discovery and Documentation**[​](#automatic-api-discovery-and-documentation "Direct link to automatic-api-discovery-and-documentation") Both generators automatically parse your specification files and transform them into living documentation: ``` // eventcatalog.config.js generators: [ // OpenAPI Generator - Document your REST APIs [ '@eventcatalog/generator-openapi', { services: [ { path: './openapi/user-service.yml', id: 'user-service' }, { path: './openapi/order-service.yml', id: 'order-service' }, ], domain: { id: 'core', name: 'Core Services', version: '1.0.0' }, }, ], // AsyncAPI Generator - Document your event-driven APIs [ '@eventcatalog/generator-asyncapi', { services: [ { path: './asyncapi/payment-events.yml', id: 'payment-service' }, { path: './asyncapi/inventory-events.yml', id: 'inventory-service' }, ], domain: { id: 'commerce', name: 'Commerce', version: '1.0.0' }, }, ], ], ``` ### **Unified Message Classification**[​](#unified-message-classification "Direct link to unified-message-classification") EventCatalog bridges the conceptual gap between REST and messaging by classifying all operations as **commands**, **queries**, or **events**: * **OpenAPI operations** can be mapped as commands or queries using the `x-eventcatalog-message-type` extension * **AsyncAPI messages** can be classified using the same extension ``` # In your OpenAPI file paths: /orders: post: summary: Create a new order x-eventcatalog-message-type: command /orders/{id}: get: summary: Get order details x-eventcatalog-message-type: query # In your AsyncAPI file components: messages: OrderCreated: description: 'Event triggered when an order is created' x-eventcatalog-message-type: event ``` ### **Cross-Domain Visualization**[​](#cross-domain-visualization "Direct link to cross-domain-visualization") EventCatalog's visualizer shows how your REST APIs and events work together across domain boundaries, making it easy to spot integration points and dependencies. ![EventCatalog OpenAPI and AsyncAPI Integration](/img/hero-banner-6.png)[View the demo](https://demo.eventcatalog.dev/visualiser) ### **Automatic Versioning and Schema Management**[​](#automatic-versioning-and-schema-management "Direct link to automatic-versioning-and-schema-management") Both generators automatically track API versions and schemas: * **REST API changes** in OpenAPI specs trigger new service and message versions * **Event schema evolution** in AsyncAPI files creates versioned event documentation * **Schemas are downloadable** for both REST payloads and event structures ## The value of unified API documentation[​](#the-value-of-unified-api-documentation "Direct link to The value of unified API documentation") ### **Faster Developer Onboarding**[​](#faster-developer-onboarding "Direct link to faster-developer-onboarding") New team members can explore your entire API landscape—both sync and async—in one place. No more bouncing between Swagger docs, wiki pages, and Confluence to understand how systems communicate. ### **Improved Governance**[​](#improved-governance "Direct link to improved-governance") Centralized ownership tracking, consistent naming conventions, and unified schema standards reduce architectural debt and improve system maintainability. ### **Better System Understanding**[​](#better-system-understanding "Direct link to better-system-understanding") Teams can see the complete communication flow: how a REST API call triggers events, which services consume those events, and how data flows through your architecture. ### **Reduced Documentation Overhead**[​](#reduced-documentation-overhead "Direct link to reduced-documentation-overhead") Instead of maintaining separate documentation systems, teams can generate comprehensive API docs directly from their specification files, keeping documentation in sync with code. ## Getting started: From specifications to documentation[​](#getting-started-from-specifications-to-documentation "Direct link to Getting started: From specifications to documentation") ### 1. **Prepare Your Specification Files**[​](#1-prepare-your-specification-files "Direct link to 1-prepare-your-specification-files") Ensure your OpenAPI and AsyncAPI files include the EventCatalog extensions for better message classification and ownership. ### 2. **Configure the Generators**[​](#2-configure-the-generators "Direct link to 2-configure-the-generators") Add both generators to your EventCatalog configuration, pointing to your local files or remote URLs. ### 3. **Run the Generation**[​](#3-run-the-generation "Direct link to 3-run-the-generation") Execute `npx eventcatalog generate` to automatically populate your catalog with both sync and async APIs. ### 4. **Enhance with Context**[​](#4-enhance-with-context "Direct link to 4-enhance-with-context") Add custom markdown, diagrams, and business context to your generated documentation. EventCatalog preserves your additions across regenerations. Ready to get started? You can try both generators with a 14-day free trial. Visit [EventCatalog Cloud](https://eventcatalog.cloud) to get your license key and start documenting your APIs today. ## Key features that drive adoption[​](#key-features-that-drive-adoption "Direct link to Key features that drive adoption") ### **Flexible URL Support**[​](#flexible-url-support "Direct link to flexible-url-support") Both generators can pull specification files from local filesystem or remote URLs, integrating seamlessly with your CI/CD pipeline. ### **Custom Extensions**[​](#custom-extensions "Direct link to custom-extensions") EventCatalog-specific extensions let you define message ownership, versioning, and relationships beyond what standard specifications support. ### **Persistent Documentation**[​](#persistent-documentation "Direct link to persistent-documentation") Your custom markdown and business context persists across generator runs, so you never lose the valuable context you've added. ### **Interactive Visualizations**[​](#interactive-visualizations "Direct link to interactive-visualizations") Explore your API landscape through interactive diagrams that show relationships, dependencies, and data flow. ## The future of API documentation is unified[​](#the-future-of-api-documentation-is-unified "Direct link to The future of API documentation is unified") The days of maintaining separate documentation for REST APIs and event-driven architectures are ending. Companies that adopt unified API documentation gain significant advantages in developer productivity, system governance, and architectural understanding. EventCatalog's OpenAPI and AsyncAPI generators provide the foundation for this unified approach, helping teams bridge the gap between synchronous and asynchronous communication patterns. Whether you're building microservices, implementing event-driven architectures, or managing hybrid systems, unified API documentation isn't just a nice-to-have—it's becoming a competitive necessity. If you have any questions or want to join our community of over 1,200 people exploring EventCatalog and event-driven architecture, [feel free to join us on Discord](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAPI](/blog/tags/open-api.md) * [AsyncAPI](/blog/tags/async-api.md) * [API Documentation](/blog/tags/api-documentation.md) * [Event-Driven Architecture](/blog/tags/event-driven-architecture.md) --- ## [Introducing Remote Schemas - Fetch and Sync Schemas at Runtime](/blog/remote-schema-component.md) July 25, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that [EventCatalog 2.52.0](https://github.com/event-catalog/eventcatalog/releases) introduces a feature: the [**RemoteSchema** component](/docs/development/components/components/remote-schema.md). This new component enables you to fetch and render schemas directly from remote URLs at runtime, ensuring your documentation stays synchronized with your live systems automatically.
For companies managing complex event-driven architectures, keeping documentation in sync with rapidly evolving APIs has always been a challenge. The **RemoteSchema** component solves this by creating a direct bridge between your live API definitions and your EventCatalog documentation. ## Introducing the RemoteSchema Component[​](#introducing-the-remoteschema-component "Direct link to Introducing the RemoteSchema Component") The new `RemoteSchema` component gives you another way to add schemas into your documentation. Providing a URL to a schema will automatically fetch the schema and render it in your documentation. tip The `RemoteSchema` component only works in Server-Side Rendering (SSR) mode. Make sure your EventCatalog is configured to run in SSR mode to use this component. You can read more about how to configure your EventCatalog to run in SSR mode [here](/docs/development/deployment/build-ssr-mode.md). ### Basic Usage[​](#basic-usage "Direct link to Basic Usage") events/UserRegistered/index.mdx ``` --- id: UserRegistered name: User Registered --- The User Registered event is triggered when a new user signs up for our platform. ``` This simple addition automatically fetches and renders the latest schema from your API, ensuring the documentation always reflects the current state of your system. ### Advanced Features[​](#advanced-features "Direct link to Advanced Features") **Custom Authentication for Private APIs** For teams with private API endpoints, the component supports custom headers for authentication and environment variable mapping. EventCatalog Scale Private APIs are only available on the EventCatalog Scale plan. You can get a 14 day free trial [here](https://eventcatalog.cloud). ``` ``` **JSONPath Extraction** When working with large data sets you can extract specific schema definitions using [JSONPath](https://github.com/dchester/jsonpath). ``` ``` **Environment Variable Support** Keep sensitive information secure using environment variables: ``` ``` Loading environment variables Add your environment variables to the `.env` file in the root of your EventCatalog project. The RemoteSchema component will automatically map the environment variables to the template string. ## How can this help your team?[​](#how-can-this-help-your-team "Direct link to How can this help your team?") ### 1. **Single Source of Truth**[​](#1-single-source-of-truth "Direct link to 1-single-source-of-truth") The RemoteSchema component creates a direct connection between your live APIs and documentation. When schemas change in your API gateway, schema registry, or service endpoints, your documentation automatically reflects those changes without any manual intervention. ### 2. **Sync your schemas without manual updates**[​](#2-sync-your-schemas-without-manual-updates "Direct link to 2-sync-your-schemas-without-manual-updates") If you prefer to keep your schemas in a single source of truth, you can use the `RemoteSchema` component to fetch the schema from your API gateway, schema registry, or service endpoints. EventCatalog will automatically fetch the schema and render it in your documentation. ### 3. **Improved Developer Experience**[​](#3-improved-developer-experience "Direct link to 3-improved-developer-experience") New team members and API consumers can trust that the documentation accurately represents the current API state. This reduces confusion, speeds up onboarding, and improves overall developer productivity. ### 4. **Enterprise-Ready Security**[​](#4-enterprise-ready-security "Direct link to 4-enterprise-ready-security") With support for custom authentication headers and environment variables, the component works seamlessly with private APIs and enterprise security requirements. ### How is this different to EventCatalog Plugins?[​](#how-is-this-different-to-eventcatalog-plugins "Direct link to How is this different to EventCatalog Plugins?") EventCatalog provides a list of plugins that can fetch schemas from remote sources [(e.g OpenAPI, AsyncAPI plugins, Confluent Schema Registry, AWS Glue Schema Registry, etc)](/integrations.md). Using these plugins you can do advanced mapping and filtering of your schemas to your services, domains and messages. ## Next Steps[​](#next-steps "Direct link to Next Steps") The RemoteSchema component is available now in EventCatalog 2.52.0. To get started: 1. **[Upgrade your EventCatalog](https://www.eventcatalog.dev/docs/development/guides/upgrading)** to the latest version 2. **[Read the full documentation](/docs/development/components/components/remote-schema.md)** for detailed usage examples 3. **[Join our Discord](https://eventcatalog.dev/discord)** to share your use cases and get help from the community This feature represents a significant step forward in making EventCatalog a living, breathing documentation platform that stays synchronized with your evolving architecture. By connecting directly to your live systems, EventCatalog becomes not just documentation, but a real-time reflection of your event-driven architecture. The future of API documentation is dynamic, connected, and always current. The RemoteSchema is one step towards that future. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Remote Schema](/blog/tags/remote-schema.md) * [API Integration](/blog/tags/api-integration.md) * [Documentation](/blog/tags/documentation.md) --- ## [Integrate Apicurio Registry with EventCatalog](/blog/apicurio-registry-eventcatalog.md) November 26, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [YouTube video player](https://www.youtube.com/embed/0DmGWa0sr6w) I'm happy to announce the release of the [EventCatalog Apicurio Registry plugin](/docs/plugins/apicurio/intro.md). This plugin allows you to import schemas from Apicurio Registry into EventCatalog and keep them in sync alongside your documentation. Importing your schemas into EventCatalog gives you the ability to: * Add more value to your schemas with business context and ownership * Map your schemas to your producers and consumers in EventCatalog and keep them in sync * Discover your schemas easier with the [EventCatalog Schema Explorer](/docs/development/guides/schemas/schema-explorer.md) * Assign ownership (users and teams) to your schemas * Automate documentation from your AsyncAPI and OpenAPI specifications hosted in your Apicurio Registry * Visualize the bigger picture with the [EventCatalog Visualizer](/features/visualization.md) * Access your schemas with the [EventCatalog Schema API](/docs/development/guides/schemas/schema-api.md) for your LLMs or testing * Connect your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) to get schemas for your LLMs * And more... In this blog post I'll walk you through the features of the plugin and how to get started. *** ### What is Apicurio Registry?[​](#what-is-apicurio-registry "Direct link to What is Apicurio Registry?") [Apicurio Registry](https://www.apicur.io/registry/) is an open-source schema registry that provides a centralized repository for managing schemas and API artifacts in event-driven and message-based architectures. For architects building distributed systems, Apicurio Registry offers a powerful solution for schema validation, versioning, and governance with support for multiple schema formats including Avro, JSON Schema, Protobuf, OpenAPI, and AsyncAPI. Apicurio Registry supports both V2 and V3 APIs, giving teams flexibility in how they manage their schemas. Whether you're running it as a standalone service or as part of a larger infrastructure, Apicurio Registry helps ensure consistency across your event-driven architecture. ### Why integrate Apicurio Registry with EventCatalog?[​](#why-integrate-apicurio-registry-with-eventcatalog "Direct link to Why integrate Apicurio Registry with EventCatalog?") EventCatalog helps organizations understand and manage their event-driven architectures by providing comprehensive documentation of domains, services, and messages. **While schema registries capture the technical contract of your events, EventCatalog preserves the crucial context often lost in traditional documentation**: ownership details, business context, schema evolution history, and visual representations of your message flows. The Apicurio Registry plugin creates a seamless connection between your schema registry and EventCatalog, giving you the best of both worlds. You maintain all the powerful features of Apicurio's schema management while enriching your developer experience with EventCatalog's visualization capabilities, detailed documentation, governance tools, and enhanced discoverability. This integration helps teams not just track what schemas exist, but understand how they fit into the broader architectural landscape and how they've evolved over time. ### How the plugin works[​](#how-the-plugin-works "Direct link to How the plugin works") [The Apicurio Registry plugin](/docs/plugins/apicurio/intro.md) maps your schemas into logical services and domains within your organization. Teams can configure which schemas each service produces or consumes using flexible filters based on exact artifact IDs, prefixes, suffixes, or string matching. ![Apicurio Registry plugin](/assets/images/apicurio-064fe960df700d72b7de4629e19671de.png) When Apicurio schemas are imported into EventCatalog, they become more than just technical contracts - they gain rich contextual information that helps teams understand their broader impact. This includes crucial details like schema ownership, business context, and the producer-consumer relationships between services. The plugin also supports attaching OpenAPI and AsyncAPI specifications stored in your Apicurio Registry directly to services. You can even chain generators together, running the OpenAPI or AsyncAPI generators on these specifications to automatically create message documentation from your specs. Any markdown and documentation added to your messages are persisted between versions, so you can add more value to your schemas and keep your documentation up-to-date as schemas evolve. ### Getting started[​](#getting-started "Direct link to Getting started") To get started with the Apicurio Registry integration, you'll need: * An Apicurio Registry instance (V2 or V3) * Schemas registered in your Apicurio Registry * An EventCatalog license key for Apicurio Registry integration ([14-day free trial](https://eventcatalog.cloud)) The setup takes just a few minutes. [Read the installation guide](/docs/plugins/apicurio/installation.md) to configure your integration, or explore the [example project](https://github.com/event-catalog/generators/tree/main/examples/generator-apicurio) to see it in action. ### Summary[​](#summary "Direct link to Summary") Apicurio Registry is a powerful open-source tool for managing schemas in event-driven architectures. We created our [Apicurio Registry integration](https://github.com/event-catalog/generators) to help you unlock more value from your schema registries. The Apicurio Registry plugin allows you to map your schemas to services and domains within your organization, helping your team understand how schemas are produced and consumed across your architecture. With support for multiple schema formats and flexible filtering options, you can document exactly what matters to your teams. EventCatalog syncs with your schema registry and persists any additional contextual information you add, including documentation, ownership, and relationships. This context carries forward as your schemas evolve, creating a living history of your event-driven architecture. Using the Schema Explorer you can quickly find schemas in your architecture, understand the history of your schemas, or connect your schemas to your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md). Getting started should take just a few minutes and [you can read our guide here](/docs/plugins/apicurio/intro.md). If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Apicurio](/blog/tags/apicurio.md) * [Schema Registry](/blog/tags/schema-registry.md) --- ## [Your documentation is a design artifact, not just a wiki page](/blog/eventcatalog-miro-app.md) March 30, 2026 · 9 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Every team I've talked to has the same problem. The architecture lives in one place and the diagrams live in another. The documentation is accurate as of six months ago. The Miro board from the last [event storming](https://eda-visuals.boyney.io/visuals/event-storming) session doesn't match what's actually running. **Today I'm releasing the [EventCatalog Miro App v2](/docs/miro/overview.md)**, a [Miro](https://miro.com) app that turns your EventCatalog documentation into interactive, collaborative design artifacts — and brings your design decisions back into the catalog when you're done. ![EventCatalog architecture on a Miro board](/img/miro/getting-started/example.png)Your real architecture, imported into Miro with relationships intact **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Miro](/blog/tags/miro.md) * [Architecture](/blog/tags/architecture.md) * [Design](/blog/tags/design.md) [**Read more**](/blog/eventcatalog-miro-app.md) --- ## [EventCatalog now integrates with OpenAI](/blog/eventcatalog-openai.md) April 23, 2025 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog We’re excited to announce that EventCatalog now supports seamless integration with [OpenAI](https://openai.com/). This new feature allows you to harness the power of OpenAI models and embeddings directly within your catalog. With this new feature you can bring your own OpenAI keys to EventCatalog and get architecture insights in seconds using [**EventCatalog Chat**](/features/ai-assistant.md). ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-chat.png)[View the documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md) ## How does it work?[​](#how-does-it-work "Direct link to How does it work?") **EventCatalog Chat** transforms how your team interacts with your event-driven architecture. Instead of digging through documentation or tracking down who produces what, you can simply ask. Want to know what events exist, how schemas are structured, or who’s publishing and consuming them? Just chat with your catalog and get instant answers—saving you time and effort. EventCatalog Chat can also **generate code** on the fly and supports custom prompts, allowing you to define reusable queries aligned with your organization's best practices and governance standards. Whether it's architecture insights or scaffolding code, your team can move faster with AI-powered support built right into your catalog. Previously, EventCatalog Chat relied solely on browser-based models—open-source models that ran entirely within the browser environment. While this offered a lightweight and privacy-conscious option, we heard your feedback loud and clear. Now, we’re excited to introduce support for bringing your own OpenAI models to EventCatalog, unlocking even more powerful capabilities for exploring and understanding your architecture. To get started you can read the [EventCatalog Chat Guide](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md) or watch the video below. [YouTube video player](https://www.youtube.com/embed/vhjRX4yAGIk?si=MehvKkJ9hFKe7hgH) ## Bring your own prompts[​](#bring-your-own-prompts "Direct link to Bring your own prompts") We're introducing a powerful new concept in EventCatalog Chat: **Bring Your Own Prompts**. This feature allows teams and organizations to define custom prompts tailored to their own standards, best practices, and workflows. With predefined prompts, you can guide how EventCatalog Chat responds—ensuring consistency, compliance, and faster results across your team. Here are a few examples of what you can do: * "Generate a JSON schema Following FlowwMart Standards" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-an-example-schema.mdx) * "Create a Kafka producer code for event" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-producer-code-for-event.mdx) * "Create Kafka consumer code for event" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-consumer-code-for-event.mdx) * "Create AWS Lambda function to Consume EventBridge Event" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-consumer-code-for-eventbridge-event.mdx) With BYO Prompts, your event-driven architecture just got a whole lot smarter—and more tailored to you. You can also make your prompts **dynamic**, allowing EventCatalog Chat to ask users for input before sending the prompt to your OpenAI model. For example, if you want to generate a JSON schema that follows your company’s best practices, you can first prompt the user to enter the **event name** they’re working with. This adds flexibility and interactivity to your custom prompts—making them more useful across different teams and scenarios. ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-chat-input.png)[View the prompt example](https://raw.githubusercontent.com/event-catalog/eventcatalog/refs/heads/main/examples/default/chat-prompts/code/create-an-example-schema.mdx) When the user submits the form, the AI model uses their input to generate a JSON schema—fully aligned with the standards and conventions your company defines. This ensures consistency while saving your team valuable time on repetitive tasks. ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-chat-input-output.png) Custom prompts can also capture **multiple inputs**, making them even more powerful. For instance, you can prompt users to select an **event** from a generated list based on your catalog, and choose a **programming language** from a predefined list. This gives your team a flexible and guided way to generate highly specific outputs—like language-specific producer or consumer code for a particular event. ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-list-of-events.png)[View the prompt example](https://raw.githubusercontent.com/event-catalog/eventcatalog/refs/heads/main/examples/default/chat-prompts/code/create-producer-code-for-event.mdx) The prompt is then sent to your OpenAI model, which generates the code based on the inputs provided. In the example above, a **TypeScript Kafka producer** is generated using the **Delivery Failed** event as the foundation—automatically tailored to your architecture and development standards. ## How to get started[​](#how-to-get-started "Direct link to How to get started") Check out our [EventCatalog Chat Guide](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md) to get started. If you have any questions or want to connect with the community, feel free to [join us on Discord](https://eventcatalog.dev/discord). ## Whats next?[​](#whats-next "Direct link to Whats next?") We’re just getting started. Up next, we’re working on expanding model support in EventCatalog—including the ability to configure additional providers like **Anthropic**, giving you more flexibility and choice in how you power your architecture insights. We’re also building features that let you **ask questions directly within your documentation pages**, so teams can get instant, contextual answers while exploring or working on your event-driven systems—saving even more time and reducing friction. Have questions or feedback? [Join us on Discord](https://eventcatalog.dev/discord)—we’d love to hear from you. Want a tailored walkthrough? [Book a custom demo](https://calendly.com/boyneyy123/30min)—we’re happy to help! ## FAQ[​](#faq "Direct link to FAQ") ### Can I configure which OpenAI model is used?[​](#can-i-configure-which-openai-model-is-used "Direct link to Can I configure which OpenAI model is used?") Yes, you can configure which OpenAI model is used by updating the `model` property in the `eventcatalog.config.js` file. You can also configure which embedding model is used. ### Is it secure?[​](#is-it-secure "Direct link to Is it secure?") Yes, it is secure. If you want to use your own OpenAI keys you can build EventCatalog as a `server` and bring your own OpenAI keys. A new `server` output type is available in EventCatalog. This will output a `server` application that you can run locally or in a cloud provider. You can read more about hosting a `server` in the [EventCatalog documentation](/docs/development/deployment/hosting-options.md#hosting-as-a-server). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAI](/blog/tags/open-ai.md) * [AI](/blog/tags/ai.md) * [Assistant](/blog/tags/assistant.md) --- ## [Documenting sync and async APIs with EventCatalog](/blog/documenting-sync-and-async-apis-with-eventcatalog.md) July 3, 2025 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Modern applications rarely live in isolation. They combine synchronous REST APIs for immediate operations with asynchronous messaging for resilient, scalable communication. But documenting this hybrid architecture presents unique challenges—until now. EventCatalog's **OpenAPI and AsyncAPI generators** solve the critical problem of unified API documentation, helping companies bridge the gap between synchronous and asynchronous communication patterns in one cohesive catalog. ## The documentation divide problem[​](#the-documentation-divide-problem "Direct link to The documentation divide problem") Most companies today operate in a multi-API world: * **REST APIs** handle immediate operations like user authentication, data retrieval, and real-time interactions * **Event-driven architectures** manage background processing, system integration, and scalable communication Yet these two worlds often exist in documentation silos. REST APIs get documented with tools like Swagger UI, while event schemas live in separate systems or wikis. This creates several critical problems: ### **Governance Gaps**[​](#governance-gaps "Direct link to governance-gaps") Without unified documentation, teams struggle to maintain consistent naming conventions, schema standards, and ownership across sync and async APIs. What starts as minor inconsistencies grows into architectural debt. ### **Discovery Challenges**[​](#discovery-challenges "Direct link to discovery-challenges") Developers waste time hunting across multiple tools to understand how systems communicate. Finding the right API endpoint or event schema becomes an archaeological expedition through scattered documentation. ### **Context Loss**[​](#context-loss "Direct link to context-loss") When sync and async APIs are documented separately, teams lose sight of how they work together. The relationship between a REST API that triggers an event and the downstream services that consume it becomes invisible. ### **Ownership Confusion**[​](#ownership-confusion "Direct link to ownership-confusion") Who owns which API? Which team maintains that event schema? Without centralized ownership tracking, accountability becomes fuzzy, leading to technical debt and governance failures. ## How EventCatalog solves the unified API documentation challenge[​](#how-eventcatalog-solves-the-unified-api-documentation-challenge "Direct link to How EventCatalog solves the unified API documentation challenge") EventCatalog's **OpenAPI and AsyncAPI generators** create a single source of truth for both synchronous and asynchronous APIs. Here's how it works: ### **Automatic API Discovery and Documentation**[​](#automatic-api-discovery-and-documentation "Direct link to automatic-api-discovery-and-documentation") Both generators automatically parse your specification files and transform them into living documentation: ``` // eventcatalog.config.js generators: [ // OpenAPI Generator - Document your REST APIs [ '@eventcatalog/generator-openapi', { services: [ { path: './openapi/user-service.yml', id: 'user-service' }, { path: './openapi/order-service.yml', id: 'order-service' }, ], domain: { id: 'core', name: 'Core Services', version: '1.0.0' }, }, ], // AsyncAPI Generator - Document your event-driven APIs [ '@eventcatalog/generator-asyncapi', { services: [ { path: './asyncapi/payment-events.yml', id: 'payment-service' }, { path: './asyncapi/inventory-events.yml', id: 'inventory-service' }, ], domain: { id: 'commerce', name: 'Commerce', version: '1.0.0' }, }, ], ], ``` ### **Unified Message Classification**[​](#unified-message-classification "Direct link to unified-message-classification") EventCatalog bridges the conceptual gap between REST and messaging by classifying all operations as **commands**, **queries**, or **events**: * **OpenAPI operations** can be mapped as commands or queries using the `x-eventcatalog-message-type` extension * **AsyncAPI messages** can be classified using the same extension ``` # In your OpenAPI file paths: /orders: post: summary: Create a new order x-eventcatalog-message-type: command /orders/{id}: get: summary: Get order details x-eventcatalog-message-type: query # In your AsyncAPI file components: messages: OrderCreated: description: 'Event triggered when an order is created' x-eventcatalog-message-type: event ``` ### **Cross-Domain Visualization**[​](#cross-domain-visualization "Direct link to cross-domain-visualization") EventCatalog's visualizer shows how your REST APIs and events work together across domain boundaries, making it easy to spot integration points and dependencies. ![EventCatalog OpenAPI and AsyncAPI Integration](/img/hero-banner-6.png)[View the demo](https://demo.eventcatalog.dev/visualiser) ### **Automatic Versioning and Schema Management**[​](#automatic-versioning-and-schema-management "Direct link to automatic-versioning-and-schema-management") Both generators automatically track API versions and schemas: * **REST API changes** in OpenAPI specs trigger new service and message versions * **Event schema evolution** in AsyncAPI files creates versioned event documentation * **Schemas are downloadable** for both REST payloads and event structures ## The value of unified API documentation[​](#the-value-of-unified-api-documentation "Direct link to The value of unified API documentation") ### **Faster Developer Onboarding**[​](#faster-developer-onboarding "Direct link to faster-developer-onboarding") New team members can explore your entire API landscape—both sync and async—in one place. No more bouncing between Swagger docs, wiki pages, and Confluence to understand how systems communicate. ### **Improved Governance**[​](#improved-governance "Direct link to improved-governance") Centralized ownership tracking, consistent naming conventions, and unified schema standards reduce architectural debt and improve system maintainability. ### **Better System Understanding**[​](#better-system-understanding "Direct link to better-system-understanding") Teams can see the complete communication flow: how a REST API call triggers events, which services consume those events, and how data flows through your architecture. ### **Reduced Documentation Overhead**[​](#reduced-documentation-overhead "Direct link to reduced-documentation-overhead") Instead of maintaining separate documentation systems, teams can generate comprehensive API docs directly from their specification files, keeping documentation in sync with code. ## Getting started: From specifications to documentation[​](#getting-started-from-specifications-to-documentation "Direct link to Getting started: From specifications to documentation") ### 1. **Prepare Your Specification Files**[​](#1-prepare-your-specification-files "Direct link to 1-prepare-your-specification-files") Ensure your OpenAPI and AsyncAPI files include the EventCatalog extensions for better message classification and ownership. ### 2. **Configure the Generators**[​](#2-configure-the-generators "Direct link to 2-configure-the-generators") Add both generators to your EventCatalog configuration, pointing to your local files or remote URLs. ### 3. **Run the Generation**[​](#3-run-the-generation "Direct link to 3-run-the-generation") Execute `npx eventcatalog generate` to automatically populate your catalog with both sync and async APIs. ### 4. **Enhance with Context**[​](#4-enhance-with-context "Direct link to 4-enhance-with-context") Add custom markdown, diagrams, and business context to your generated documentation. EventCatalog preserves your additions across regenerations. Ready to get started? You can try both generators with a 14-day free trial. Visit [EventCatalog Cloud](https://eventcatalog.cloud) to get your license key and start documenting your APIs today. ## Key features that drive adoption[​](#key-features-that-drive-adoption "Direct link to Key features that drive adoption") ### **Flexible URL Support**[​](#flexible-url-support "Direct link to flexible-url-support") Both generators can pull specification files from local filesystem or remote URLs, integrating seamlessly with your CI/CD pipeline. ### **Custom Extensions**[​](#custom-extensions "Direct link to custom-extensions") EventCatalog-specific extensions let you define message ownership, versioning, and relationships beyond what standard specifications support. ### **Persistent Documentation**[​](#persistent-documentation "Direct link to persistent-documentation") Your custom markdown and business context persists across generator runs, so you never lose the valuable context you've added. ### **Interactive Visualizations**[​](#interactive-visualizations "Direct link to interactive-visualizations") Explore your API landscape through interactive diagrams that show relationships, dependencies, and data flow. ## The future of API documentation is unified[​](#the-future-of-api-documentation-is-unified "Direct link to The future of API documentation is unified") The days of maintaining separate documentation for REST APIs and event-driven architectures are ending. Companies that adopt unified API documentation gain significant advantages in developer productivity, system governance, and architectural understanding. EventCatalog's OpenAPI and AsyncAPI generators provide the foundation for this unified approach, helping teams bridge the gap between synchronous and asynchronous communication patterns. Whether you're building microservices, implementing event-driven architectures, or managing hybrid systems, unified API documentation isn't just a nice-to-have—it's becoming a competitive necessity. If you have any questions or want to join our community of over 1,200 people exploring EventCatalog and event-driven architecture, [feel free to join us on Discord](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAPI](/blog/tags/open-api.md) * [AsyncAPI](/blog/tags/async-api.md) * [API Documentation](/blog/tags/api-documentation.md) * [Event-Driven Architecture](/blog/tags/event-driven-architecture.md) --- ## [Introducing Attachments for EventCatalog](/blog/eventcatalog-attachments.md) September 22, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that EventCatalog now supports **Attachments** - a powerful new feature that allows you to link external resources, diagrams, and documentation directly to your domains, services, events, commands, queries, and channels. Many teams and organizations have information scattered across different tools and platforms. This makes it difficult to find the information you need when you need it. With Attachments, you can now link to external resources, diagrams, and documentation directly to your EventCatalog resources. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Attachments](/blog/tags/attachments.md) * [Documentation](/blog/tags/documentation.md) [**Read more**](/blog/eventcatalog-attachments.md) --- ## [Whats new in EventCatalog - August 2025](/blog/eventcatalog-august-2025.md) August 30, 2025 · 7 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to EventCatalog's monthly update! August brought a welcome change of pace as many in our community took well-deserved summer breaks. While things were quieter overall, we stayed focused on two key areas: advancing [EventCatalog Studio](https://eventcatalog.studio/) and strengthening the core platform through stability improvements and bug fixes. In this update, we'll dive into: * The exciting progress on [EventCatalog Studio](https://eventcatalog.studio/) and what's on the horizon * Recent fixes and improvements to the platform * A preview of what's coming next Let's explore what we've been building while you've been recharging! *** ## EventCatalog Studio[​](#eventcatalog-studio "Direct link to EventCatalog Studio") During August we have been busy, working on our new open source project called [EventCatalog Studio](https://eventcatalog.studio/). This is a visual editor that allows you to design, gather feedback, collaborate with your teams, define schemas and much more. ![EventCatalog Studio](/img/blogs/august-2025/studio-docs.png) Before we get into the details, it’s important to understand why we are focusing in this area. ## Life-cycle of event-driven architecture[​](#life-cycle-of-event-driven-architecture "Direct link to Life-cycle of event-driven architecture") Over the past 3 years we have learnt from the community and users of EventCatalog that the life-cycle of defining messages, schemas, ideas, collaboration with teams, documentation and governance is a mess. EventCatalog was born from a personal problem. That discoverability with event—driven architecture is hard. So we built an open source project to help folks discover what events they have, assign them to services and domains, and provide their teams with a platform where they can get a better understanding of what is going on in their architecture. The project has grown far beyond the initial release and is now being used by companies around the world, helping them document and govern their architectures, and continues to be adopted. Whilst this solves documentation and governance, I feel we still have a gap in the life-cycle. I feel we have gaps in the ability to capture ideas, drafts, schema designs, get feedback from teams, capture breaking changes, notifying teams of changes, understand how events are used in their architecture, and the list goes on…. As I dive deeper into this topic, I've started to learn from community members and teams using EventCatalog that the life-cycle for event-driven architecture is broken. What if we could make this easier? What if we had tools that let us explore new drafts, ideas, plan work, get feedback, design diagrams that can be exported into artifacts that we can actually use in our code, our documentation and specifications? **Could we close the gap between ideas, design, implementation and documentation?** I think it’s possible, and that’s why we have been exploring EventCatalog Studio. ## What is EventCatalog Studio?[​](#what-is-eventcatalog-studio "Direct link to What is EventCatalog Studio?") EventCatalog Studio is a local first open source visual designer, that focuses on architecture primitives (e.g messages, channels, data stores, etc). Your designs are owned by you and can be shared with your teams and committed to source control. You will be able to run EventCatalog on the cloud or run locally on your machine. Either way your data is owned by you, and nothing is shared, keeping your designs private to your organization. To start you can create new designs, or use custom templates to start from. You can define workflows, business processes, or architecture patterns. You can start from predefined templates to get started. In future versions you will be able to define your own templates for your teams to get started. Below is an example of the welcome dashboard you will see. Allowing you to open a design from disk, or create a new one from scratch or from a predefined template. ![EventCatalog Studio](/img/blogs/august-2025/studio-dashboard.png) In EventCatalog Studio you will be able to create designs, simply dragging your primitives onto the canvas (e.g Service, Events, Command, Query, Domain etc). This will let you create design concepts for your teams, simulate messages on the design, define schemas and much more. Then you will be able to export this design into EventCatalog (or any other tool), and use your designs as a living reference. ![EventCatalog Studio](/img/blogs/august-2025/studio-primitives.png) Using the documentation editor you can reference any node in your canvas. This lets you document your design and link to resources in your designs to guide your end users through the flow of your design. Helping them understand your architecture, choices, and changes. ![EventCatalog Studio](/img/blogs/august-2025/studio-docs.png) Similar to Figma, you will be able to leave comments on your designs, join the conversation and get feedback. Everything in your design is version controlled. ![EventCatalog Studio](/img/blogs/august-2025/studio-feedback.png) You will be able to import all resources from your EventCatalog documentation into your canvas. This will allow you to create new drafts, designs and ideas using your architecture patterns and components you already have. Giving you a foundation to start for new ideas, get feedback on schema design and much more…. ### Getting access to EventCatalog Studio[​](#getting-access-to-eventcatalog-studio "Direct link to Getting access to EventCatalog Studio") We are aiming to get EventCatalog Studio released very soon. If you would like to try it out you can sign up to our beta here EventCatalog documentation is helping teams govern and discover their architecture. EventCatalog Studio can help teams design, gather feedback and explore ideas. We want to make governing event-driven architecture easier, and we are super excited to see what you all think to EventCatalog Studio. ## Recent fixes and improvements to EventCatalog[​](#recent-fixes-and-improvements-to-eventcatalog "Direct link to Recent fixes and improvements to EventCatalog") ### New EventCatalog SDK Version[​](#new-eventcatalog-sdk-version "Direct link to New EventCatalog SDK Version") ![EventCatalog SDK](/img/blogs/august-2025/sdk.png) We have released a new version of the EventCatalog SDK. This new feature let’s you programmatically create [entities in EventCatalog](https://www.eventcatalog.dev/docs/development/guides/domains/entities/introduction). This means you can create [entity maps in EventCatalog](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3/entity-map) from any source you have. To get started, you can read the [EventCatalog SDK documentation](https://www.eventcatalog.dev/docs/sdk). ### Other improvements to EventCatalog[​](#other-improvements-to-eventcatalog "Direct link to Other improvements to EventCatalog") * EventCatalog visualizer is now ready to import designs from EventCatalog Studio. * Architecture pages for messages, services, and domains are now single column. * Added support for avsc files in changelog diffs. * SchemaViewer now supports array rooted schemas. * Reduced pagesize of EventCatalog. ## What’s coming in September?[​](#whats-coming-in-september "Direct link to What’s coming in September?") In September, we are focused on releasing [EventCatalog Studio](https://eventcatalog.studio/). We are also focusing on implementing offline license checks (for those that want to use EventCatalog in regulated environments) and exploring support for **Azure messaging services, Azure Schema Registry**, and **Apicurio Schema Registry**. We are also exploring and working on **notifications**. These will be webhook notifications you can setup and listen to when things in your catalog change. Examples of these are schema changes, breaks, new versions, etc. Use cases include: * Teams getting notified when a new version of a schema is published. * Trigger contract tests or infrastructure when schemas change. * Provision new infrastructure when a new version of a service is published. * Trigger a build when a new version of a service is published. If you have any questions or want to join our community of over 1200 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [August](/blog/tags/august.md) --- ## [Introducing Authentication and SSR Mode](/blog/authentication-and-ssr-mode.md) June 13, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Today we are excited to announce the release of the [EventCatalog Authentication](/docs/development/authentication/introduction.md) and [EventCatalog SSR Mode](/docs/development/deployment/build-ssr-mode.md). These new features are designed to help you get the most out of EventCatalog. ![EventCatalog Authentication](/img/auth.png)[Get started with EventCatalog Authentication](/docs/development/authentication/introduction.md) ## Authentication[​](#authentication "Direct link to Authentication") EventCatalog now provides [secure authentication](/docs/development/authentication/introduction.md) to control access to your documentation. Whether you're a small team getting started or a large enterprise with complex identity requirements, EventCatalog's flexible authentication system grows with your needs. On the initial release we support the following identity providers: * [GitHub](/docs/development/authentication/providers/setting-up-github.md) * [Auth0](/docs/development/authentication/providers/setting-up-auth0.md) * [Okta](/docs/development/authentication/providers/setting-up-okta.md) * [Azure AD (Entra ID)](/docs/development/authentication/providers/setting-up-azure-ad.md) If we are missing your identity provider, [please let us know](mailto:hello@eventcatalog.io) and we will add support for it. #### How it works[​](#how-it-works "Direct link to How it works") EventCatalog uses industry-standard OpenID Connect (OIDC) and OAuth 2.0 protocols to integrate with your identity provider. Here's the authentication flow: 1. User visits EventCatalog and attempts to access protected documentation (everything is protected by default) 2. Redirects to your identity provider (GitHub, Google, Auth0, etc.) 3. User authenticates with their existing credentials 4. Provider confirms identity and sends user back to EventCatalog 5. User gains access to your documentation and architecture To get started with authentication, you can read our [quick guide in our documentation here](/docs/development/authentication/introduction.md). ## SSR Mode[​](#ssr-mode "Direct link to SSR Mode") By default EventCatalog exports a static HTML site. This means you can deploy your application anywhere you want. We have found for users with large catalogs, the build time can be slow, as every page is rendered and built. We are excited to announce that EventCatalog now supports [SSR mode (Server side rendering)](/docs/development/deployment/build-ssr-mode.md), this means you can use EventCatalog as a server-side rendered application. This is perfect for large catalogs, for users with slow deployment times and for users that are using EventCatalog features that require a server (e.g [EventCatalog Chat](/features/ai-assistant.md), [EventCatalog Authentication](/docs/development/authentication/introduction.md)) Rather than building the entire catalog into HTML files, EventCatalog will render the pages on the fly (using server-side rendering). To enable SSR mode, you need to update your `eventcatalog.config.js` file to use SSR mode. eventcatalog.config.js ``` export default { // defaults to static output: 'server', } ``` This tells EventCatalog to build the application as a server-side rendered application. You can then deploy your application to a server that can run Node.js. If you want to learn more about how to host your SSR applications, you can read our [quick guide in our documentation here](/docs/development/deployment/hosting-options.md). ## Summary[​](#summary "Direct link to Summary") EventCatalog Authentication and SSR Mode are designed to help you get the most out of EventCatalog. EventCatalog Authentication provides secure authentication to control access to your event-driven architecture documentation. EventCatalog SSR Mode is perfect for large catalogs, for users with slow deployment times and for users that are using EventCatalog features that require a server (e.g EventCatalog Chat, Authentication) ## What's next?[​](#whats-next "Direct link to What's next?") We will continue to add more support for more identity providers, and explore role based access control (RBAC) for EventCatalog. We will also be exploring bringing your own middleware to EventCatalog, this will let you add your own authentication and authorization logic to EventCatalog. If you have any questions, feel free to join over 1,100 EventCatalog users on [Discord](https://discord.com/invite/3rjaZMmrAm), we are happy to help you get started. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Authentication](/blog/tags/authentication.md) * [SSR](/blog/tags/ssr.md) --- ## [Access your EventCatalog from the command line](/blog/eventcatalog-cli.md) January 21, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share something that's going to change how teams automate their EventCatalog. **Every SDK operation now works directly from the command line.** No code needed. Just simple commands that output JSON. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [SDK](/blog/tags/sdk.md) * [CLI](/blog/tags/cli.md) * [Automation](/blog/tags/automation.md) [**Read more**](/blog/eventcatalog-cli.md) --- ## [Integrate Azure Schema Registry with EventCatalog](/blog/azure-schema-registry-eventcatalog.md) November 4, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [YouTube video player](https://www.youtube.com/embed/rNDa2JDyr_A?si=uFAbZbAiAxiy9dqJ) I'm happy to announce the release of the [EventCatalog Azure Schema Registry plugin](/docs/plugins/azure-schema-registry/intro.md). This plugin allows you to import schemas from Azure Schema Registry into EventCatalog and keep them in sync alongside your documentation. Importing your schemas into EventCatalog gives you the ability to: * Add more value to your schemas with business context and ownership * Bring discoverability to your schemas with the [EventCatalog Schema Explorer](/docs/development/guides/schemas/schema-explorer.md) * Assign ownership (users and teams) to your schemas * Visualize the bigger picture with the [EventCatalog Visualizer](/features/visualization.md) * Getting access to your schemas with the [EventCatalog Schema API](/docs/development/guides/schemas/schema-api.md) for your LLMs or testing * Connect your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) to get schemas for your LLMs * And more... In this blog post I'll walk you through the features of the plugin and how to get started. *** ### What is Azure Schema Registry?[​](#what-is-azure-schema-registry "Direct link to What is Azure Schema Registry?") [Azure Schema Registry](https://learn.microsoft.com/en-us/azure/event-hubs/schema-registry-overview) is a feature of Azure Event Hubs that provides a centralized repository for managing schemas in event-driven and message-based architectures. For architects building on Azure, Schema Registry offers a managed solution for schema validation, versioning, and governance. ### Why integrate Azure Schema Registry with EventCatalog?[​](#why-integrate-azure-schema-registry-with-eventcatalog "Direct link to Why integrate Azure Schema Registry with EventCatalog?") EventCatalog helps organizations understand and manage their event-driven architectures by providing comprehensive documentation of domains, services, and messages. **While schema registries capture the technical contract of your events, EventCatalog preserves the crucial context often lost in traditional documentation**: ownership details, business context, schema evolution history, and visual representations of your message flows. The Azure Schema Registry plugin creates a seamless connection between your Azure Schema Registry and EventCatalog, giving you the best of both worlds. You maintain all the powerful features of Azure's schema management while enriching your developer experience with EventCatalog's visualization capabilities, detailed documentation, governance tools, and enhanced discoverability. This integration helps teams not just track what schemas exist, but understand how they fit into the broader architectural landscape and how they've evolved over time. ### How the plugin works[​](#how-the-plugin-works "Direct link to How the plugin works") [The Azure Schema Registry plugin](/docs/plugins/azure-schema-registry/intro.md) maps your schemas into logical services and domains within your organization. Teams can configure which schemas each service produces or consumes, creating clear boundaries and relationships in your architecture. When Azure schemas are imported into EventCatalog, they become more than just technical contracts - they gain rich contextual information that helps teams understand their broader impact. This includes crucial details like schema ownership, business context, and the producer-consumer relationships between services. Any markdown and documentation added to your messages are persisted between versions, so you can add more value to your schemas and keep your documentation up-to-date. ### Getting started[​](#getting-started "Direct link to Getting started") To get started with the Azure Schema Registry integration, you'll need: * An Azure Event Hubs namespace with Schema Registry enabled * Schemas registered in your Azure Schema Registry * An EventCatalog license key for Azure Schema Registry integration ([14-day free trial](https://eventcatalog.cloud)) The setup takes just a few minutes. [Read the installation guide](/docs/plugins/azure-schema-registry/installation.md) to configure your integration, or explore the [example project](https://github.com/event-catalog/generators/tree/main/examples/generator-azure-schema-registry) to see it in action. ### Summary[​](#summary "Direct link to Summary") Azure Schema Registry is a powerful tool for managing schemas in event-driven architectures on Azure. We created our [Azure Schema Registry integration](https://github.com/event-catalog/generators) to help you unlock more value from your schema registries. The Azure Schema Registry plugin allows you to map your schemas to services and domains within your organization, helping your team understand how schemas are produced and consumed across your architecture. EventCatalog syncs with your schema registry and persists any additional contextual information you add, including documentation, ownership, and relationships. This context carries forward as your schemas evolve, creating a living history of your event-driven architecture. Using the Schema Explorer you can quickly find schemas in your architecture, and understand the history of your schemas, or connect your schemas to your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md). Getting started should take just a few minutes and [you can read our guide here](/docs/plugins/azure-schema-registry/intro.md). If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Azure](/blog/tags/azure.md) * [Schema Registry](/blog/tags/schema-registry.md) * [Event Hubs](/blog/tags/event-hubs.md) --- ## [Embed IcePanel Diagrams in EventCatalog](/blog/eventcatalog-icepanel.md) January 8, 2026 · 2 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [IcePanel](https://icepanel.io/) is a powerful tool for visualizing software architecture using the [C4 model](https://c4model.com/). Now you can embed your IcePanel diagrams directly into EventCatalog, bringing your architecture documentation to life. ![Example output](/img/ice-panel.png)Embedding an IcePanel diagram in EventCatalog Introducing the new [`` component](/docs/development/components/components/embed-diagrams/icepanel.md). Embed interactive C4 diagrams into any EventCatalog page, from [domains](/docs/development/guides/domains/introduction.md) and [services](/docs/development/guides/services/introduction.md) to [messages](/docs/messages.md) and [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). ### How does it work?[​](#how-does-it-work "Direct link to How does it work?") To embed an IcePanel diagram in your documentation, use the following code: /services/OrderService/index.mdx ``` --- # service frontmatter --- ## Architecture Overview ``` You can also add a title and description: /services/OrderService/index.mdx ``` ``` ### Full-Screen Mode[​](#full-screen-mode "Direct link to Full-Screen Mode") Each embedded diagram includes a full-screen button, giving your team more space to explore complex architectures without leaving EventCatalog. ![Full-screen mode](/img/ice-panel-full-screen.png)Full-screen mode ### Getting started[​](#getting-started "Direct link to Getting started") Update your EventCatalog to the latest version: ``` npm install @eventcatalog/core@latest ``` Then start using the `` component in your documentation. ## Summary[​](#summary "Direct link to Summary") If your team uses IcePanel for C4 architecture diagrams, you can now bring those diagrams directly into EventCatalog. Check out the [documentation](/docs/development/components/icepanel.md) to get started. We'd love to hear your thoughts. Feel free to [open an issue](https://github.com/event-catalog/eventcatalog/issues/new) with any feedback. Join our community of over 1,100 members on [Discord](https://discord.com/invite/3rjaZMmrAm)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [IcePanel](/blog/tags/ice-panel.md) * [Component](/blog/tags/component.md) * [C4](/blog/tags/c-4.md) --- ## [Your architecture is changing. Do you know about it?](/blog/architecture-change-detection.md) March 5, 2026 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog As event-driven architectures scale, an invisible problem emerges: who is producing what, and who is consuming it? A service starts consuming your `OrderPlaced` event. No ticket. No Slack message. No email. You find out weeks later when something breaks downstream. At scale, you need governance over these relationships. You need to know when dependencies change, who is affected, and ideally, before it reaches production. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Governance](/blog/tags/governance.md) * [Architecture](/blog/tags/architecture.md) * [Change Detection](/blog/tags/change-detection.md) [**Read more**](/blog/architecture-change-detection.md) --- ## [Announcing Changelogs for EventCatalog](/blog/eventcatalog-changelogs.md) August 2, 2024 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [EventCatalog 2.2.0](https://github.com/event-catalog/eventcatalog/releases) is now available, featuring support for changelogs. You can now add changelogs to your [domains](/docs/development/guides/domains/versioning-and-changelogs/changelog.md), [services](/docs/development/guides/services/versioning-and-lifecycle/changelog.md) and messages ([events](/docs/development/guides/messages/common/changelog.md)/[commands](/docs/development/guides/messages/common/changelog.md)). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Changelogs](/blog/tags/changelogs.md) [**Read more**](/blog/eventcatalog-changelogs.md) --- ## [Modelling more message patterns in EventCatalog](/blog/channels-20.md) December 1, 2025 · 7 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm happy to share that **EventCatalog 2.65.0** is now out. This release includes the following highlights: * [New: Channel updates in EventCatalog](#channel-updates-in-eventcatalog) * A new way to model more message patterns in EventCatalog, chain channels together and much more... * [New: Producers and consumers are now visualized](#producers-and-consumers-are-now-visualized) * The visualizer now shows Producers and Consumers for your messages. Not just the service, to help you understand the bigger picture. * [New: Message colors added to the visualizer](#message-colors-added-to-the-visualizer) * The visualizer now shows colored messages (nodes). This allows you to keep track of how messages flow in your architecture. Files will be automatically migrated When you upgrade EventCatalog to 2.65.0 our migration script will migrate your channels for you ❤️. This will change files in your EventCatalog that will be need to be reviewed and updated. ## Channel updates in EventCatalog[​](#channel-updates-in-eventcatalog "Direct link to Channel updates in EventCatalog") Channels in EventCatalog have been updated to support more complex messaging patterns and flows. Channels represent the transportation method of messages between producers and consumers. Examples of channels could be: * Kafka * RabbitMQ * AWS SQS * AWS SNS * AWS SNS ### What has changed with Channels?[​](#what-has-changed-with-channels "Direct link to What has changed with Channels?") Previously in EventCatalog you would define and assign your channel to your messages. This would tell EventCatalog that the `OrderPlaced` message is published to the `orders.events` channel. /events/OrderPlaced/index.mdx (example) ``` --- id: OrderPlaced ... # other event frontmatter channels: - id: orders.events --- ``` **Although this worked, it limited the ability to model more complex messaging patterns and flows.** Moving forward you will now define **how** your messages are transported when documenting who is publishing and consuming these messages. ### Define how your producers and consumers transport messages[​](#define-how-your-producers-and-consumers-transport-messages "Direct link to Define how your producers and consumers transport messages") When you define produces and consumers in EventCatalog, you use the `sends` and `receives` fields in your service frontmatter. This example shows: * The `OrderService` sending an `OrderPlaced` message * The `OrderService` receiving a `PaymentProcessed` /services/Orders/index.mdx (example) ``` --- id: OrderService ... # other service frontmatter sends: - id: OrderPlaced receives: - id: PaymentProcessed --- ``` In EventCatalog 2.65.0 you can now define how your messages are transported using the new `to` and `from` fields. #### Example of assigning channels to producers and consumers[​](#example-of-assigning-channels-to-producers-and-consumers "Direct link to Example of assigning channels to producers and consumers") Here is an example of an `OrderService` that sends an `OrderPlaced` message and receives a `PaymentProcessed` message. But now, we define the transport method for the message (e.g broker, queue, topic, etc.) /services/Orders/index.mdx (example) ``` --- id: OrderService ... # other service frontmatter sends: - id: OrderPlaced # OrderPlaced is published to the orders.events channel (e.g broker) to: - id: orders.events receives: - id: PaymentProcessed # PaymentProcessed is consumed from the payments.events channel (e.g queue) from: - id: payments.events --- ``` This way allows you to model and visualize many more complex messaging patterns and flows. In the example below, we implemented a simple publish/subscribe pattern with channels and routing. ![Example](/assets/images/channels-example-dc2f3420a62dd3a1147b649be5e80b2b.png) But we can also model more complex messaging patterns and flows. ### Chain channels together to model more complex messaging patterns and flows[​](#chain-channels-together-to-model-more-complex-messaging-patterns-and-flows "Direct link to Chain channels together to model more complex messaging patterns and flows") In some cases you may want to chain channels together, to document how messages are transported, filtered, changed and consumed. Using channel to channel routing you can model more complex messaging patterns and flows. Other examples of this could be: * Broker -> Queue -> Processor -> Topic * Queue -> Processor -> Topic * Processor -> Topic * Topic -> Queue * Queue -> Broker * Broker -> Queue -> Processor -> Topic -> Queue * Broker -> Queue -> Processor -> Topic -> Queue -> Broker To do this we have now added the new `routes` field in your channels. The `routes` field tells EventCatalog the possible routes/destinations for the messages going through the channel. ![Example](/assets/images/channel-chains-9647e1fa616589511ee0088ff041761f.png) If you want to learn more about chaining channels together, you can read our [chaining channels together guide](/docs/development/guides/channels/adding-messages-to-services.md#chaining-channels). ### Channels documentation can belong anywhere[​](#channels-documentation-can-belong-anywhere "Direct link to Channels documentation can belong anywhere") Previously in EventCatalog, channels were only defined in the root `/channels` directory. We have now changed this, and you can now defined channels in any directory you like. This can be useful if you want to group channels by domain, service, team, etc. ``` /domains/ /MyDomain/ /channels/ /services/ /MyService/ /channels/ ``` To get started you can create your `channels` folder in any directory you like (\*\*/channels) You can learn more reading our [channels guide](/docs/development/guides/channels/introduction.md). *** ## Producers and consumers are now visualized[​](#producers-and-consumers-are-now-visualized "Direct link to Producers and consumers are now visualized") Previously in EventCatalog, the visualizer would show you messages your services are consuming and producing (seen below) ![Example](/assets/images/before-ded743a9c4181ef732b19dfff25ec075.png) **The problem is, that it does not show you the bigger picture. Who is producing the messages you are consuming or who is consuming the messages you are producing.** So In EventCatalog 2.65.0 we made a few changes to help visualize the bigger picture better. ### See who is producing and consuming messages[​](#see-who-is-producing-and-consuming-messages "Direct link to See who is producing and consuming messages") The new visualizer will now show you exactly who is producing and consuming the messages you are sending and receiving. ![Example](/assets/images/after-a4d8fd5ee01032c5a447025d091d7093.png) This can help your teams understand the bigger picture of your architecture and how messages are flowing. ## Message colors added to the visualizer[​](#message-colors-added-to-the-visualizer "Direct link to Message colors added to the visualizer") We have also added colors to add animated messages to the visualizer, and added support for multi animated messages between producers and consumers. This visual guide can help you see how your messages are flowing through your architecture, without them all being the same color. ![Example](/assets/images/color-messages-edf32a0cef4e29f4e15e69dcf9ed9db1.png) *** ## What's next?[​](#whats-next "Direct link to What's next?") More and more users are coming to EventCatalog to help them bring discoverability to their event-driven architecture and save teams time. Our next goal is focus more on stability and focus on bug fixing and patching. So if you have any issues or feedback, please let us know. Our next major features include: * [Adding domain level events (RFC)](https://github.com/event-catalog/eventcatalog/issues/1816) * [Added support for Containers In EventCatalog (RFC)](https://github.com/event-catalog/eventcatalog/issues/1819) * [Adding Data Products In EventCatalog (RFC)](https://github.com/event-catalog/eventcatalog/issues/1818) * [Adding Webhooks In EventCatalog (RFC)](https://github.com/event-catalog/eventcatalog/issues/1814) Many people have given us awesome feedback over the past year, and we have made the new RFCs to help you model the architectures you want to document. And we are excited to see the new features and improvements coming to EventCatalog. If you like EventCatalog, [I would love a ⭐️ on GitHub](https://github.com/event-catalog/eventcatalog), and feel free to join our [Discord Channel](https://eventcatalog.dev/discord), which now has over 1,200 members! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Channels](/blog/tags/channels.md) * [2](/blog/tags/2.md) --- ## [Introducing the EventCatalog Linter](/blog/eventcatalog-linter.md) July 4, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce the release of the [EventCatalog Linter](/docs/development/developer-tools/eventcatalog-linter.md), a comprehensive validation tool that helps you maintain high-quality, consistent documentation for your architecture. The EventCatalog Linter validates your frontmatter schemas and resource references, catching issues early in your development process—before they impact your team or reach production. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Linter](/blog/tags/linter.md) * [Quality](/blog/tags/quality.md) * [CI/CD](/blog/tags/ci-cd.md) [**Read more**](/blog/eventcatalog-linter.md) --- ## [Access your EventCatalog from the command line](/blog/eventcatalog-cli.md) January 21, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share something that's going to change how teams automate their EventCatalog. **Every SDK operation now works directly from the command line.** No code needed. Just simple commands that output JSON. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [SDK](/blog/tags/sdk.md) * [CLI](/blog/tags/cli.md) * [Automation](/blog/tags/automation.md) [**Read more**](/blog/eventcatalog-cli.md) --- ## [Document events at the domain level](/blog/domain-level-messages.md) January 15, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [domains](/docs/development/guides/domains/introduction.md) in EventCatalog 3.7.0 can now directly specify which messages they send and receive. This gives your team more flexibility in how you document your architecture. ![Domain-level messages](/assets/images/domain-messages-170b8dc6210cae74861d85bb9612328c.png) If you practice [Domain-Driven Design](/docs/development/guides/domains/introduction.md) or think about messaging at the domain level, this update makes EventCatalog work the way you think. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [domains](/blog/tags/domains.md) * [events](/blog/tags/events.md) * [commands](/blog/tags/commands.md) * [DDD](/blog/tags/ddd.md) [**Read more**](/blog/domain-level-messages.md) --- ## [Embed IcePanel Diagrams in EventCatalog](/blog/eventcatalog-icepanel.md) January 8, 2026 · 2 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [IcePanel](https://icepanel.io/) is a powerful tool for visualizing software architecture using the [C4 model](https://c4model.com/). Now you can embed your IcePanel diagrams directly into EventCatalog, bringing your architecture documentation to life. ![Example output](/img/ice-panel.png)Embedding an IcePanel diagram in EventCatalog Introducing the new [`` component](/docs/development/components/components/embed-diagrams/icepanel.md). Embed interactive C4 diagrams into any EventCatalog page, from [domains](/docs/development/guides/domains/introduction.md) and [services](/docs/development/guides/services/introduction.md) to [messages](/docs/messages.md) and [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). ### How does it work?[​](#how-does-it-work "Direct link to How does it work?") To embed an IcePanel diagram in your documentation, use the following code: /services/OrderService/index.mdx ``` --- # service frontmatter --- ## Architecture Overview ``` You can also add a title and description: /services/OrderService/index.mdx ``` ``` ### Full-Screen Mode[​](#full-screen-mode "Direct link to Full-Screen Mode") Each embedded diagram includes a full-screen button, giving your team more space to explore complex architectures without leaving EventCatalog. ![Full-screen mode](/img/ice-panel-full-screen.png)Full-screen mode ### Getting started[​](#getting-started "Direct link to Getting started") Update your EventCatalog to the latest version: ``` npm install @eventcatalog/core@latest ``` Then start using the `` component in your documentation. ## Summary[​](#summary "Direct link to Summary") If your team uses IcePanel for C4 architecture diagrams, you can now bring those diagrams directly into EventCatalog. Check out the [documentation](/docs/development/components/icepanel.md) to get started. We'd love to hear your thoughts. Feel free to [open an issue](https://github.com/event-catalog/eventcatalog/issues/new) with any feedback. Join our community of over 1,100 members on [Discord](https://discord.com/invite/3rjaZMmrAm)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [IcePanel](/blog/tags/ice-panel.md) * [Component](/blog/tags/component.md) * [C4](/blog/tags/c-4.md) --- ## [Introducing Custom Components](/blog/eventcatalog-components.md) August 8, 2024 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [EventCatalog 2.3.1](https://github.com/event-catalog/eventcatalog/releases) is now available, featuring support for custom components. You can now add [custom components](/docs/development/customization/custom-components/introduction.md) to your domains, services and messages. Custom components allows you to create dynamic templates, reuse markdown across pages, client-side JavaScript and more. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Components](/blog/tags/components.md) [**Read more**](/blog/eventcatalog-components.md) --- ## [Live data meets architecture documentation](/blog/live-data-meets-architecture-documentation.md) January 8, 2026 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce **Custom Tools** for EventCatalog Assistant, allowing you to extend the AI with your own integrations and bring real-time data directly into your architecture conversations. Your documentation is valuable, but it only tells part of the story. With custom tools, you can now ask EventCatalog questions like "Is OrderService healthy?" or "Who's on-call for PaymentService?" and get answers based on **live data** from your production systems. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [AI](/blog/tags/ai.md) * [Custom Tools](/blog/tags/custom-tools.md) * [Integrations](/blog/tags/integrations.md) [**Read more**](/blog/live-data-meets-architecture-documentation.md) --- ## [Introducing Themes and Dark Mode](/blog/eventcatalog-themes-dark-mode.md) January 8, 2026 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that EventCatalog now supports **Themes and Dark Mode**, giving you full control over the look and feel of your catalog. Whether you prefer working in a dark environment, want to match your company's brand colors, or simply want a fresh new look, EventCatalog has you covered. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Themes](/blog/tags/themes.md) * [Dark Mode](/blog/tags/dark-mode.md) * [Customization](/blog/tags/customization.md) [**Read more**](/blog/eventcatalog-themes-dark-mode.md) --- ## [See your architecture clearly: Major visualizer improvements](/blog/visualizer-improvements.md) February 16, 2026 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share a major update to the EventCatalog visualizer. **The visualizer has had a complete refresh with a new layout engine, redesigned nodes, hover highlighting, and dark mode support.** Here's a breakdown of everything that's changed. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualizer](/blog/tags/visualizer.md) * [Layout](/blog/tags/layout.md) * [Dark Mode](/blog/tags/dark-mode.md) [**Read more**](/blog/visualizer-improvements.md) --- ## [Introducing Data Stores with EventCatalog](/blog/introducing-data-resources.md) October 1, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [EventCatalog 2.59.0](https://github.com/event-catalog/eventcatalog/releases/tag/v2.59.0) is now out, and introduces the new resource type [**Data Stores**](/docs/development/guides/data/introduction.md). You can now document your data stores (e.g. databases, caches, objectStore, searchIndexes, etc) in EventCatalog, visualize them, version them, assign owners and much more. ([see example in EventCatalog demo](https://demo.eventcatalog.dev/docs/containers/order-metadata-store/0.0.1)) In this blog post I want to go over the new data store resource, what it is, how to use it, and how to get started. *** ## What are data stores?[​](#what-are-data-stores "Direct link to What are data stores?") Data stores (containers) are a way to document data in your architecture (e.g. databases, caches, objectStore, searchIndexes, etc). Using the new data store resource you can document and visualize your data in your architecture, and how your services read/write to them. This can help your teams understand how your services interact with data in your architecture. Inspired by the C4 model Rather than creating a new `data` resource directly, we choose to call these `containers`. This follows the C4 naming convention for containers (not docker containers!) in your architecture. You can read more about the C4 model [here](https://c4model.com/abstractions/container). ## What do data stores look like in EventCatalog?[​](#what-do-data-stores-look-like-in-eventcatalog "Direct link to What do data stores look like in EventCatalog?") Data stores are like any other resource type in EventCatalog. You define them with markdown and frontmatter. When you define your data store they are given their own page in your catalog. Like any other resource type in EventCatalog, you can visualize them, assign schemas to them, version them, and more. ![Example](/assets/images/data-example-147f3041afae6ef63c0a283762e9e704.png) *You can see an example of a data store in the [EventCatalog demo](https://demo.eventcatalog.dev/docs/containers/order-metadata-store/0.0.1).* Using the new data store resource you can document databases, caches, object stores, search indexes, and more, assign schemas to them and create read/write relationships with your services. ## Connecting services to data stores[​](#connecting-services-to-data-stores "Direct link to Connecting services to data stores") Services are a core resource type in EventCatalog. The tend to represent services, business logic, applications, or systems in your architecture. You can now use the new [`writesTo`](/docs/api/service-api.md#writesTo) and [`readsFrom`](/docs/api/service-api.md#readsFrom) fields in your service frontmatter to connect your services to data stores. This creates relationships between your services and data stores, helping your teams understand how your services interact with data in your architecture. ![Example](/assets/images/data-on-service-page-e2cea0d31ce1f6f687f1304286bbb824.png) ## Visualizing data stores[​](#visualizing-data-stores "Direct link to Visualizing data stores") The EventCatalog visualizer has been updated to display data stores. There are two ways to view your data stores in EventCatalog. 1. [Services Data Diagram](/docs/development/guides/data/introduction.md) * Shows which data stores (read/write) are connected to a given service. 2. [Data Store Diagram](/docs/development/guides/data/introduction.md) * Shows all the services that are reading/writing to that data store. ### Services Data Diagram[​](#services-data-diagram "Direct link to Services Data Diagram") When you assign services to read/write to data stores, EventCatalog will show a `Data Diagram` section in the visualizer for your service. Clicking on this will show you a diagram of the data stores that the service is reading/writing to. This can help your teams quickly understand which data stores are read/written to by a given service. Users can right click on any node to display the data store information. ![Example](/assets/images/visual-1-bd3618ac30ece6b2f5746ff95bbc68e3.png) *You can see an example of this in the [EventCatalog demo](https://demo.eventcatalog.dev/visualiser/services/OrdersService/0.0.3/data).* ### Data Store Diagram[​](#data-store-diagram "Direct link to Data Store Diagram") Clicking on the data store itself will show you all the services that are reading/writing to that data store. This view is helpful for understanding which services are reading/writing to a given data store. ![Example](/assets/images/visual-2-570711c59d44a4193b21151207e44a13.png) *You can see an example of this in the [EventCatalog demo](https://demo.eventcatalog.dev/visualiser/containers/order-metadata-store/0.0.1).* ## Rendering schemas for data stores[​](#rendering-schemas-for-data-stores "Direct link to Rendering schemas for data stores") As EventCatalog is technically agnostic, you can render any schema format you want in your data store page. To do this you can add codeblocks to your markdown files or use the `` component to render any file into the page. ``` ``` You can learn more you can read the [adding schemas to data stores](/docs/development/guides/data/03a-adding-schemas-to-data-stores.md) documentation. ## Getting started[​](#getting-started "Direct link to Getting started") To get started you can [read the data store documentation](/docs/data.md) and upgrade to the latest version of EventCatalog. You can also check out the [EventCatalog demo](https://demo.eventcatalog.dev/docs/containers/order-metadata-store/0.0.1) to see an example of a data store in EventCatalog. ## Summary[​](#summary "Direct link to Summary") Today we have introduced the new [data store resource](/docs/data.md) to EventCatalog, allowing you to document and visualize your data stores in your architecture. You can now assign services to read/write to data stores, visualize them, version them, assign owners and much more. ([see example in EventCatalog demo](https://demo.eventcatalog.dev/docs/containers/order-metadata-store/0.0.1)) We hope you find this new resource helpful in your architecture. In the new couple of weeks we will release [EventCatalog SDK](/docs/sdk.md) support for data stores, to help you programmatically create and manage data stores in your catalog. If you have any feedback or questions, please feel free to reach out to us on [GitHub](https://github.com/event-catalog/eventcatalog/issues) or [Discord](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Data](/blog/tags/data.md) --- ## [Document, visualize and discover your data products](/blog/data-products.md) January 21, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [EventCatalog 3.8.0](/changelog.md) introduces data products as a first-class resource type. If your organization is building a data mesh or transforming raw events into analytics-ready tables, you can now document those data products directly in your catalog alongside your events, services, and domains. **Data products are now discoverable, versioned, and queryable through the same tools you use for the rest of your architecture.** ![Example](/assets/images/data-products-633020b2b8e252de9406a55aa9adc873.png) You can now document how your events impact the data systems downstream, visualize the complete lineage, and understand the bigger picture between your event-driven architecture and your data platforms. For teams running data platforms, this means your analysts, architects, and engineers can find the metrics they need without hunting through Slack channels or outdated wikis. They also gain visibility into where their data comes from and how it flows through the system. ## Why data products matter[​](#why-data-products-matter "Direct link to Why data products matter") Your event-driven systems generate thousands of events daily. OrderConfirmed, PaymentProcessed, ShipmentDelivered. But business stakeholders don't ask "How many OrderConfirmed events fired yesterday?" They ask "What was our revenue?" or "What's our fulfillment rate?" Data products bridge that gap. They transform raw events into business-ready metrics. They're the aggregated sales dashboards, the fulfillment KPI tables, the customer segmentation datasets that power decisions. In a data mesh architecture, each domain owns its data products. The orders domain produces order analytics. The payments domain produces payment metrics. Just like services in a microservices architecture, data products are independently owned, versioned, and evolved. ## What EventCatalog data products give you[​](#what-eventcatalog-data-products-give-you "Direct link to What EventCatalog data products give you") EventCatalog treats data products the same way it treats events and services. Full versioning, ownership tracking, and relationship mapping. **Inputs and Outputs**: Document what goes into a data product and what comes out. Your order analytics data product might consume OrderConfirmed and PaymentProcessed events or an ETL pipeline, then output to a Snowflake table and an analytics service. ![Example](/assets/images/data-products-visualizer-ce9c235d434fc7ba57d0708426081a1f.png) **Contracts**: Attach any data contract to your outputs (e.g JSON Schema, ODCS YAML, etc). Your downstream consumers can see exactly what fields, types, and SLAs they're working with. The Schema Explorer renders these contracts inline. **Versioning**: Data products evolve. When you add a new metric or change an aggregation, you version it. The catalog tracks all versions and highlights the latest. **Ownership**: Assign teams and users as owners. When someone has questions about payment metrics, they know who to contact. **Relationships**: Data products connect to the rest of your architecture. They consume events from services, write to containers (databases, data warehouses), and may even produce new events. The node graph visualizes these connections. ## Integration With Existing Features[​](#integration-with-existing-features "Direct link to Integration With Existing Features") Data products aren't isolated. They integrate with everything EventCatalog already offers. **Domains**: Nest data products inside domains and subdomains. **Sidebar Navigation**: Data products appear in the sidebar under their domain, just like services and events. **Discover Page**: Filter, search, and browse data products across your entire catalog. Sort by domain, owner, or version. **Node Graphs**: The visualizer shows inputs flowing into data products and outputs flowing to consumers. If a data product consumes an event produced by a service, the graph renders that relationship. **AI Chat**: Ask your catalog "Which data products consume OrderConfirmed?" or "Show me all payment metrics." The AI understands data products as a resource type. **MCP Server**: Query data products programmatically through the MCP Server. Your architects can ask [Claude Desktop](https://www.anthropic.com/news/claude-desktop), [Cursor](https://www.cursor.com/), or [Windsurf](https://windsurf.dev/) about data product schemas and relationships. **Schema Explorer**: Attach any data contract to your outputs (e.g JSON Schema, ODCS YAML, etc). The Schema Explorer renders them with syntax highlighting and field-level details. Click a field to see its type, description, and validation rules. ## SDK Support[​](#sdk-support "Direct link to SDK Support") The [EventCatalog SDK](/docs/sdk.md) includes full support for data products. You can create, update, and manage them programmatically. ``` import { writeDataProduct } from '@eventcatalog/sdk'; await writeDataProduct({ id: 'order-analytics', name: 'Order Analytics', version: '1.0.0', inputs: [ { id: 'OrderConfirmed' }, { id: 'PaymentProcessed' } ], outputs: [ { id: 'orders-db', contract: { path: 'fact-orders-contract.json', name: 'Fact Orders Contract', type: 'json-schema' } } ], markdown: 'Your markdown content...' }); ``` This makes it easy to generate data products from your existing data platform metadata or automate documentation as part of your CI/CD pipeline. ## Getting Started[​](#getting-started "Direct link to Getting Started") Data products are available in EventCatalog 3.8.0. Create a `data-products` directory in your catalog, add an `index.mdx` file, and start documenting. The structure mirrors events and services. You can nest them in domains or place them at the root. Read the [data products documentation](/docs/data-products.md) for full configuration options, schema contract formats, and node graph customization. ## Beta status and feedback welcome[​](#beta-status-and-feedback-welcome "Direct link to Beta status and feedback welcome") Data products are in beta. The core features work. Inputs, outputs, contracts, versioning, node graphs, SDK support. But we want your feedback before we finalize the API. If you're building data products, try this out. Tell us what's missing, what's confusing, what could be better. We're particularly interested in feedback on contract formats, visualization preferences, and workflow integration. Join the [Discord](https://discord.gg/eventcatalog) to share your thoughts or [open an issue on GitHub](https://github.com/event-catalog/eventcatalog) with suggestions. Data products are how you turn events into insights. Now they're documented alongside the rest of your architecture. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [Data Products](/blog/tags/data-products.md) --- ## [Document events at the domain level](/blog/domain-level-messages.md) January 15, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [domains](/docs/development/guides/domains/introduction.md) in EventCatalog 3.7.0 can now directly specify which messages they send and receive. This gives your team more flexibility in how you document your architecture. ![Domain-level messages](/assets/images/domain-messages-170b8dc6210cae74861d85bb9612328c.png) If you practice [Domain-Driven Design](/docs/development/guides/domains/introduction.md) or think about messaging at the domain level, this update makes EventCatalog work the way you think. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [domains](/blog/tags/domains.md) * [events](/blog/tags/events.md) * [commands](/blog/tags/commands.md) * [DDD](/blog/tags/ddd.md) [**Read more**](/blog/domain-level-messages.md) --- ## [Your documentation is a design artifact, not just a wiki page](/blog/eventcatalog-miro-app.md) March 30, 2026 · 9 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Every team I've talked to has the same problem. The architecture lives in one place and the diagrams live in another. The documentation is accurate as of six months ago. The Miro board from the last [event storming](https://eda-visuals.boyney.io/visuals/event-storming) session doesn't match what's actually running. **Today I'm releasing the [EventCatalog Miro App v2](/docs/miro/overview.md)**, a [Miro](https://miro.com) app that turns your EventCatalog documentation into interactive, collaborative design artifacts — and brings your design decisions back into the catalog when you're done. ![EventCatalog architecture on a Miro board](/img/miro/getting-started/example.png)Your real architecture, imported into Miro with relationships intact **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Miro](/blog/tags/miro.md) * [Architecture](/blog/tags/architecture.md) * [Design](/blog/tags/design.md) [**Read more**](/blog/eventcatalog-miro-app.md) --- ## [Introducing diagrams as first-class resources](/blog/2026/01/09/diagrams-as-first-class-resources.md) January 9, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog already gives you auto-generated visualizations: Entity Maps, Interaction Maps, and domain views that update as your catalog changes. These are great for understanding relationships between your resources. But sometimes you need your *own* diagrams. Target architecture plans. Event storming results. Sequence flows from Miro. C4 diagrams from IcePanel. The stuff that lives in scattered boards, Confluence pages, or that folder someone created two years ago. **EventCatalog 3.3.0 lets you bring those diagrams to your documentation.** Your custom diagrams are now first-class, versioned resources in your catalog. Bring them in **from any tool**, version them, link them to your domains and services, and even ask AI about them. **Tags:** * [diagrams](/blog/tags/diagrams.md) * [architecture](/blog/tags/architecture.md) * [versioning](/blog/tags/versioning.md) * [ai](/blog/tags/ai.md) [**Read more**](/blog/2026/01/09/diagrams-as-first-class-resources.md) --- ## [Introducing query messages for EventCatalog](/blog/introducing-queries.md) October 21, 2024 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog ![](/assets/images/query-messages-9c0ffa471ee107f36d4e986fdbf4d7ff.png); **Added in** `eventcatalog@2.10.0` In many distributed architectures, domains and services communicate through different types of messages, typically categorized as events, commands, and queries. EventCatalog now includes support for documenting queries, allowing you to clearly outline which queries a service accepts and which it invokes. Queries are often seen in protocols such as HTTP and gRPC. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Queries](/blog/tags/queries.md) * [Messages](/blog/tags/messages.md) * [EDA](/blog/tags/eda.md) * [Distributed System](/blog/tags/distributed-system.md) [**Read more**](/blog/introducing-queries.md) --- ## [The right documentation, in the right place](/blog/resource-docs.md) February 19, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.15.0 is out, and it introduces [resource-level documentation](/docs/development/bring-your-own-documentation/resource-docs/introduction.md). The catalog lives in one place. The runbooks live in Confluence. The ADRs are somewhere in Notion. The troubleshooting guides are in a Slack thread from six months ago. The catalog tells you *what* exists. Everything that explains *why* and *how* is somewhere else entirely. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Documentation](/blog/tags/documentation.md) * [Scale](/blog/tags/scale.md) [**Read more**](/blog/resource-docs.md) --- ## [Introducing Entity Maps](/blog/introducing-entity-maps.md) July 3, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Understanding the relationships between entities in your domain model is crucial for building robust event-driven architectures. That's why we're excited to introduce **Entity Maps** — a powerful new visualization feature that helps you explore and understand entity relationships within your EventCatalog domains. ## What are Entity Maps?[​](#what-are-entity-maps "Direct link to What are Entity Maps?") Entity Maps provide a visual representation of how entities connect within your domains. In Domain-Driven Design, entities are the core building blocks that represent key concepts like `Order`, `Customer`, or `Invoice`. Entity Maps help you visualize these relationships at a glance, making it easier to understand your domain architecture and identify potential improvements. ![EventCatalog Entity Map](/img/entity-map.png)[View the demo](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3/entity-map) ## Why Entity Maps are useful[​](#why-entity-maps-are-useful "Direct link to Why Entity Maps are useful") Entity Maps solve several common challenges teams face when working with complex domain models: ### **Visual Domain Understanding**[​](#visual-domain-understanding "Direct link to visual-domain-understanding") Instead of piecing together entity relationships from scattered documentation, Entity Maps provide a comprehensive visual overview of your domain model. You can instantly see how entities connect and understand the flow of data through your system. ### **Architectural Insights**[​](#architectural-insights "Direct link to architectural-insights") By visualizing entity relationships, you can identify potential architectural improvements, spot missing connections, or discover opportunities to simplify your domain model. Entities that are referenced across domains are highlighted in yellow, making cross-domain dependencies immediately visible. ### **Team Collaboration**[​](#team-collaboration "Direct link to team-collaboration") Entity Maps serve as a common language for discussing domain models with both technical and non-technical stakeholders. They make it easier to communicate complex relationships and ensure everyone shares the same understanding of the domain. ### **Design Validation**[​](#design-validation "Direct link to design-validation") When designing new features or refactoring existing ones, Entity Maps help you validate that your entity relationships align with your business requirements and domain boundaries. ## How to get started[​](#how-to-get-started "Direct link to How to get started") Getting started with Entity Maps is straightforward if you already have entities documented in EventCatalog: Don't have entities yet? You can read the [Entity API documentation](/docs/development/guides/domains/entities/introduction.md) to learn how to create entities. ### 1. Define Entity Relationships[​](#1-define-entity-relationships "Direct link to 1. Define Entity Relationships") To create meaningful Entity Maps, you'll need to define relationships between your entities using reference fields: ``` --- id: OrderItem name: OrderItem version: 1.0.0 properties: - name: orderId type: UUID required: true description: Identifier for the parent Order references: Order relationType: hasOne referencesIdentifier: orderId --- ``` ### 2. View Your Entity Map[​](#2-view-your-entity-map "Direct link to 2. View Your Entity Map") Once you've defined entity relationships, you can view your Entity Map in two ways: **Full-screen Visualizer**: Navigate to `/visualiser/domains/{domain-name}/{version}/entity-map` for a comprehensive view with interactive controls, zoom capabilities, and filtering options. **Embedded Component**: Use the `` component to embed entity maps directly in your documentation pages. ### 3. Explore and Interact[​](#3-explore-and-interact "Direct link to 3. Explore and Interact") Entity Maps are fully interactive — click and drag to explore relationships, zoom in for detailed views, and hover over entities to see their properties and descriptions. To get started and learn more you can read the [Entity Maps documentation](/docs/development/guides/domains/entities/domain-entity-map.md). ## Embed Entity Maps in Backstage[​](#embed-entity-maps-in-backstage "Direct link to Embed Entity Maps in Backstage") If you're using Backstage, you can embed Entity Maps directly in your entity pages using the `` component from our Backstage plugin. This brings your domain visualizations right into your developer portal. ![EventCatalog Entity Map in Backstage](/img/integrations/backstage/eventcatalog-card-component-entitymap.png)[Learn more about the Backstage integration](/docs/plugins/backstage/installation.md) ## Start visualizing your domain today[​](#start-visualizing-your-domain-today "Direct link to Start visualizing your domain today") Entity Maps are available now in EventCatalog. If you're already documenting entities, you can start creating entity maps immediately by defining relationships between your entities. To learn more about Entity Maps and how to use them effectively, check out our [comprehensive documentation](/docs/development/guides/domains/entities/domain-entity-map.md) or explore the [interactive demo](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3/entity-map). Whether you're working with Domain-Driven Design principles or simply want to better understand your system's data model, Entity Maps provide the visual clarity you need to build better event-driven architectures. If you have any questions or want to join our community of over 1,200 people exploring EventCatalog and event-driven architecture, [feel free to join us on Discord](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Entity Maps](/blog/tags/entity-maps.md) * [Domain-Driven Design](/blog/tags/domain-driven-design.md) * [Visualization](/blog/tags/visualization.md) --- ## [Document events at the domain level](/blog/domain-level-messages.md) January 15, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that [domains](/docs/development/guides/domains/introduction.md) in EventCatalog 3.7.0 can now directly specify which messages they send and receive. This gives your team more flexibility in how you document your architecture. ![Domain-level messages](/assets/images/domain-messages-170b8dc6210cae74861d85bb9612328c.png) If you practice [Domain-Driven Design](/docs/development/guides/domains/introduction.md) or think about messaging at the domain level, this update makes EventCatalog work the way you think. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [domains](/blog/tags/domains.md) * [events](/blog/tags/events.md) * [commands](/blog/tags/commands.md) * [DDD](/blog/tags/ddd.md) [**Read more**](/blog/domain-level-messages.md) --- ## [Bring your diagrams to EventCatalog](/blog/eventcatalog-diagrams.md) April 16, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Many teams use diagrams to capture their architecture, event modeling, and event storming sessions, often these artifacts are left in [Miro](https://miro.com/), [Lucid](https://lucid.app/), or [Draw.io](https://draw.io/) and can be difficult to find when you need them. EventCatalog now supports embedding these diagrams into your documentation, making it easier to collaborate and get more value from your diagrams. We have introduced new components which can be used in your domains, services, and messages: * [\](/docs/development/components/components/embed-diagrams/miro.md) * [\](/docs/development/components/components/embed-diagrams/lucid.md) * [\](/docs/development/components/components/embed-diagrams/drawio.md) We have also introduce a new [EventCatalog Miro Plugin](https://github.com/event-catalog/eventcatalog-miro-app?tab=readme-ov-file) which allows you to bring EventCatalog into Miro. *** ## Miro[​](#miro "Direct link to Miro") The Miro component allows you to embed Miro boards into your documentation. These boards can be embedded into your domains, services, and messages. ![EventCatalog Miro Example](/img/blogs/miro/miro-example1.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) To get started you can use the new `` component in your documentation. /events/OrderAmended/index.mdx ``` --- #event frontmatter --- ## Event storming session ``` You can also configure the Miro board to be editable, full screen, and more. To get started you can read more about the [Miro component](/docs/development/components/components/embed-diagrams/miro.md) and how to use it. ## Miro Plugin[​](#miro-plugin "Direct link to Miro Plugin") We have launched our first version of the EventCatalog Miro plugin. This plugin allows you to bring EventCatalog into Miro, making it easier to collaborate and get more value from your diagrams. ![EventCatalog Miro Example](/img/blogs/diagrams/miro-plugin.png)[Install the plugin](https://miro.com/app-install/?response_type=code\&client_id=3458764623600229458\&redirect_uri=%2Fapp-install%2Fconfirm%2F) You can import all your resources into Miro, including services, messages, and more. Then drag these resources into your diagrams. Miro Plugin - Roadmap The Miro Plugin is open source and can be found on [GitHub](https://github.com/event-catalog/eventcatalog-miro-app). The plugin is read-only for now, but we are working on adding edit capabilities soon. The plugin is still in early stages and we would love to hear your feedback. To get started you can read more about the [Miro plugin](/integrations/miro.md) and how to use it. *** ## Lucid[​](#lucid "Direct link to Lucid") The Lucid component allows you to embed Lucid diagrams into your documentation. These diagrams can be embedded into your domains, services, messages and custom documentation pages. ![EventCatalog Lucid Example](/img/blogs/diagrams/lucid-eventcatalog-embed.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) To get started you can use the new `` component in your documentation. /events/OrderAmended/index.mdx ``` --- #event frontmatter --- ## Event storming session ``` To get started you can read more about the [Lucid component](/docs/development/components/components/embed-diagrams/lucid.md) and how to use it. *** ## Draw\.io (diagrams.net)[​](#drawio-diagramsnet "Direct link to Draw.io (diagrams.net)") The `` component allows you to embed Draw\.io diagrams into your documentation. These diagrams can be embedded into your domains, services, messages and custom documentation pages. ![EventCatalog Draw.io Example](/img/blogs/diagrams/drawio-eventcatalog-embed.png)[View the demo](https://demo.eventcatalog.dev/docs/custom/guides/event-storming/01-index) To get started you can use the new `` component in your documentation. /events/OrderAmended/index.mdx ``` --- #event frontmatter --- ## Event storming session ``` To get started you can read more about the [Lucid component](/docs/development/components/components/embed-diagrams/lucid.md) and how to use it. ## Summary[​](#summary "Direct link to Summary") Miro, Lucid, and Draw\.io are all great tools for capturing and sharing diagrams. With our new embedding feature, you can now bring those diagrams directly into your EventCatalog documentation—making it easier to collaborate, share context, and get more value from your visual workflows. If you have any feedback or suggestions, please [open an issue](https://github.com/event-catalog/eventcatalog/issues/new) and we will look into it. Our community has grown to over 1,100 members and continues to expand! If you haven’t already, join us on [Discord](https://discord.com/invite/3rjaZMmrAm) and be part of the conversation. Hope you enjoy the new feature! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Miro](/blog/tags/miro.md) * [Lucid](/blog/tags/lucid.md) * [Draw.io](/blog/tags/draw-io.md) * [Component](/blog/tags/component.md) --- ## [Introducing query messages for EventCatalog](/blog/introducing-queries.md) October 21, 2024 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog ![](/assets/images/query-messages-9c0ffa471ee107f36d4e986fdbf4d7ff.png); **Added in** `eventcatalog@2.10.0` In many distributed architectures, domains and services communicate through different types of messages, typically categorized as events, commands, and queries. EventCatalog now includes support for documenting queries, allowing you to clearly outline which queries a service accepts and which it invokes. Queries are often seen in protocols such as HTTP and gRPC. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Queries](/blog/tags/queries.md) * [Messages](/blog/tags/messages.md) * [EDA](/blog/tags/eda.md) * [Distributed System](/blog/tags/distributed-system.md) [**Read more**](/blog/introducing-queries.md) --- ## [Introducing Entity Maps](/blog/introducing-entity-maps.md) July 3, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Understanding the relationships between entities in your domain model is crucial for building robust event-driven architectures. That's why we're excited to introduce **Entity Maps** — a powerful new visualization feature that helps you explore and understand entity relationships within your EventCatalog domains. ## What are Entity Maps?[​](#what-are-entity-maps "Direct link to What are Entity Maps?") Entity Maps provide a visual representation of how entities connect within your domains. In Domain-Driven Design, entities are the core building blocks that represent key concepts like `Order`, `Customer`, or `Invoice`. Entity Maps help you visualize these relationships at a glance, making it easier to understand your domain architecture and identify potential improvements. ![EventCatalog Entity Map](/img/entity-map.png)[View the demo](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3/entity-map) ## Why Entity Maps are useful[​](#why-entity-maps-are-useful "Direct link to Why Entity Maps are useful") Entity Maps solve several common challenges teams face when working with complex domain models: ### **Visual Domain Understanding**[​](#visual-domain-understanding "Direct link to visual-domain-understanding") Instead of piecing together entity relationships from scattered documentation, Entity Maps provide a comprehensive visual overview of your domain model. You can instantly see how entities connect and understand the flow of data through your system. ### **Architectural Insights**[​](#architectural-insights "Direct link to architectural-insights") By visualizing entity relationships, you can identify potential architectural improvements, spot missing connections, or discover opportunities to simplify your domain model. Entities that are referenced across domains are highlighted in yellow, making cross-domain dependencies immediately visible. ### **Team Collaboration**[​](#team-collaboration "Direct link to team-collaboration") Entity Maps serve as a common language for discussing domain models with both technical and non-technical stakeholders. They make it easier to communicate complex relationships and ensure everyone shares the same understanding of the domain. ### **Design Validation**[​](#design-validation "Direct link to design-validation") When designing new features or refactoring existing ones, Entity Maps help you validate that your entity relationships align with your business requirements and domain boundaries. ## How to get started[​](#how-to-get-started "Direct link to How to get started") Getting started with Entity Maps is straightforward if you already have entities documented in EventCatalog: Don't have entities yet? You can read the [Entity API documentation](/docs/development/guides/domains/entities/introduction.md) to learn how to create entities. ### 1. Define Entity Relationships[​](#1-define-entity-relationships "Direct link to 1. Define Entity Relationships") To create meaningful Entity Maps, you'll need to define relationships between your entities using reference fields: ``` --- id: OrderItem name: OrderItem version: 1.0.0 properties: - name: orderId type: UUID required: true description: Identifier for the parent Order references: Order relationType: hasOne referencesIdentifier: orderId --- ``` ### 2. View Your Entity Map[​](#2-view-your-entity-map "Direct link to 2. View Your Entity Map") Once you've defined entity relationships, you can view your Entity Map in two ways: **Full-screen Visualizer**: Navigate to `/visualiser/domains/{domain-name}/{version}/entity-map` for a comprehensive view with interactive controls, zoom capabilities, and filtering options. **Embedded Component**: Use the `` component to embed entity maps directly in your documentation pages. ### 3. Explore and Interact[​](#3-explore-and-interact "Direct link to 3. Explore and Interact") Entity Maps are fully interactive — click and drag to explore relationships, zoom in for detailed views, and hover over entities to see their properties and descriptions. To get started and learn more you can read the [Entity Maps documentation](/docs/development/guides/domains/entities/domain-entity-map.md). ## Embed Entity Maps in Backstage[​](#embed-entity-maps-in-backstage "Direct link to Embed Entity Maps in Backstage") If you're using Backstage, you can embed Entity Maps directly in your entity pages using the `` component from our Backstage plugin. This brings your domain visualizations right into your developer portal. ![EventCatalog Entity Map in Backstage](/img/integrations/backstage/eventcatalog-card-component-entitymap.png)[Learn more about the Backstage integration](/docs/plugins/backstage/installation.md) ## Start visualizing your domain today[​](#start-visualizing-your-domain-today "Direct link to Start visualizing your domain today") Entity Maps are available now in EventCatalog. If you're already documenting entities, you can start creating entity maps immediately by defining relationships between your entities. To learn more about Entity Maps and how to use them effectively, check out our [comprehensive documentation](/docs/development/guides/domains/entities/domain-entity-map.md) or explore the [interactive demo](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3/entity-map). Whether you're working with Domain-Driven Design principles or simply want to better understand your system's data model, Entity Maps provide the visual clarity you need to build better event-driven architectures. If you have any questions or want to join our community of over 1,200 people exploring EventCatalog and event-driven architecture, [feel free to join us on Discord](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Entity Maps](/blog/tags/entity-maps.md) * [Domain-Driven Design](/blog/tags/domain-driven-design.md) * [Visualization](/blog/tags/visualization.md) --- ## [Amazon EventBridge integration with EventCatalog](/blog/eventbridge-eventcatalog.md) November 10, 2024 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog ![](/assets/images/eventbridge-eventcatalog-17b144b97461bce7c417b8ab619381db.png); [Amazon EventBridge](https://aws.amazon.com/eventbridge/) is an AWS service that helps developers build event-driven applications at scale. Amazon EventBridge offers multiple services including [Event Bus](https://aws.amazon.com/eventbridge/), [Amazon EventBridge Pipes](https://aws.amazon.com/eventbridge/) and [Amazon EventBridge Scheduler](https://aws.amazon.com/eventbridge/). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [EventBridge](/blog/tags/event-bridge.md) [**Read more**](/blog/eventbridge-eventcatalog.md) --- ## [Your catalog nodes now show what they actually are](/blog/custom-icons.md) April 15, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.28.1 adds custom icons to every resource type. Set `styles.icon` in any frontmatter and that icon appears across your entire catalog: visualiser nodes, sidebar navigation, documentation headers, and search results. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualiser](/blog/tags/visualiser.md) * [Icons](/blog/tags/icons.md) [**Read more**](/blog/custom-icons.md) --- ## [Documenting sync and async APIs with EventCatalog](/blog/documenting-sync-and-async-apis-with-eventcatalog.md) July 3, 2025 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Modern applications rarely live in isolation. They combine synchronous REST APIs for immediate operations with asynchronous messaging for resilient, scalable communication. But documenting this hybrid architecture presents unique challenges—until now. EventCatalog's **OpenAPI and AsyncAPI generators** solve the critical problem of unified API documentation, helping companies bridge the gap between synchronous and asynchronous communication patterns in one cohesive catalog. ## The documentation divide problem[​](#the-documentation-divide-problem "Direct link to The documentation divide problem") Most companies today operate in a multi-API world: * **REST APIs** handle immediate operations like user authentication, data retrieval, and real-time interactions * **Event-driven architectures** manage background processing, system integration, and scalable communication Yet these two worlds often exist in documentation silos. REST APIs get documented with tools like Swagger UI, while event schemas live in separate systems or wikis. This creates several critical problems: ### **Governance Gaps**[​](#governance-gaps "Direct link to governance-gaps") Without unified documentation, teams struggle to maintain consistent naming conventions, schema standards, and ownership across sync and async APIs. What starts as minor inconsistencies grows into architectural debt. ### **Discovery Challenges**[​](#discovery-challenges "Direct link to discovery-challenges") Developers waste time hunting across multiple tools to understand how systems communicate. Finding the right API endpoint or event schema becomes an archaeological expedition through scattered documentation. ### **Context Loss**[​](#context-loss "Direct link to context-loss") When sync and async APIs are documented separately, teams lose sight of how they work together. The relationship between a REST API that triggers an event and the downstream services that consume it becomes invisible. ### **Ownership Confusion**[​](#ownership-confusion "Direct link to ownership-confusion") Who owns which API? Which team maintains that event schema? Without centralized ownership tracking, accountability becomes fuzzy, leading to technical debt and governance failures. ## How EventCatalog solves the unified API documentation challenge[​](#how-eventcatalog-solves-the-unified-api-documentation-challenge "Direct link to How EventCatalog solves the unified API documentation challenge") EventCatalog's **OpenAPI and AsyncAPI generators** create a single source of truth for both synchronous and asynchronous APIs. Here's how it works: ### **Automatic API Discovery and Documentation**[​](#automatic-api-discovery-and-documentation "Direct link to automatic-api-discovery-and-documentation") Both generators automatically parse your specification files and transform them into living documentation: ``` // eventcatalog.config.js generators: [ // OpenAPI Generator - Document your REST APIs [ '@eventcatalog/generator-openapi', { services: [ { path: './openapi/user-service.yml', id: 'user-service' }, { path: './openapi/order-service.yml', id: 'order-service' }, ], domain: { id: 'core', name: 'Core Services', version: '1.0.0' }, }, ], // AsyncAPI Generator - Document your event-driven APIs [ '@eventcatalog/generator-asyncapi', { services: [ { path: './asyncapi/payment-events.yml', id: 'payment-service' }, { path: './asyncapi/inventory-events.yml', id: 'inventory-service' }, ], domain: { id: 'commerce', name: 'Commerce', version: '1.0.0' }, }, ], ], ``` ### **Unified Message Classification**[​](#unified-message-classification "Direct link to unified-message-classification") EventCatalog bridges the conceptual gap between REST and messaging by classifying all operations as **commands**, **queries**, or **events**: * **OpenAPI operations** can be mapped as commands or queries using the `x-eventcatalog-message-type` extension * **AsyncAPI messages** can be classified using the same extension ``` # In your OpenAPI file paths: /orders: post: summary: Create a new order x-eventcatalog-message-type: command /orders/{id}: get: summary: Get order details x-eventcatalog-message-type: query # In your AsyncAPI file components: messages: OrderCreated: description: 'Event triggered when an order is created' x-eventcatalog-message-type: event ``` ### **Cross-Domain Visualization**[​](#cross-domain-visualization "Direct link to cross-domain-visualization") EventCatalog's visualizer shows how your REST APIs and events work together across domain boundaries, making it easy to spot integration points and dependencies. ![EventCatalog OpenAPI and AsyncAPI Integration](/img/hero-banner-6.png)[View the demo](https://demo.eventcatalog.dev/visualiser) ### **Automatic Versioning and Schema Management**[​](#automatic-versioning-and-schema-management "Direct link to automatic-versioning-and-schema-management") Both generators automatically track API versions and schemas: * **REST API changes** in OpenAPI specs trigger new service and message versions * **Event schema evolution** in AsyncAPI files creates versioned event documentation * **Schemas are downloadable** for both REST payloads and event structures ## The value of unified API documentation[​](#the-value-of-unified-api-documentation "Direct link to The value of unified API documentation") ### **Faster Developer Onboarding**[​](#faster-developer-onboarding "Direct link to faster-developer-onboarding") New team members can explore your entire API landscape—both sync and async—in one place. No more bouncing between Swagger docs, wiki pages, and Confluence to understand how systems communicate. ### **Improved Governance**[​](#improved-governance "Direct link to improved-governance") Centralized ownership tracking, consistent naming conventions, and unified schema standards reduce architectural debt and improve system maintainability. ### **Better System Understanding**[​](#better-system-understanding "Direct link to better-system-understanding") Teams can see the complete communication flow: how a REST API call triggers events, which services consume those events, and how data flows through your architecture. ### **Reduced Documentation Overhead**[​](#reduced-documentation-overhead "Direct link to reduced-documentation-overhead") Instead of maintaining separate documentation systems, teams can generate comprehensive API docs directly from their specification files, keeping documentation in sync with code. ## Getting started: From specifications to documentation[​](#getting-started-from-specifications-to-documentation "Direct link to Getting started: From specifications to documentation") ### 1. **Prepare Your Specification Files**[​](#1-prepare-your-specification-files "Direct link to 1-prepare-your-specification-files") Ensure your OpenAPI and AsyncAPI files include the EventCatalog extensions for better message classification and ownership. ### 2. **Configure the Generators**[​](#2-configure-the-generators "Direct link to 2-configure-the-generators") Add both generators to your EventCatalog configuration, pointing to your local files or remote URLs. ### 3. **Run the Generation**[​](#3-run-the-generation "Direct link to 3-run-the-generation") Execute `npx eventcatalog generate` to automatically populate your catalog with both sync and async APIs. ### 4. **Enhance with Context**[​](#4-enhance-with-context "Direct link to 4-enhance-with-context") Add custom markdown, diagrams, and business context to your generated documentation. EventCatalog preserves your additions across regenerations. Ready to get started? You can try both generators with a 14-day free trial. Visit [EventCatalog Cloud](https://eventcatalog.cloud) to get your license key and start documenting your APIs today. ## Key features that drive adoption[​](#key-features-that-drive-adoption "Direct link to Key features that drive adoption") ### **Flexible URL Support**[​](#flexible-url-support "Direct link to flexible-url-support") Both generators can pull specification files from local filesystem or remote URLs, integrating seamlessly with your CI/CD pipeline. ### **Custom Extensions**[​](#custom-extensions "Direct link to custom-extensions") EventCatalog-specific extensions let you define message ownership, versioning, and relationships beyond what standard specifications support. ### **Persistent Documentation**[​](#persistent-documentation "Direct link to persistent-documentation") Your custom markdown and business context persists across generator runs, so you never lose the valuable context you've added. ### **Interactive Visualizations**[​](#interactive-visualizations "Direct link to interactive-visualizations") Explore your API landscape through interactive diagrams that show relationships, dependencies, and data flow. ## The future of API documentation is unified[​](#the-future-of-api-documentation-is-unified "Direct link to The future of API documentation is unified") The days of maintaining separate documentation for REST APIs and event-driven architectures are ending. Companies that adopt unified API documentation gain significant advantages in developer productivity, system governance, and architectural understanding. EventCatalog's OpenAPI and AsyncAPI generators provide the foundation for this unified approach, helping teams bridge the gap between synchronous and asynchronous communication patterns. Whether you're building microservices, implementing event-driven architectures, or managing hybrid systems, unified API documentation isn't just a nice-to-have—it's becoming a competitive necessity. If you have any questions or want to join our community of over 1,200 people exploring EventCatalog and event-driven architecture, [feel free to join us on Discord](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAPI](/blog/tags/open-api.md) * [AsyncAPI](/blog/tags/async-api.md) * [API Documentation](/blog/tags/api-documentation.md) * [Event-Driven Architecture](/blog/tags/event-driven-architecture.md) --- ## [Integrate Azure Schema Registry with EventCatalog](/blog/azure-schema-registry-eventcatalog.md) November 4, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [YouTube video player](https://www.youtube.com/embed/rNDa2JDyr_A?si=uFAbZbAiAxiy9dqJ) I'm happy to announce the release of the [EventCatalog Azure Schema Registry plugin](/docs/plugins/azure-schema-registry/intro.md). This plugin allows you to import schemas from Azure Schema Registry into EventCatalog and keep them in sync alongside your documentation. Importing your schemas into EventCatalog gives you the ability to: * Add more value to your schemas with business context and ownership * Bring discoverability to your schemas with the [EventCatalog Schema Explorer](/docs/development/guides/schemas/schema-explorer.md) * Assign ownership (users and teams) to your schemas * Visualize the bigger picture with the [EventCatalog Visualizer](/features/visualization.md) * Getting access to your schemas with the [EventCatalog Schema API](/docs/development/guides/schemas/schema-api.md) for your LLMs or testing * Connect your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) to get schemas for your LLMs * And more... In this blog post I'll walk you through the features of the plugin and how to get started. *** ### What is Azure Schema Registry?[​](#what-is-azure-schema-registry "Direct link to What is Azure Schema Registry?") [Azure Schema Registry](https://learn.microsoft.com/en-us/azure/event-hubs/schema-registry-overview) is a feature of Azure Event Hubs that provides a centralized repository for managing schemas in event-driven and message-based architectures. For architects building on Azure, Schema Registry offers a managed solution for schema validation, versioning, and governance. ### Why integrate Azure Schema Registry with EventCatalog?[​](#why-integrate-azure-schema-registry-with-eventcatalog "Direct link to Why integrate Azure Schema Registry with EventCatalog?") EventCatalog helps organizations understand and manage their event-driven architectures by providing comprehensive documentation of domains, services, and messages. **While schema registries capture the technical contract of your events, EventCatalog preserves the crucial context often lost in traditional documentation**: ownership details, business context, schema evolution history, and visual representations of your message flows. The Azure Schema Registry plugin creates a seamless connection between your Azure Schema Registry and EventCatalog, giving you the best of both worlds. You maintain all the powerful features of Azure's schema management while enriching your developer experience with EventCatalog's visualization capabilities, detailed documentation, governance tools, and enhanced discoverability. This integration helps teams not just track what schemas exist, but understand how they fit into the broader architectural landscape and how they've evolved over time. ### How the plugin works[​](#how-the-plugin-works "Direct link to How the plugin works") [The Azure Schema Registry plugin](/docs/plugins/azure-schema-registry/intro.md) maps your schemas into logical services and domains within your organization. Teams can configure which schemas each service produces or consumes, creating clear boundaries and relationships in your architecture. When Azure schemas are imported into EventCatalog, they become more than just technical contracts - they gain rich contextual information that helps teams understand their broader impact. This includes crucial details like schema ownership, business context, and the producer-consumer relationships between services. Any markdown and documentation added to your messages are persisted between versions, so you can add more value to your schemas and keep your documentation up-to-date. ### Getting started[​](#getting-started "Direct link to Getting started") To get started with the Azure Schema Registry integration, you'll need: * An Azure Event Hubs namespace with Schema Registry enabled * Schemas registered in your Azure Schema Registry * An EventCatalog license key for Azure Schema Registry integration ([14-day free trial](https://eventcatalog.cloud)) The setup takes just a few minutes. [Read the installation guide](/docs/plugins/azure-schema-registry/installation.md) to configure your integration, or explore the [example project](https://github.com/event-catalog/generators/tree/main/examples/generator-azure-schema-registry) to see it in action. ### Summary[​](#summary "Direct link to Summary") Azure Schema Registry is a powerful tool for managing schemas in event-driven architectures on Azure. We created our [Azure Schema Registry integration](https://github.com/event-catalog/generators) to help you unlock more value from your schema registries. The Azure Schema Registry plugin allows you to map your schemas to services and domains within your organization, helping your team understand how schemas are produced and consumed across your architecture. EventCatalog syncs with your schema registry and persists any additional contextual information you add, including documentation, ownership, and relationships. This context carries forward as your schemas evolve, creating a living history of your event-driven architecture. Using the Schema Explorer you can quickly find schemas in your architecture, and understand the history of your schemas, or connect your schemas to your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md). Getting started should take just a few minutes and [you can read our guide here](/docs/plugins/azure-schema-registry/intro.md). If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Azure](/blog/tags/azure.md) * [Schema Registry](/blog/tags/schema-registry.md) * [Event Hubs](/blog/tags/event-hubs.md) --- ## [Trace every field across your schemas and architecture](/blog/schema-fields-explorer.md) March 23, 2026 · 8 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **EventCatalog now indexes every field from every message schema in your architecture and makes them searchable, traceable, and verifiable, all from a single page.** This is Schema Insights, available now at `/schemas/fields` in EventCatalog. [YouTube video player](https://www.youtube.com/embed/PQIBATgtuKs?si=TagMKL49ZD_G_HYE) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Schema](/blog/tags/schema.md) * [Field Intelligence](/blog/tags/field-intelligence.md) * [Events](/blog/tags/events.md) * [Services](/blog/tags/services.md) * [Scale](/blog/tags/scale.md) [**Read more**](/blog/schema-fields-explorer.md) --- ## [Document examples with your schemas](/blog/message-usage-examples.md) March 11, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog A schema tells you the **shape** of a message. An example shows you **how** it can be used. **Schemas are necessary. Examples are what people actually reach for** when they're writing a consumer, debugging a failed event, or onboarding to a service they've never touched. EventCatalog now supports the ability to add any amount of examples with your schemas, helping your teams understand exactly how your messages are used in your architecture. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Messages](/blog/tags/messages.md) * [Schema Explorer](/blog/tags/schema-explorer.md) * [Examples](/blog/tags/examples.md) [**Read more**](/blog/message-usage-examples.md) --- ## [EventCatalog 2.64.0 - Schemas!](/blog/schema-features.md) October 31, 2025 · 10 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog ![EventCatalog Schema Explorer](/img/blogs/schemas.png) Schemas are at the heart of any message based architecture. Popular message formats include JSON, Avro, Protobuf and using specifications like OpenAPI, AsyncAPI and GraphQL to document these for services. Since the start, EventCatalog focused on being technology agnostic. This has allowed developers to document any message, service or schema format. Architects and developers either use EventCatalog as the source of truth for their schemas, or have [EventCatalog fetch and sync schemas from any schema registry or external repository using EventCatalog plugins](/docs/plugins/intro.md). EventCatalog is flexible and works with many different schema workflows. Although we already support schema documentation, some of our users told us that finding schemas was still hard, and can be time consuming for their teams. So today, I’m happy to share a few new features that can help: * [Schema Explorer](#what-is-the-schema-explorer) * [Schema API Access](#schema-api-access) * [Schemas.txt for LLMs](#schemas-txt-for-llms) * [Schema tools for EventCatalog MCP](#schema-tools-for-eventcatalog-mcp) ## What is the Schema Explorer[​](#what-is-the-schema-explorer "Direct link to What is the Schema Explorer") We are excited to share the new [EventCatalog Schema Explorer](/docs/development/guides/schemas/schema-explorer.md). The schema explorer is designed to save your team time when trying to find and understand schemas in your architecture. ![EventCatalog Schema Explorer](/img/blogs/schemas/schema-explorer.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) Using the schema explorer users can use filters to find the schemas they need, understand the producers/consumers of the schemas, see how a schema has evolved over time and much more… To get started you can read more about the [schema explorer in our documentation](/docs/development/guides/schemas/schema-explorer.md). ### Schema Panel[​](#schema-panel "Direct link to Schema Panel") This section on the schema explorer will show you information for each schema, who owns the schema (user or teams) and who is producing and consuming that schema. This can be useful information if you want to make changes to a schema or contact the team that owns the schema. ![EventCatalog Schema Evolution](/img/blogs/schemas/schema-panel.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) ### Schema Evolution[​](#schema-evolution "Direct link to Schema Evolution") Schemas evolve over time, and EventCatalog lets you capture [versions of your messages](/docs/development/guides/messages/common/versioning.md). If your schema has previous versions EventCatalog will show you diffs between each schema version. ![EventCatalog Schema Evolution](/img/blogs/schemas/schema-diff.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) *Note: Schema diffs is a EventCatalog Scale Feature.* ### Schema Property Search[​](#schema-property-search "Direct link to Schema Property Search") JSON and Avro schemas can be rendered as searchable information. This lets your teams quickly find properties in your schemas finding the information they need. ![EventCatalog Schema Property Search](/img/blogs/schemas/schema-search.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) ## Schema API Access[​](#schema-api-access "Direct link to Schema API Access") We have introduced a Schema [API in EventCatalog](/docs/development/guides/schemas/schema-api.md) that lets you fetch any version of your schemas for your events, queries, commands and services. Your teams can use this to fetch the latest schema of messages for validation or testing. ![EventCatalog Schema API Access](/img/blogs/schemas/schema-api.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) You can read more about the [Schema API](/docs/development/guides/schemas/schema-api.md) and how to get started with our documentation guide. *Note: Schema API is a EventCatalog Scale Feature.* ## Schemas.txt for LLMS[​](#schemastxt-for-llms "Direct link to Schemas.txt for LLMS") EventCatalog already supports [llms.txt](/docs/development/developer-tools/llms.txt.md) which is an emerging standard for documentation tools providing LLMs information they need. We introduced a new idea called the [schemas.txt](/docs/development/developer-tools/schemas.txt.md). Think of this as a table of content for your LLMs to understand what schemas are in your architecture, and how the LLM will get access to them. ![EventCatalog Schemas.txt](/img/blogs/schemas/schema-txt.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/docs/llm/schemas.txt) This can be useful if you are building custom AI agents or using LLMs to ask questions about your architecture. Give this URL to your AI Agent as a tool or as a URL to fetch the schemas.txt file, and then you can ask the LLM to fetch the schemas for you. ## Schema tools for EventCatalog MCP[​](#schema-tools-for-eventcatalog-mcp "Direct link to Schema tools for EventCatalog MCP") We added two new tools to our [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md), which allows your MCP clients to query and get the schemas they need in the given context. This means your LLM can ask questions about your schemas, get schema information for your services and messages, directly in your code editor or LLMs. ![EventCatalog MCP Schema Tools](/img/blogs/schemas/mcp-example.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/docs/llm/schemas.txt) The EventCatalog MCP allows you to connect your IDE to EventCatalog and make sure your AI model has the information it needs. With the new schema tools the AI models now have access to your schemas across your organization. To get started you can read more about our [MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md). ## Summary[​](#summary "Direct link to Summary") EventCatalog 2.64.0 introduces the new Schema Explorer, Schema API, Schemas.txt for LLMs and Schema tools for EventCatalog MCP. These new features can help your teams save time when finding and understanding schemas in your architecture. To get started you can read more about the [Schema Explorer](/docs/development/guides/schemas/schema-explorer.md), [Schema API](/docs/development/guides/schemas/schema-api.md), [Schemas.txt for LLMs](/docs/development/developer-tools/schemas.txt.md) and [Schema tools for EventCatalog MCP](/docs/development/ask-your-architecture/mcp-server/introduction.md). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Schema](/blog/tags/schema.md) * [Features](/blog/tags/features.md) --- ## [Trace every field across your schemas and architecture](/blog/schema-fields-explorer.md) March 23, 2026 · 8 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **EventCatalog now indexes every field from every message schema in your architecture and makes them searchable, traceable, and verifiable, all from a single page.** This is Schema Insights, available now at `/schemas/fields` in EventCatalog. [YouTube video player](https://www.youtube.com/embed/PQIBATgtuKs?si=TagMKL49ZD_G_HYE) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Schema](/blog/tags/schema.md) * [Field Intelligence](/blog/tags/field-intelligence.md) * [Events](/blog/tags/events.md) * [Services](/blog/tags/services.md) * [Scale](/blog/tags/scale.md) [**Read more**](/blog/schema-fields-explorer.md) --- ## [Which fields are your consumers actually using?](/blog/field-usage.md) March 17, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.24.0 adds a new optional capability: **field-level usage tracking**. You can now document which specific fields each consuming service depends on, and see that information surfaced directly on the message page. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Schema](/blog/tags/schema.md) * [Field Usage](/blog/tags/field-usage.md) * [Events](/blog/tags/events.md) * [Services](/blog/tags/services.md) [**Read more**](/blog/field-usage.md) --- ## [Describe the workflow, let the agent build the flow](/blog/flow-wizard.md) March 18, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [Flows](/docs/development/guides/flows/introduction.md) are one of the most popular resources documented in EventCatalog. They let you document end-to-end business workflows in your architecture, giving you and your team the bigger picture of how everything connects together. ![EventCatalog flow visualization](/img/blogs/2.5.0/flows2.png)[Demo of a Subscription Renewed flow](https://demo.eventcatalog.dev/visualiser/flows/SubscriptionRenewed/1.0.0) Today, creating a flow means writing a YAML file by hand. We wanted to make that easier. **The new `flow-wizard` skill lets you describe your workflow in plain language, and your AI agent builds the flow for you.** **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [AI](/blog/tags/ai.md) * [Flows](/blog/tags/flows.md) * [Skills](/blog/tags/skills.md) [**Read more**](/blog/flow-wizard.md) --- ## [Click any node to explore its connections in Focus Mode](/blog/focus-mode.md) January 30, 2026 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share a feature that makes exploring complex diagrams significantly easier. **You can now click any node in the visualizer to open Focus Mode.** ![Focus Mode](/assets/images/focus-mode-c86bd24d5c3d5e6a3d16417d16c00748.gif) Focus Mode shows the clicked node in the center with all incoming connections on the left and outgoing connections on the right helping you understand how your architecture interacts. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualizer](/blog/tags/visualizer.md) * [Focus Mode](/blog/tags/focus-mode.md) [**Read more**](/blog/focus-mode.md) --- ## [Document who consumes your APIs, not just who owns them](/blog/openapi-consumer-services.md) March 25, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **Understanding who owns an API is useful. Understanding who consumes it is what makes the documentation actually actionable.** The [EventCatalog OpenAPI generator](/docs/plugins/openapi/intro.md) has always let you document the services that produce your APIs. Today it can also document the downstream services that consume them, with fine-grained control over which routes each consumer receives. [YouTube video player](https://www.youtube.com/embed/ePlCqnsRVBY) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAPI](/blog/tags/open-api.md) * [Services](/blog/tags/services.md) * [Generators](/blog/tags/generators.md) [**Read more**](/blog/openapi-consumer-services.md) --- ## [Your architecture is changing. Do you know about it?](/blog/architecture-change-detection.md) March 5, 2026 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog As event-driven architectures scale, an invisible problem emerges: who is producing what, and who is consuming it? A service starts consuming your `OrderPlaced` event. No ticket. No Slack message. No email. You find out weeks later when something breaks downstream. At scale, you need governance over these relationships. You need to know when dependencies change, who is affected, and ideally, before it reaches production. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Governance](/blog/tags/governance.md) * [Architecture](/blog/tags/architecture.md) * [Change Detection](/blog/tags/change-detection.md) [**Read more**](/blog/architecture-change-detection.md) --- ## [Introducing GraphQL integration with EventCatalog](/blog/graphql-eventcatalog.md) September 29, 2025 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share our latest integration plugin for EventCatalog: [the GraphQL plugin](/integrations/graphql.md). The [EventCatalog GraphQL plugin](/integrations/graphql.md) reads and parses your GraphQL schemas and transforms them into domains, services and messages in your catalog. With the GraphQL plugin you can transform your schemas into living documentation your teams can understand. [YouTube video player](https://www.youtube.com/embed/J352QYLWQkw?si=hwwKr-k2IENfICmR) ### How the plugin works[​](#how-the-plugin-works "Direct link to How the plugin works") EventCatalog can be powered by [generators](https://www.eventcatalog.dev/docs/plugins/generators). Generators can be used to automate the creation of your EventCatalog. The [GraphQL generator](/integrations/graphql.md) takes your GraphQL schema files and transforms them into living documentation. ![Image](/assets/images/graphql-70f78386b8150cd28b72ccbe816067ca.png) The GraphQL generator will: * ⭐️ Transform your queries, mutations and subscriptions into [commands, events and queries](/docs/messages.md) in your catalog * ⭐️ Let you map your services to [domains](/docs/domains.md) in your architecture. * ⭐️ Assign owners (your teams) to your services and messages all generated by your GraphQL schemas * ⭐️ Visualize your GraphQL queries, mutations and subscriptions as event streams in your catalog * ⭐️ Add semantic meaning to your GraphQL schemas, persist this meaning between versions * ⭐️ Automatically version your changes in EventCatalog in sync with your GraphQL schema versions * ⭐️ Ability to download your schemas and GraphQL files (also versioned) * ⭐️ Ability to draft services and operations in EventCatalog from your GraphQL schemas * ⭐️ Use [EventCatalog MCP](/docs/development/ask-your-architecture/mcp-server/introduction.md) to find information about your GraphQL schemas * ⭐️ And much more... ### Getting started[​](#getting-started "Direct link to Getting started") To get started you can [read the documentation](/docs/plugins/graphql/intro.md) or see [the example project](https://github.com/event-catalog/generators/tree/main/examples/generator-graphql). You can also start with our template if you don't have an EventCatalog project yet. ``` npx @eventcatalog/create-eventcatalog@latest my-catalog --template graphql ``` ### Summary[​](#summary "Direct link to Summary") Many folks have asked for a GraphQL integration with EventCatalog. Today we are excited to launch the [GraphQL plugin](/integrations/graphql.md) which allows you to automate your EventCatalog from your GraphQL schema files. With the GraphQL plugin you can transform your schemas into living documentation your teams can understand. We also support other integrations (e.g AsyncAPI, OpenAPI) with EventCatalog, check out our [integrations page](/integrations.md) to see all the plugins we support. If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [GraphQL](/blog/tags/graph-ql.md) --- ## [Embed IcePanel Diagrams in EventCatalog](/blog/eventcatalog-icepanel.md) January 8, 2026 · 2 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [IcePanel](https://icepanel.io/) is a powerful tool for visualizing software architecture using the [C4 model](https://c4model.com/). Now you can embed your IcePanel diagrams directly into EventCatalog, bringing your architecture documentation to life. ![Example output](/img/ice-panel.png)Embedding an IcePanel diagram in EventCatalog Introducing the new [`` component](/docs/development/components/components/embed-diagrams/icepanel.md). Embed interactive C4 diagrams into any EventCatalog page, from [domains](/docs/development/guides/domains/introduction.md) and [services](/docs/development/guides/services/introduction.md) to [messages](/docs/messages.md) and [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). ### How does it work?[​](#how-does-it-work "Direct link to How does it work?") To embed an IcePanel diagram in your documentation, use the following code: /services/OrderService/index.mdx ``` --- # service frontmatter --- ## Architecture Overview ``` You can also add a title and description: /services/OrderService/index.mdx ``` ``` ### Full-Screen Mode[​](#full-screen-mode "Direct link to Full-Screen Mode") Each embedded diagram includes a full-screen button, giving your team more space to explore complex architectures without leaving EventCatalog. ![Full-screen mode](/img/ice-panel-full-screen.png)Full-screen mode ### Getting started[​](#getting-started "Direct link to Getting started") Update your EventCatalog to the latest version: ``` npm install @eventcatalog/core@latest ``` Then start using the `` component in your documentation. ## Summary[​](#summary "Direct link to Summary") If your team uses IcePanel for C4 architecture diagrams, you can now bring those diagrams directly into EventCatalog. Check out the [documentation](/docs/development/components/icepanel.md) to get started. We'd love to hear your thoughts. Feel free to [open an issue](https://github.com/event-catalog/eventcatalog/issues/new) with any feedback. Join our community of over 1,100 members on [Discord](https://discord.com/invite/3rjaZMmrAm)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [IcePanel](/blog/tags/ice-panel.md) * [Component](/blog/tags/component.md) * [C4](/blog/tags/c-4.md) --- ## [Your catalog nodes now show what they actually are](/blog/custom-icons.md) April 15, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.28.1 adds custom icons to every resource type. Set `styles.icon` in any frontmatter and that icon appears across your entire catalog: visualiser nodes, sidebar navigation, documentation headers, and search results. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualiser](/blog/tags/visualiser.md) * [Icons](/blog/tags/icons.md) [**Read more**](/blog/custom-icons.md) --- ## [EventCatalog Slack integration](/blog/slack-integration.md) February 3, 2026 · 7 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **Your teams can now ask EventCatalog about your architecture, events, services, and schemas directly in Slack.** You know the pattern. Someone on your team needs to know which services consume the `OrderCreated` event. They check the wiki. Not there. They search Confluence. Wrong version. They ping three different people in Slack asking if anyone knows. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Slack](/blog/tags/slack.md) * [Integration](/blog/tags/integration.md) * [AI](/blog/tags/ai.md) [**Read more**](/blog/slack-integration.md) --- ## [Live data meets architecture documentation](/blog/live-data-meets-architecture-documentation.md) January 8, 2026 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce **Custom Tools** for EventCatalog Assistant, allowing you to extend the AI with your own integrations and bring real-time data directly into your architecture conversations. Your documentation is valuable, but it only tells part of the story. With custom tools, you can now ask EventCatalog questions like "Is OrderService healthy?" or "Who's on-call for PaymentService?" and get answers based on **live data** from your production systems. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [AI](/blog/tags/ai.md) * [Custom Tools](/blog/tags/custom-tools.md) * [Integrations](/blog/tags/integrations.md) [**Read more**](/blog/live-data-meets-architecture-documentation.md) --- ## [What's new in EventCatalog - January 2026](/blog/eventcatalog-january-2026.md) February 1, 2026 · 13 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the first EventCatalog update of 2026! EventCatalog turned 4 years old this month and we are excited to share what we have been working on. We launched [**EventCatalog v3**](/blog/eventcatalog-v3.md), [introduced themes and dark mode](/blog/eventcatalog-themes-dark-mode.md), added [data products as a first-class resource](/blog/data-products.md), shipped [domain-level messaging](/blog/domain-level-messages.md), and released a [built-in MCP server](/blog/built-in-mcp-server.md). Plus improvements to the visualizer, [new CLI capabilities](/blog/eventcatalog-cli.md), and [diagram resources](/blog/2026/01/09/diagrams-as-first-class-resources.md). In this post, we will get you up to speed on what shipped, and how to get started. * [EventCatalog v3](#eventcatalog-v3) * Our next generation of EventCatalog * [Themes and Dark Mode](#themes-and-dark-mode) * Customize your catalog with built-in themes and dark mode * [Custom Tools for EventCatalog Assistant](#custom-tools-for-eventcatalog-assistant) * Bring your own models and tools to your documentation * [Embed IcePanel Diagrams](#embed-icepanel-diagrams) * Visualize your architecture with IcePanel diagrams * [Diagrams as First-Class Resources](#diagrams-as-first-class-resources) * Bring your own diagrams to your documentation * [Domain-Level Messages](#domain-level-messages) * Document messaging at the domain level * [Built-In MCP Server](#built-in-mcp-server) * Query your architecture with MCP * [Data Products](#data-products) * Document data products as a first-class resource * [EventCatalog CLI](#eventcatalog-cli) * Manage your catalog with the CLI * [Visualizer Improvements](#visualizer-improvements) * Improve the visualizer with layout persistence and focus mode *** ## EventCatalog v3[​](#eventcatalog-v3 "Direct link to EventCatalog v3") After 18 months of v2, we released [EventCatalog v3](/blog/eventcatalog-v3.md). The community has grown to over 1,200 members on [Discord](https://eventcatalog.dev/discord). We've shipped more than 70 releases and added features teams asked for. **v3 refines EventCatalog for larger catalogs and more complex architectures.** ### New context-aware navigation[​](#new-context-aware-navigation "Direct link to New context-aware navigation") The biggest change is the navigation system. The sidebar now adapts based on what you're viewing, showing relevant information and supporting drilldown exploration through domains, services, and messages. This can help your team find what they need faster. You can customize the sidebar to exactly how you want it, and also favorite resources to quickly access them. ![EventCatalog Sidebar](/img/blogs/3.0.0/docs-sidebar.png)[View the demo](https://demo.eventcatalog.dev) ### Performance improvements[​](#performance-improvements "Direct link to Performance improvements") We have made some performance improvements to EventCatalog, making it faster and more responsive. **Results:** Faster page loads, instant search without build steps, and 100/100 Lighthouse scores on the demo catalog. ### Simplified AI with EventCatalog Assistant[​](#simplified-ai-with-eventcatalog-assistant "Direct link to Simplified AI with EventCatalog Assistant") We have simplified the way AI can be integrated into your documentation which allows you to bring your own models and tools to your documentation. ![EventCatalog Assistant](/img/blogs/3.0.0/ai.png)[View the documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md) The new EventCatalog Assistant is simpler and more powerful. Bring any AI model you want (OpenAI, Anthropic, local models). Use custom tools for your integrations. One config file for AI settings. Context-aware conversations with your resources. Every resource type has it's own question set when you load it into your assistant. Viewing an OpenAPI schema will give you questions about the schema, and you can also ask about the schema in natural language. If you are looking at your visualizations of your architecture you can ask questions about the nodes and how systems are connected. To get started, you can follow the [EventCatalog Assistant setup guide](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md). ### Store business workflows with services and domains[​](#store-business-workflows-with-services-and-domains "Direct link to Store business workflows with services and domains") A highly requested feature: you can now assign [flows](/docs/development/guides/flows/introduction.md) (business workflows) to services and domains. Document business workflows, user journeys, and feature flows alongside your technical architecture. ``` --- id: Orders flows: - id: checkout-flow - id: refund-flow --- ``` Read the [v3 upgrade guide](/docs/development/upgrading/v3.md) for full details on changes and migration steps. *** ## Themes and Dark Mode[​](#themes-and-dark-mode "Direct link to Themes and Dark Mode") EventCatalog now supports [themes and dark mode](/blog/eventcatalog-themes-dark-mode.md). ![EventCatalog Dark Mode](/img/blogs/dark-theme.png)[View the demo](https://demo.eventcatalog.dev) Dark mode automatically detects system preferences. Users can manually switch themes using the header toggle. Their choice persists across visits and syncs across tabs. EventCatalog ships with five built-in themes: `default` (purple), `ocean` (teal), `sapphire` (blue), `sunset` (orange), and `forest` (dark green). For complete brand control, create custom themes using CSS variables in `eventcatalog.styles.css`. Custom themes are available on Starter, Scale, and Enterprise plans. ``` export default { theme: 'sapphire', }; ``` Read the [themes documentation](/docs/development/customization/themes.md) for CSS variable references and examples. *** ## Custom Tools for EventCatalog Assistant[​](#custom-tools-for-eventcatalog-assistant "Direct link to Custom Tools for EventCatalog Assistant") [Custom tools](/blog/live-data-meets-architecture-documentation.md) let you extend EventCatalog Assistant with your own integrations. ![EventCatalog Assistant Tool 1](/img/ai-assistant-tool-1.png)Calling custom tool to ask who is on call for a service Your documentation is valuable, but it only tells part of the story. With custom tools, you can ask EventCatalog "Is OrderService healthy?" or "Who's on-call for PaymentService?" and get answers based on live data from your production systems. Connect to any system you use: Datadog or Prometheus for metrics, PagerDuty or OpsGenie for on-call schedules, Kafka or RabbitMQ for queue depths. Your stack, your integrations, your data. ``` import { tool } from 'ai'; import { z } from 'zod'; export const tools = { getServiceHealth: tool({ description: 'Get the current health status of a service.', inputSchema: z.object({ serviceName: z.string(), }), execute: async ({ serviceName }) => { const health = await datadogClient.getServiceHealth(serviceName); return { status: health.status, uptime: health.uptime }; }, }), }; ``` Custom tools are available on Scale and Enterprise plans. Read the [documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/bring-your-own-tools.md) for setup and examples. *** ## Embed IcePanel Diagrams[​](#embed-icepanel-diagrams "Direct link to Embed IcePanel Diagrams") [IcePanel](https://icepanel.io/) is a tool for visualizing software architecture using the C4 model. You can now [embed IcePanel diagrams](/blog/eventcatalog-icepanel.md) directly into EventCatalog. ![Example output](/img/ice-panel.png)Embedding an IcePanel diagram in EventCatalog Use the new `` component to embed interactive C4 diagrams into any page: domains, services, messages, or custom documentation. ``` ``` Each embedded diagram includes a full-screen button for exploring complex architectures without leaving EventCatalog. *** ## Diagrams as First-Class Resources[​](#diagrams-as-first-class-resources "Direct link to Diagrams as First-Class Resources") EventCatalog 3.3.0 lets you bring custom diagrams to your documentation as [first-class, versioned resources](/blog/2026/01/09/diagrams-as-first-class-resources.md). ![Diagram page](/img/diagrams.png)Example of PlantUML diagram Your custom diagrams are now standalone resources with their own dedicated pages. Version them, link them to domains and services, and ask AI about them. **Features:** * **Versioning**: Track how your architecture evolves over time * **Version comparison**: See what changed between versions (Scale) * **Cross-references**: Link diagrams to domains, services, messages, and containers * **LLM support**: Every diagram is accessible via `.mdx` endpoints for AI tools * **Interactive controls**: Zoom, pan, and copy diagram code for better exploration Create diagrams anywhere in your catalog. Put them at the root level for system-wide diagrams or nest them within domains and services. ``` # Root level /diagrams/target-architecture/index.mdx # Nested within a domain /domains/Orders/diagrams/order-flow/index.mdx ``` Use code blocks for Mermaid or PlantUML, or use EventCatalog's built-in components like ``, ``, or ``. Read the [diagrams documentation](/docs/development/guides/diagrams/introduction.md) for more details. *** ## Domain-Level Messages[​](#domain-level-messages "Direct link to Domain-Level Messages") Domains in EventCatalog 3.7.0 can now [directly specify which messages they send and receive](/blog/domain-level-messages.md). If you practice Domain-Driven Design or think about messaging at the domain level, this update makes EventCatalog work the way you think. ``` --- id: E-Commerce version: 1.0.0 sends: - id: OrderCreated version: 1.0.0 - id: PaymentComplete receives: - id: PaymentInitiated - id: FraudDetected --- ``` Domain messages appear in the sidebar under "Publishes Messages" and "Consumes Messages". You can mix approaches. Some domains use `sends` and `receives`. Some only have services that send and receive. Both work. The [EventCatalog SDK](/docs/sdk.md) supports domain-level messages with `addEventToDomain()`, `addCommandToDomain()`, and `addQueryToDomain()`. Read the [adding messages to domains guide](/docs/development/guides/domains/creating-domains/adding-messages-to-domains.md) for setup instructions. *** ## Built-In MCP Server[​](#built-in-mcp-server "Direct link to Built-In MCP Server") Every EventCatalog instance now includes a [built-in MCP server](/blog/built-in-mcp-server.md) at `/docs/mcp/`. The MCP server gives LLMs and MCP clients ([Claude Desktop](https://www.anthropic.com/news/claude-desktop), [Cursor](https://www.cursor.com/), [Windsurf](https://windsurf.dev/), [VS Code](https://code.visualstudio.com)) direct access to your architecture documentation. Ask questions about message schemas, trace service dependencies, or analyze change impact. The AI works with the same source of truth your team uses. **Example questions:** * "What's the blast radius if I change the OrderCreated event?" * "Which services does the Payment team own?" * "Show me the schema for UserRegistered" * "Explain the checkout business flow" The MCP server includes 15 tools for querying your architecture and 9 resources for bulk data access. It requires SSR mode and a Scale license. Read the [MCP server documentation](/docs/development/ask-your-architecture/mcp-server/introduction.md) for setup and API reference. *** ## Data Products[​](#data-products "Direct link to Data Products") EventCatalog 3.8.0 introduces [data products](/blog/data-products.md) as a first-class resource type. ![Example](/assets/images/data-products-633020b2b8e252de9406a55aa9adc873.png) Data products transform raw events into analytics-ready tables. If your organization is building a data mesh or turning events into business metrics, you can now document those data products alongside your events, services, and domains. **Features:** * **Inputs and Outputs**: Document what goes into a data product and what comes out * **Contracts**: Attach data contracts (JSON Schema, ODCS YAML) to outputs * **Versioning**: Track how data products evolve over time * **Ownership**: Assign teams and users as owners * **Relationships**: Connect to services, containers, and events ``` import { writeDataProduct } from '@eventcatalog/sdk'; await writeDataProduct({ id: 'order-analytics', name: 'Order Analytics', version: '1.0.0', inputs: [ { id: 'OrderConfirmed' }, { id: 'PaymentProcessed' } ], outputs: [ { id: 'orders-db', contract: { path: 'fact-orders-contract.json', type: 'json-schema' } } ], }); ``` Data products integrate with all existing EventCatalog features: domains, sidebar navigation, discover page, node graphs, AI chat, MCP server, and schema explorer. Data products are in beta. Read the [data products documentation](/docs/data-products.md) and share feedback on [Discord](https://discord.gg/eventcatalog). *** ## EventCatalog CLI[​](#eventcatalog-cli "Direct link to EventCatalog CLI") The `@eventcatalog/sdk` package now includes a [command-line interface](/blog/eventcatalog-cli.md). Every SDK operation works directly from the command line. ``` # Get an event npx @eventcatalog/sdk --dir ./catalog getEvent "OrderCreated" # Get all events npx @eventcatalog/sdk --dir ./catalog getEvents # Create a new event npx @eventcatalog/sdk --dir ./catalog writeEvent '{ "id":"OrderCreated", "version":"1.0.0", "markdown":"# Order Created" }' ``` All output is JSON. Pipe it to `jq`, store it in environment variables, or use it in CI/CD pipelines. **Use cases:** * **CI/CD integration**: Validate events in your message broker match your catalog * **Automation scripts**: Bulk update services or domains with bash scripts * **External system integration**: Create draft events from monitoring tool webhooks * **DevOps workflows**: Manage your catalog like infrastructure-as-code Run `npx @eventcatalog/sdk list` to see all available functions. Read the [CLI documentation](/docs/cli.md) for detailed examples and API references. *** ## Visualizer Improvements[​](#visualizer-improvements "Direct link to Visualizer Improvements") ### Layout Persistence[​](#layout-persistence "Direct link to Layout Persistence") You can now [rearrange nodes in the visualizer and save those layouts](/blog/visualizer-layout-persistence.md) for your team. EventCatalog automatically arranges nodes when you add resources. Now you can drag nodes to custom positions, save the layout, and persist it for everyone. Layouts are saved to `_data/visualizer-layouts/` in your catalog. Commit them to git. Your team sees the same arrangement. When you add new resources, EventCatalog auto-positions them while keeping your saved positions for existing nodes. This works in dev mode. Run `npm run dev`, drag nodes, open the settings menu, and click Save Layout. ### Focus Mode[​](#focus-mode "Direct link to Focus Mode") [Focus Mode](/blog/focus-mode.md) makes exploring complex diagrams easier. Click any node in the visualizer to see its connections in isolation. ![Focus Mode](/assets/images/focus-mode-c86bd24d5c3d5e6a3d16417d16c00748.gif) Focus Mode shows the clicked node in the center with incoming connections on the left and outgoing connections on the right. Click any connected node to navigate through your architecture's relationships. This works across all visualizer types: services, domains, flows, entity maps, and designs. Read the [visualizer documentation](/docs/development/components/components/nodegraph.md) for more details. *** ## Summary[​](#summary "Direct link to Summary") January 2026 was a milestone month for EventCatalog. The v3 release brings improved navigation, better performance, and a simpler AI experience. New features like data products, domain-level messaging, and diagram resources expand what you can document. Visualizer improvements with layout persistence and focus mode give you more control over how your architecture is presented. The built-in MCP server and CLI open up new integration possibilities. The project vision remains the same: bring discoverability to event-driven architectures and save teams time. EventCatalog continues to evolve based on community feedback and real-world usage patterns. If you like EventCatalog, [give us a star on GitHub](https://github.com/event-catalog/eventcatalog). Join our [Discord community](https://eventcatalog.dev/discord) of over 1,200 members to share feedback and connect with other users. Thank you for being part of this journey. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [January](/blog/tags/january.md) --- ## [Whats new in EventCatalog - July 2025](/blog/eventcatalog-july-2025.md) July 31, 2025 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog, here you can find what's next, how to get started, and what's coming next. * [EventCatalog Linter](#eventcatalog-linter) * [New Entity Resource and Entity Map](#new-entity-resource-and-entity-map) * [Fetching Schemas at Runtime](#fetching-schemas-at-runtime) * [Better Search Capabilities (Search v2)](#better-search-capabilities-search-v2) * [Customize Your Documentation Pages (Detail Panel)](#customize-your-documentation-pages-detail-panel) * [Updated Ubiquitous Language Explorer](#updated-ubiquitous-language-explorer) * [AsyncAPI and OpenAPI Generator Enhancements](#asyncapi-and-openapi-generator-enhancements) * [Other project improvements](#other-project-improvements) ## EventCatalog Linter[​](#eventcatalog-linter "Direct link to EventCatalog Linter") We're excited to introduce the [**EventCatalog Linter**](/blog/eventcatalog-linter.md) — a powerful tool to help you maintain consistency and quality across your architecture documentation. The linter helps catch common issues, enforces best practices, and ensures your EventCatalog stays well-organized as it grows. The linter can be integrated into your CI/CD pipelines to catch issues early and maintain documentation standards across your team. ``` $ npx @eventcatalog/linter services/user-service/index.mdx ✖ error version: Invalid semantic version format [version] (schema/valid-semver) ⚠ warning Summary is required for better documentation [summary] (best-practices/summary-required) ✖ 2 problems domains/sales/index.mdx ✖ error Referenced service "order-service" does not exist [services] (refs/resource-exists) ✖ 1 problem ✖ 3 problems (2 errors, 1 warning) 2 files checked ``` To get started with the EventCatalog Linter, you can read our [quick guide in our documentation here](/docs/development/developer-tools/eventcatalog-linter.md). ## New Entity Resource and Entity Map[​](#new-entity-resource-and-entity-map "Direct link to New Entity Resource and Entity Map") We've introduced [**Entity Resources**](/docs/development/guides/domains/entities/introduction.md) and the new [**EntityMap**](/docs/development/components/components/03a-entitymap.md) component to help you document and visualize your domain entities and their relationships. This new feature allows you to: * Document your domain entities with rich metadata * Visualize entity relationships across your architecture * Track how entities flow through your systems * Better understand your domain model ![EventCatalog Entity Map](/img/entity-map.png)[See Demo](https://demo.eventcatalog.dev/domains/orders-domain/1.0.0/entities) The Entity Map provides a visual representation of your domain entities and their relationships, making it easier to understand your domain model at a glance. Using the EntityMap component you can embed the entity map into your documentation pages and pick and choose which entities to display. ## Fetching Schemas at Runtime[​](#fetching-schemas-at-runtime "Direct link to Fetching Schemas at Runtime")
EventCatalog now supports **fetching schemas at runtime** with the new [**Remote Schemas**](/blog/remote-schema-component.md) component, allowing you to dynamically load and display schema information without needing to rebuild your catalog. This feature is particularly useful for: * Large organizations with frequently changing schemas * Dynamic schema registries * Keeping documentation in sync with live systems This capability ensures your documentation stays up-to-date with the latest schema changes without manual intervention. You can read more about the RemoteSchema component [here](/blog/remote-schema-component.md). ## Better Search Capabilities (Search v2)[​](#better-search-capabilities-search-v2 "Direct link to Better Search Capabilities (Search v2)") We've completely rebuilt our search experience with **Search v2**. The new search provides: * Faster, more accurate results * Better filtering options * Improved relevance scoring * Enhanced autocomplete * Search across all resource types including entities ![EventCatalog Search v2](/img/search-v2.png)[Try the new search](https://demo.eventcatalog.dev) The improved search makes it much easier to find the information you need across your entire EventCatalog. To get started, just update your EventCatalog with the command: ``` $ npm install @eventcatalog/core@latest ``` ## Updated Ubiquitous Language Explorer[​](#updated-ubiquitous-language-explorer "Direct link to Updated Ubiquitous Language Explorer") The **Ubiquitous Language Explorer** has been significantly improved with: * **Bigger, more prominent display** making it easier to browse your domain language * **Subdomain language integration** — terms from subdomains now appear in their parent domains * **Better organization** of domain-specific terminology * **Enhanced navigation** through your ubiquitous language ![Updated Ubiquitous Language Explorer](/img/ubiquitous-language-v2.png)[Explore the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/languagedomains) This makes it much easier for teams to discover and understand the shared language across domains and subdomains. ## AsyncAPI and OpenAPI Generator Enhancements[​](#asyncapi-and-openapi-generator-enhancements "Direct link to AsyncAPI and OpenAPI Generator Enhancements") Our [**AsyncAPI**](/integrations/asyncapi.md) and [**OpenAPI**](/integrations/openapi.md) generators have received significant updates: ### Draft Support for life cycle management[​](#draft-support-for-life-cycle-management "Direct link to Draft Support for life cycle management") You can now **mark resources as draft** during generation, allowing you to: * Tell your team that a message or endpoint is still in development * Iterate on designs without affecting live documentation * Maintain work-in-progress resources separately You can read more about the draft support [here](/docs/plugins/openapi/features.md#creating-draft-domains-services-and-messages). ### Markdown Templates[​](#markdown-templates "Direct link to Markdown Templates") The generators now support **custom markdown templates**, giving you: * Full control over generated documentation format * Ability to match your organization's documentation standards * Flexible content generation based on your needs These enhancements make the generators much more flexible and suitable for enterprise workflows. ### Other project improvements[​](#other-project-improvements "Direct link to Other project improvements") * Improved performance for large catalogs * Updated Astro Versions * New EventCatalog SDK version to support Entities ## What's coming in August?[​](#whats-coming-in-august "Direct link to What's coming in August?") In August, we are focused on [EventCatalog Studio](https://eventcatalog.studio/). We are working on a visual interface for managing your EventCatalog, making it even easier for non-technical team members to contribute to your documentation. You can sign up for the early access release [here](https://eventcatalog.studio). We are also working on **notifications**. These will be webhook notifications you can setup and listen to when things in your catalog change. Examples of these are schema changes, breaks, new versions, etc. Usecase's include: * Teams getting notified when a new version of a schema is published * Trigger contract tests or infustructure when schemas change * Provision new infrastructure when a new version of a service is published * Trigger a build when a new version of a service is published If you have any questions or want to join our community of over 1200 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [July](/blog/tags/july.md) --- ## [Whats new in EventCatalog - June 2025](/blog/eventcatalog-june-2025.md) June 30, 2025 · 8 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog, here you can find what’s next, how to get started, and what’s coming next. * [Authentication and Role Based Access Control](#authentication-and-role-based-access-control) * [Domain Integration Map](#domain-integration-map) * [EventCatalog GitHub Action](#eventcatalog-github-action) * [EventCatalog MCP 1.0 release](#eventcatalog-mcp-10-release) * [EventCatalog Snippets](#introducing-eventcatalog-snippets) * [PlantUML Support](#plantuml-support) * [AWS Glue Schema Registry integration](#aws-glue-schema-registry-integration) * [Other project improvements](#other-project-improvements) ## Authentication and Role Based Access Control[​](#authentication-and-role-based-access-control "Direct link to Authentication and Role Based Access Control") We have introduced **Authentication and Role Based Access Control** to EventCatalog. This allows you to secure your EventCatalog instance and control access to your resources. [YouTube video player](https://www.youtube.com/embed/OVbXNP0Ns_U?si=TagMKL49ZD_G_HYE) EventCatalog now provides [secure authentication](/docs/development/authentication/introduction.md) to control access to your documentation. Whether you're a small team getting started or a large enterprise with complex identity requirements, EventCatalog's flexible authentication system grows with your needs. ![EventCatalog Authentication](/img/auth.png)[Get started with EventCatalog Authentication](/docs/development/authentication/introduction.md) To get started with authentication, you can read our [quick guide in our documentation here](/docs/development/authentication/introduction.md). ## Domain Integration Map[​](#domain-integration-map "Direct link to Domain Integration Map") We are excited to introduce the [Domain Integration Map](https://demo.eventcatalog.dev/visualiser/domain-integrations) — a powerful new visualizer designed to give you a clear view of how messages flow across domain boundaries in your event-driven architecture. This feature highlights all messages that are produced or consumed between domains, helping you instantly spot integration events and understand cross-domain communication at a glance. ![EventCatalog Domain Integration Map](/img/domain-integration-map.png)[View the demo](https://demo.eventcatalog.dev/visualiser/domain-integrations) If you're building systems using domain-driven design (DDD) and event-driven architecture (EDA), this should make it much easier to track message usage and reduce the time spent mapping interactions. The new page can be seen in EventCatalog at `/visualiser/domain-integrations` (see demo [here](https://demo.eventcatalog.dev/visualiser/domain-integrations)). ## EventCatalog GitHub Action[​](#eventcatalog-github-action "Direct link to EventCatalog GitHub Action") The EventCatalog GitHub action is a powerful tool that helps you catch issues early in your pull requests, ensuring your event-driven architecture stays healthy, aligned and governed. [YouTube video player](https://www.youtube.com/embed/xAQ20eAfKsI?si=VPp89tP6w05fKAit) The EventCatalog Action has the context of your EventCatalog, and can help you identify issues with producers, consumers, messages and much more. The action brings AI-powered insight into your Git workflows. It uses large language models (LLMs) to automatically review changes to your EventCatalog, helping you catch issues early—before they reach production (you can pick your model and provider). Think of it as a smart assistant for your pull requests. It doesn't just lint code—it understands the implications of your changes. You can learn more and how to get started in our release blog post [here](/blog/github-actions.md). ## EventCatalog MCP 1.0 release[​](#eventcatalog-mcp-10-release "Direct link to EventCatalog MCP 1.0 release") You can now connect any MCP Client (e.g Cursor, Claude) to your EventCatalog instance. Version 1.0 introduces new MCP tools and features, including: * Get resources (domains, services, messages, etc) * Find producers and consumers for a given message * Create flows based on your business requirements * Review schema changes * And much more. **When it comes to AI LLMs or Agents, context is key.** EventCatalog let's you document domains, models, messages, producers and consumers and much more. Using the MCP client, this context is given to your LLM's providing your models with the context they need to understand your architecture and domains. ![EventCatalog MCP](/img/mcp.png)[Get started](/docs/development/ask-your-architecture/mcp-server/introduction.md) With the EventCatalog MCP server you can give models the context they need to understand your architecture and domains. The best way to try it out is to install the MCP server and connect it to your EventCatalog instance. You can get get started with the MCP in our [documentation here](/docs/development/ask-your-architecture/mcp-server/introduction.md). ## Introducing EventCatalog Snippets[​](#introducing-eventcatalog-snippets "Direct link to Introducing EventCatalog Snippets") Keeping your documentation DRY just got easier. With [EventCatalog Snippets](/docs/development/components/snippets.md), you can now reuse markdown and variables across your EventCatalog documentation — whether it's domains, services, or events. Instead of duplicating content, simply define it once and import it wherever you need it. This is perfect for maintaining consistent, centralized information across your docs. And with variable support, you can easily customize shared content without repetition. To get started with snippets, you can read our [quick guide in our documentation here](/docs/development/components/snippets.md). ## PlantUML Support[​](#plantuml-support "Direct link to PlantUML Support") We have added support for PlantUML to EventCatalog. This allows you to create diagrams and visualizations of your architecture using PlantUML. The new `plantuml` code block allows you to define PlantUML diagrams in your documentation. ```` ```plantuml @startuml !define Table(name,desc) class name as "desc" << (T,#E5E7EB) >> !define PK(x) x !define FK(x) x ' ===== Core Tables ===== Table(Customers, "Customers") { PK(customerId): UUID firstName: VARCHAR lastName: VARCHAR email: VARCHAR phone: VARCHAR dateRegistered: TIMESTAMP } Table(Orders, "Orders") { PK(orderId): UUID FK(customerId): UUID orderDate: TIMESTAMP status: VARCHAR totalAmount: DECIMAL } Table(Products, "Products") { PK(productId): UUID name: VARCHAR description: TEXT price: DECIMAL stockQuantity: INT } Table(OrderItems, "Order Items") { PK(id): UUID FK(orderId): UUID FK(productId): UUID quantity: INT unitPrice: DECIMAL } Table(Payments, "Payments") { PK(paymentId): UUID FK(orderId): UUID amount: DECIMAL method: VARCHAR status: VARCHAR paidAt: TIMESTAMP } Table(InventoryEvents, "Inventory Events") { PK(eventId): UUID FK(productId): UUID eventType: VARCHAR quantityChange: INT eventTime: TIMESTAMP } Table(Subscription, "Subscriptions") { PK(subscriptionId): UUID FK(customerId): UUID plan: VARCHAR status: VARCHAR startDate: TIMESTAMP endDate: TIMESTAMP } ' ===== Relationships ===== Customers ||--o{ Orders : places Orders ||--o{ OrderItems : contains Products ||--o{ OrderItems : includes Orders ||--o{ Payments : paid_by Products ||--o{ InventoryEvents : logs Customers ||--o{ Subscription : subscribes @enduml ```_ ```` This will render the following diagram: ![EventCatalog PlantUML](/img/plantuml.png)[View the demo](/docs/development/components/plantuml.md) Using plantuml you can now bring more diagrams and context to your documentation. You can read more about it in our [documentation here](/docs/development/components/plantuml.md) ## AWS Glue Schema Registry integration[​](#aws-glue-schema-registry-integration "Direct link to AWS Glue Schema Registry integration") [YouTube video player](https://www.youtube.com/embed/cUQDdisz1wg?si=s8ZP0JablhU87Kvd) We have added support for [AWS Glue Schema Registry](/integrations/aws-glue-registry.md) to EventCatalog. This allows you to pull and sync your schemas from AWS Glue Schema Registry into EventCatalog. Schema registries are great, but they lack meaning, context, business context, history and much more. This new integration let's you document your schemas in ways that aren't possible with a schema registry. Providing you and your teams with more information, visualizations, AI capabilities and much more. You can import all your schemas, or just the ones you want to sync and use filtering to map them to your producers and consumers. To get started with the AWS Glue Schema Registry integration, you can read our [quick guide in our documentation here](/docs/plugins/aws-glue-registry/intro.md). ### Other project improvements[​](#other-project-improvements "Direct link to Other project improvements") * [EventCatalog now supports SSR mode](/docs/development/authentication/enabling-authentication.md#enable-eventcatalog-server-side-rendering-ssr) * [Configure EventCatalog with your environments](/docs/api/config.md#environment) * Faster build times (20%-50% reduced output size) * Ability to walk through EventCatalog Flows([see demo](https://demo.eventcatalog.dev/visualiser/flows/PaymentFlow/1.0.0)) * SchemaViewer now has search and expand features([see demo](https://demo.eventcatalog.dev/docs/events/InventoryAdjusted/1.0.1#architecture-diagram)) * All headings are now clickable and linkable * Sidebar now has better search, and collapsible buttons ## What’s coming in July?[​](#whats-coming-in-july "Direct link to What’s coming in July?") In June, we’re releasing **more integrations for EventCatalog**, including support for **Azure messaging services, Azure Schema Registry,** and **Apicurio Schema Registry**. These integrations will allow you to add semantic meaning to your schemas and keep them in sync with your documentation—making it easier for teams to find the information they need and maintain a shared understanding of your architecture. Many teams use EventCatalog as a **design > implement > document** workflow. We’re exploring ways to make drafting messages, services, and resources directly in EventCatalog easier—and we expect to release the first version of this feature in July. Lastly, we know many of you are eagerly waiting for [**EventCatalog Studio**](https://eventcatalog.studio/). We’re still hard at work on it and aim to release an initial version soon. Stay tuned! If you have any questions or want to join our community of over 1150 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [June](/blog/tags/june.md) --- ## [See your architecture clearly: Major visualizer improvements](/blog/visualizer-improvements.md) February 16, 2026 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share a major update to the EventCatalog visualizer. **The visualizer has had a complete refresh with a new layout engine, redesigned nodes, hover highlighting, and dark mode support.** Here's a breakdown of everything that's changed. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualizer](/blog/tags/visualizer.md) * [Layout](/blog/tags/layout.md) * [Dark Mode](/blog/tags/dark-mode.md) [**Read more**](/blog/visualizer-improvements.md) --- ## [Introducing the EventCatalog Linter](/blog/eventcatalog-linter.md) July 4, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce the release of the [EventCatalog Linter](/docs/development/developer-tools/eventcatalog-linter.md), a comprehensive validation tool that helps you maintain high-quality, consistent documentation for your architecture. The EventCatalog Linter validates your frontmatter schemas and resource references, catching issues early in your development process—before they impact your team or reach production. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Linter](/blog/tags/linter.md) * [Quality](/blog/tags/quality.md) * [CI/CD](/blog/tags/ci-cd.md) [**Read more**](/blog/eventcatalog-linter.md) --- ## [Bring your diagrams to EventCatalog](/blog/eventcatalog-diagrams.md) April 16, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Many teams use diagrams to capture their architecture, event modeling, and event storming sessions, often these artifacts are left in [Miro](https://miro.com/), [Lucid](https://lucid.app/), or [Draw.io](https://draw.io/) and can be difficult to find when you need them. EventCatalog now supports embedding these diagrams into your documentation, making it easier to collaborate and get more value from your diagrams. We have introduced new components which can be used in your domains, services, and messages: * [\](/docs/development/components/components/embed-diagrams/miro.md) * [\](/docs/development/components/components/embed-diagrams/lucid.md) * [\](/docs/development/components/components/embed-diagrams/drawio.md) We have also introduce a new [EventCatalog Miro Plugin](https://github.com/event-catalog/eventcatalog-miro-app?tab=readme-ov-file) which allows you to bring EventCatalog into Miro. *** ## Miro[​](#miro "Direct link to Miro") The Miro component allows you to embed Miro boards into your documentation. These boards can be embedded into your domains, services, and messages. ![EventCatalog Miro Example](/img/blogs/miro/miro-example1.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) To get started you can use the new `` component in your documentation. /events/OrderAmended/index.mdx ``` --- #event frontmatter --- ## Event storming session ``` You can also configure the Miro board to be editable, full screen, and more. To get started you can read more about the [Miro component](/docs/development/components/components/embed-diagrams/miro.md) and how to use it. ## Miro Plugin[​](#miro-plugin "Direct link to Miro Plugin") We have launched our first version of the EventCatalog Miro plugin. This plugin allows you to bring EventCatalog into Miro, making it easier to collaborate and get more value from your diagrams. ![EventCatalog Miro Example](/img/blogs/diagrams/miro-plugin.png)[Install the plugin](https://miro.com/app-install/?response_type=code\&client_id=3458764623600229458\&redirect_uri=%2Fapp-install%2Fconfirm%2F) You can import all your resources into Miro, including services, messages, and more. Then drag these resources into your diagrams. Miro Plugin - Roadmap The Miro Plugin is open source and can be found on [GitHub](https://github.com/event-catalog/eventcatalog-miro-app). The plugin is read-only for now, but we are working on adding edit capabilities soon. The plugin is still in early stages and we would love to hear your feedback. To get started you can read more about the [Miro plugin](/integrations/miro.md) and how to use it. *** ## Lucid[​](#lucid "Direct link to Lucid") The Lucid component allows you to embed Lucid diagrams into your documentation. These diagrams can be embedded into your domains, services, messages and custom documentation pages. ![EventCatalog Lucid Example](/img/blogs/diagrams/lucid-eventcatalog-embed.png)[View the demo](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) To get started you can use the new `` component in your documentation. /events/OrderAmended/index.mdx ``` --- #event frontmatter --- ## Event storming session ``` To get started you can read more about the [Lucid component](/docs/development/components/components/embed-diagrams/lucid.md) and how to use it. *** ## Draw\.io (diagrams.net)[​](#drawio-diagramsnet "Direct link to Draw.io (diagrams.net)") The `` component allows you to embed Draw\.io diagrams into your documentation. These diagrams can be embedded into your domains, services, messages and custom documentation pages. ![EventCatalog Draw.io Example](/img/blogs/diagrams/drawio-eventcatalog-embed.png)[View the demo](https://demo.eventcatalog.dev/docs/custom/guides/event-storming/01-index) To get started you can use the new `` component in your documentation. /events/OrderAmended/index.mdx ``` --- #event frontmatter --- ## Event storming session ``` To get started you can read more about the [Lucid component](/docs/development/components/components/embed-diagrams/lucid.md) and how to use it. ## Summary[​](#summary "Direct link to Summary") Miro, Lucid, and Draw\.io are all great tools for capturing and sharing diagrams. With our new embedding feature, you can now bring those diagrams directly into your EventCatalog documentation—making it easier to collaborate, share context, and get more value from your visual workflows. If you have any feedback or suggestions, please [open an issue](https://github.com/event-catalog/eventcatalog/issues/new) and we will look into it. Our community has grown to over 1,100 members and continues to expand! If you haven’t already, join us on [Discord](https://discord.com/invite/3rjaZMmrAm) and be part of the conversation. Hope you enjoy the new feature! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Miro](/blog/tags/miro.md) * [Lucid](/blog/tags/lucid.md) * [Draw.io](/blog/tags/draw-io.md) * [Component](/blog/tags/component.md) --- ## [Whats new in EventCatalog - March 2026](/blog/eventcatalog-march-2026.md) March 31, 2026 · 9 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog. March was a big month. We shipped governance capabilities, field-level intelligence, a redesigned schema explorer, a new Miro integration, AI-assisted flow creation, and upgraded the entire platform to Astro 6. * [Architecture Change Detection](#architecture-change-detection) * [Schema Insights - Trace Fields Across Your Architecture](#schema-insights---trace-fields-across-your-architecture) * [Field-Level Usage Tracking](#field-level-usage-tracking) * [Message Usage Examples](#message-usage-examples) * [Flow Wizard Skill](#flow-wizard-skill) * [OpenAPI Consumer Services](#openapi-consumer-services) * [EventCatalog Miro App v2](#eventcatalog-miro-app-v2) * [Astro 6 and Platform Upgrades](#astro-6-and-platform-upgrades) * [Other project improvements](#other-project-improvements) ## Architecture Change Detection[​](#architecture-change-detection "Direct link to Architecture Change Detection") A service starts consuming your `OrderPlaced` event. No ticket. No Slack message. No email. You find out weeks later when something breaks downstream. **Architecture Change Detection turns your catalog into an active monitoring system.** It compares your EventCatalog across git branches, detects when services start or stop producing or consuming messages, and notifies your teams automatically. You define governance rules in a `governance.yaml` file at the root of your catalog. Each rule specifies what to watch, what conditions to trigger on, and where to send notifications. This is designed for **service owners** who want to know the moment someone starts depending on their messages, **platform teams** who need to catch breaking changes before a PR merges, and **operations teams** who want an audit trail of every dependency change. We also added the `schema_changed` and `message_deprecated` governance triggers, and support for a `fail` action type so you can gate CI/CD pipelines on governance rules. You can read more about Architecture Change Detection in our [release blog post here](/blog/architecture-change-detection.md). ## Schema Insights - Trace Fields Across Your Architecture[​](#schema-insights---trace-fields-across-your-architecture "Direct link to Schema Insights - Trace Fields Across Your Architecture") As your architecture grows, schemas multiply. An `OrderPlaced` event gains fields. A `PaymentProcessed` event reuses some of those same fields. A `CustomerUpdated` command redefines one of them with a slightly different type. Nobody notices until a consumer breaks. **Schema Insights indexes every field from every message schema in your architecture and makes them searchable, traceable, and verifiable from a single page.** [YouTube video player](https://www.youtube.com/embed/PQIBATgtuKs?si=TagMKL49ZD_G_HYE) Available at `/schemas/fields` in your catalog, Schema Insights gives you: * **Field search and filtering** across every message in your architecture * **Type conflict detection** that flags when the same field name has different types across messages * **Interactive traceability graphs** showing how a field connects to messages and services * A **redesigned Schema Explorer** with a modern layout and dark mode support ![Schema Insights table view](/img/blogs/field-search.png)[Read the full release post](/blog/schema-fields-explorer.md) You can read more about Schema Insights in our [release blog post here](/blog/schema-fields-explorer.md). ## Field-Level Usage Tracking[​](#field-level-usage-tracking "Direct link to Field-Level Usage Tracking") EventCatalog already tells you which services consume a message. **Now it can also tell you which specific fields they use.** ![Field Usage view showing which fields each consumer depends on](/img/blogs/field-usage-2.png) When consumers declare which fields they depend on, the message page gains a **Field Usage** view showing every schema property alongside the services that use it. This makes it much easier to understand the blast radius of a schema change. If you're about to remove a field or change its type, you can see exactly who depends on it. Field usage is opt-in. Add a `fields` array to any entry in the `receives` pointer of a service, and EventCatalog surfaces it automatically. You can read more about field-level usage in our [release blog post here](/blog/field-usage.md). ## Message Usage Examples[​](#message-usage-examples "Direct link to Message Usage Examples") A schema tells you the **shape** of a message. An example shows you **how** it can be used. Schemas are necessary. Examples are what people actually reach for when they're writing a consumer, debugging a failed event, or onboarding to a service they've never touched. ![Message Usage Examples in Schema Explorer](/img/blogs/message-examples.png)[Start adding examples to your messages](/docs/development/guides/messages/common/examples.md) Drop JSON, YAML, XML, Protobuf, or any format your messages use alongside your schemas. EventCatalog renders them with syntax highlighting under a new **Usage Examples** tab in the Schema Explorer. Each example can carry metadata to describe the scenario it represents, a standard order, an international order, a failed payment. You can read more about message examples in our [release blog post here](/blog/message-usage-examples.md). ## Flow Wizard Skill[​](#flow-wizard-skill "Direct link to Flow Wizard Skill") [Flows](/docs/development/guides/flows/introduction.md) are one of the most popular resources documented in EventCatalog. They let you document end-to-end business workflows, giving your team the bigger picture of how everything connects. But creating them meant writing YAML by hand. ![EventCatalog flow visualization](/img/blogs/2.5.0/flows2.png)[See a flow in action](https://demo.eventcatalog.dev/visualiser/flows/SubscriptionRenewed/1.0.0) **The new `flow-wizard` skill lets you describe your workflow in plain language, and your AI agent builds the flow for you.** It scans your existing catalog resources, walks you through each stage of the workflow, and cross-references services, events, and commands you already have. Whether you're a product owner, architect, or developer, if you can describe a business workflow you can now document it. No YAML knowledge required. You can read more about the flow wizard in our [release blog post here](/blog/flow-wizard.md). ## OpenAPI Consumer Services[​](#openapi-consumer-services "Direct link to OpenAPI Consumer Services") Understanding who owns an API is useful. **Understanding who consumes it is what makes the documentation actually actionable.** [YouTube video player](https://www.youtube.com/embed/ePlCqnsRVBY) The [OpenAPI generator](/docs/plugins/openapi/intro.md) now supports a `consumers` array on each service configuration. Each entry defines a downstream service that calls endpoints produced by that API, with optional route-based filtering to scope which endpoints it cares about. ![Visualization showing consumer services for API endpoints](/img/blogs/openapi-with-producers.png) This means your architecture diagrams and documentation now show the full producer-consumer picture for your REST APIs, not just the owner. You can read more about OpenAPI consumer services in our [release blog post here](/blog/openapi-consumer-services.md). ## EventCatalog Miro App v2[​](#eventcatalog-miro-app-v2 "Direct link to EventCatalog Miro App v2") Every team has the same problem. The architecture lives in one place and the diagrams live in another. The Miro board from the last event storming session doesn't match what's actually running. **The [EventCatalog Miro App v2](/docs/miro/overview.md) turns your documentation into interactive, collaborative design artifacts, and brings your design decisions back into the catalog when you're done.** ![EventCatalog architecture on a Miro board](/img/miro/getting-started/example.png) The v1 integration embedded Miro boards into doc pages. V2 flips the direction. Your documented architecture flows into Miro, you design on top of real data, and the results flow back out. You can: * Browse, search, and drag your full catalog onto a Miro board * Drag services with their full dependency graphs * Edit resources inline and create new draft resources on the board * Navigate between connected resources with smart connectors You can read more about the Miro App in our [release blog post here](/blog/eventcatalog-miro-app.md). ## Astro 6 and Platform Upgrades[​](#astro-6-and-platform-upgrades "Direct link to Astro 6 and Platform Upgrades") We upgraded EventCatalog to **Astro 6, Zod 4, Vite 7, and Vitest 4**. This is a significant platform upgrade that improves build performance and keeps EventCatalog on the latest tooling. As part of this upgrade, we also replaced `better-sqlite3` with `sql.js` (WASM), removing the need for native binary compilation. This means fewer installation issues, especially in CI environments and Docker containers. To upgrade, run: ``` npm install @eventcatalog/core@latest ``` ### Other project improvements[​](#other-project-improvements "Direct link to Other project improvements") * Added `eventcatalog export` command for exporting your catalog programmatically * SDK now supports entities, containers, and flows in `dumpCatalog` * SDK changelog helper methods for programmatic access to changelogs * Added channels section to service sidebar * Entity map visualiser now available for services * Flows now support nested directories and work across domains/services * Added analytics integrations: GA4, GTM, and PostHog * Support for `governance.yml` in addition to `governance.yaml` * Improved generated README for new EventCatalog projects * Default template events now include usage examples * Fixed: circular refs in AsyncAPI spec rendering * Fixed: fields explorer crash with nullable JSON Schema types * Fixed: fields index build failing when catalogs have no messages * Fixed: auth behind reverse proxy (trustHost defaults to true) * Fixed: SSR compatibility for visualiser, schema/fields pages * Fixed: sidebar navigation losing sync with custom base path * Fixed: semver comparison for version sorting * Fixed: schema API returning empty response in SSR mode * Fixed: generator continues running when one generator fails ## What's coming in April?[​](#whats-coming-in-april "Direct link to What's coming in April?") If you have any questions or want to join our community exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [March](/blog/tags/march.md) --- ## [EventCatalog now includes a built-in MCP server](/blog/built-in-mcp-server.md) January 11, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share that we've improved and simplified our MCP server for EventCatalog. Previously, to use EventCatalogs MCP server you had to install and run the standalone `@eventcatalog/mcp-server` package separately, the previous MCP server would use the llms.txt file to provide context to the LLM. Although this worked, it was not the most efficient way to use EventCatalog with MCP clients... We have reviewed the MCP server and made it much more efficient and easier to use. Every EventCatalog instance now includes a built-in MCP server at `/docs/mcp/` and now uses more performant ways to provide your models with the information they need. This means you can connect your preferred MCP clients directly to your EventCatalog instance and start asking questions about your architecture in natural language. ## Why use EventCatalog's MCP server[​](#why-use-eventcatalogs-mcp-server "Direct link to Why use EventCatalog's MCP server") **EventCatalog is documentation for both humans and AI**. Your teams browse the catalog to understand [services](/docs/services.md), [events](/docs/events.md), and [domains](/docs/domains.md). Your AI tools can now do the same. The MCP server gives LLMs and MCP clients (Claude Desktop, Cursor, [Windsurf](https://codeium.com/windsurf), [VS Code](https://code.visualstudio.com)) direct access to your architecture documentation. Ask questions about message schemas, trace service dependencies, or analyze change impact. **The AI works with the same source of truth your team uses.** This is the best of both worlds. Humans get a visual catalog they can browse and search. AI gets structured access to query, filter, and reason about your architecture. Both stay in sync because they read from the same place. ## Getting started[​](#getting-started "Direct link to Getting started") To get started, you need to update your EventCatalog instance to the latest version and configure it to run in SSR mode. First you need to update your EventCatalog instance to the latest version. Updating EventCatalog ``` npm install @eventcatalog/eventcatalog@latest ``` Then you need to update your `eventcatalog.config.js` file to use SSR mode. (mcp requires SSR mode) eventcatalog.config.js ``` export default { output: 'server', // ... other config options } ``` Once EventCatalog is running you can connect your preferred MCP client to your EventCatalog instance at `/docs/mcp/`. To get started, see our [MCP server documentation](/docs/development/ask-your-architecture/mcp-server/getting-started.md). ## Example usage[​](#example-usage "Direct link to Example usage") Once connected, you can ask questions about your architecture in natural language. This can be useful for: * Finding messages for features you're building * Accessing catalog directly in code editors * Defining standards and creating schemas * Exploring OpenAPI and AsyncAPI files * Understanding service impact from changes * Discovering resource ownership Here are some examples: *** **"What's the blast radius if I change the OrderCreated event?"** > The OrderCreated event (v2.0.0) is consumed by 4 services: > > | Service | Team | Impact | > | ------------------- | -------------- | ------------------------ | > | InventoryService | Platform | Updates stock levels | > | NotificationService | Communications | Sends order confirmation | > | AnalyticsService | Data | Tracks order metrics | > | BillingService | Finance | Initiates payment flow | > > **Total blast radius: 4 services across 4 teams.** Consider coordinating with Platform and Finance teams before making breaking changes. *** **"Which services does the Payment team own?"** > The Payment team owns 3 services: > > * **PaymentGateway** (v1.2.0) - Processes credit card transactions > * **RefundService** (v1.0.0) - Handles refund requests and chargebacks > * **PaymentWebhooks** (v2.1.0) - Receives payment provider callbacks > > These services produce 5 events and consume 3 events total. *** **"Show me the schema for UserRegistered"** > Here's the UserRegistered event schema (v1.0.0): > > ``` > { > "userId": "string (UUID)", > "email": "string (email format)", > "registeredAt": "string (ISO 8601 datetime)", > "source": "enum: web | mobile | api", > "marketingConsent": "boolean" > } > ``` > > This event is produced by AuthService and consumed by NotificationService, CRMSync, and AnalyticsService. *** **"Explain the checkout business flow"** > The Checkout flow consists of 5 steps: > > 1. **Cart Validation** - CartService validates items and availability > 2. **Price Calculation** - PricingService applies discounts and taxes > 3. **Payment Processing** - PaymentGateway charges the customer > 4. **Order Creation** - OrderService creates the order record > 5. **Fulfillment Trigger** - Emits OrderCreated to start shipping > > Average completion time: 2.3 seconds. *** ## Tools and resources[​](#tools-and-resources "Direct link to Tools and resources") The MCP server includes 15 tools for querying your architecture and 9 resources for bulk data access. [View all tools and resources →](/docs/development/ask-your-architecture/mcp-server/getting-started.md) ## Migrating from standalone server[​](#migrating-from-standalone-server "Direct link to Migrating from standalone server") The standalone `@eventcatalog/mcp-server` package still works, but we plan to deprecate it in a future release. The built-in server is faster, uses less context, and requires no external setup. We recommend migrating to the built-in MCP server when possible. ## Summary[​](#summary "Direct link to Summary") The built-in MCP server simplifies deployment by eliminating external server management. It provides faster queries through direct content collection access and supports custom tools for domain-specific integrations. The built-in MCP server requires SSR mode and a Scale license. [Get a free trial at eventcatalog.cloud](https://eventcatalog.cloud). **Learn more:** * [MCP server documentation](/docs/development/ask-your-architecture/mcp-server/introduction.md) * [Complete API reference](/docs/development/ask-your-architecture/mcp-server/getting-started.md) **Get help:** * [Discord community](https://eventcatalog.dev/discord) * [GitHub issues](https://github.com/event-catalog/eventcatalog) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [MCP](/blog/tags/mcp.md) * [AI](/blog/tags/ai.md) * [Scale](/blog/tags/scale.md) --- ## [Document examples with your schemas](/blog/message-usage-examples.md) March 11, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog A schema tells you the **shape** of a message. An example shows you **how** it can be used. **Schemas are necessary. Examples are what people actually reach for** when they're writing a consumer, debugging a failed event, or onboarding to a service they've never touched. EventCatalog now supports the ability to add any amount of examples with your schemas, helping your teams understand exactly how your messages are used in your architecture. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Messages](/blog/tags/messages.md) * [Schema Explorer](/blog/tags/schema-explorer.md) * [Examples](/blog/tags/examples.md) [**Read more**](/blog/message-usage-examples.md) --- ## [Your documentation is a design artifact, not just a wiki page](/blog/eventcatalog-miro-app.md) March 30, 2026 · 9 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Every team I've talked to has the same problem. The architecture lives in one place and the diagrams live in another. The documentation is accurate as of six months ago. The Miro board from the last [event storming](https://eda-visuals.boyney.io/visuals/event-storming) session doesn't match what's actually running. **Today I'm releasing the [EventCatalog Miro App v2](/docs/miro/overview.md)**, a [Miro](https://miro.com) app that turns your EventCatalog documentation into interactive, collaborative design artifacts — and brings your design decisions back into the catalog when you're done. ![EventCatalog architecture on a Miro board](/img/miro/getting-started/example.png)Your real architecture, imported into Miro with relationships intact **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Miro](/blog/tags/miro.md) * [Architecture](/blog/tags/architecture.md) * [Design](/blog/tags/design.md) [**Read more**](/blog/eventcatalog-miro-app.md) --- ## [Whats new in EventCatalog - October 2025](/blog/eventcatalog-october-2025.md) November 7, 2025 · 8 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to another monthly update for EventCatalog. In this blog post I will summarise what was new to EventCatalog in October and how you can get started. *** ## EventCatalog Schema Explorer[​](#eventcatalog-schema-explorer "Direct link to EventCatalog Schema Explorer") Many teams building event-driven architectures have schema sprawl throughout their organization. Finding schemas can be hard. Most people are either directed to a schema registry (if you are lucky) or a random GitHub repo with the implementation details of the schema. We want to help people **save time** and make schemas more **discoverable** and **understandable** in organisations, not only for technical developers but for business stakeholders. This is why we built the [Schema Explorer](/docs/development/guides/schemas/schema-explorer.md). A new page to help teams save time and find the information they need. Teams can still have any schema registry as the source of truth, but with EventCatalog the schemas can be aggregated, filtered, and searchable helping teams find the information they need. ![EventCatalog Schema Explorer](/img/blogs/october-25/schema-explorer.png)[Explore the schema explorer →](https://demo.eventcatalog.dev/schemas) Using the [Schema Explorer](/docs/development/guides/schemas/schema-explorer.md) teams can quickly filter and find the schema they need (e.g JSON, Avro, Proto, OpenAPI, AsyncAPI, GraphQL), and find the producers and consumers of these schemas. Teams can also track the versions of their schemas and quickly see a version has changed over time. ![EventCatalog Schema Explorer](/img/blogs/october-25/schema-diff.png)Schema diffs between versions Using the new [Schema API](/docs/development/guides/schemas/schema-api.md), teams can also programmatically get access to their schemas to help them with any local testing or integrations they need to do. This supports any specification or schema format you are using in your organization. ![EventCatalog MCP Schema Tools](/img/blogs/october-25/schema-api.png) For folks using AI and MCP servers, we also added new tools in the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) to help you get the information you need in the context you need it. We our new schema tools you can ask questions about your schemas and fetch them in your IDE, giving your teams the context they need when they need it. Saving them time searching for the information they need. ![EventCatalog MCP Schema Tools](/img/blogs/october-25/mcp-example.png)[Learn more about the EventCatalog MCP server →](/docs/development/ask-your-architecture/mcp-server/introduction.md) If you want to get started with the Schema Explorer you can read our [documentation page](/docs/development/guides/schemas/schema-explorer.md). ## Introduced Data stores into EventCatalog[​](#introduced-data-stores-into-eventcatalog "Direct link to Introduced Data stores into EventCatalog") After speaking to users of EventCatalog, we felt one thing missing, was the ability to model and document [data stores](/docs/development/guides/data/introduction.md) (e.g databases, caches, objectStores, searchIndex etc). So this is our first iteration into data architecture, starting with the data stores (containers). Data stores are like any other resource type in EventCatalog. You define them with markdown and frontmatter. When you define your data store they are given their own page in your catalog. Like any other resource type in EventCatalog, you can visualize them, assign schemas to them, version them, and more. ![EventCatalog Data Stores](/img/blogs/october-25/data-example.png)[Explore the data store example →](https://demo.eventcatalog.dev/docs/containers/order-metadata-store/0.0.1) Using the new data store resource you can document databases, caches, object stores, search indexes, and more, assign schemas to them and create read/write relationships with your services. You can now assign your services to to data stores using the new `readsFrom` and `writesTo` properties in your services. EventCatalog will then render and visualize the relationship between your services and their data layers. ![EventCatalog Studio](/img/blogs/october-25/visual-2.png) A new version of the [EventCatalog SDK](https://www.eventcatalog.dev/docs/sdk) has been released with support for data stores, and if you want to start documenting your data stores today you can [read our data store documentation](https://www.eventcatalog.dev/docs/data). Coming soon... We also want to start looking and how we can help data architects catalog information using EventCatalog. To do this we are exploring more channel to channel patterns in EventCatalog, and data product support in EventCatalog. If this is something you would be interested, reach out to me I would love to talk to you! ## EventCatalog MCP Server improvements[​](#eventcatalog-mcp-server-improvements "Direct link to EventCatalog MCP Server improvements") The [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) has been updated with new tools to help you get the information you need in the context you need it. You can ask questions about your schemas and fetch them in your IDE, giving your teams the context they need. **EventStorming to EventCatalog** This is more of an experimental tool, that will take a picture of your event storm and automatically create an EventCatalog for you. Upload your photo to your LLM and tell it to create you an EventCatalog. [Embedded post](https://www.linkedin.com/embed/feed/update/urn:li:ugcPost:7388597362094665728?compact=1) The EventCatalog MCP server gives your teams the ability to query, and find information you need in your MCP clients (e.g Cursor, Claude Desktop), giving you even more value from your documented architecture and saving time. You can find our [MCP server on GitHub](https://github.com/event-catalog/mcp-server), or [setup our MCP server with our guides.](https://www.eventcatalog.dev/docs/development/ask-your-architecture/mcp-server/introduction) ## Import all your resources into EventCatalog Studio[​](#import-all-your-resources-into-eventcatalog-studio "Direct link to Import all your resources into EventCatalog Studio") We want to make it easier to document flows in EventCatalog. How information flows across your organization with your messages, domains and services. We introduced a new feature that let’s you import all your resources from EventCatalog straight into EventCatalog Studio. This let’s you create new designs in Studio using our drag and drop editor and import them back into your documentation page, giving you more value from your documented architecture. [Embedded post](https://www.linkedin.com/embed/feed/update/urn:li:ugcPost:7381350769196756992?collapsed=1) ## Integration updates[​](#integration-updates "Direct link to Integration updates") The OpenAPI, AsyncAPI and GraphQL plugins for EventCatalog have been updated. You can now fetch schemas giving a remote URL. This will sync your schemas with your EventCatalog documentation. We have [many integrations with specifications and schema registries](/integrations.md), to help you integration with systems you already have. You can find the list of integrations here. ## Avro Schema Viewer Support[​](#avro-schema-viewer-support "Direct link to Avro Schema Viewer Support") Our [SchemaViewer](/docs/development/components/components/schema-viewer.md) now supports avro schemas, whilst will render your avro schemas in a new UI. This gives you the ability to render and filter your avro properties in the UI. ![EventCatalog Schema Viewer](/img/blogs/october-25/schema-reviewer.png) ## Summary[​](#summary "Direct link to Summary") October was a busy month for EventCatalog, and the project continues to grow. My project vision remains the same; bring discoverability to event-driven architectures and save teams time. A few things we want to focus on next include, channel to channel support, ability for domains to send and receive messages, exploring data products and flows, and stability of the project. If you like EventCatalog, [I would love a ⭐️ on GitHub](https://github.com/event-catalog/eventcatalog), and feel free to join our [Discord Channel](https://eventcatalog.dev/discord), which now has over 1,200 members! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [October](/blog/tags/october.md) --- ## [EventCatalog now integrates with OpenAI](/blog/eventcatalog-openai.md) April 23, 2025 · 6 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog We’re excited to announce that EventCatalog now supports seamless integration with [OpenAI](https://openai.com/). This new feature allows you to harness the power of OpenAI models and embeddings directly within your catalog. With this new feature you can bring your own OpenAI keys to EventCatalog and get architecture insights in seconds using [**EventCatalog Chat**](/features/ai-assistant.md). ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-chat.png)[View the documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md) ## How does it work?[​](#how-does-it-work "Direct link to How does it work?") **EventCatalog Chat** transforms how your team interacts with your event-driven architecture. Instead of digging through documentation or tracking down who produces what, you can simply ask. Want to know what events exist, how schemas are structured, or who’s publishing and consuming them? Just chat with your catalog and get instant answers—saving you time and effort. EventCatalog Chat can also **generate code** on the fly and supports custom prompts, allowing you to define reusable queries aligned with your organization's best practices and governance standards. Whether it's architecture insights or scaffolding code, your team can move faster with AI-powered support built right into your catalog. Previously, EventCatalog Chat relied solely on browser-based models—open-source models that ran entirely within the browser environment. While this offered a lightweight and privacy-conscious option, we heard your feedback loud and clear. Now, we’re excited to introduce support for bringing your own OpenAI models to EventCatalog, unlocking even more powerful capabilities for exploring and understanding your architecture. To get started you can read the [EventCatalog Chat Guide](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md) or watch the video below. [YouTube video player](https://www.youtube.com/embed/vhjRX4yAGIk?si=MehvKkJ9hFKe7hgH) ## Bring your own prompts[​](#bring-your-own-prompts "Direct link to Bring your own prompts") We're introducing a powerful new concept in EventCatalog Chat: **Bring Your Own Prompts**. This feature allows teams and organizations to define custom prompts tailored to their own standards, best practices, and workflows. With predefined prompts, you can guide how EventCatalog Chat responds—ensuring consistency, compliance, and faster results across your team. Here are a few examples of what you can do: * "Generate a JSON schema Following FlowwMart Standards" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-an-example-schema.mdx) * "Create a Kafka producer code for event" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-producer-code-for-event.mdx) * "Create Kafka consumer code for event" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-consumer-code-for-event.mdx) * "Create AWS Lambda function to Consume EventBridge Event" [(see example)](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/chat-prompts/code/create-consumer-code-for-eventbridge-event.mdx) With BYO Prompts, your event-driven architecture just got a whole lot smarter—and more tailored to you. You can also make your prompts **dynamic**, allowing EventCatalog Chat to ask users for input before sending the prompt to your OpenAI model. For example, if you want to generate a JSON schema that follows your company’s best practices, you can first prompt the user to enter the **event name** they’re working with. This adds flexibility and interactivity to your custom prompts—making them more useful across different teams and scenarios. ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-chat-input.png)[View the prompt example](https://raw.githubusercontent.com/event-catalog/eventcatalog/refs/heads/main/examples/default/chat-prompts/code/create-an-example-schema.mdx) When the user submits the form, the AI model uses their input to generate a JSON schema—fully aligned with the standards and conventions your company defines. This ensures consistency while saving your team valuable time on repetitive tasks. ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-chat-input-output.png) Custom prompts can also capture **multiple inputs**, making them even more powerful. For instance, you can prompt users to select an **event** from a generated list based on your catalog, and choose a **programming language** from a predefined list. This gives your team a flexible and guided way to generate highly specific outputs—like language-specific producer or consumer code for a particular event. ![EventCatalog OpenAI Example](/img/blogs/openai/eventcatalog-list-of-events.png)[View the prompt example](https://raw.githubusercontent.com/event-catalog/eventcatalog/refs/heads/main/examples/default/chat-prompts/code/create-producer-code-for-event.mdx) The prompt is then sent to your OpenAI model, which generates the code based on the inputs provided. In the example above, a **TypeScript Kafka producer** is generated using the **Delivery Failed** event as the foundation—automatically tailored to your architecture and development standards. ## How to get started[​](#how-to-get-started "Direct link to How to get started") Check out our [EventCatalog Chat Guide](/docs/development/ask-your-architecture/eventcatalog-assistant/configuration.md) to get started. If you have any questions or want to connect with the community, feel free to [join us on Discord](https://eventcatalog.dev/discord). ## Whats next?[​](#whats-next "Direct link to Whats next?") We’re just getting started. Up next, we’re working on expanding model support in EventCatalog—including the ability to configure additional providers like **Anthropic**, giving you more flexibility and choice in how you power your architecture insights. We’re also building features that let you **ask questions directly within your documentation pages**, so teams can get instant, contextual answers while exploring or working on your event-driven systems—saving even more time and reducing friction. Have questions or feedback? [Join us on Discord](https://eventcatalog.dev/discord)—we’d love to hear from you. Want a tailored walkthrough? [Book a custom demo](https://calendly.com/boyneyy123/30min)—we’re happy to help! ## FAQ[​](#faq "Direct link to FAQ") ### Can I configure which OpenAI model is used?[​](#can-i-configure-which-openai-model-is-used "Direct link to Can I configure which OpenAI model is used?") Yes, you can configure which OpenAI model is used by updating the `model` property in the `eventcatalog.config.js` file. You can also configure which embedding model is used. ### Is it secure?[​](#is-it-secure "Direct link to Is it secure?") Yes, it is secure. If you want to use your own OpenAI keys you can build EventCatalog as a `server` and bring your own OpenAI keys. A new `server` output type is available in EventCatalog. This will output a `server` application that you can run locally or in a cloud provider. You can read more about hosting a `server` in the [EventCatalog documentation](/docs/development/deployment/hosting-options.md#hosting-as-a-server). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAI](/blog/tags/open-ai.md) * [AI](/blog/tags/ai.md) * [Assistant](/blog/tags/assistant.md) --- ## [Document who consumes your APIs, not just who owns them](/blog/openapi-consumer-services.md) March 25, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **Understanding who owns an API is useful. Understanding who consumes it is what makes the documentation actually actionable.** The [EventCatalog OpenAPI generator](/docs/plugins/openapi/intro.md) has always let you document the services that produce your APIs. Today it can also document the downstream services that consume them, with fine-grained control over which routes each consumer receives. [YouTube video player](https://www.youtube.com/embed/ePlCqnsRVBY) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [OpenAPI](/blog/tags/open-api.md) * [Services](/blog/tags/services.md) * [Generators](/blog/tags/generators.md) [**Read more**](/blog/openapi-consumer-services.md) --- ## [Introducing the EventCatalog Linter](/blog/eventcatalog-linter.md) July 4, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce the release of the [EventCatalog Linter](/docs/development/developer-tools/eventcatalog-linter.md), a comprehensive validation tool that helps you maintain high-quality, consistent documentation for your architecture. The EventCatalog Linter validates your frontmatter schemas and resource references, catching issues early in your development process—before they impact your team or reach production. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Linter](/blog/tags/linter.md) * [Quality](/blog/tags/quality.md) * [CI/CD](/blog/tags/ci-cd.md) [**Read more**](/blog/eventcatalog-linter.md) --- ## [Introducing query messages for EventCatalog](/blog/introducing-queries.md) October 21, 2024 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog ![](/assets/images/query-messages-9c0ffa471ee107f36d4e986fdbf4d7ff.png); **Added in** `eventcatalog@2.10.0` In many distributed architectures, domains and services communicate through different types of messages, typically categorized as events, commands, and queries. EventCatalog now includes support for documenting queries, allowing you to clearly outline which queries a service accepts and which it invokes. Queries are often seen in protocols such as HTTP and gRPC. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Queries](/blog/tags/queries.md) * [Messages](/blog/tags/messages.md) * [EDA](/blog/tags/eda.md) * [Distributed System](/blog/tags/distributed-system.md) [**Read more**](/blog/introducing-queries.md) --- ## [Introducing Remote Schemas - Fetch and Sync Schemas at Runtime](/blog/remote-schema-component.md) July 25, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that [EventCatalog 2.52.0](https://github.com/event-catalog/eventcatalog/releases) introduces a feature: the [**RemoteSchema** component](/docs/development/components/components/remote-schema.md). This new component enables you to fetch and render schemas directly from remote URLs at runtime, ensuring your documentation stays synchronized with your live systems automatically.
For companies managing complex event-driven architectures, keeping documentation in sync with rapidly evolving APIs has always been a challenge. The **RemoteSchema** component solves this by creating a direct bridge between your live API definitions and your EventCatalog documentation. ## Introducing the RemoteSchema Component[​](#introducing-the-remoteschema-component "Direct link to Introducing the RemoteSchema Component") The new `RemoteSchema` component gives you another way to add schemas into your documentation. Providing a URL to a schema will automatically fetch the schema and render it in your documentation. tip The `RemoteSchema` component only works in Server-Side Rendering (SSR) mode. Make sure your EventCatalog is configured to run in SSR mode to use this component. You can read more about how to configure your EventCatalog to run in SSR mode [here](/docs/development/deployment/build-ssr-mode.md). ### Basic Usage[​](#basic-usage "Direct link to Basic Usage") events/UserRegistered/index.mdx ``` --- id: UserRegistered name: User Registered --- The User Registered event is triggered when a new user signs up for our platform. ``` This simple addition automatically fetches and renders the latest schema from your API, ensuring the documentation always reflects the current state of your system. ### Advanced Features[​](#advanced-features "Direct link to Advanced Features") **Custom Authentication for Private APIs** For teams with private API endpoints, the component supports custom headers for authentication and environment variable mapping. EventCatalog Scale Private APIs are only available on the EventCatalog Scale plan. You can get a 14 day free trial [here](https://eventcatalog.cloud). ``` ``` **JSONPath Extraction** When working with large data sets you can extract specific schema definitions using [JSONPath](https://github.com/dchester/jsonpath). ``` ``` **Environment Variable Support** Keep sensitive information secure using environment variables: ``` ``` Loading environment variables Add your environment variables to the `.env` file in the root of your EventCatalog project. The RemoteSchema component will automatically map the environment variables to the template string. ## How can this help your team?[​](#how-can-this-help-your-team "Direct link to How can this help your team?") ### 1. **Single Source of Truth**[​](#1-single-source-of-truth "Direct link to 1-single-source-of-truth") The RemoteSchema component creates a direct connection between your live APIs and documentation. When schemas change in your API gateway, schema registry, or service endpoints, your documentation automatically reflects those changes without any manual intervention. ### 2. **Sync your schemas without manual updates**[​](#2-sync-your-schemas-without-manual-updates "Direct link to 2-sync-your-schemas-without-manual-updates") If you prefer to keep your schemas in a single source of truth, you can use the `RemoteSchema` component to fetch the schema from your API gateway, schema registry, or service endpoints. EventCatalog will automatically fetch the schema and render it in your documentation. ### 3. **Improved Developer Experience**[​](#3-improved-developer-experience "Direct link to 3-improved-developer-experience") New team members and API consumers can trust that the documentation accurately represents the current API state. This reduces confusion, speeds up onboarding, and improves overall developer productivity. ### 4. **Enterprise-Ready Security**[​](#4-enterprise-ready-security "Direct link to 4-enterprise-ready-security") With support for custom authentication headers and environment variables, the component works seamlessly with private APIs and enterprise security requirements. ### How is this different to EventCatalog Plugins?[​](#how-is-this-different-to-eventcatalog-plugins "Direct link to How is this different to EventCatalog Plugins?") EventCatalog provides a list of plugins that can fetch schemas from remote sources [(e.g OpenAPI, AsyncAPI plugins, Confluent Schema Registry, AWS Glue Schema Registry, etc)](/integrations.md). Using these plugins you can do advanced mapping and filtering of your schemas to your services, domains and messages. ## Next Steps[​](#next-steps "Direct link to Next Steps") The RemoteSchema component is available now in EventCatalog 2.52.0. To get started: 1. **[Upgrade your EventCatalog](https://www.eventcatalog.dev/docs/development/guides/upgrading)** to the latest version 2. **[Read the full documentation](/docs/development/components/components/remote-schema.md)** for detailed usage examples 3. **[Join our Discord](https://eventcatalog.dev/discord)** to share your use cases and get help from the community This feature represents a significant step forward in making EventCatalog a living, breathing documentation platform that stays synchronized with your evolving architecture. By connecting directly to your live systems, EventCatalog becomes not just documentation, but a real-time reflection of your event-driven architecture. The future of API documentation is dynamic, connected, and always current. The RemoteSchema is one step towards that future. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Remote Schema](/blog/tags/remote-schema.md) * [API Integration](/blog/tags/api-integration.md) * [Documentation](/blog/tags/documentation.md) --- ## [Introducing EventCatalog Reports](/blog/introducing-eventcatalog-reports.md) May 27, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I’m excited to announce that EventCatalog now includes Governance Reports! This new feature enables you to generate reports directly from your EventCatalog documentation. Each report provides a **Governance Score**—a helpful metric to track, measure, and improve the governance of your event-driven architecture. ![EventCatalog Governance Report](/img/blogs/reports/example.png)[View examples of generated reports](https://github.com/event-catalog/eventcatalog/tree/main/examples/default/reports) ### Lack of governance leads to chaos[​](#lack-of-governance-leads-to-chaos "Direct link to Lack of governance leads to chaos") Many teams use EventCatalog to avoid the common challenges of managing event-driven architectures—like the chaos of unknown producers and consumers, versioning issues, poor documentation, unclear ownership, and more. At first, event-driven architectures seem simple. You know who’s producing and consuming events. But as your architecture grows, so does the complexity. Teams multiply, events are raised from many producers, and understanding the distributed landscape becomes increasingly difficult. This is why teams are using EventCatalog. EventCatalog is designed to help you document your event-driven architecture effectively. With our [SDK](/docs/sdk.md) and [integrations](/integrations.md), EventCatalog works with any technology stack or broker, letting you sync schemas and documentation seamlessly. This gives your developers and stakeholders the clarity they need. And now, with EventCatalog Reports, you can **measure and track your governance**. Our Governance Score highlights areas for improvement, helping you build a more controlled, reliable, and scalable event-driven system. ## **How does the EventCatalog Report work?**[​](#how-does-the-eventcatalog-report-work "Direct link to how-does-the-eventcatalog-report-work") You can use the new `@eventcatalog/reports` CLI to generate two types of reports: the **Assessment Report** and the **Full Report**. This CLI tool analyzes your documentation, schemas, and relationships between resources to generate key metrics for your event-driven architecture: * **Message Schema Completeness**: Tracks messages (events, commands, queries) with defined schemas. * **Service Specification Completeness**: Identifies services with linked API specifications (e.g., OpenAPI, AsyncAPI). * **Ownership Coverage**: Shows which resources (domains, services, messages) have assigned owners. * **Orphaned Messages**: Detects messages without any producers. * **Service Message Drift**: Finds services sending or receiving outdated versions of messages. * **Deprecated Messages**: Flags services that are still using deprecated messages. Together, these metrics form your **Governance Score**, helping you measure and track your architecture’s health. The **Full Report** also highlights areas for improvement and provides actionable recommendations to strengthen your governance. ## How to get started[​](#how-to-get-started "Direct link to How to get started") Don't have an EventCatalog? If you don’t have an EventCatalog yet, you can [get started here](/docs/development/getting-started/installation.md). Once you’ve set up your EventCatalog and added your information—either through markdown files or using our [integrations](/integrations.md) (e.g., [OpenAPI](/integrations/openapi.md), [AsyncAPI](/integrations/asyncapi.md))—you can run the **Assessment Report**. From your EventCatalog directory, run the following command: ``` npx @eventcatalog/reports@latest generate-assessment ``` This will generate a **free Governance Report**, providing you with a **Governance Score** and highlighting key metrics that may need improvement. Want to go deeper? We also offer **Full Reports** for a more comprehensive analysis. If you’d like **beta access**, reach out to us at —we’d be happy to help! You can also read our documentation to learn why governance is important and how to get started. EventCatalog Reports are in beta EventCatalog Reports are currently in beta. We would love to hear your feedback! If you would like to get access to the full feature, please reach out to us at . We would love to work with you to improve the feature. ## Summary[​](#summary "Direct link to Summary") EventCatalog helps teams avoid the complexity and chaos that often comes with scaling event-driven architectures—like unclear ownership, versioning issues, and poor documentation. It provides a clear, structured way to document your architecture using markdown or integrations with tools like OpenAPI and AsyncAPI. With the new **`@eventcatalog/reports` CLI**, teams can generate two types of reports: * The **Assessment Report** (free), which gives you a **Governance Score** based on key metrics like schema completeness, ownership coverage, orphaned messages, and service message drift. * The **Full Report** (currently in beta), which provides deeper analysis and actionable recommendations for improving governance. These reports help teams measure, track, and improve their architecture governance, enabling them to scale event-driven systems with confidence. To get started, teams can install EventCatalog, set up their documentation, and run the `generate-assessment` command for their free governance report. For access to the full report, they can reach out [via email](mailto:hello@eventcatalog.dev). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Reports](/blog/tags/reports.md) * [Governance](/blog/tags/governance.md) --- ## [Trace every field across your schemas and architecture](/blog/schema-fields-explorer.md) March 23, 2026 · 8 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **EventCatalog now indexes every field from every message schema in your architecture and makes them searchable, traceable, and verifiable, all from a single page.** This is Schema Insights, available now at `/schemas/fields` in EventCatalog. [YouTube video player](https://www.youtube.com/embed/PQIBATgtuKs?si=TagMKL49ZD_G_HYE) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Schema](/blog/tags/schema.md) * [Field Intelligence](/blog/tags/field-intelligence.md) * [Events](/blog/tags/events.md) * [Services](/blog/tags/services.md) * [Scale](/blog/tags/scale.md) [**Read more**](/blog/schema-fields-explorer.md) --- ## [Trace every field across your schemas and architecture](/blog/schema-fields-explorer.md) March 23, 2026 · 8 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **EventCatalog now indexes every field from every message schema in your architecture and makes them searchable, traceable, and verifiable, all from a single page.** This is Schema Insights, available now at `/schemas/fields` in EventCatalog. [YouTube video player](https://www.youtube.com/embed/PQIBATgtuKs?si=TagMKL49ZD_G_HYE) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Schema](/blog/tags/schema.md) * [Field Intelligence](/blog/tags/field-intelligence.md) * [Events](/blog/tags/events.md) * [Services](/blog/tags/services.md) * [Scale](/blog/tags/scale.md) [**Read more**](/blog/schema-fields-explorer.md) --- ## [Document examples with your schemas](/blog/message-usage-examples.md) March 11, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog A schema tells you the **shape** of a message. An example shows you **how** it can be used. **Schemas are necessary. Examples are what people actually reach for** when they're writing a consumer, debugging a failed event, or onboarding to a service they've never touched. EventCatalog now supports the ability to add any amount of examples with your schemas, helping your teams understand exactly how your messages are used in your architecture. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Messages](/blog/tags/messages.md) * [Schema Explorer](/blog/tags/schema-explorer.md) * [Examples](/blog/tags/examples.md) [**Read more**](/blog/message-usage-examples.md) --- ## [Integrate Apicurio Registry with EventCatalog](/blog/apicurio-registry-eventcatalog.md) November 26, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [YouTube video player](https://www.youtube.com/embed/0DmGWa0sr6w) I'm happy to announce the release of the [EventCatalog Apicurio Registry plugin](/docs/plugins/apicurio/intro.md). This plugin allows you to import schemas from Apicurio Registry into EventCatalog and keep them in sync alongside your documentation. Importing your schemas into EventCatalog gives you the ability to: * Add more value to your schemas with business context and ownership * Map your schemas to your producers and consumers in EventCatalog and keep them in sync * Discover your schemas easier with the [EventCatalog Schema Explorer](/docs/development/guides/schemas/schema-explorer.md) * Assign ownership (users and teams) to your schemas * Automate documentation from your AsyncAPI and OpenAPI specifications hosted in your Apicurio Registry * Visualize the bigger picture with the [EventCatalog Visualizer](/features/visualization.md) * Access your schemas with the [EventCatalog Schema API](/docs/development/guides/schemas/schema-api.md) for your LLMs or testing * Connect your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) to get schemas for your LLMs * And more... In this blog post I'll walk you through the features of the plugin and how to get started. *** ### What is Apicurio Registry?[​](#what-is-apicurio-registry "Direct link to What is Apicurio Registry?") [Apicurio Registry](https://www.apicur.io/registry/) is an open-source schema registry that provides a centralized repository for managing schemas and API artifacts in event-driven and message-based architectures. For architects building distributed systems, Apicurio Registry offers a powerful solution for schema validation, versioning, and governance with support for multiple schema formats including Avro, JSON Schema, Protobuf, OpenAPI, and AsyncAPI. Apicurio Registry supports both V2 and V3 APIs, giving teams flexibility in how they manage their schemas. Whether you're running it as a standalone service or as part of a larger infrastructure, Apicurio Registry helps ensure consistency across your event-driven architecture. ### Why integrate Apicurio Registry with EventCatalog?[​](#why-integrate-apicurio-registry-with-eventcatalog "Direct link to Why integrate Apicurio Registry with EventCatalog?") EventCatalog helps organizations understand and manage their event-driven architectures by providing comprehensive documentation of domains, services, and messages. **While schema registries capture the technical contract of your events, EventCatalog preserves the crucial context often lost in traditional documentation**: ownership details, business context, schema evolution history, and visual representations of your message flows. The Apicurio Registry plugin creates a seamless connection between your schema registry and EventCatalog, giving you the best of both worlds. You maintain all the powerful features of Apicurio's schema management while enriching your developer experience with EventCatalog's visualization capabilities, detailed documentation, governance tools, and enhanced discoverability. This integration helps teams not just track what schemas exist, but understand how they fit into the broader architectural landscape and how they've evolved over time. ### How the plugin works[​](#how-the-plugin-works "Direct link to How the plugin works") [The Apicurio Registry plugin](/docs/plugins/apicurio/intro.md) maps your schemas into logical services and domains within your organization. Teams can configure which schemas each service produces or consumes using flexible filters based on exact artifact IDs, prefixes, suffixes, or string matching. ![Apicurio Registry plugin](/assets/images/apicurio-064fe960df700d72b7de4629e19671de.png) When Apicurio schemas are imported into EventCatalog, they become more than just technical contracts - they gain rich contextual information that helps teams understand their broader impact. This includes crucial details like schema ownership, business context, and the producer-consumer relationships between services. The plugin also supports attaching OpenAPI and AsyncAPI specifications stored in your Apicurio Registry directly to services. You can even chain generators together, running the OpenAPI or AsyncAPI generators on these specifications to automatically create message documentation from your specs. Any markdown and documentation added to your messages are persisted between versions, so you can add more value to your schemas and keep your documentation up-to-date as schemas evolve. ### Getting started[​](#getting-started "Direct link to Getting started") To get started with the Apicurio Registry integration, you'll need: * An Apicurio Registry instance (V2 or V3) * Schemas registered in your Apicurio Registry * An EventCatalog license key for Apicurio Registry integration ([14-day free trial](https://eventcatalog.cloud)) The setup takes just a few minutes. [Read the installation guide](/docs/plugins/apicurio/installation.md) to configure your integration, or explore the [example project](https://github.com/event-catalog/generators/tree/main/examples/generator-apicurio) to see it in action. ### Summary[​](#summary "Direct link to Summary") Apicurio Registry is a powerful open-source tool for managing schemas in event-driven architectures. We created our [Apicurio Registry integration](https://github.com/event-catalog/generators) to help you unlock more value from your schema registries. The Apicurio Registry plugin allows you to map your schemas to services and domains within your organization, helping your team understand how schemas are produced and consumed across your architecture. With support for multiple schema formats and flexible filtering options, you can document exactly what matters to your teams. EventCatalog syncs with your schema registry and persists any additional contextual information you add, including documentation, ownership, and relationships. This context carries forward as your schemas evolve, creating a living history of your event-driven architecture. Using the Schema Explorer you can quickly find schemas in your architecture, understand the history of your schemas, or connect your schemas to your LLMs with the [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md). Getting started should take just a few minutes and [you can read our guide here](/docs/plugins/apicurio/intro.md). If you have any questions you can join us on our [Discord server](https://eventcatalog.dev/discord). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Apicurio](/blog/tags/apicurio.md) * [Schema Registry](/blog/tags/schema-registry.md) --- ## [Access your EventCatalog from the command line](/blog/eventcatalog-cli.md) January 21, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share something that's going to change how teams automate their EventCatalog. **Every SDK operation now works directly from the command line.** No code needed. Just simple commands that output JSON. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [SDK](/blog/tags/sdk.md) * [CLI](/blog/tags/cli.md) * [Automation](/blog/tags/automation.md) [**Read more**](/blog/eventcatalog-cli.md) --- ## [Introducing Search v2](/blog/custom-search-experience.md) July 29, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that EventCatalog introduces a completely redesigned search experience that makes discovering and exploring your event-driven architecture faster and more intuitive than ever before. Say goodbye to basic search and hello to powerful, categorized discovery. ![EventCatalog Entity Map](/img/search-v2.png)[View the demo](https://demo.eventcatalog.dev/docs/) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Search](/blog/tags/search.md) * [User Experience](/blog/tags/user-experience.md) * [Static Sites](/blog/tags/static-sites.md) [**Read more**](/blog/custom-search-experience.md) --- ## [Whats new in EventCatalog - September 2025](/blog/eventcatalog-september-2025.md) October 2, 2025 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to EventCatalog’s monthly update! 🎉 September was a big month — we launched [**EventCatalog Studio**](#eventcatalog-studio), introduced a new [**GraphQL Plugin**](#the-new-graphql-plugin), added [**Data Stores**](#eventcatalog-data-stores) as a new resource type, and shipped a range of smaller improvements. In this post, we’ll take a look at what’s new, what’s coming next, and how you can get started. *** ## EventCatalog Studio[​](#eventcatalog-studio "Direct link to EventCatalog Studio") We’re excited to announce the launch of [EventCatalog Studio](https://www.eventcatalog.studio/) — our new visual design tool for distributed systems. Many developers already love the [EventCatalog visualizer](https://demo.eventcatalog.dev/visualiser/domains/E-Commerce/1.0.0), which gives you a static view of your architecture. With EventCatalog Studio, you can **take that experience further**: design diagrams interactively, collaborate with your team, and save drafts locally — all using architecture primitives. ![EventCatalog Studio](/img/blogs/september-25/studio.png)[Explore the playground →](https://app.eventcatalog.studio/playground) Our goal is to make designing and collaborating on event-driven architectures easier than ever. With EventCatalog Studio you can: * Import your existing EventCatalog diagrams. * [Add documentation to your designs](https://www.eventcatalog.dev/docs/studio/diagrams/adding-documentation) * Explore and sketch out new ideas. * [Save designs locally for offline work](https://www.eventcatalog.dev/docs/studio/diagrams/import-export). * [Re-import designs back into EventCatalog when ready](https://www.eventcatalog.dev/docs/studio/diagrams/import-export). * [Embed diagrams directly into your documentation](https://www.eventcatalog.dev/docs/studio/diagrams/eventcatalog-embed). You can jump straight in today. Try [EventCatalog Studio](https://www.eventcatalog.studio/) or experiment in our [playground](https://app.eventcatalog.studio/playground). ## EventCatalog Data Stores[​](#eventcatalog-data-stores "Direct link to EventCatalog Data Stores") You can now document your [data stores in EventCatalog](/docs/development/guides/data/introduction.md) — whether they’re databases, caches, object stores, search indexes, or anything else — and define which services read from or write to them. This new feature gives your teams a clearer picture of how data flows across your architecture: who owns the data, and which services depend on it. ![Example](/assets/images/data-example-147f3041afae6ef63c0a283762e9e704.png) We’ve also updated the visualizer to include two new perspectives: * Service view → see which data stores a service uses ([see demo](https://demo.eventcatalog.dev/visualiser/services/BillingService/0.0.1/data)) * Data store view → see which services depend on a specific data store ([see demo](https://demo.eventcatalog.dev/visualiser/containers/inventory-readmodel/0.0.1)) Data stores take inspiration from the C4 model (containers), giving you a more complete way to document and explore your systems. You can start adding Data Stores today — check out the [documentation](https://www.eventcatalog.dev/docs/development/guides/data/introduction) to get going. ## The new GraphQL Plugin[​](#the-new-graphql-plugin "Direct link to The new GraphQL Plugin") GraphQL has become a go-to for many teams building distributed systems. With our [new **GraphQL Plugin**](https://www.eventcatalog.dev/integrations/graphql), you can now turn your GraphQL schemas directly into EventCatalog documentation. The plugin automatically maps your GraphQL operations into EventCatalog concepts: * **Queries → Queries** * **Mutations → Commands** * **Subscriptions → Events** You can also assign your GraphQL schemas to specific services and domains in your architecture, making it easier to see how everything connects. [YouTube video player](https://www.youtube.com/embed/J352QYLWQkw?si=hwwKr-k2IENfICmR) This unlocks powerful automation — your catalogs can now be generated directly from your GraphQL schemas. And when combined with our [**OpenAPI**](https://www.eventcatalog.dev/integrations/openapi) and [**AsyncAPI**](https://www.eventcatalog.dev/integrations/asyncapi) plugins, you have a strong foundation for documenting a wide range of services and technologies. Get started by checking out the [GraphQL Plugin docs](https://www.eventcatalog.dev/integrations/graphql) or watch the [demo video](https://www.youtube.com/watch?v=J352QYLWQkw). *** ## Introducing Attachments to all Resources[​](#introducing-attachments-to-all-resources "Direct link to Introducing Attachments to all Resources") We added the ability to add attachments to any resource type in EventCatalog. A new feature that allows you to link external resources, diagrams, and documentation directly to your domains, services, events, commands, queries, and channels. Many teams and organizations have information scattered across different tools and platforms. This makes it difficult to find the information you need when you need it. With Attachments, you can now link to external resources, diagrams, and documentation directly to your EventCatalog resources. ![EventCatalog Attachments](/img/blogs/attachments-blog/attachment-example.png) To learn more and get started you [can read our blog post on attachments](https://www.eventcatalog.dev/blog/eventcatalog-attachments). ## Other improvements[​](#other-improvements "Direct link to Other improvements") As usual we have updated our dependencies in the project and we have also added support for [Structurizr](https://www.eventcatalog.dev/docs/development/components/structurizr). If you have any issues or want to join our community of over 1200 people exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [September](/blog/tags/september.md) --- ## [Model external systems in EventCatalog](/blog/external-systems.md) April 14, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.28.0 adds a small but useful flag to services: `externalSystem: true`. Set it on any service (like Stripe, Twilio, or Snowflake) and EventCatalog will treat it as a third-party dependency rather than something your team owns. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Services](/blog/tags/services.md) * [Visualiser](/blog/tags/visualiser.md) [**Read more**](/blog/external-systems.md) --- ## [Describe the workflow, let the agent build the flow](/blog/flow-wizard.md) March 18, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog [Flows](/docs/development/guides/flows/introduction.md) are one of the most popular resources documented in EventCatalog. They let you document end-to-end business workflows in your architecture, giving you and your team the bigger picture of how everything connects together. ![EventCatalog flow visualization](/img/blogs/2.5.0/flows2.png)[Demo of a Subscription Renewed flow](https://demo.eventcatalog.dev/visualiser/flows/SubscriptionRenewed/1.0.0) Today, creating a flow means writing a YAML file by hand. We wanted to make that easier. **The new `flow-wizard` skill lets you describe your workflow in plain language, and your AI agent builds the flow for you.** **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [AI](/blog/tags/ai.md) * [Flows](/blog/tags/flows.md) * [Skills](/blog/tags/skills.md) [**Read more**](/blog/flow-wizard.md) --- ## [EventCatalog Slack integration](/blog/slack-integration.md) February 3, 2026 · 7 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog **Your teams can now ask EventCatalog about your architecture, events, services, and schemas directly in Slack.** You know the pattern. Someone on your team needs to know which services consume the `OrderCreated` event. They check the wiki. Not there. They search Confluence. Wrong version. They ping three different people in Slack asking if anyone knows. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Slack](/blog/tags/slack.md) * [Integration](/blog/tags/integration.md) * [AI](/blog/tags/ai.md) [**Read more**](/blog/slack-integration.md) --- ## [Introducing Authentication and SSR Mode](/blog/authentication-and-ssr-mode.md) June 13, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Today we are excited to announce the release of the [EventCatalog Authentication](/docs/development/authentication/introduction.md) and [EventCatalog SSR Mode](/docs/development/deployment/build-ssr-mode.md). These new features are designed to help you get the most out of EventCatalog. ![EventCatalog Authentication](/img/auth.png)[Get started with EventCatalog Authentication](/docs/development/authentication/introduction.md) ## Authentication[​](#authentication "Direct link to Authentication") EventCatalog now provides [secure authentication](/docs/development/authentication/introduction.md) to control access to your documentation. Whether you're a small team getting started or a large enterprise with complex identity requirements, EventCatalog's flexible authentication system grows with your needs. On the initial release we support the following identity providers: * [GitHub](/docs/development/authentication/providers/setting-up-github.md) * [Auth0](/docs/development/authentication/providers/setting-up-auth0.md) * [Okta](/docs/development/authentication/providers/setting-up-okta.md) * [Azure AD (Entra ID)](/docs/development/authentication/providers/setting-up-azure-ad.md) If we are missing your identity provider, [please let us know](mailto:hello@eventcatalog.io) and we will add support for it. #### How it works[​](#how-it-works "Direct link to How it works") EventCatalog uses industry-standard OpenID Connect (OIDC) and OAuth 2.0 protocols to integrate with your identity provider. Here's the authentication flow: 1. User visits EventCatalog and attempts to access protected documentation (everything is protected by default) 2. Redirects to your identity provider (GitHub, Google, Auth0, etc.) 3. User authenticates with their existing credentials 4. Provider confirms identity and sends user back to EventCatalog 5. User gains access to your documentation and architecture To get started with authentication, you can read our [quick guide in our documentation here](/docs/development/authentication/introduction.md). ## SSR Mode[​](#ssr-mode "Direct link to SSR Mode") By default EventCatalog exports a static HTML site. This means you can deploy your application anywhere you want. We have found for users with large catalogs, the build time can be slow, as every page is rendered and built. We are excited to announce that EventCatalog now supports [SSR mode (Server side rendering)](/docs/development/deployment/build-ssr-mode.md), this means you can use EventCatalog as a server-side rendered application. This is perfect for large catalogs, for users with slow deployment times and for users that are using EventCatalog features that require a server (e.g [EventCatalog Chat](/features/ai-assistant.md), [EventCatalog Authentication](/docs/development/authentication/introduction.md)) Rather than building the entire catalog into HTML files, EventCatalog will render the pages on the fly (using server-side rendering). To enable SSR mode, you need to update your `eventcatalog.config.js` file to use SSR mode. eventcatalog.config.js ``` export default { // defaults to static output: 'server', } ``` This tells EventCatalog to build the application as a server-side rendered application. You can then deploy your application to a server that can run Node.js. If you want to learn more about how to host your SSR applications, you can read our [quick guide in our documentation here](/docs/development/deployment/hosting-options.md). ## Summary[​](#summary "Direct link to Summary") EventCatalog Authentication and SSR Mode are designed to help you get the most out of EventCatalog. EventCatalog Authentication provides secure authentication to control access to your event-driven architecture documentation. EventCatalog SSR Mode is perfect for large catalogs, for users with slow deployment times and for users that are using EventCatalog features that require a server (e.g EventCatalog Chat, Authentication) ## What's next?[​](#whats-next "Direct link to What's next?") We will continue to add more support for more identity providers, and explore role based access control (RBAC) for EventCatalog. We will also be exploring bringing your own middleware to EventCatalog, this will let you add your own authentication and authorization logic to EventCatalog. If you have any questions, feel free to join over 1,100 EventCatalog users on [Discord](https://discord.com/invite/3rjaZMmrAm), we are happy to help you get started. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Authentication](/blog/tags/authentication.md) * [SSR](/blog/tags/ssr.md) --- ## [Introducing Search v2](/blog/custom-search-experience.md) July 29, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that EventCatalog introduces a completely redesigned search experience that makes discovering and exploring your event-driven architecture faster and more intuitive than ever before. Say goodbye to basic search and hello to powerful, categorized discovery. ![EventCatalog Entity Map](/img/search-v2.png)[View the demo](https://demo.eventcatalog.dev/docs/) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Search](/blog/tags/search.md) * [User Experience](/blog/tags/user-experience.md) * [Static Sites](/blog/tags/static-sites.md) [**Read more**](/blog/custom-search-experience.md) --- ## [Introducing Themes and Dark Mode](/blog/eventcatalog-themes-dark-mode.md) January 8, 2026 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that EventCatalog now supports **Themes and Dark Mode**, giving you full control over the look and feel of your catalog. Whether you prefer working in a dark environment, want to match your company's brand colors, or simply want a fresh new look, EventCatalog has you covered. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Themes](/blog/tags/themes.md) * [Dark Mode](/blog/tags/dark-mode.md) * [Customization](/blog/tags/customization.md) [**Read more**](/blog/eventcatalog-themes-dark-mode.md) --- ## [Whats new in EventCatalog - March 2026](/blog/eventcatalog-march-2026.md) March 31, 2026 · 9 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Welcome to the monthly update for EventCatalog. March was a big month. We shipped governance capabilities, field-level intelligence, a redesigned schema explorer, a new Miro integration, AI-assisted flow creation, and upgraded the entire platform to Astro 6. * [Architecture Change Detection](#architecture-change-detection) * [Schema Insights - Trace Fields Across Your Architecture](#schema-insights---trace-fields-across-your-architecture) * [Field-Level Usage Tracking](#field-level-usage-tracking) * [Message Usage Examples](#message-usage-examples) * [Flow Wizard Skill](#flow-wizard-skill) * [OpenAPI Consumer Services](#openapi-consumer-services) * [EventCatalog Miro App v2](#eventcatalog-miro-app-v2) * [Astro 6 and Platform Upgrades](#astro-6-and-platform-upgrades) * [Other project improvements](#other-project-improvements) ## Architecture Change Detection[​](#architecture-change-detection "Direct link to Architecture Change Detection") A service starts consuming your `OrderPlaced` event. No ticket. No Slack message. No email. You find out weeks later when something breaks downstream. **Architecture Change Detection turns your catalog into an active monitoring system.** It compares your EventCatalog across git branches, detects when services start or stop producing or consuming messages, and notifies your teams automatically. You define governance rules in a `governance.yaml` file at the root of your catalog. Each rule specifies what to watch, what conditions to trigger on, and where to send notifications. This is designed for **service owners** who want to know the moment someone starts depending on their messages, **platform teams** who need to catch breaking changes before a PR merges, and **operations teams** who want an audit trail of every dependency change. We also added the `schema_changed` and `message_deprecated` governance triggers, and support for a `fail` action type so you can gate CI/CD pipelines on governance rules. You can read more about Architecture Change Detection in our [release blog post here](/blog/architecture-change-detection.md). ## Schema Insights - Trace Fields Across Your Architecture[​](#schema-insights---trace-fields-across-your-architecture "Direct link to Schema Insights - Trace Fields Across Your Architecture") As your architecture grows, schemas multiply. An `OrderPlaced` event gains fields. A `PaymentProcessed` event reuses some of those same fields. A `CustomerUpdated` command redefines one of them with a slightly different type. Nobody notices until a consumer breaks. **Schema Insights indexes every field from every message schema in your architecture and makes them searchable, traceable, and verifiable from a single page.** [YouTube video player](https://www.youtube.com/embed/PQIBATgtuKs?si=TagMKL49ZD_G_HYE) Available at `/schemas/fields` in your catalog, Schema Insights gives you: * **Field search and filtering** across every message in your architecture * **Type conflict detection** that flags when the same field name has different types across messages * **Interactive traceability graphs** showing how a field connects to messages and services * A **redesigned Schema Explorer** with a modern layout and dark mode support ![Schema Insights table view](/img/blogs/field-search.png)[Read the full release post](/blog/schema-fields-explorer.md) You can read more about Schema Insights in our [release blog post here](/blog/schema-fields-explorer.md). ## Field-Level Usage Tracking[​](#field-level-usage-tracking "Direct link to Field-Level Usage Tracking") EventCatalog already tells you which services consume a message. **Now it can also tell you which specific fields they use.** ![Field Usage view showing which fields each consumer depends on](/img/blogs/field-usage-2.png) When consumers declare which fields they depend on, the message page gains a **Field Usage** view showing every schema property alongside the services that use it. This makes it much easier to understand the blast radius of a schema change. If you're about to remove a field or change its type, you can see exactly who depends on it. Field usage is opt-in. Add a `fields` array to any entry in the `receives` pointer of a service, and EventCatalog surfaces it automatically. You can read more about field-level usage in our [release blog post here](/blog/field-usage.md). ## Message Usage Examples[​](#message-usage-examples "Direct link to Message Usage Examples") A schema tells you the **shape** of a message. An example shows you **how** it can be used. Schemas are necessary. Examples are what people actually reach for when they're writing a consumer, debugging a failed event, or onboarding to a service they've never touched. ![Message Usage Examples in Schema Explorer](/img/blogs/message-examples.png)[Start adding examples to your messages](/docs/development/guides/messages/common/examples.md) Drop JSON, YAML, XML, Protobuf, or any format your messages use alongside your schemas. EventCatalog renders them with syntax highlighting under a new **Usage Examples** tab in the Schema Explorer. Each example can carry metadata to describe the scenario it represents, a standard order, an international order, a failed payment. You can read more about message examples in our [release blog post here](/blog/message-usage-examples.md). ## Flow Wizard Skill[​](#flow-wizard-skill "Direct link to Flow Wizard Skill") [Flows](/docs/development/guides/flows/introduction.md) are one of the most popular resources documented in EventCatalog. They let you document end-to-end business workflows, giving your team the bigger picture of how everything connects. But creating them meant writing YAML by hand. ![EventCatalog flow visualization](/img/blogs/2.5.0/flows2.png)[See a flow in action](https://demo.eventcatalog.dev/visualiser/flows/SubscriptionRenewed/1.0.0) **The new `flow-wizard` skill lets you describe your workflow in plain language, and your AI agent builds the flow for you.** It scans your existing catalog resources, walks you through each stage of the workflow, and cross-references services, events, and commands you already have. Whether you're a product owner, architect, or developer, if you can describe a business workflow you can now document it. No YAML knowledge required. You can read more about the flow wizard in our [release blog post here](/blog/flow-wizard.md). ## OpenAPI Consumer Services[​](#openapi-consumer-services "Direct link to OpenAPI Consumer Services") Understanding who owns an API is useful. **Understanding who consumes it is what makes the documentation actually actionable.** [YouTube video player](https://www.youtube.com/embed/ePlCqnsRVBY) The [OpenAPI generator](/docs/plugins/openapi/intro.md) now supports a `consumers` array on each service configuration. Each entry defines a downstream service that calls endpoints produced by that API, with optional route-based filtering to scope which endpoints it cares about. ![Visualization showing consumer services for API endpoints](/img/blogs/openapi-with-producers.png) This means your architecture diagrams and documentation now show the full producer-consumer picture for your REST APIs, not just the owner. You can read more about OpenAPI consumer services in our [release blog post here](/blog/openapi-consumer-services.md). ## EventCatalog Miro App v2[​](#eventcatalog-miro-app-v2 "Direct link to EventCatalog Miro App v2") Every team has the same problem. The architecture lives in one place and the diagrams live in another. The Miro board from the last event storming session doesn't match what's actually running. **The [EventCatalog Miro App v2](/docs/miro/overview.md) turns your documentation into interactive, collaborative design artifacts, and brings your design decisions back into the catalog when you're done.** ![EventCatalog architecture on a Miro board](/img/miro/getting-started/example.png) The v1 integration embedded Miro boards into doc pages. V2 flips the direction. Your documented architecture flows into Miro, you design on top of real data, and the results flow back out. You can: * Browse, search, and drag your full catalog onto a Miro board * Drag services with their full dependency graphs * Edit resources inline and create new draft resources on the board * Navigate between connected resources with smart connectors You can read more about the Miro App in our [release blog post here](/blog/eventcatalog-miro-app.md). ## Astro 6 and Platform Upgrades[​](#astro-6-and-platform-upgrades "Direct link to Astro 6 and Platform Upgrades") We upgraded EventCatalog to **Astro 6, Zod 4, Vite 7, and Vitest 4**. This is a significant platform upgrade that improves build performance and keeps EventCatalog on the latest tooling. As part of this upgrade, we also replaced `better-sqlite3` with `sql.js` (WASM), removing the need for native binary compilation. This means fewer installation issues, especially in CI environments and Docker containers. To upgrade, run: ``` npm install @eventcatalog/core@latest ``` ### Other project improvements[​](#other-project-improvements "Direct link to Other project improvements") * Added `eventcatalog export` command for exporting your catalog programmatically * SDK now supports entities, containers, and flows in `dumpCatalog` * SDK changelog helper methods for programmatic access to changelogs * Added channels section to service sidebar * Entity map visualiser now available for services * Flows now support nested directories and work across domains/services * Added analytics integrations: GA4, GTM, and PostHog * Support for `governance.yml` in addition to `governance.yaml` * Improved generated README for new EventCatalog projects * Default template events now include usage examples * Fixed: circular refs in AsyncAPI spec rendering * Fixed: fields explorer crash with nullable JSON Schema types * Fixed: fields index build failing when catalogs have no messages * Fixed: auth behind reverse proxy (trustHost defaults to true) * Fixed: SSR compatibility for visualiser, schema/fields pages * Fixed: sidebar navigation losing sync with custom base path * Fixed: semver comparison for version sorting * Fixed: schema API returning empty response in SSR mode * Fixed: generator continues running when one generator fails ## What's coming in April?[​](#whats-coming-in-april "Direct link to What's coming in April?") If you have any questions or want to join our community exploring EventCatalog and event-driven architecture [feel free to join us](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Update](/blog/tags/update.md) * [March](/blog/tags/march.md) --- ## [Introducing Search v2](/blog/custom-search-experience.md) July 29, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to announce that EventCatalog introduces a completely redesigned search experience that makes discovering and exploring your event-driven architecture faster and more intuitive than ever before. Say goodbye to basic search and hello to powerful, categorized discovery. ![EventCatalog Entity Map](/img/search-v2.png)[View the demo](https://demo.eventcatalog.dev/docs/) **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Search](/blog/tags/search.md) * [User Experience](/blog/tags/user-experience.md) * [Static Sites](/blog/tags/static-sites.md) [**Read more**](/blog/custom-search-experience.md) --- ## [Introducing diagrams as first-class resources](/blog/2026/01/09/diagrams-as-first-class-resources.md) January 9, 2026 · 5 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog already gives you auto-generated visualizations: Entity Maps, Interaction Maps, and domain views that update as your catalog changes. These are great for understanding relationships between your resources. But sometimes you need your *own* diagrams. Target architecture plans. Event storming results. Sequence flows from Miro. C4 diagrams from IcePanel. The stuff that lives in scattered boards, Confluence pages, or that folder someone created two years ago. **EventCatalog 3.3.0 lets you bring those diagrams to your documentation.** Your custom diagrams are now first-class, versioned resources in your catalog. Bring them in **from any tool**, version them, link them to your domains and services, and even ask AI about them. **Tags:** * [diagrams](/blog/tags/diagrams.md) * [architecture](/blog/tags/architecture.md) * [versioning](/blog/tags/versioning.md) * [ai](/blog/tags/ai.md) [**Read more**](/blog/2026/01/09/diagrams-as-first-class-resources.md) --- ## [Your catalog nodes now show what they actually are](/blog/custom-icons.md) April 15, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog EventCatalog 3.28.1 adds custom icons to every resource type. Set `styles.icon` in any frontmatter and that icon appears across your entire catalog: visualiser nodes, sidebar navigation, documentation headers, and search results. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualiser](/blog/tags/visualiser.md) * [Icons](/blog/tags/icons.md) [**Read more**](/blog/custom-icons.md) --- ## [Introducing Entity Maps](/blog/introducing-entity-maps.md) July 3, 2025 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog Understanding the relationships between entities in your domain model is crucial for building robust event-driven architectures. That's why we're excited to introduce **Entity Maps** — a powerful new visualization feature that helps you explore and understand entity relationships within your EventCatalog domains. ## What are Entity Maps?[​](#what-are-entity-maps "Direct link to What are Entity Maps?") Entity Maps provide a visual representation of how entities connect within your domains. In Domain-Driven Design, entities are the core building blocks that represent key concepts like `Order`, `Customer`, or `Invoice`. Entity Maps help you visualize these relationships at a glance, making it easier to understand your domain architecture and identify potential improvements. ![EventCatalog Entity Map](/img/entity-map.png)[View the demo](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3/entity-map) ## Why Entity Maps are useful[​](#why-entity-maps-are-useful "Direct link to Why Entity Maps are useful") Entity Maps solve several common challenges teams face when working with complex domain models: ### **Visual Domain Understanding**[​](#visual-domain-understanding "Direct link to visual-domain-understanding") Instead of piecing together entity relationships from scattered documentation, Entity Maps provide a comprehensive visual overview of your domain model. You can instantly see how entities connect and understand the flow of data through your system. ### **Architectural Insights**[​](#architectural-insights "Direct link to architectural-insights") By visualizing entity relationships, you can identify potential architectural improvements, spot missing connections, or discover opportunities to simplify your domain model. Entities that are referenced across domains are highlighted in yellow, making cross-domain dependencies immediately visible. ### **Team Collaboration**[​](#team-collaboration "Direct link to team-collaboration") Entity Maps serve as a common language for discussing domain models with both technical and non-technical stakeholders. They make it easier to communicate complex relationships and ensure everyone shares the same understanding of the domain. ### **Design Validation**[​](#design-validation "Direct link to design-validation") When designing new features or refactoring existing ones, Entity Maps help you validate that your entity relationships align with your business requirements and domain boundaries. ## How to get started[​](#how-to-get-started "Direct link to How to get started") Getting started with Entity Maps is straightforward if you already have entities documented in EventCatalog: Don't have entities yet? You can read the [Entity API documentation](/docs/development/guides/domains/entities/introduction.md) to learn how to create entities. ### 1. Define Entity Relationships[​](#1-define-entity-relationships "Direct link to 1. Define Entity Relationships") To create meaningful Entity Maps, you'll need to define relationships between your entities using reference fields: ``` --- id: OrderItem name: OrderItem version: 1.0.0 properties: - name: orderId type: UUID required: true description: Identifier for the parent Order references: Order relationType: hasOne referencesIdentifier: orderId --- ``` ### 2. View Your Entity Map[​](#2-view-your-entity-map "Direct link to 2. View Your Entity Map") Once you've defined entity relationships, you can view your Entity Map in two ways: **Full-screen Visualizer**: Navigate to `/visualiser/domains/{domain-name}/{version}/entity-map` for a comprehensive view with interactive controls, zoom capabilities, and filtering options. **Embedded Component**: Use the `` component to embed entity maps directly in your documentation pages. ### 3. Explore and Interact[​](#3-explore-and-interact "Direct link to 3. Explore and Interact") Entity Maps are fully interactive — click and drag to explore relationships, zoom in for detailed views, and hover over entities to see their properties and descriptions. To get started and learn more you can read the [Entity Maps documentation](/docs/development/guides/domains/entities/domain-entity-map.md). ## Embed Entity Maps in Backstage[​](#embed-entity-maps-in-backstage "Direct link to Embed Entity Maps in Backstage") If you're using Backstage, you can embed Entity Maps directly in your entity pages using the `` component from our Backstage plugin. This brings your domain visualizations right into your developer portal. ![EventCatalog Entity Map in Backstage](/img/integrations/backstage/eventcatalog-card-component-entitymap.png)[Learn more about the Backstage integration](/docs/plugins/backstage/installation.md) ## Start visualizing your domain today[​](#start-visualizing-your-domain-today "Direct link to Start visualizing your domain today") Entity Maps are available now in EventCatalog. If you're already documenting entities, you can start creating entity maps immediately by defining relationships between your entities. To learn more about Entity Maps and how to use them effectively, check out our [comprehensive documentation](/docs/development/guides/domains/entities/domain-entity-map.md) or explore the [interactive demo](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3/entity-map). Whether you're working with Domain-Driven Design principles or simply want to better understand your system's data model, Entity Maps provide the visual clarity you need to build better event-driven architectures. If you have any questions or want to join our community of over 1,200 people exploring EventCatalog and event-driven architecture, [feel free to join us on Discord](https://eventcatalog.dev/discord)! **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Entity Maps](/blog/tags/entity-maps.md) * [Domain-Driven Design](/blog/tags/domain-driven-design.md) * [Visualization](/blog/tags/visualization.md) --- ## [See your architecture clearly: Major visualizer improvements](/blog/visualizer-improvements.md) February 16, 2026 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share a major update to the EventCatalog visualizer. **The visualizer has had a complete refresh with a new layout engine, redesigned nodes, hover highlighting, and dark mode support.** Here's a breakdown of everything that's changed. **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualizer](/blog/tags/visualizer.md) * [Layout](/blog/tags/layout.md) * [Dark Mode](/blog/tags/dark-mode.md) [**Read more**](/blog/visualizer-improvements.md) --- # See your architecture clearly: Major visualizer improvements February 16, 2026 · 3 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share a major update to the EventCatalog visualizer. **The visualizer has had a complete refresh with a new layout engine, redesigned nodes, hover highlighting, and dark mode support.** Here's a breakdown of everything that's changed. ## New layout engine[​](#new-layout-engine "Direct link to New layout engine") The visualizer now uses a completely rebuilt layout engine. Nodes are spaced out better, groups (like domains) are properly sized with headers and padding, and edges route cleanly between nodes. If you've had issues with overlapping nodes or messy layouts, this should fix it. ![New layout engine](/img/blogs/visualizer-improvements/layout-engine.png)[View the demo](https://demo.eventcatalog.dev/visualiser/domains/E-Commerce/1.0.0) ## Redesigned nodes[​](#redesigned-nodes "Direct link to Redesigned nodes") Every node type has been refreshed. Services, events, commands, queries, channels, data products, actors, and external systems all have cleaner designs with better icon and label spacing. The nodes have a stronger visual hierarchy so it's easier to scan your architecture at a glance. ![Redesigned nodes](/assets/images/node-redesign-599c468fe5aab5fd99424028652eda18.png) ## Hover highlighting[​](#hover-highlighting "Direct link to Hover highlighting") You can now hover over any edge or node to see how things are connected. Hover an edge and the source and target nodes light up. Hover a node and all its connected edges and peer nodes get highlighted. Makes it much easier to trace message flows through large architectures. ![Hover highlighting](/assets/images/highlight-c005b0ff958944065cf2b67a989fd598.png) ## Dark mode support[​](#dark-mode-support "Direct link to Dark mode support") The visualizer now fully supports dark mode. All nodes, edges, the minimap, and the legend panel respect your theme. Switch between light and dark and everything updates. ## Message icons replace animated edges[​](#message-icons-replace-animated-edges "Direct link to Message icons replace animated edges") The animated flowing dots on edges have been replaced with a cleaner message icon. Less visual noise, same information. Animations are also paused automatically when you're dragging, panning, or zooming for smoother interaction. ![Message icons](/assets/images/message-icons-41247c8647868c8aba85be48b7711ee1.png) ## Performance improvements[​](#performance-improvements "Direct link to Performance improvements") Node components are now memoized, static props are defined outside components to avoid unnecessary re-renders, and hover highlighting uses direct DOM manipulation instead of React state updates. The result is smooth interaction even with hundreds of nodes. ## Getting started[​](#getting-started "Direct link to Getting started") If you're already running EventCatalog, just update to the latest version. All the visualizer improvements apply automatically. ``` npm install @eventcatalog/core@latest ``` Questions or feedback? Join us on [Discord](https://eventcatalog.dev/discord) or open an issue on [GitHub](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualizer](/blog/tags/visualizer.md) * [Layout](/blog/tags/layout.md) * [Dark Mode](/blog/tags/dark-mode.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-02-16-visualizer-improvements.md) --- # Rearrange and save your visualizer layouts January 29, 2026 · 4 min read [![David Boyne](https://avatars.githubusercontent.com/u/3268013?v=4)](https://github.com/boyney123) [David Boyne](https://github.com/boyney123) Founder of EventCatalog I'm excited to share a feature that gives you more control over your documentation. **You can now rearrange nodes in the visualizer and save those layouts for your team.** EventCatalog automatically arranges your nodes as you add resources to your documentation. But now you can drag nodes around, save them, and persist your custom layouts for everyone. ## Why this matters[​](#why-this-matters "Direct link to Why this matters") When you're documenting complex architectures, presentation matters. The way information is laid out can make the difference between clarity and confusion. **EventCatalog automatically arranges your nodes** when you add events, services, domains, and other resources. This works great for getting started. But teams often need specific arrangements that make sense for their context. **Now you have control.** Drag nodes to arrange them how you want. Save the layout. Your entire team sees the same arrangement when they view the visualizer. ## The problem[​](#the-problem "Direct link to The problem") You have a complex domain with 15 services and 30 events. The auto-layout puts nodes in positions that don't match how your team thinks about the architecture. You spend time rearranging nodes into a layout that makes sense. Then you navigate to another page or restart your dev server. The layout resets to the default auto-arrangement. You need to keep doing this every time you view the visualizer. Your team members all see different layouts because everyone arranges things differently. ## What you can do now[​](#what-you-can-do-now "Direct link to What you can do now") **Rearrange nodes and save the layout.** When you drag nodes in the visualizer during development, you can save those positions. EventCatalog stores them and uses your custom layout everywhere that resource appears. **Share layouts with your team.** Layouts are saved to `_data/visualizer-layouts/` in your catalog. Commit them to git. Everyone on your team sees the same arrangement. **Keep layouts when your architecture changes.** If you add new events or services, EventCatalog auto-positions the new nodes while keeping your saved positions for existing ones. This works for all visualizer types: services, domains, flows, entity maps, and designs. ## How to save a layout[​](#how-to-save-a-layout "Direct link to How to save a layout") You need to run EventCatalog in dev mode to save layouts. This is a development feature, not something your users interact with in production. **Step 1: Run in dev mode** ``` npm run dev ``` **Step 2: Open any visualizer page** Navigate to a service, domain, flow, or any page with a visualizer. **Step 3: Drag nodes to arrange them** Click and drag nodes to position them how you want. Arrange your architecture in a way that makes sense for your team. **Step 4: Save the layout** Click the settings menu (three dots) in the top right of the visualizer. Go to Layout → Save Layout. EventCatalog saves the positions to `_data/visualizer-layouts/` in your catalog directory. The file structure matches your resources: ``` _data/visualizer-layouts/ services/ OrderService/ 1.0.0.json domains/ Orders/ 2.0.0.json ``` **Step 5: Commit to git** Add the layout files to git and commit them. Your team gets the same layout when they view the visualizer. ``` git add _data/visualizer-layouts/ git commit -m "Save visualizer layout for OrderService" ``` ## What happens next[​](#what-happens-next "Direct link to What happens next") Every page showing that resource now uses your saved layout. If you embed the OrderService visualizer in multiple places, they all use the same arrangement. If you add new events or services later, EventCatalog positions them automatically while keeping your saved positions for existing nodes. You don't need to redo the entire layout when your architecture evolves. If you want to reset to auto-layout, use the Layout menu and click Reset Layout. ## Getting started[​](#getting-started "Direct link to Getting started") Update to EventCatalog v3.11.0 or later: ``` npm install @eventcatalog/core@latest ``` Run your catalog in dev mode: ``` npm run dev ``` Open any visualizer, drag nodes to arrange them, and save the layout. That's it. ## Summary[​](#summary "Direct link to Summary") You can now rearrange visualizer nodes, save custom layouts, and share them with your team. This gives you more control and flexibility over how your architecture is presented. For more details, see the [visualizer documentation](/docs/development/components/components/nodegraph.md). Have questions? Join us on [Discord](https://eventcatalog.dev/discord). Found a bug or want to contribute? Check out our [GitHub repository](https://github.com/event-catalog/eventcatalog). **Tags:** * [EventCatalog](/blog/tags/event-catalog.md) * [Visualizer](/blog/tags/visualizer.md) * [Layout](/blog/tags/layout.md) [Edit this page](https://github.com/event-catalog/docs/tree/main/blog/2026-01-29-visualizer-layout-persistence.md) --- [Skip to main content](#__docusaurus_skipToContent_fallback) 🚀 [New: Index and search your schemas across your organization](/docs/development/guides/schemas/fields-explorer.md) # Changelog v 3.26.0March 24, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.26.0 Schema Fields Explorer, Astro 6 upgrade, PDF export, governance triggers, and generator improvements ### New Features * **Schema Fields Explorer** — A brand-new page that lets you explore every field across all your schemas. Trace which messages share the same fields and detect naming conflicts across your architecture. Includes a modern redesigned layout with dark mode support. [Learn more](/docs/development/guides/schemas/fields). * **Export to PDF** — Message pages can now be exported as PDFs, making it easy to share schema documentation with stakeholders outside your catalog. * **Usage Examples for Messages** — Messages now support usage examples directly in the schema explorer. Default templates include examples out of the box to help new users get started faster. * **Analytics Integrations** — Built-in support for Google Analytics 4, Google Tag Manager, and PostHog so you can track how your team uses the catalog. * **Flows in Nested Directories** — Flows can now live inside domain and service directories, making it easier to co-locate flow documentation with the services they describe. ### Improvements * **Astro 6, Vite 7, and Zod 4** — Upgraded the entire core framework stack. Faster builds, improved SSR stability, and access to the latest Astro features. * **Governance: Schema Change Detection** — A new `schema_changed` trigger lets you define governance rules that fire when message schemas are modified. Pair with the new `fail` action type for CI/CD gating that blocks merges when schema contracts are broken. [Learn more](/docs/development/governance/architecture-change-detection/introduction.md). * **Governance: Message Deprecation Trigger** — Get notified via console or webhooks when a message is deprecated, so downstream teams can plan their migration. * **Generator Resilience** — Generators that fail no longer stop the entire build. Other generators continue running so you still get a partial catalog even when one source has issues. ### Generator Updates * **AsyncAPI 3.1.0 Support** — The AsyncAPI generator now supports the latest 3.1.0 specification. * **Parse Examples (AsyncAPI & OpenAPI)** — Both generators can now parse examples from your specs and include them in the generated catalog with the new `parseExamples` option. * **Subdomain Service Paths** — Generators can now place services into subdomain directory paths, matching how teams organize services under business domains. * **Attach Headers to Schema (AsyncAPI)** — A new `attachHeadersToSchema` option combines message headers with payload into a single unified schema view. * **Channel Server Protocols (AsyncAPI)** — Channel protocol detection now reads server protocol information, giving you accurate protocol labels on channels. * **Circular Reference Handling (AsyncAPI)** — The generator now gracefully handles circular references in `oneOf`/`allOf` schemas instead of crashing. * **Confluent Schema Registry Auth Fix** — Fixed authentication issues with the Confluent Schema Registry generator for users with custom auth setups. v 3.19.0February 28, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.19.0 Tailwind CSS v4 migration with dramatically faster dev server startup ### New Features * **Tailwind CSS v4** — Migrated from Tailwind CSS v3 to v4 with the native Vite plugin. Dev server startup dropped from \~6.7s to \~1.1s and first page time-to-first-byte went from \~6.7s to \~1.7s. * **Channels in Service Sidebar** — Services now display their associated channels in the sidebar, making it easier to see which channels a service publishes to or subscribes from. * **Changelog Quick Reference** — A changelog link is now available in the left sidebar Quick Reference section for all resource types. ### Improvements * **Architecture Change Detection (CLI)** — A new `governance check` command in the EventCatalog CLI detects when services start or stop producing or consuming messages. Define rules in a `governance.yaml` file and get notified via console or webhooks. Works in CI/CD pipelines to catch architecture changes before they merge. [Learn more](/docs/development/governance/architecture-change-detection/introduction.md). * SDK now includes changelog helper methods for programmatic access to resource changelogs. v 3.18.0February 27, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.18.0 Refined UI theme and visualiser base path support ### Improvements * **Refined UI Theme** — Improved sidebar active states with accent colors, brighter dark mode text, subtle gradients on the homepage, and dark mode icon invert support for a more polished look. * **Visualiser Base Path Support** — The visualiser now supports configurable base paths, so it works correctly when EventCatalog is deployed under a subpath. ### Bug Fixes * Fixed dark mode styling for embedded Flow borders and footer text. * Fixed service sidebar entities rendering as unresolved pointers instead of navigable links. * Fixed first-run Vite dep-scan errors by improving file watcher configuration. v 3.17.0February 23, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.17.0 DSL export improvements and EventCatalog Compass ### New Features * **DSL Message Hydration** — Messages are now hydrated in DSL exports with shared managed keys across all message types, making DSL round-trips more reliable. * **EventCatalog Compass** — The DSL playground has been rebranded to [EventCatalog Compass](https://compass.eventcatalog.dev), a browser-based tool for authoring and visualising your architecture using the EventCatalog DSL. ### Bug Fixes * Fixed query edge labels in the visualiser. * Fixed resource docs not appearing when folder name differs from frontmatter id. * Fixed resource docs glob patterns to support nested directory structures. * Fixed MCP server to create fresh transport per request, resolving stateless transport reuse errors. v 3.16.0February 23, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.16.0 Semver version matching in visualiser and channel routing fixes ### New Features * **Semver Version Matching in Visualiser** — Services can now use semver range patterns (`^1.0.0`, `~1.2.0`) and x-patterns (`1.x`, `1.2.x`) in their `sends` and `receives` configurations, and these will correctly resolve in the visualiser. ### Bug Fixes * Fixed visualiser incorrectly routing all event versions to the same channel. When a service sends multiple versions of the same event to different channels, each version now routes to its correct channel. v 3.15.0February 19, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.15.0 Resource docs and custom documentation improvements ### New Features * **Resource Docs** — Attach additional documentation pages to any catalog resource (services, events, domains, etc.). Organize supplementary docs alongside your resources for richer documentation. [Learn more](/docs/development/guides/services/resource-docs). * **Doc Resource References** — Use `[[doc|PageName]]` syntax to create inline references to custom documentation pages with hover tooltips. ### Improvements * Replaced `concurrently` with native process management for cleaner dev server output, now showing EventCatalog version instead of Astro version. * Upgraded AsyncAPI React component to v3. * Fixed dark theme support on custom documentation pages. v 3.14.0February 16, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.14.0 Major performance improvements across the board ### New Features * **Lazy-Loaded Search** — Search index now loads on intent rather than at startup, significantly reducing initial page load time. * **Deferred Hydration** — Search and sidebar components now hydrate on interaction instead of on page load, reducing JavaScript execution on first render. ### Improvements * **Faster Dev Server** — First request after startup is now prewarmed automatically, cutting perceived latency. * **Lazy-Loaded Viewers** — Heavy graph and OpenAPI viewers are now loaded on demand rather than bundled upfront. * **Compact Search API** — Search index payload has been compacted to reduce network transfer size. * **Gated Visualiser Routes** — Static route generation for the visualiser is now skipped when disabled, speeding up builds. * Fixed AsyncAPI remote schema resolution to properly pass auth headers. * Fixed RemoteSchema environment variable placeholders in SSR mode. * Fixed content collection glob patterns to exclude dist directories. * Fixed theme toggle hydration mismatch in dark mode. v 3.13.0February 12, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.13.0 Standalone visualiser package and monorepo restructure ### Improvements * **Monorepo Restructure** — EventCatalog is now organized as a monorepo with Turborepo and pnpm workspaces. This improves build times, makes contributing easier, and enables independent versioning of packages like the visualiser, SDK, and CLI. * Fixed visualiser header visibility conflicts with Tailwind utilities. v 3.12.0February 9, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.12.0 Visualizer focus mode and standalone visualiser package ### New Features * **Visualizer Focus Mode** — Click any node in the visualizer to open a focus mode panel. See the selected node in the center with incoming connections on the left and outgoing on the right. Click connected nodes to switch focus with smooth slide animations. Includes documentation links and zoom controls. * **Clickable Folder Navigation** — Custom documentation pages now support clickable folder navigation when index files exist, making it easier to browse nested documentation. ### Improvements * Migrated the visualiser into a standalone package, enabling reuse outside of EventCatalog core. * Refactored collection getters with a reverse index for faster producer/consumer resolution. * Fixed PlantUML rendering race condition that could cause diagrams to fail on first load. * Fixed MCP server compatibility with Vercel AI SDK `tool()` helper. * Security fix: patched prismjs CVE-2024-53382. v 3.11.0January 29, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.11.0 Visualizer layout persistence for custom node positioning ### New Features * **Visualizer Layout Persistence** — Save and restore custom node positions in the visualizer during development. Drag nodes to arrange your visualization, then save layouts to `_data/visualizer-layouts/` for sharing with your team. Layouts work across all visualizers including services, events, flows, domains, entity maps, and designs. Available in dev mode only. v 3.10.0January 27, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.10.0 Build telemetry improvements with resource counting ### New Features * **Build Telemetry** — Added resource counting to build telemetry, tracking the number of events, services, domains, and other resources in your catalog. This helps teams monitor catalog growth and understand the scale of their architecture documentation. v 3.9.1January 27, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.9.1 Enhanced Mermaid diagram rendering for larger diagrams ### Improvements * **Configurable Mermaid Diagram Size** — Added configurable `maxTextSize` parameter for Mermaid diagrams, allowing you to render larger and more complex diagrams without rendering issues. v 3.9.0January 26, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.9.0 Mermaid export support for visualizations and container collection improvements ### New Features * **Mermaid Export for NodeGraph** — Export NodeGraph visualizations as Mermaid diagrams with view mode switching and shareable URLs. This makes it easier to share and embed your architecture visualizations in documentation or presentations. ### Bug Fixes * Fixed containers collection glob pattern to properly support nested directories, improving organization flexibility for container resources. v 3.8.2January 26, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.8.2 Windows compatibility fix for custom documentation ### Bug Fixes * Fixed issue with custom documentation pages not rendering correctly on Windows systems, improving cross-platform compatibility. v 3.8.1January 26, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.8.1 Type safety improvements for data products ### Bug Fixes * Fixed TypeScript type errors in data product builder test file by adding proper type casting and missing required fields, improving type safety and developer experience. v 3.8.0January 21, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.8.0 Data Products collection support ### New Features * **Data Products Collection** — Added support for documenting Data Products as a new collection type in EventCatalog. Teams can now catalog and track data products alongside events, services, and domains, providing a complete view of their data architecture. v 3.7.2January 16, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.7.2 Code refactoring for specification processing ### Improvements * Extracted shared specification processing utilities to reduce code duplication and improve maintainability across the codebase. v 3.7.1January 16, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.7.1 Enhanced JSON Schema support and dependency updates ### Improvements * **Enhanced Schema Viewer** — Added comprehensive support for `oneOf` and `anyOf` JSON Schema keywords, including: * Complete handling for `anyOf` in schema processing * Fixed `oneOf` rendering to show selected variant's properties * Added variant selector UI for nested `oneOf`/`anyOf` within properties * Support for `oneOf`/`anyOf` in array items * Variant type indicators in property type display * Updated Astro dependencies to latest versions for improved performance and security. v 3.7.0January 15, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.7.0 Domain event flows without service intermediaries ### New Features * **Direct Domain Event Flows** — Added `sends` and `receives` properties to domains, allowing domains to directly document event flows without requiring services as intermediaries. This simplifies modeling domain-to-domain communication patterns and provides a clearer view of event-driven architecture at the domain level. v 3.6.2January 14, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.6.2 Type safety improvements and directory navigation enhancement ### Improvements * Added type check script and fixed type errors in ResourceRef and SearchModal components for improved type safety. * Directory navigation now defaults to the teams page when no users are defined, providing a better user experience. v 3.6.1January 14, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.6.1 Wiki-style resource references and sidebar improvements ### New Features * **Inline Resource References** — Added wiki-style syntax for creating interactive resource links. Use `[[type|ResourceName]]` syntax to create links that display resource details on hover, making it easier to reference and explore related resources directly within your documentation. ### Improvements * Updated Hono version for improved performance and security. * Fixed sidebar favorites removal for deleted nodes and added theme support to plans and custom documentation pages. v 3.6.0January 14, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.6.0 New Discover page with enhanced browsing and filtering ### New Features * **Discover Page** — Added a new Discover page with enhanced table filtering and tabbed navigation for browsing catalog resources. This makes it easier to explore and find services, events, domains, and other resources across your entire catalog. ### Improvements * Reduced build size through optimized sidebar implementation using node references and static JSON API. v 3.5.2January 13, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.5.2 Visualizer edge relationship fix ### Bug Fixes * Fixed visualizer showing incorrect "subscribed by" edge when a producer references a non-existent channel version, improving accuracy of relationship visualization. v 3.5.1January 12, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.5.1 Avro schema file download fix ### Bug Fixes * Fixed Avro schema file downloads in context menu by using the actual schema filename from `schemaPath` instead of a hardcoded 'schema.json' value, ensuring downloaded files have the correct name. v 3.5.0January 12, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.5.0 Enhanced search with grouping and base path fixes ### Improvements * **Enhanced Sidebar Search** — Improved sidebar search with several enhancements: * Fixed duplicate search results by filtering out unversioned node keys * Added grouping of search results by type with alphabetical sorting * Added missing Channel type to filter mapping * Extracted shared badge styling utilities using CSS variables for consistent theming ### Bug Fixes * Fixed search results not respecting base path and trailing slash configuration, ensuring search URLs correctly include configured base path and trailing slash settings. v 3.4.2January 12, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.4.2 React Hooks compliance fix ### Bug Fixes * Fixed React Rules of Hooks violation in NestedSideBar component by moving `isFavorited` hook before early returns, ensuring proper hook execution order. v 3.4.1January 12, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.4.1 Interactive controls for diagrams ### New Features * **Interactive Diagram Controls** — Added interactive controls to Mermaid and PlantUML diagrams, enabling pan, zoom, and other interactions for better diagram exploration and readability. v 3.4.0January 12, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.4.0 MCP server and shared catalog tools ### New Features * **MCP Server Support** — Added Model Context Protocol (MCP) server and shared catalog tools, enabling better integration with AI tools and external systems for querying and interacting with your catalog data. v 3.3.1January 9, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.3.1 Schema explorer SSR fix ### Bug Fixes * Fixed schema explorer rendering issue in server-side rendering (SSR) mode on application start, ensuring schemas display correctly on initial page load. v 3.3.0January 9, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.3.0 Diagram resource type support ### New Features * **Diagrams as Resources** — Added support for diagrams as a new resource type, allowing you to document and organize architectural diagrams alongside your other catalog resources for a more complete documentation experience. v 3.2.2January 8, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.2.2 Changelog theme styling fix ### Bug Fixes * Fixed changelog theme styles to ensure proper styling across light and dark themes. v 3.2.1January 8, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.2.1 IcePanel diagram support ### New Features * **IcePanel Diagrams** — Added support for embedding IcePanel diagrams in your catalog, enabling teams using IcePanel for C4 model diagrams to integrate them directly into their EventCatalog documentation. v 3.2.0January 8, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.2.0 Custom tools for AI Assistant ### New Features * **Custom AI Assistant Tools** — Added the ability to add custom tools to the AI Assistant, enabling teams to extend the assistant's capabilities with domain-specific functionality tailored to their catalog and workflows. Learn more in the [EventCatalog Assistant documentation](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md). v 3.1.0January 7, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.1.0 Dark mode and custom theme support ### New Features * **Dark Mode and Custom Themes** — Added full support for dark mode and custom themes, allowing teams to customize the appearance of their catalog to match their brand or preferences. Users can toggle between light and dark modes, and administrators can configure custom color schemes. v 3.0.0January 7, 2026 ![EventCatalog](/img/cat-peak.png) ## EventCatalog v3.0.0 A complete redesign focused on performance, discoverability, and bringing AI to your architecture ### Highlights EventCatalog v3 is a ground-up rebuild, delivering a faster, more intuitive experience for documenting and exploring your event-driven architecture. Whether you're onboarding new engineers or investigating production issues, v3 helps you find what you need, when you need it. ### New Features * **[EventCatalog Assistant](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md)** — Bring any AI model to your catalog. Ask questions about your architecture in natural language and get instant answers. Works with OpenAI, Anthropic, or any compatible model. * **[Redesigned Homepage](/docs/development/upgrading/v3.md#new-homepage-for-catalogs)** — A new landing experience that gives teams an instant overview of their architecture, with quick access to services, events, and domains. * **[Customizable Documentation Sidebar](/docs/development/customization/customize-sidebars/documentation-sidebar.md)** — Full control over how your documentation is organized. Create custom sections, reorder content, and build the navigation that works for your team. * **New Search Experience** — Faster, smarter search with improved relevance and filtering. Find services, events, and documentation across your entire catalog instantly. * **Channel Support** — Added channel support in navigation and search for better organization of messaging channels. * **Visualizer Presentation Mode** — Visualizations now include a presentation mode for sharing architecture diagrams in meetings and presentations. * **Admonition Titles** — Added support for custom titles on admonition blocks for better documentation clarity. ### Performance * **[New Caching System](/docs/development/upgrading/v3.md#new-caching-and-performance-improvements)** — Dramatically faster build times and page loads through intelligent caching of catalog data and visualizations. * **Simplified Sidebars** — Streamlined navigation reduces cognitive load and makes exploring your architecture more intuitive. ### Architecture Changes * **[Updated Domain Hierarchy](/docs/development/upgrading/v3.md#changed-domain-hierarchy-changed)** — Improved structure for organizing domains and subdomains, better reflecting how teams think about bounded contexts. * **Improved Overview Pages** — Architecture overview pages now provide richer context with better visualizations and relationship mapping. ### Improvements * Updated architecture overview page designs for better clarity and usability * Added icons to specification files in the sidebar for easier identification * Improved Ubiquitous Language styling throughout the catalog * Enhanced table styles for better readability * Refactored features into Astro custom integrations for better modularity * Updated logger for improved debugging and development experience * Explicit opt-in for authentication features * llms.txt now enabled by default for better AI integration * Removed redundant code and files for cleaner codebase ### Bug Fixes * Fixed embedding pages on build to ensure proper page generation * Fixed issue with nested sidebar state management * Resolved deployment issues for example catalogs on releases * Fixed search functionality throughout the application * Corrected duplicate edge labels in visualizations * Fixed accessibility issues across the catalog * Resolved AsyncAPI loading issues in the DOM * Fixed MDX pages not being added to teams and users sections * Corrected circular dependency issues in JavaScript ### Migration Notes The following features have been deprecated or replaced: * EventCatalog Chat → replaced with [EventCatalog Assistant](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md) * Chat prompts → removed (use Assistant instead) * `.md` files → use `.mdx` files for all content * LIST\_VIEW and SIDE\_VIEW → replaced with new navigation system * Governance reports → deprecated See the [v3 upgrade guide](/docs/development/upgrading/v3.md) for complete migration instructions. Looking for older releases?
For versions prior to v3.0, check out our [GitHub Releases](https://github.com/event-catalog/eventcatalog/releases/). EventCatalog [GitHub](https://github.com/event-catalog/eventcatalog)[Twitter](https://x.com/event_catalog)[LinkedIn](https://www.linkedin.com/company/eventcatalog/)[YouTube](https://www.youtube.com/@event-catalog/videos) ### Product * [EventCatalog](/features/documentation.md) * [EventCatalog SDK](/docs/sdk.md) * [Pricing](/pricing.md) * [Changelog](/changelog.md) * [Open Source](https://github.com/event-catalog/eventcatalog) ### Integrations * [AsyncAPI](/specifications/asyncapi.md) * [OpenAPI](/integrations/openapi.md) * [Confluent Schema Registry](/integrations/confluent-schema-registry.md) * [Apicurio Registry](/integrations/apicurio.md) * [Amazon EventBridge](/integrations/amazon-eventbridge.md) * [Amazon API Gateway](/integrations/amazon-api-gateway.md) * [Azure Schema Registry](/integrations/azure-schema-registry.md) * [Backstage](/integrations/backstage.md) * [Github](/integrations/github.md) * [Federation](/federation.md) * [Custom integrations](/services.md) ### Company * [About Us](/about-us.md) * [Terms of service](/terms.md) * [Privacy policy](/privacy.md) ### Resources * [Blog](/blog.md) * [Videos](https://www.youtube.com/@event-catalog/videos) * [Learn event-driven architecture](https://eda-visuals.boyney.io/) * [Community](https://discord.com/invite/3rjaZMmrAm) * [Support & Services](https://www.eventcatalog.dev/services) © 2026 Copyright EventCatalog Ltd. EventCatalog was founded by David Boyne and is hosted by EventCatalog Ltd. EventCatalog Ltd is a registered company in England and Wales with number: 15764703 --- # tODO --- [Skip to main content](#__docusaurus_skipToContent_fallback) 🚀 [New: Index and search your schemas across your organization](/docs/development/guides/schemas/fields-explorer.md) # Contact Us Interested in collaborating with us? Our offerings include dedicated support, workshops, custom EventCatalog builds, feature development, custom integrations, and more. Email us at hello\@eventcatalog.dev [Contact us](mailto:hello@eventcatalog.dev?subject=Hello%20EventCatalog%20Team)[Learn more →](/services.md) EventCatalog [GitHub](https://github.com/event-catalog/eventcatalog)[Twitter](https://x.com/event_catalog)[LinkedIn](https://www.linkedin.com/company/eventcatalog/)[YouTube](https://www.youtube.com/@event-catalog/videos) ### Product * [EventCatalog](/features/documentation.md) * [EventCatalog SDK](/docs/sdk.md) * [Pricing](/pricing.md) * [Changelog](/changelog.md) * [Open Source](https://github.com/event-catalog/eventcatalog) ### Integrations * [AsyncAPI](/specifications/asyncapi.md) * [OpenAPI](/integrations/openapi.md) * [Confluent Schema Registry](/integrations/confluent-schema-registry.md) * [Apicurio Registry](/integrations/apicurio.md) * [Amazon EventBridge](/integrations/amazon-eventbridge.md) * [Amazon API Gateway](/integrations/amazon-api-gateway.md) * [Azure Schema Registry](/integrations/azure-schema-registry.md) * [Backstage](/integrations/backstage.md) * [Github](/integrations/github.md) * [Federation](/federation.md) * [Custom integrations](/services.md) ### Company * [About Us](/about-us.md) * [Terms of service](/terms.md) * [Privacy policy](/privacy.md) ### Resources * [Blog](/blog.md) * [Videos](https://www.youtube.com/@event-catalog/videos) * [Learn event-driven architecture](https://eda-visuals.boyney.io/) * [Community](https://discord.com/invite/3rjaZMmrAm) * [Support & Services](https://www.eventcatalog.dev/services) © 2026 Copyright EventCatalog Ltd. EventCatalog was founded by David Boyne and is hosted by EventCatalog Ltd. EventCatalog Ltd is a registered company in England and Wales with number: 15764703 --- [Skip to main content](#__docusaurus_skipToContent_fallback) 🚀 [New: Index and search your schemas across your organization](/docs/development/guides/schemas/fields-explorer.md) # EventCatalog
Enterprise Support Interested in collaborating with us? Our offerings include dedicated support, priority assistance, feature development, custom integrations, and more. Email us at hello\@eventcatalog.dev [Contact us](mailto:hello@eventcatalog.dev?subject=Enterprise%20Support%20Inquiry)[Learn more →](#support-packages) Support packages ### Community Edition * * Support Level ( Community support ) * Support Channels ( Community Channels ) * * * * License ( Open-source under MIT license ) ### Enterprise Support * * Support Level ( Priority support ) * Support Channels ( Private support channel ) * * Integrated Providers ( Coming soon ) * Single Sign-On ( Coming soon ) * Hosting ( Coming soon ) * * On site visits * Workshops * Custom integrations * Priority feature development * * License ( EventCatalog commercial license ) | | Community Edition | Enterprise Support | | ---------------------------- | --------------------------------------------- | --------------------------------------------- | | Support | | | | Support Level | Community support | Priority support | | Support Channels | Community Channels | Private support channel | | Cloud solutions | | | | Integrated Providers | Not included in Basic | Coming soon | | Single Sign-On | Not included in Basic | Coming soon | | Hosting | Not included in Basic | Coming soon | | Professional Services | | | | On site visits | Not included in Basic | Included in Essential | | Workshops | Not included in Basic | Included in Essential | | Custom integrations | Not included in Basic | Included in Essential | | Priority feature development | Not included in Basic | Included in Essential | | Licensing | | | | License | Open-source under MIT license | EventCatalog commercial license | EventCatalog [GitHub](https://github.com/event-catalog/eventcatalog)[Twitter](https://x.com/event_catalog)[LinkedIn](https://www.linkedin.com/company/eventcatalog/)[YouTube](https://www.youtube.com/@event-catalog/videos) ### Product * [EventCatalog](/features/documentation.md) * [EventCatalog SDK](/docs/sdk.md) * [Pricing](/pricing.md) * [Changelog](/changelog.md) * [Open Source](https://github.com/event-catalog/eventcatalog) ### Integrations * [AsyncAPI](/specifications/asyncapi.md) * [OpenAPI](/integrations/openapi.md) * [Confluent Schema Registry](/integrations/confluent-schema-registry.md) * [Apicurio Registry](/integrations/apicurio.md) * [Amazon EventBridge](/integrations/amazon-eventbridge.md) * [Amazon API Gateway](/integrations/amazon-api-gateway.md) * [Azure Schema Registry](/integrations/azure-schema-registry.md) * [Backstage](/integrations/backstage.md) * [Github](/integrations/github.md) * [Federation](/federation.md) * [Custom integrations](/services.md) ### Company * [About Us](/about-us.md) * [Terms of service](/terms.md) * [Privacy policy](/privacy.md) ### Resources * [Blog](/blog.md) * [Videos](https://www.youtube.com/@event-catalog/videos) * [Learn event-driven architecture](https://eda-visuals.boyney.io/) * [Community](https://discord.com/invite/3rjaZMmrAm) * [Support & Services](https://www.eventcatalog.dev/services) © 2026 Copyright EventCatalog Ltd. EventCatalog was founded by David Boyne and is hosted by EventCatalog Ltd. EventCatalog Ltd is a registered company in England and Wales with number: 15764703 --- # Bring your own models to find the information you need in seconds, not days. Ask questions about your architecture using your own models.
Save time, and get the insights you need to move faster. [Get started →](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md) ![EventCatalog Visualizer Screenshot](/img/ai-demo.png) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) --- # Go from documentation to design Use your existing services and events to plan new workflows, model changes, and visualize what's next [Get started →](/docs/development/getting-started/installation.md) [Try EventCatalog Studio →](https://app.eventcatalog.studio/playground) ![EventCatalog Visualizer Screenshot](/img/studio-app-2.png) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) --- # Track changes across your architecture Document and write changelogs for your messages and services. Help your teams understand why changes are made. [Get started →](/docs/development/getting-started/installation.md) [View changelog demo](https://demo.eventcatalog.dev/docs/events/InventoryAdjusted/1.0.1/changelog) ![EventCatalog Visualizer Screenshot](/img/changelog1.png) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) --- # Architecture documentation your team will actually use. Document your domains, services, events, and schemas in Markdown, and keep them in sync with your OpenAPI, AsyncAPI, and schema registry specs automatically. Open source. Self-hosted. AI-ready. [Start documenting](/docs/development/getting-started/installation.md)[View the demo](https://demo.eventcatalog.dev) ![EventCatalog Documentation Screenshot](/img/hero-banner-5.png) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) **In distributed systems, if you can't find it, it doesn't exist.**
When every service, event, and schema has an owner and clear relationships, teams can reason about change before it breaks something. ## Find what exists. Find who owns it. No more searching across repos to understand the system Document your domains, services, and messages.
Stop asking in Slack. Find what you need in seconds. Search by name. Query by AI. Both work. Find what you need through search, APIs, or the built-in MCP server, directly from your IDE. ![EventCatalog Visualizer Screenshot](/img/hero-banner-5.png) Your specs change. Your docs update. Connect your OpenAPI, AsyncAPI, or broker specs. Run one command in CI/CD. Your catalog updates automatically. Devs find what they need. Architects see the big picture. PMs finally understand the system. One catalog serves every audience. Developers search for schemas. Architects trace dependencies. PMs explore business flows. API SDK YAML CLI ## Your specs change. Your docs update automatically.
Connect your OpenAPI, AsyncAPI, or schema registry specs. EventCatalog generates and updates documentation from them automatically. Run npm run generate locally or in CI/CD. Your catalog updates in seconds. Diagrams, context, and business language you wrote by hand stay untouched. Any schema, any broker, any service. [Explore Integrations →](/integrations.md)[Contact us](mailto:hello@eventcatalog.dev) ### Your Integrations [![OpenAPI](/img/integrations/openapi.svg)](/docs/plugins/openapi/intro.md)[![AsyncAPI](/img/integrations/asyncapi.svg)](/docs/plugins/asyncapi/intro.md)[![GraphQL](/img/integrations/graphql.svg)](/docs/plugins/graphql/intro.md)[![Backstage](/img/integrations/backstage.svg)](/docs/plugins/backstage/intro.md)[![Apicurio](/img/integrations/apicurio.png)](/docs/plugins/apicurio/intro.md)[![AWS](/img/integrations/aws-dark.svg)](/integrations.md)[![Azure](/img/integrations/azure.svg)](/integrations.md)[![GCP](/img/integrations/gcp.svg)](/integrations.md)[![Confluent](/img/integrations/confluent.svg)](/docs/plugins/confluent-schema-registry/intro.md)[![GitHub](/img/integrations/github-dark.svg)](/docs/plugins/github/intro.md) terminal $ npm run generate Generating documentation... ### Live Documentation ![EventCatalog Documentation Interface](/img/custom-docs.png) ✓ Auto-generated from your specifications ## Any specification, any broker, any schema Bring what you already have OpenAPI, AsyncAPI, GraphQL, Avro, Protobuf, JSON Schema. Import them all. EventCatalog wraps each spec with ownership, relationships, and diagrams. No more spec sprawl Specs from different repos, teams, and registries show up in one catalog. Assign each to a domain, a service, and an owner. ![EventCatalog Visualizer Screenshot](/img/openapi-example.png) Version every spec Every schema version is preserved. Compare what changed between releases, and see exactly when a breaking change was introduced. One catalog, every audience Engineers find schemas. Architects map boundaries. PMs trace business processes. All from the same Git-based catalog. ## Ask your architecture anything "What services consume OrderCreated?" "Who owns the Payments domain?" Get real answers from your [MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) or [AI assistant](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md) without leaving your IDE. Works with Claude, Cursor, VS Code, Windsurf, and any MCP-compatible tool. [Set up MCP Server](/docs/development/ask-your-architecture/mcp-server/introduction.md)[Explore demo](https://demo.eventcatalog.dev) Claude Code EventCatalog MCP Server U What services consume the OrderCreated event? AI ✓ Found OrderCreated event The following services consume this event: 1\. Inventory Service Updates stock levels when orders are created 2\. Notification Service Sends confirmation emails to customers 3\. Analytics Service Tracks order metrics and trends → View full documentation at /docs/events/OrderCreated ## ADRs, runbooks, RFCs, alongside your architecture Bring your ADRs, design docs, runbooks, and RFCs into EventCatalog with [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). Every doc gets ownership, versioning, and discoverability. Architecture Decision Records (ADRs), design docs, runbooks, RFCs, and more - all in one place with proper ownership and discoverability. No more sprawl across Confluence, Notion, and scattered Git repos. Your architecture docs and your team docs live in the same place. [See custom docs](/docs/development/bring-your-own-documentation/custom-pages/introduction.md) ### ADR-003: Event-Driven Architecture Active Decision to adopt event-driven patterns for order processing Architecture TeamUpdated 2 days ago ### Payment Service Deployment Runbook Step-by-step guide for deploying payment service updates DevOps TeamUpdated 1 week ago ### RFC-012: API Versioning Strategy Draft Proposal for standardizing API versioning across services Platform TeamUpdated 3 days ago ## Start for free Join the teams behind 31,000+ catalogs
Self hosting documentation and governance for your organization. [Get started](/docs/development/getting-started/installation.md)[See the demo →](https://demo.eventcatalog.dev) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) --- # Ask your architecture
anything. Your team explores the catalog in a browser. Your AI tools query it via MCP. Both get answers from the same catalog. Built-in MCP server with 15 tools and 9 resources. Fully self-hosted. [Set up MCP Server](/docs/development/ask-your-architecture/mcp-server/introduction.md)[Read the announcement](/blog/built-in-mcp-server.md) DomainsServicesEventsSchemasOpenAPIFlows EventCatalog MCP $ Your system has 4 domains: 1 .Orders handles order lifecycle 2 .Payments processes transactions 3 .Inventory manages stock levels 4 .Notifications sends alerts and emails $ Click a badge to see different queries ## Your architecture, queryable from any AI tool Every EventCatalog ships with a built-in MCP server. Connect Claude, Cursor, VS Code, or any MCP-compatible tool and query your architecture without leaving your editor. Claude MCP Server EventCatalog Query What events does OrderService publish? Response OrderService publishes 4 events: OrderCreated, OrderUpdated, OrderShipped, OrderCancelled #### 15 tools, 9 resources, out of the box Query domains, services, events, schemas, OpenAPI specs, AsyncAPI specs, channels, and more. No configuration needed. #### Works where your engineers already work Claude Desktop, Cursor, Windsurf, VS Code, or any MCP-compatible client. Connects in minutes. #### One model, two audiences Humans get a visual catalog. AI gets structured access. Both reason from the same model. #### No additional infrastructure Built into every EventCatalog instance. Nothing new to deploy or manage. [Set up MCP Server](/docs/development/ask-your-architecture/mcp-server/getting-started.md) ## Stop wasting time. Start asking. Your architecture knowledge shouldn't be locked in wikis, Slack threads, and people's heads. ✕ Searching Confluence for 20 minutes Ask your catalog and get the answer in seconds ✕ Context-switching between editor and docs Query your catalog directly from your IDE ✕ Breaking changes discovered in production Understand blast radius before you ship ✕ Asking around to find who owns a service Every resource has an owner. One query to find them. ✕ Manually checking schema compatibility See every consumer before you change a schema ✕ New engineers lost in the architecture New hires ask the catalog, not the team ![EventCatalog Chat Interface](/img/blogs/3.0.0/ai.png) ## Ask your catalog, not your colleagues A built-in chat interface so your team can ask architecture questions directly in the browser. No Slack thread required. #### Bring Your Own Models Use OpenAI, Anthropic, or even browser-based models. You choose. #### Answers grounded in your architecture "What events does OrderService publish?" Answers come from your documented architecture, not hallucinated guesses. #### Custom Prompts Define your organization's best practices and standards as reusable prompts. [Try the AI Assistant](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md) ## Make your architecture readable by any AI agent EventCatalog auto-generates llms.txt and schemas.txt so AI agents can discover and understand your architecture without custom integrations. #### llms.txt Domains, services, events, and docs, structured so any AI agent can reason about your architecture. #### schemas.txt Every schema in one file: OpenAPI, AsyncAPI, JSON Schema, Avro, Protobuf. AI tools get full contract context. #### Always current, zero maintenance Regenerated on every build. When your catalog updates, your AI context updates too. [Set up llms.txt](/docs/development/developer-tools/llms.txt.md) llms.txtschemas.txt ``` # EventCatalog Architecture ## Domains - Orders: Manages order lifecycle - Payments: Handles transactions - Inventory: Stock management ## Services - OrderService: /services/OrderService - PaymentService: /services/PaymentService - InventoryService: /services/InventoryService ## Events - OrderCreated: /events/OrderCreated - PaymentProcessed: /events/PaymentProcessed - StockUpdated: /events/StockUpdated ``` your-infrastructure EventCatalog runs on your servers Architecture docs stay internal MCP server runs locally AI models are your choice $No data leaves your network ## Self-hosted. Your data never leaves. Your architecture docs, AI queries, and catalog data all stay on your infrastructure. No external calls. No vendor lock-in. Perfect for regulated industries. #### Your infrastructure, your rules Run on AWS, Azure, GCP, or your own servers. Static site, deploy anywhere you serve HTML. #### No telemetry. No phone home. The MCP server and AI assistant run entirely within your network. Nothing leaves unless you choose to send it. #### Bring Your Own Models OpenAI, Anthropic, local models, or browser-based AI. No vendor lock-in on the model layer either. [Deploy EventCatalog](/docs/development/getting-started/installation.md) ## Make your architecture queryable today Join the teams behind 31,000+ catalogs
Self hosting documentation and governance for your organization. [Get started](/docs/development/getting-started/installation.md)[See the demo →](https://demo.eventcatalog.dev) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) --- # See your system as it actually works. Stop guessing how services connect. See every dependency and message flow across your entire system. Generated from your documentation, not drawn by hand.
Always up to date. [Explore the visualizer](/docs/development/getting-started/installation.md)[View demo](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3) ![EventCatalog Visualizer Screenshot](/img/hero-banner-6.png) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) **You can't change what you can't see.**
When every service, event, and dependency is visible in one place, teams stop guessing and start shipping with confidence. ## Your architecture, mapped automatically Generated from your documentation, not drawn by hand. Domains, services, and messages in one view Start with the full picture, then drill into any domain, service, or message to see owners, schemas, and downstream dependencies. Explore message flows Trace how messages move between services. See what's downstream before you ship a change. ![EventCatalog Visualizer Screenshot](/img/hero-banner-9.png) From visualization to design Export any visualization to EventCatalog Studio to model new services, events, and boundaries before you build them. Embed in your documentation Drop live visualizations into any service or event page. They update when your catalog does. ## Visualize business flows, end to end Connect events to business value Events don't exist in isolation. Use [flows](/docs/development/guides/flows/introduction.md) to show how they fit into checkout, onboarding, payment processing, and the other processes your business runs on. More than just your services Flows include users, external APIs, third-party systems, and everything else that touches a business process. ![EventCatalog Visualizer Screenshot](/img/flows-2.png) Flows live inside your docs Embed flow visualizations directly in service or event pages, so the context is always right next to the diagram. PMs see the process. Engineers see the plumbing. PMs trace the business process. Engineers trace the services and messages underneath. One visualization serves both. ## Your diagrams, versioned and discoverable Keep diagrams next to the docs that explain them Diagrams sit alongside the services, events, and schemas they describe. Versioned in Git, discoverable by search. ![Miro](/img/integrations/miro.svg) Edit in Miro, see it in EventCatalog [Embed live Miro boards](/docs/development/components/components/embed-diagrams/miro.md) directly in your architecture docs. Changes sync automatically. ![EventCatalog Visualizer Screenshot](/img/miro-example.png) AI tools can read your diagrams Because diagrams are linked to real services and events, AI tools can explain flows and dependencies, not just display an image. Bring any diagram tool Mermaid, PlantUML, Draw\.io, C4, or custom SVGs. If you can export it, you can version it in EventCatalog. ## Automate visualizations Connect your OpenAPI specs, AsyncAPI definitions, or schema registries. EventCatalog generates the visualizations for you. No manual drawing. No diagrams that go stale. Your visualizations update every time your catalog does. Need something custom? Use the [EventCatalog SDK](/docs/sdk.md) to build your own plugins. [View all integrations](/integrations.md)[Explore the demo](https://demo.eventcatalog.dev) [![OpenAPI](/img/integrations/openapi.svg)](/integrations/openapi.md)[![AsyncAPI](/img/integrations/asyncapi.svg)](/integrations/asyncapi.md)[![GraphQL](/img/integrations/graphql.svg)](/integrations/graphql.md)[![AWS](/img/integrations/aws-dark.svg)](/integrations/amazon-eventbridge.md)[![Azure](/img/integrations/azure.svg)](/integrations/azure-eventgrid)[![GitHub](/img/integrations/github-dark.svg)](/federation.md)[![GitLab](/img/integrations/gitlab.svg)](/federation.md)[![Backstage](/img/integrations/backstage.svg)](/integrations/backstage.md)[![Confluent Schema Registry](/img/integrations/confluent.svg)](/integrations/confluent-schema-registry.md)[![Miro](/img/integrations/miro.svg)](/docs/development/components/components/embed-diagrams/miro.md) ## Start for free Join the teams behind 31,000+ catalogs
Self hosting documentation and governance for your organization. [Get started](/docs/development/getting-started/installation.md)[See the demo →](https://demo.eventcatalog.dev) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) --- [Support: Get support, workshops and custom solutions for your organization →](/services.md) # EventCatalog for Enterprise # Document architecture across your organization Get access to EventCatalog for Enterprise, all the features of EventCatalog, all the plugins and reporting.
With personalized dedicated support, onboarding and consulting. [Get started →](/docs/plugins/eventcatalog-federation/introduction.md) [Book a personalized demo](https://calendly.com/boyneyy123/30min) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) ![EventCatalog Visualizer Screenshot](/img/federation.png) Looking to onboard your team with EventCatalog? We offer consulting sessions, EventCatalog workshops, and custom solutions to meet your needs. Let us assist you! [Contact us](mailto:hello@eventcatalog.dev) ![](/img/federation-light.png) --- # Page Not Found We could not find what you were looking for. Please contact the owner of the site that linked you to the original URL and let them know their link is broken. --- [Skip to main content](#__docusaurus_skipToContent_fallback) 🚀 [New: Index and search your schemas across your organization](/docs/development/guides/schemas/fields-explorer.md) OpenAPI Service Integration Schema Registry Integration SchemaUpdated Event ApiDocGenerated Event SyncSchemas Command GenerateDocs Command # Integrate with your tools Generate documentation from schema registries, brokers, specifications, and more.
Sync your documentation with your specifications, schemas and brokers. ## Featured integrations Popular integrations used by teams around the world. [Specification](/integrations/openapi.md) [![Dub Logo](/img/logo.png)×![OpenAPI](/img/integrations/openapi.svg)](/integrations/openapi.md) [![OpenAPI](/img/integrations/openapi.svg)](/integrations/openapi.md) ### [OpenAPI](/integrations/openapi.md) [Import OpenAPI directly into EventCatalog to generate domains, services, channels and messages.](/integrations/openapi.md) [Specification](/integrations/asyncapi.md) [![Dub Logo](/img/logo.png)×![AsyncAPI](/img/integrations/asyncapi.svg)](/integrations/asyncapi.md) [![AsyncAPI](/img/integrations/asyncapi.svg)](/integrations/asyncapi.md) ### [AsyncAPI](/integrations/asyncapi.md) [Import AsyncAPI directly into EventCatalog to generate domains, services, channels and messages.](/integrations/asyncapi.md) [Specification](/integrations/graphql.md) [![Dub Logo](/img/logo.png)×![GraphQL](/img/integrations/graphql.svg)](/integrations/graphql.md) [![GraphQL](/img/integrations/graphql.svg)](/integrations/graphql.md) ### [GraphQL](/integrations/graphql.md) [Import GraphQL directly into EventCatalog to generate domains, services, channels and messages.](/integrations/graphql.md) [Developer Portal](/integrations/backstage.md) [![Dub Logo](/img/logo.png)×![Backstage](/img/integrations/backstage.svg)](/integrations/backstage.md) [![Backstage](/img/integrations/backstage.svg)](/integrations/backstage.md) ### [Backstage](/integrations/backstage.md) [Bring EventCatalog features directly into Backstage including documentation, visualizations, and more.](/integrations/backstage.md) ## All integrations AllSchema RegistriesDiagram ToolsDeveloper PortalsSpecificationsMCP Clients [![Amazon API Gateway logo](/img/integrations/api-gateway.svg)](/integrations/amazon-api-gateway.md) ### [Amazon API Gateway](/integrations/amazon-api-gateway.md) [Import OpenAPI files from your APIs on AWS. Transform them into documentation.](/integrations/amazon-api-gateway.md) [![Amazon EventBridge logo](/img/integrations/eventbridge.svg)](/integrations/amazon-eventbridge.md) ### [Amazon EventBridge](/integrations/amazon-eventbridge.md) [Import schemas from EventBridge to EventCatalog, with custom filters. Assign them to producers, consumers and owners.](/integrations/amazon-eventbridge.md) [![Apicurio logo](/img/integrations/apicurio.png)](/integrations/apicurio.md) ### [Apicurio](/integrations/apicurio.md) [Import schemas from Apicurio to EventCatalog, with custom filters. Assign them to producers, consumers and owners.](/integrations/apicurio.md) [![AsyncAPI logo](/img/integrations/asyncapi.svg)](/integrations/asyncapi.md) ### [AsyncAPI](/integrations/asyncapi.md) [Import AsyncAPI directly into EventCatalog to generate domains, services, channels and messages.](/integrations/asyncapi.md) [![Atlassian Compass logo](/img/integrations/atlassian-compass.svg)](/integrations/atlassian-compass.md) ### [Atlassian Compass](/integrations/atlassian-compass.md) [Import Atlassian Compass to EventCatalog to generate domains, services, channels and messages.](/integrations/atlassian-compass.md) [![AWS Glue Schema Registry logo](/img/integrations/glue.svg)](/integrations/aws-glue-registry.md) ### [AWS Glue Schema Registry](/integrations/aws-glue-registry.md) [Import and sync schemas from AWS Glue Schema Registry to EventCatalog, with custom filters. Assign them to producers, consumers and owners.](/integrations/aws-glue-registry.md) [![Azure Schema Registry logo](/img/integrations/azure.svg)](/integrations/azure-schema-registry.md) ### [Azure Schema Registry](/integrations/azure-schema-registry.md) [Import schemas from Azure Schema Registry to EventCatalog, with custom filters. Assign them to producers, consumers and owners.](/integrations/azure-schema-registry.md) [![Backstage logo](/img/integrations/backstage.svg)](/integrations/backstage.md) ### [Backstage](/integrations/backstage.md) [Bring EventCatalog features directly into Backstage including documentation, visualizations, and more.](/integrations/backstage.md) [![Claude logo](/img/integrations/claude.svg)](/integrations/claude.md) ### [Claude](/integrations/claude.md) [Import Claude boards into EventCatalog to generate domains, services, channels and messages.](/integrations/claude.md) [![Confluent Schema Registry logo](/img/integrations/confluent.svg)](/integrations/confluent-schema-registry.md) ### [Confluent Schema Registry](/integrations/confluent-schema-registry.md) [Import schemas directly from Confluent Cloud, assign them to producers, consumers and domains.](/integrations/confluent-schema-registry.md) [![Cursor logo](/img/integrations/cursor.jpeg)](/integrations/cursor.md) ### [Cursor](/integrations/cursor.md) [Import Cursor boards into EventCatalog to generate domains, services, channels and messages.](/integrations/cursor.md) [![DrawIO logo](/img/integrations/drawio.svg)](/integrations/drawio.md) ### [DrawIO](/integrations/drawio.md) [Import DrawIO diagrams into EventCatalog to generate domains, services, channels and messages.](/integrations/drawio.md) [![FigJam logo](/img/integrations/figjam.svg)](/integrations/figjam.md) ### [FigJam](/integrations/figjam.md) [Import FigJam boards into EventCatalog to generate domains, services, channels and messages.](/integrations/figjam.md) [![GitHub logo](/img/integrations/github-dark.svg)](/integrations/github.md) ### [GitHub](/integrations/github.md) [Import schemas from GitHub repositories into EventCatalog to generate domains, services, channels and messages.](/integrations/github.md) [![GraphQL logo](/img/integrations/graphql.svg)](/integrations/graphql.md) ### [GraphQL](/integrations/graphql.md) [Import GraphQL directly into EventCatalog to generate domains, services, channels and messages.](/integrations/graphql.md) [![IcePanel logo](/img/integrations/icepanel.jpeg)](/integrations/icepanel.md) ### [IcePanel](/integrations/icepanel.md) [Import IcePanel diagrams into EventCatalog to generate domains, services, channels and messages.](/integrations/icepanel.md) [![Lucid logo](/img/integrations/lucid.svg)](/integrations/lucid.md) ### [Lucid](/integrations/lucid.md) [Import Lucid charts into EventCatalog to generate domains, services, channels and messages.](/integrations/lucid.md) [![Miro logo](/img/integrations/miro.svg)](/integrations/miro.md) ### [Miro](/integrations/miro.md) [Import Miro boards into EventCatalog to generate domains, services, channels and messages.](/integrations/miro.md) [![OpenAPI logo](/img/integrations/openapi.svg)](/integrations/openapi.md) ### [OpenAPI](/integrations/openapi.md) [Import OpenAPI directly into EventCatalog to generate domains, services, channels and messages.](/integrations/openapi.md) [![Windsurf logo](/img/integrations/windsurf.svg)](/integrations/windsurf.md) ### [Windsurf](/integrations/windsurf.md) [Import Windsurf boards into EventCatalog to generate domains, services, channels and messages.](/integrations/windsurf.md) [![Missing an integration? logo](/img/integrations/plug.svg)](https://github.com/event-catalog/generators/issues/new?template=new-integration.yml) ### [Missing an integration?](https://github.com/event-catalog/generators/issues/new?template=new-integration.yml) [Let us know if there is an integration you need.](https://github.com/event-catalog/generators/issues/new?template=new-integration.yml) EventCatalog [GitHub](https://github.com/event-catalog/eventcatalog)[Twitter](https://x.com/event_catalog)[LinkedIn](https://www.linkedin.com/company/eventcatalog/)[YouTube](https://www.youtube.com/@event-catalog/videos) ### Product * [EventCatalog](/features/documentation.md) * [EventCatalog SDK](/docs/sdk.md) * [Pricing](/pricing.md) * [Changelog](/changelog.md) * [Open Source](https://github.com/event-catalog/eventcatalog) ### Integrations * [AsyncAPI](/specifications/asyncapi.md) * [OpenAPI](/integrations/openapi.md) * [Confluent Schema Registry](/integrations/confluent-schema-registry.md) * [Apicurio Registry](/integrations/apicurio.md) * [Amazon EventBridge](/integrations/amazon-eventbridge.md) * [Amazon API Gateway](/integrations/amazon-api-gateway.md) * [Azure Schema Registry](/integrations/azure-schema-registry.md) * [Backstage](/integrations/backstage.md) * [Github](/integrations/github.md) * [Federation](/federation.md) * [Custom integrations](/services.md) ### Company * [About Us](/about-us.md) * [Terms of service](/terms.md) * [Privacy policy](/privacy.md) ### Resources * [Blog](/blog.md) * [Videos](https://www.youtube.com/@event-catalog/videos) * [Learn event-driven architecture](https://eda-visuals.boyney.io/) * [Community](https://discord.com/invite/3rjaZMmrAm) * [Support & Services](https://www.eventcatalog.dev/services) © 2026 Copyright EventCatalog Ltd. EventCatalog was founded by David Boyne and is hosted by EventCatalog Ltd. EventCatalog Ltd is a registered company in England and Wales with number: 15764703 --- ![Amazon API Gateway](/img/integrations/api-gateway.svg) # Amazon API Gateway By EventCatalog Import API Gateway OpenAPI specifications directly into EventCatalog. [Install →](/docs/plugins/amazon-apigateway/intro.md) ![Amazon API Gateway](/img/integrations/covers/api-gateway.png) ### Quick start Want to quickly try it out? Run this command to create a new EventCatalog project with this integration already configured: ``` npx @eventcatalog/create-eventcatalog@latest my-catalog --template amazon-apigateway ``` Already have an EventCatalog project? Read our [getting started guide.](/docs/plugins/amazon-apigateway/intro.md) ## Overview This plugin allows you to import your [Amazon API Gateway](https://aws.amazon.com/api-gateway/) OpenAPI specifications into EventCatalog. The plugin will download the OpenAPI specification, add custom EventCatalog extensions to the specification and then use the [OpenAPI plugin](/docs/plugins/openapi/intro.md) to import the specification into EventCatalog. Using EventCatalog you can add semantic meaning to your API Gateway routes and map them to commands, events and queries in your catalog, assign owners, domains and services. Every time you build EventCatalog you can pull in the latest API Gateway specifications and map them to your catalog. ## Core Features The EventCatalog Amazon API Gateway plugin can provide you with many features: * ⭐️ Generate domains, services, channels and messages into your catalog * ⭐️ Import and map your API Gateway specifications into EventCatalog * ⭐️ Map API Gateway routes to commands, events and queries in your catalog * ⭐️ Add semantic meaning to your API Gateway routes * ⭐️ and more.... ## Examples * [Amazon API Gateway Example](https://github.com/event-catalog/generators/tree/main/examples/generator-amazon-apigateway/basic) * Pull OpenAPI specifications from Amazon API Gateway and map to services, domains and messages. Use custom filters to map routes to services. ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Amazon EventBridge](/img/integrations/eventbridge.svg) # Amazon EventBridge By EventCatalog Import EventBridge schemas directly into EventCatalog. [Install →](/docs/plugins/eventbridge/intro.md)[Watch the demo ](https://www.youtube.com/watch?v=MeBuwAflwM4) ![Amazon EventBridge](/img/integrations/covers/eventbridge.png) ### Quick start Want to quickly try it out? Run this command to create a new EventCatalog project with this integration already configured: ``` npx @eventcatalog/create-eventcatalog@latest my-catalog --template eventbridge ``` Already have an EventCatalog project? Read our [getting started guide.](/docs/plugins/eventbridge/intro.md) ## Overview This plugin allows you to import your Amazon EventBridge schemas directly into EventCatalog in JSONDraft and OpenAPI formats. For each event imported into EventCatalog, you can add semantic meaning to your events. This helps you and your teams understand and discover events in your event-driven architecture. EventCatalog will keep your schemas up to date with the latest versions from EventBridge. Provide teams with more than just a schema, provide them with a rich understanding of your event-driven architecture. ## Core Features The EventCatalog Amazon EventBridge plugin can provide you with many features: * Generate domains, services, channels and messages into your catalog * [Automatically version your changes in EventCatalog in sync with your registry versions](#automatic-versioning) * [Allow you to write and persist custom markdown between changes](#persist-markdown) * [Display your JSONDraft and OpenAPI schemas for each event in EventCatalog](#downloading-schemas) * [Filter events to match to your services](#using-filters-to-map-events-to-your-services) * Visualize your architecture * Download schemas and code bindings * and more.... ## Examples * [Amazon EventBridge Example](https://github.com/event-catalog/generators/tree/main/examples/generator-eventbridge/basic) * [Using custom schema registry](https://github.com/event-catalog/generators/tree/main/examples/generator-eventbridge/custom-registry) ## Configure Install and configure the plugin directly with your EventCatalog project. Use custom filters to map events into your services. ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Apicurio Registry](/img/integrations/apicurio.png) # Apicurio Registry By EventCatalog Import your Apicurio Registry schemas and specifications into EventCatalog. Keep them in sync with your documentation. Add semantic meaning to your schemas, assign them to services, domains and owners. [Install →](/docs/plugins/apicurio/intro.md)[Watch the demo ](https://www.youtube.com/watch?v=0DmGWa0sr6w) ![Apicurio Registry](/img/integrations/covers/apicurio.png) ### Quick start Want to quickly try it out? Run this command to create a new EventCatalog project with this integration already configured: ``` npm install @eventcatalog/generator-apicurio ``` Already have an EventCatalog project? Read our [getting started guide.](/docs/plugins/apicurio/intro.md) ## Overview This plugin allows you to import your Apicurio Registry schemas and specifications into EventCatalog, keeping them in sync with your documentation. With EventCatalog you can add semantic meaning to your schemas, and optionally assign them to services, domains and owners. You can also integrate OpenAPI and AsyncAPI specifications stored in your registry to generate comprehensive service documentation. ## Core Features The EventCatalog Apicurio Registry plugin provides you with many powerful features: * **Import schemas from Apicurio Registry** - Import all schemas or filter specific ones you want to document * **Support for multiple schema formats** - Avro, JSON Schema, Protobuf, AsyncAPI, OpenAPI, and more * **Automatic versioning** - Track all versions of your schemas with `includeAllVersions` option * **Service assignment** - Assign schemas to services (producers and consumers) using flexible filters * **Message type classification** - Document schemas as events, commands, or queries for semantic clarity * **Flexible filtering system** - Use exact matching, prefix, suffix, or includes filters to organize schemas * **Domain organization** - Assign services and schemas to domains for better architecture visualization * **OpenAPI/AsyncAPI integration** - Attach specifications and use nested generators for complete documentation * **Add semantic meaning** - Let your teams understand the business context and purpose of your schemas * **Service relationships** - Document service-to-service communication with `writesTo` and `readsFrom` * **Visualize your architecture** - Use the EventCatalog Visualizer to see how schemas, services and domains connect * **EventCatalog Chat** - Talk to your schemas, services, and domains to get insights in seconds * **Persistent documentation** - Your semantic meaning is preserved between schema version updates * **Bearer token authentication** - Support for secured Apicurio Registry instances ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![AsyncAPI](/img/integrations/asyncapi.svg) # AsyncAPI By EventCatalog Turn your AsyncAPI specs into discoverable, versioned architecture documentation with automatic visualizations and relationship mapping. [Install →](/docs/plugins/asyncapi/intro.md)[Try it →](https://try.eventcatalog.dev/) ![AsyncAPI](/img/integrations/covers/asyncapi.png) ### Quick start Want to quickly try it out? Run this command to create a new EventCatalog project with this integration already configured: ``` npx @eventcatalog/create-eventcatalog@latest my-catalog --template asyncapi ``` Already have an EventCatalog project? Read our [getting started guide.](/docs/plugins/asyncapi/intro.md) ## Overview Your AsyncAPI specs define your event-driven architecture. EventCatalog makes them discoverable, versioned, and visible across your entire organization. Point the AsyncAPI plugin at your specification files and EventCatalog generates domains, services, channels, and messages automatically. You get visualizations, relationship mapping, and version history out of the box. Your teams get a single place to find, understand, and track every event and channel in your architecture. No more digging through repositories to find the right spec. No more outdated Confluence pages describing events that changed three sprints ago. **[Try the playground →](https://try.eventcatalog.dev)** — Drop your AsyncAPI file and see the result in seconds. "One of the biggest challenges and risks of EDA is the critical lack of discoverability and governance. EventCatalog, together with AsyncAPI, makes sure your EDA stays controlled, preventing it from spiraling into chaos." — Fran Mendez, Creator of AsyncAPI ## Core Features * [Generate domains, services, channels, and messages from your AsyncAPI specification files](/docs/plugins/asyncapi/intro.md) — your catalog stays in sync with your specs * [Fetch AsyncAPI files by URL](/docs/plugins/asyncapi/features.md#fetch-asyncapi-files-by-url) — automate your catalog from remote specs in CI/CD * [Map messages to commands, queries, and events with custom extensions](/docs/plugins/asyncapi/features.md#mapping-messages-events-commands-or-queries) — add architectural meaning to your channels * [Persist custom markdown between versions](#persist-markdown) — add context and documentation that survives spec updates * [Automatic versioning in sync with your AsyncAPI versions](#automatic-versioning) — track every change with full version history * [Display message schemas directly in EventCatalog](#downloading-schemas) — teams explore your events without switching tools * Download schemas and AsyncAPI files — versioned alongside your documentation ## Examples * [AsyncAPI Example](https://github.com/event-catalog/generators/tree/main/examples/generator-asyncapi/basic) — basic setup and generation * [Fetch from remote URLs](https://github.com/event-catalog/generators/tree/main/examples/generator-asyncapi/fetch-from-remote-urls) — pull specs from any URL * [Version AsyncAPI messages](https://github.com/event-catalog/generators/tree/main/examples/generator-asyncapi/independent-message-versioning) — independent message versioning * [Map messages to commands, events, and queries](https://github.com/event-catalog/generators/tree/main/examples/generator-asyncapi/mapping-commands-events-queries) — custom extensions in action * [Assign ownership to teams](https://github.com/event-catalog/generators/tree/main/examples/generator-asyncapi/message-ownership) — connect services to their owners ## Configure Add the plugin to your EventCatalog project and start generating documentation from your AsyncAPI specs. Use custom extensions to map messages into events, commands, and queries. ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Atlassian Compass](/img/integrations/compass.svg) # Atlassian Compass By Postcode Lottery Import Atlassian Compass directly into EventCatalog to generate domains, services, channels and messages. [Install →](https://github.com/IsmaelMartinez/generator-atlassian-compass-event-catalog) ![Atlassian Compass](/img/integrations/covers/compass.png) ## Overview Generate EventCatalog services from a [Atlassian Compass file](https://developer.atlassian.com/cloud/compass/config-as-code/structure-and-contents-of-a-compass-yml-file/). ## Configure Install and configure the plugin directly with your EventCatalog project. [Read the documentation on GitHub](https://github.com/IsmaelMartinez/generator-atlassian-compass-event-catalog) ## Pricing This plugin was developed by the community and is free to use and does not require a commercial license. --- ![AWS Glue Schema Registry](/img/integrations/glue.svg) # AWS Glue Schema Registry By EventCatalog Import and Sync AWS Glue schemas directly into EventCatalog. [Install →](/docs/plugins/aws-glue-registry/intro.md)[Watch the demo ](https://www.youtube.com/watch?v=cUQDdisz1wg) ![AWS Glue Schema Registry](/img/integrations/covers/glue.png) ## Overview This plugin allows you to import your AWS Glue schemas directly into EventCatalog. This lets you keep your schemas in sync with your documentation, assign your schemas to producers and consumers, and help your teams understand how your schemas are being using in your organization. ## Core Features The EventCatalog AWS Glue plugin can provide you with many features: * Import schemas directly from AWS Glue Schema Registry and keep them in sync with your documentation * Assign schemas to producers and consumers * Use filters to assign your schemas to your producer and consumers (e.g tag matching, prefix, suffix, etc) * Generate domains, services, channels and messages into your catalog * Add more meaning to your schemas with custom markdown. Persisted between changes to your schemas. * Visualize your schemas and let your teams download and explore them in your catalog. * Use EventCatalog MCP and AI features to talk to your schemas, and find insights in seconds. * and more.... ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Azure Schema Registry](/img/integrations/azure.svg) # Azure Schema Registry By EventCatalog Bring discoverability and governance to your Azure Schema Registry with EventCatalog. Sync your schemas with your documentation and visualize your architecture. [Install →](/docs/plugins/azure-schema-registry/intro.md)[Watch the demo ](https://www.youtube.com/watch?v=rNDa2JDyr_A) ![Azure Schema Registry](/img/integrations/covers/azure-schema-registry.png) ### Quick start Want to quickly try it out? Run this command to create a new EventCatalog project with this integration already configured: ``` npm install @eventcatalog/generator-azure-schema-registry ``` Already have an EventCatalog project? Read our [getting started guide.](/docs/plugins/azure-schema-registry/intro.md) ## Overview This plugin allows you to import your schemas from your Azure Schema Registry into EventCatalog, keep them in sync with your documentation. With EventCatalog you can add semantic meaning to your schemas, and optionally assign them to services (producers and consumers), domains and owners. You can use [EventCatalog MCP](/docs/development/ask-your-architecture/mcp-server/introduction.md) to get access to your schemas in your LLM or code editor, or use the [EventCatalog Schema Explorer](/docs/development/guides/schemas/schema-explorer.md) to quickly find schemas in your architecture, and understand the history of your schemas. ## Core Features The EventCatalog Azure Schema Registry plugin can provide you with many features: * ⭐️ Import your schemas from your [Azure Schema Registry](/docs/plugins/azure-schema-registry/intro.md) into EventCatalog * ⭐️ Keep schemas in sync with your architecture documentation * ⭐️ Automatic versioning, as your schemas change they are versioned in EventCatalog alongside your documentation * ⭐️ Add semantic meaning (markdown) to your schemas. Provide business context to your schemas and added value * ⭐️ Assign schemas to services, domains, owners, producers and consumers * ⭐️ Visualize your Azure Event Hubs architecture with the [EventCatalog Visualizer](/features/visualization.md) * ⭐️ Quickly find and filter your schemas using the [Schema Explorer](/docs/development/guides/schemas/schema-explorer.md) * ⭐️ Download and view schemas in EventCatalog (Avro, JSON Schema) or through the [Schema API](/docs/development/guides/schemas/schema-api.md) * ⭐️ Use [EventCatalog MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) to get schemas for your LLMs ## Examples View examples of this plugin on GitHub: * [Basic Example](https://github.com/event-catalog/generators/tree/main/examples/generator-azure-schema-registry/basic) (Coming Soon) * Get started quickly with a basic setup importing schemas from Azure Schema Registry ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Backstage](/img/integrations/backstage.svg) # Backstage By EventCatalog Bring EventCatalog features directly into Backstage. [Install →](/docs/plugins/backstage/intro.md)[Watch the demo ](https://www.youtube.com/watch?v=mjf7qwoSAC4) ![Backstage](/img/integrations/covers/backstage.png) ## Overview This plugin allows you to import your EventCatalog directly into Backstage. Get EventCatalog features, visualizations and more directly in Backstage. ## Run a demo locally (2 minute setup) You can run a demo of this plugin by following these steps: 1. Clone the [backstage-eventcatalog-demo](https://github.com/event-catalog/backstage-eventcatalog-demo) repository. 2. Run `npm install` to install the dependencies. 3. Run `npm run dev` to start the Backstage application. This will give you a demo Backstage instance integrated with the [demo EventCatalog](https://demo.eventcatalog.dev). ## Core Features The EventCatalog Backstage plugin can provide you with many features: * 📃 Bring [EventCatalog documentation](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3) into Backstage * 📃 Custom tabs for your APIs and Services. Embed documentation, visualizations and searchable tables. * 📊 Embed [EventCatalog visualizer](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3) into your Backstage pages * 🔎 Embed the [EventCatalog discovery table](https://demo.eventcatalog.dev/discover/events) to quickly find messages for your services * ⭐ And much more... ## Configure Install the EventCatalog Backstage plugin into your Backstage instance. Read the [Getting started](/docs/plugins/backstage/intro.md) guide for more information. ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Claude Desktop](/img/integrations/claude.svg) # Claude Desktop By EventCatalog Talk to your architecture with Claude Desktop. Get architecture insights in seconds. [Install →](/docs/development/ask-your-architecture/mcp-server/getting-started.md#connect-clients)[Watch the demo ](https://www.youtube.com/watch?v=rTgNDPCZSdo) ![Claude Desktop](/img/integrations/covers/claude.png) ## Overview Claude Desktop + EventCatalog gives you a powerful new way to **interact with your architecture using natural language**. Ask Claude questions about your services, events, domains, or ownership. This integration works seamlessly with MCP (Model Catalog Protocol), allowing Claude to read your architecture documentation. * **Get fast answers.** * **Onboard new developers faster.** * **Enable non-engineers to query your architecture.** ## Example Prompts Here are a few useful questions you or your team can ask Claude once integrated: * “Which services produce the `InventoryAdjusted` event?” * “Who owns the `OrderService`?” * “What commands does the `Payments` domain support?” * “How is `UserSignedUp` consumed across the system?” * “What are all the events in the `Checkout` flow?” Claude can return answers with summaries, links to documentation, and even visual guidance using EventCatalog data. ## Value for Teams This integration can save time and unlock new workflows: **For Developers:**
No more context switching—get architecture answers instantly, even while coding or debugging. **For New Hires:**
Ramp up faster by asking natural-language questions about the system instead of navigating complex docs. **For Product Managers & Analysts:**
Query the live system design without needing technical deep-dives or help from engineers. **Save time:** Stop searching through repositories and Confluence pages. **Save money:** Reduce support overhead and onboarding time across the team. **Bridge silos:** Make architecture accessible across roles and departments. ## How It Works Claude connects to your EventCatalog instance via the MCP protocol. It reads your architecture models—schemas, services, events, domains—and provides conversational answers. ## Core Features * 💬 Ask Claude anything about your system architecture * 📡 Claude queries your EventCatalog using the MCP protocol * 📃 Supports semantic architecture models—domains, services, events, commands, ownership, etc. * 🔄 Works with synced schemas from GitHub, schema registries, and more * ✅ Enables cross-functional teams to understand architecture effortlessly ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Confluent Schema Registry](/img/integrations/confluent.svg) # Confluent Schema Registry By EventCatalog Import your Confluent schemas into EventCatalog, keep them in sync with your documentation. Add semantic meaning to your schemas, assign them to topics, services, domains and owners. [Install →](/docs/plugins/confluent-schema-registry/intro.md)[Watch the demo ](https://www.youtube.com/watch?v=NMZKnPKx-L0) ![Confluent Schema Registry](/img/integrations/covers/confluent.png) ### Quick start Want to quickly try it out? Run this command to create a new EventCatalog project with this integration already configured: ``` npx @eventcatalog/create-eventcatalog@latest my-catalog --template confluent ``` Already have an EventCatalog project? Read our [getting started guide.](/docs/plugins/confluent-schema-registry/intro.md) ## Overview This plugin allows you to import your Confluent schemas into EventCatalog, keep them in sync with your documentation. With EventCatalog you can add semantic meaning to your schemas, and optionally assign them to topics, services, domains and owners. ## Core Features The EventCatalog Confluent Schema Registry plugin can provide you with many features: * Import your Confluent schemas into EventCatalog, either all of them, or filter specific schemas you want * Automate your EventCatalog and fetch schemas from your Confluent Schema Registry. * Assign schemas to topics, producers and consumers. * Map your schemas as events or commands, and assign them to topics. * Add semantic meaning to your schemas. Let your teams understand the meaning of your schemas, and how they are used in your system. * Visualize your topics, schemas, producers and consumers in the catalog. * EventCatalog will keep your schemas in sync, and version your documentation when your schemas change. * Users can dive deeper into your architecture by exploring your schemas, topics, producers and consumers. * Using EventCatalog Chat you can talk to your schemas, topics, producers and consumers, let your teams get insights in seconds from your architecture, not days. * Assign owners to your schemas, topics, producers and consumers. Let teams quickly find who owns your schemas, topics, producers and consumers, and how you contact them. * Semantic meaning (your documentation) is persisted between versions of your schemas, so you can keep your documentation up to date as your schemas change. ## Examples You can view our examples of this plugin on GitHub: * [Basic Example](https://github.com/event-catalog/generators/tree/main/examples/generator-confluent-schema-registry/basic) * Dive straight into the code. In this example you start the schema registry locally, and import these schemas into your EventCatalog. Assigning them to topics, services, domains and owners. * [Document all schemas](https://github.com/event-catalog/generators/tree/main/examples/generator-confluent-schema-registry/document-all-schemas) * In this example you document all schemas in your Confluent Schema Registry. These are not assigned to any topics, services, domains or owners. Just a basic import. * [Talk to your topics](https://github.com/event-catalog/generators/tree/main/examples/generator-confluent-schema-registry/eventcatalog-chat-with-schemas-and-topics) * In this example you use EventCatalog Chat to talk to your architecture. We import schemas and topics, assign them to services, domains and owners. Then using EventCatalog Chat and "bring your own prompts" we can ask questions about your schemas, topics, services, domains and owners. Helping your teams get insights in seconds. ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Cursor](/img/integrations/cursor.jpeg) # Cursor By EventCatalog Bring your architecture documentation into Cursor. Get architecture insights in seconds. [Install →](/docs/development/ask-your-architecture/mcp-server/getting-started.md#connect-clients)[Watch the demo ](https://www.youtube.com/watch?v=rTgNDPCZSdo) ![Cursor](/img/integrations/covers/cursor.png) ## Overview Cursor + EventCatalog gives you a powerful new way to interact with your architecture using natural language in your IDE. Ask questions about your architecture directly in Cursor, and give Cursor the context it needs to answer your questions. This integration works seamlessly with MCP (Model Catalog Protocol), allowing Cursor to read your architecture documentation. ## Example Prompts Here are a few useful questions you or your team can ask Cursor once integrated: * “Which services produce the `InventoryAdjusted` event?” * “Who owns the `OrderService`?” * “What commands does the `Payments` domain support?” * “How is `UserSignedUp` consumed across the system?” * “What are all the events in the `Checkout` flow?” * "Create a new event schema following our best practices documented in EventCatalog" Cursor can return answers with summaries, links to documentation, and even visual guidance using EventCatalog data. ## Value for Teams This integration can save time and unlock new workflows: **For Developers**
No more context switching—get architecture answers instantly, even while coding or debugging. **For New Hires**
Ramp up faster by asking natural-language questions about the system instead of navigating complex docs. **Save time**: Stop searching through repositories, find the right documentation, and get answers to your questions. **Save money**: Reduce support overhead and onboarding time across the team.
**Bridge silos**: Make architecture accessible across roles and departments. **Improve quality**: Ensure that your architecture is consistent and follows best practices. ## How It Works Cursor connects to your EventCatalog instance via the MCP protocol. It reads your architecture models—schemas, services, events, domains—and provides conversational answers. ## Core Features * Ask Cursor anything about your system architecture * Cursor queries your EventCatalog using the MCP protocol * Supports semantic architecture models—domains, services, events, commands, ownership, and more * Works with synced schemas from GitHub, schema registries, and other sources * Enables cross-functional teams to understand architecture effortlessly ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![DrawIO](/img/integrations/drawio.svg) # DrawIO By EventCatalog Embed DrawIO diagrams into EventCatalog for viewing or editing. [Install →](/docs/development/components/components/embed-diagrams/drawio.md) ![DrawIO](/img/integrations/covers/drawio.png) ## Overview DrawIO is a popular tool for creating diagrams and collaborating with your teams. You can use DrawIO to create diagrams and then embed them into your EventCatalog documentation for viewing or editing. DrawIO diagrams can be embedded in your domains, services and messages or custom documentation pages. ## Embedding DrawIO diagrams into your EventCatalog You can also embed any DrawIO diagram into your EventCatalog using the `` component. ![DrawIO integration](/img/integrations/drawio/drawio-eventcatalog-embed.png) To get started you can read the [DrawIO component documentation](/docs/development/components/components/embed-diagrams/drawio.md) or view the demo application [here](https://demo.eventcatalog.dev/docs/custom/guides/event-storming/01-index). ## Pricing Plugin is part of the EventCatalog Starter, Scale or Enterprise plans. --- ![FigJam](/img/integrations/figjam.svg) # FigJam By EventCatalog Embed FigJam diagrams into your documentation [Install →](/docs/development/components/components/embed-diagrams/figjam.md) ![FigJam](/img/integrations/covers/figjam.png) ## Overview [FigJam](https://www.figma.com/figjam/) is a popular tool for diagrams and collaborating with your teams. You can embed FigJam diagrams into your EventCatalog documentation using the `` component. ## Embedding FigJam diagrams into your EventCatalog You can embed any FigJam diagram into your EventCatalog using the `` component. You can embed FigJam diagrams in your domains, services and messages. ![FigJam integration](/img/integrations/figjam/figjam-eventcatalog-embed.png) To get started you can read the [FigJam component documentation](/docs/development/components/components/embed-diagrams/figjam.md). ## Pricing Plugin is part of the EventCatalog Starter, Scale or Enterprise plans. --- ![GitHub](/img/integrations/github-dark.svg) # GitHub By EventCatalog Import and sync your schemas directly from GitHub to EventCatalog. [Install →](/docs/plugins/github/intro.md)[Watch the demo ](https://www.youtube.com/watch?v=o2ryPdBa-68) ![GitHub](/img/integrations/covers/github.png) ## Overview This plugin let's you pull and sync schemas from GitHub into EventCatalog, and keep them in sync with your documentation. With EventCatalog you can add semantic meaning to your schemas, and optionally assign them to producers, consumers, domains and owners. ## Core Features The EventCatalog GitHub plugin can provide you with many features: * 📃 Pull and sync your schemas from your GitHub repository to EventCatalog * 📃 Keep your schemas in sync with your producers and consumers documentation * 📃 Supports any schema format (e.g Avro, Protobuf, JSON) * 📃 Import all schemas, or specific folders/files * ⭐ **Go beyond a schema.** Add semantic meaning to your schemas, business logic and much more. Help your developers and teams understand the meaning behind the schemas with clear documentation and visualisations. * 📊 Visualise producers and consumers in your architecture ([demo](https://demo.eventcatalog.dev/visualiser)) * ⭐ Download synced schemas from EventCatalog (e.g Avro, Protobuf, JSON) ([demo](https://demo.eventcatalog.dev/docs/events/InventoryAdjusted/0.0.4)) * 📃 Assign schemas to **events**, **commands** and **queries** * ⭐ Discoverability feature (search, filter and more) ([demo](https://demo.eventcatalog.dev/discover/events)) * ⭐ And much more... ## Examples You can view our examples of this plugin on GitHub: * [Basic Example](https://github.com/event-catalog/generators/tree/main/examples/generator-github/basic) * Pull schemas and sync from GitHub into events, commands and queries in EventCatalog. * [Map schemas to producers and consumers](https://github.com/event-catalog/generators/tree/main/examples/generator-github/map-schemas-to-producers-and-consumers) * In this example we map schemas from GitHub to producers and consumers. Schemas are kept in sync whilst letting us document our architecture. ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![GraphQL](/img/integrations/graphql.svg) # GraphQL By EventCatalog Import GraphQL schemas directly into EventCatalog to generate domains, services, queries, mutations and subscriptions. [Install →](/docs/plugins/graphql/intro.md)[Watch the demo ](https://www.youtube.com/watch?v=J352QYLWQkw) ![GraphQL](/img/integrations/covers/graphql.png) ### Quick start Want to quickly try it out? Run this command to create a new EventCatalog project with this integration already configured: ``` npx @eventcatalog/create-eventcatalog@latest my-catalog --template graphql ``` Already have an EventCatalog project? Read our [getting started guide.](/docs/plugins/graphql/intro.md) ## Overview This plugin allows you to import your GraphQL schemas directly into EventCatalog to generate domains, services, queries, mutations (commands) and subscriptions (events). EventCatalog will transform your GraphQL schemas into rich documentation and visualizations for your teams to understand. Get more value from your GraphQL schemas, with automatic versioning, visualizations and semantic mapping to your event-driven architecture. ## Why GraphQL + EventCatalog? GraphQL APIs often serve as the interface layer for complex event-driven systems. While GraphQL provides excellent API documentation, it doesn't capture the full story of how your system works under the hood. **EventCatalog bridges this gap by:** * 🎯 **Mapping GraphQL operations to business capabilities** - Transform queries, mutations, and subscriptions into meaningful domain concepts * 📊 **Visualizing the bigger picture** - See how your GraphQL API fits into your overall system architecture * 🔄 **Connecting API operations to events** - Understand which mutations trigger events and which subscriptions consume them * 👥 **Improving team collaboration** - Give non-technical stakeholders a clear view of what your GraphQL API actually does * 📈 **Tracking API evolution** - Version your GraphQL schemas alongside your architecture documentation ## Core Features The EventCatalog GraphQL plugin will provide you with many powerful features: * ⭐️ Generate domains, services, queries, mutations (commands) and subscriptions (events) from your GraphQL schema files * ⭐️ Map GraphQL operations to events, commands and queries using custom EventCatalog extensions * ⭐️ Automatically version your changes in EventCatalog in sync with your GraphQL schema versions * ⭐️ Persist custom markdown documentation between schema updates * ⭐️ Display your GraphQL schemas, types and resolvers in the catalog * ⭐️ Download versioned GraphQL schemas and SDL files * ⭐️ Visualize GraphQL subscription flows as event streams * ⭐️ and more.... ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Helm](/img/integrations/helm.svg) # Helm By OSO Group Helm chart to deploy EventCatalog on Kubernetes [Install →](https://github.com/osodevops/helm-charts/tree/main/charts/eventcatalog) ![Helm](/img/integrations/covers/helm.png) ## Overview This guide provides detailed instructions for deploying EventCatalog using the Helm chart. You can use the default configuration or customize the deployment to suit your needs, including examples with and without a domain. ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Hookdeck integration](/img/integrations/hookdeck.jpg) # Hookdeck integration By Hookdeck Import event sources, destinations and webhooks into EventCatalog. [Install →](/docs/plugins/hookdeck/intro.md) ![Hookdeck integration](/img/integrations/covers/hookdeck.png) ## Overview This plugin allows you to import your event sources, destinations and webhooks into EventCatalog. ## Core Features The EventCatalog OpenAPI plugin can provide you with many features: * [Generate EventCatalog Services](/docs/plugins/hookdeck/intro.md#generate-services) from Hookdeck Sources and Destinations * [Auto-generate EventCatalog Messages](/docs/plugins/hookdeck/intro.md#generate-messages) from Hookdeck Requests and Events * [Auto-generate EventCatalog Message Schemas](/docs/plugins/hookdeck/intro.md#generate-schemas) from Hookdeck Requests and Events * [Provide insight into Hookdeck Filters](/docs/plugins/hookdeck/intro.md#filtered-messages) by indicating Requests that are received by an EventCatalog Service but are not connected to destination Service. ## Configure Install the EventCatalog Hookdeck plugin into your EventCatalog project. ## Pricing This plugin was developed by the community and is free to use and does not require a commercial license. --- ![IcePanel](/img/integrations/icepanel.jpeg) # IcePanel By EventCatalog Embed IcePanel diagrams into EventCatalog [Install →](/docs/development/components/components/embed-diagrams/icepanel.md) ![IcePanel](/img/integrations/covers/icepanel.png) ## Overview IcePanel is a popular tool for creating C4 architecture diagrams and collaborating with your teams. You can use IcePanel to create diagrams and then embed them into your EventCatalog documentation for viewing or editing. IcePanel diagrams can be embedded in your domains, services and messages or custom documentation pages. ![IcePanel integration](/img/ice-panel.png) To get started you can read the [IcePanel component documentation](/docs/development/components/components/embed-diagrams/icepanel.md). ## Pricing Plugin is part of the EventCatalog Starter, Scale or Enterprise plans. --- ![Lucid](/img/integrations/lucid.svg) # Lucid By EventCatalog Embed Lucid diagrams into EventCatalog for viewing or editing. [Install →](/docs/development/components/components/embed-diagrams/lucid.md) ![Lucid](/img/integrations/covers/lucid.png) ## Overview Lucid is a popular tool for creating diagrams, event storming, and collaborating with your teams. You can use Lucid to create diagrams and then embed them into your EventCatalog documentation for viewing or editing. Lucid diagrams can be embedded in your domains, services and messages or custom documentation pages. ## Embedding Lucid diagrams into your EventCatalog You can also embed any Lucid diagram into your EventCatalog using the `` component. You can embed Lucid diagrams in your domains, services and messages. ![Lucid integration](/img/integrations/lucid/lucid-eventcatalog-embed.png) To get started you can read the [Lucid component documentation](/docs/development/components/components/embed-diagrams/lucid.md) or view the demo application [here](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0). ## Pricing Plugin is part of the EventCatalog Starter, Scale or Enterprise plans. --- ![Miro](/img/integrations/miro.svg) # Miro By EventCatalog Bring your EventCatalog architecture into Miro to collaboratively design, model, and plan what comes next. [Install →](/docs/miro/overview.md) ![Miro](/img/integrations/covers/miro.png) ## Overview The EventCatalog Miro App brings your documented architecture into Miro — drag services, events, commands, and more onto a board to collaboratively design and explore your systems. Many teams already use Miro for event storming, system design, and planning. This app lets you work with your real architecture artifacts instead of generic boxes and lines. * **Import your real architecture** — bring services, events, commands, queries, channels, and data stores from EventCatalog into Miro * **Design collaboratively** — drag resources onto the board, draw connections, and model your next iteration as a team * **Create new resources** — sketch out new services and events directly in the app before they exist in code * **Export back to your catalog** — export the board and use AI skills to update your EventCatalog project automatically ## How it works 1. **Export** your catalog from your EventCatalog project using `npm run export` 2. **Import** the JSON into the Miro App 3. **Drag** resources onto the board to visualize your architecture 4. **Design** what comes next — add new resources, draw connections, and collaborate with your team 5. **Export** the board to JSON and feed it to an AI agent with [EventCatalog Skills](https://github.com/event-catalog/skills) to update your catalog ## Core Features * **Drag and drop** — drag services, events, commands, queries, channels, and data stores onto the board * **Automatic connections** — draw connectors between resources and the app automatically labels them based on resource types (e.g. "publishes event", "receives", "writes to") * **Two display modes** — view resources as detailed App Cards or compact Post-it notes * **Create new resources** — add services and events that don't exist yet, directly from the app * **Inline editing** — edit names, versions, summaries, and badges without leaving the board * **Dependencies toggle** — choose whether to add a service with its full dependency graph or standalone * **Auto-layout** — automatically arrange resources in a clean left-to-right flow * **Connection highlighting** — select a resource to see all its connections highlighted on the board * **Export to JSON** — export the board state for use with AI-powered catalog updates ## Value for Teams **For Architects:** Design system changes collaboratively on a Miro board using real architecture primitives, then push those changes back to your catalog. **For Developers:** See how services, events, and data stores connect at a glance. Create new resources and connections before writing any code. **For Product & Engineering Leads:** Facilitate architecture discussions with your team using a shared visual space grounded in your actual system design. ## Connecting EventCatalog to Miro 1. Go to the [EventCatalog Application](https://miro.com/app-install/?response_type=code\&client_id=3458764623600229458\&redirect_uri=%2Fapp-install%2Fconfirm%2F) and install the app 2. In your Miro board, go to "Tools, Media and Integrations" and search for "EventCatalog" 3. Click on the "EventCatalog" app and import your resources using the JSON export from your catalog No authentication or API keys required — the app runs entirely in your browser. For detailed setup instructions, see the [Getting Started guide](/docs/miro/overview.md). ![Miro integration](/img/integrations/miro/miro-eventcatalog-plugin.png) ## Embedding Miro diagrams into your EventCatalog You can also embed any Miro board into your EventCatalog using the `` component. You can embed Miro boards in your domains, services and messages. ![Miro integration](/img/integrations/miro/miro-eventcatalog-embed.png) To get started you can read the [Miro component documentation](/docs/development/components/components/embed-diagrams/miro.md) or view the demo application [here](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0). ## Pricing Free and open source Miro app. --- [Want a custom integration? Work with us →](/services.md) # Discoverability forIntegrate with your systems using # EventCatalog Generators Integrate and keep your EventCatalog up to date with your systems using generators.
EventCatalog is technlogy agnostic and can integrate with any broker or messaging system. --- ![OpenAPI](/img/integrations/openapi.svg) # OpenAPI By EventCatalog Turn your OpenAPI specs into discoverable, versioned architecture documentation with automatic visualizations and relationship mapping. [Install →](/docs/plugins/openapi/intro.md)[Try it →](https://try.eventcatalog.dev/) ![OpenAPI](/img/integrations/covers/openapi.png) ### Quick start Want to quickly try it out? Run this command to create a new EventCatalog project with this integration already configured: ``` npx @eventcatalog/create-eventcatalog@latest my-catalog --template openapi ``` Already have an EventCatalog project? Read our [getting started guide.](/docs/plugins/openapi/intro.md) ## Overview Your OpenAPI specs define your APIs. EventCatalog makes them discoverable, versioned, and visible across your entire organization. Point the OpenAPI plugin at your specification files and EventCatalog generates domains, services, and messages automatically. You get visualizations, relationship mapping, and version history out of the box. Your teams get a single place to find, understand, and track every API in your architecture. You can also document who is consuming your APIs to help you quickly find downstream consumers of your APIs. No more digging through repositories to find the right spec. No more outdated Confluence pages describing endpoints that changed three sprints ago. **[Try the playground →](https://try.eventcatalog.dev)** — Drop your OpenAPI file and see the result in seconds. "Creating easy to maintain and easy to consume API and event documentation that is always up to date has been one of the most consistent challenges of my career. EventCatalog has become the keystone tool to finally make it possible." — Adam Fanello, Strategic Cloud Software Architect, Rackspace Technology ## Core Features * [Generate domains, services, and messages from your OpenAPI specification files](/docs/plugins/openapi/intro.md) — your catalog stays in sync with your specs * [Fetch OpenAPI files by URL](/docs/plugins/openapi/features.md#fetch-openapi-files-by-url) — automate your catalog from remote specs in CI/CD * [Map routes to commands, queries, and events with OpenAPI extensions](/docs/plugins/openapi/features.md#mapping-messages-as-commands-queries-or-events) — add architectural meaning to your API endpoints * [Persist custom markdown between versions](/docs/plugins/openapi/features.md#persist-markdown) — add context and documentation that survives spec updates * [Automatic versioning in sync with your OpenAPI versions](#automatic-versioning) — track every change with full version history * [Render your OpenAPI specification directly in EventCatalog](/docs/plugins/openapi/intro.md) — teams explore your APIs without switching tools * Download schemas and OpenAPI files — versioned alongside your documentation ## Examples * [OpenAPI Example](https://github.com/event-catalog/generators/tree/main/examples/generator-openapi/basic) — basic setup and generation * [Fetch from remote URLs](https://github.com/event-catalog/generators/tree/main/examples/generator-openapi/fetch-from-remote-urls) — pull specs from any URL * [Version OpenAPI messages](https://github.com/event-catalog/generators/tree/main/examples/generator-openapi/independent-message-versioning) — independent message versioning * [Map routes to commands, events, and queries](https://github.com/event-catalog/generators/tree/main/examples/generator-openapi/mapping-commands-events-queries) — custom extensions in action ## Configure Add the plugin to your EventCatalog project and start generating documentation from your OpenAPI specs. Use OpenAPI extensions to map routes into events, commands, and queries. ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ![Windsurf](/img/integrations/windsurf.svg) # Windsurf By EventCatalog Bring your architecture documentation into Windsurf. Get architecture insights in seconds. [Install →](/docs/development/ask-your-architecture/mcp-server/getting-started.md#connect-clients)[Watch the demo ](https://www.youtube.com/watch?v=rTgNDPCZSdo) ![Windsurf](/img/integrations/covers/windsurf.png) ## Overview Windsurf + EventCatalog gives you a powerful new way to interact with your architecture using natural language in your IDE. Ask questions about your architecture directly in Windsurf, and give Windsurf the context it needs to answer your questions. This integration works seamlessly with MCP (Model Catalog Protocol), allowing Windsurf to read your architecture documentation. ## Example Prompts Here are a few useful questions you or your team can ask Windsurf once integrated: * “Which services produce the `InventoryAdjusted` event?” * “Who owns the `OrderService`?” * “What commands does the `Payments` domain support?” * “How is `UserSignedUp` consumed across the system?” * “What are all the events in the `Checkout` flow?” * "Create a new event schema following our best practices documented in EventCatalog" Windsurf can return answers with summaries, links to documentation, and even visual guidance using EventCatalog data. ## Value for Teams This integration can save time and unlock new workflows: **For Developers**
No more context switching—get architecture answers instantly, even while coding or debugging. **For New Hires**
Ramp up faster by asking natural-language questions about the system instead of navigating complex docs. **Save time**: Stop searching through repositories, find the right documentation, and get answers to your questions. **Save money**: Reduce support overhead and onboarding time across the team.
**Bridge silos**: Make architecture accessible across roles and departments. **Improve quality**: Ensure that your architecture is consistent and follows best practices. ## How It Works Windsurf connects to your EventCatalog instance via the MCP protocol. It reads your architecture models—schemas, services, events, domains—and provides conversational answers. ## Core Features * Ask Windsurf anything about your system architecture * Windsurf queries your EventCatalog using the MCP protocol * Supports semantic architecture models—domains, services, events, commands, ownership, and more * Works with synced schemas from GitHub, schema registries, and other sources * Enables cross-functional teams to understand architecture effortlessly ## Pricing ### Commercial License Required This integration requires a commercial license for business and commercial use. Get started with a 14-day free trial to evaluate the integration with your systems. 14-day free trial Commercial use rights Priority updates & bug fixes Email & community support Starting from $199/month Per integration license [View all plans](/pricing.md)[Start free trial →](https://eventcatalog.cloud) --- ShippingStarted Event UserLoggedIn Event Auth Service Service Shipping Service Service UpdateInventory Command GetUserProfile Query User Management Domain Logistics Domain ## Turn your architecture into a story
your teams and AI tools can understand Stop wrestling with outdated docs and missing schemas. EventCatalog turns your architecture into a living system that actually helps your team ship faster. End the schema scavenger hunt Stop digging through Slack threads and stale wikis. Find or ask about any event, service, or domain in seconds — with full context and ownership. Documentation that stays current Auto-generate from AsyncAPI and OpenAPI specs, schema registries and more. No more outdated documentation. ![EventCatalog Visualizer Screenshot](/img/architecture-diagram.png) FinanceHealthcareE-CommerceSaaS [Explore demo](https://eventcatalog-examples-finance.vercel.app/) [EventCatalog Finance Example](https://eventcatalog-examples-finance.vercel.app/visualiser/domains/Finance/1.0.0?embed=true\&animated=true) Scale without documentation debt Markdown + MDX + Git = documentation that scales with your team. Enriched documentation powered by markdown. Empower collaboration across teams Self-service discovery for everyone—from architects, developers to product managers. Visual diagrams that actually make sense. UserCreated OrderPlaced PaymentProcessed Auth Service Order Service CreateUser GetOrderStatus E-commerce Analytics "Events connect
everything..." "Services handle
business logic" > "One of the biggest challenges and risks of EDA is the critical lack of discoverability and governance. EventCatalog makes sure your EDA stays controlled, preventing it from spiraling into chaos." ![Fran Mendez](/img/fran.jpeg) Fran Mendez Creator of AsyncAPI OrderCreated UserRegistered PaymentProcessed Auth Service Order Service CreateOrder UpdateUser GetUserProfile GetOrderHistory E-commerce ## Helps engineers find what they need in minutes, not days Your documentation is scattered, out of date, or missing entirely. Your team spends hours asking questions, re-learning the system, and fixing avoidable bugs. **EventCatalog fixes that.** ### Update docs like you update code Write and maintain documentation in Markdown or MDX—keeping it current as your architecture evolves. ### See what changed Track changes to events, schemas, and services over time, just like your code. ### AI Integrations Bring your own models to EventCatalog itself. Connect your architecture documentation to your AI tools. ### Works with your stack — Kafka, SNS, EventBridge, whatever No rip-and-replace. Connects to what you already use. ### Grows with you — 10 services or 1000 Grow documentation across teams, projects, and services without losing clarity. ### See your entire system at a glance See the full picture: services, events, and ownership in one connected map. [Learn more →](/docs/development/getting-started/fundamentals.md)[See example](https://demo.eventcatalog.dev/docs/services/OrdersService/0.0.3) API SDK YAML CLI ## Your specs change. Your docs update automatically.
Connect your OpenAPI, AsyncAPI, or schema registry specs. EventCatalog generates and updates documentation from them automatically. Run npm run generate locally or in CI/CD. Your catalog updates in seconds. Diagrams, context, and business language you wrote by hand stay untouched. Any schema, any broker, any service. [Explore Integrations →](/integrations.md)[Contact us](mailto:hello@eventcatalog.dev) ### Your Integrations [![OpenAPI](/img/integrations/openapi.svg)](/docs/plugins/openapi/intro.md)[![AsyncAPI](/img/integrations/asyncapi.svg)](/docs/plugins/asyncapi/intro.md)[![GraphQL](/img/integrations/graphql.svg)](/docs/plugins/graphql/intro.md)[![Backstage](/img/integrations/backstage.svg)](/docs/plugins/backstage/intro.md)[![Apicurio](/img/integrations/apicurio.png)](/docs/plugins/apicurio/intro.md)[![AWS](/img/integrations/aws-dark.svg)](/integrations.md)[![Azure](/img/integrations/azure.svg)](/integrations.md)[![GCP](/img/integrations/gcp.svg)](/integrations.md)[![Confluent](/img/integrations/confluent.svg)](/docs/plugins/confluent-schema-registry/intro.md)[![GitHub](/img/integrations/github-dark.svg)](/docs/plugins/github/intro.md) terminal $ npm run generate Generating documentation... ### Live Documentation ![EventCatalog Documentation Interface](/img/custom-docs.png) ✓ Auto-generated from your specifications sequenceDiagram Mermaid Canvas Miro Whiteboard Excalidraw Architecture Ice Panel diagram.svg Any Tool v2.1.0 Version ## Architecture diagrams. Versioned. Discoverable. Bring your existing architecture diagrams into EventCatalog — and treat them as first-class architectural artifacts.
Import or link diagrams from Mermaid, Miro, IcePanel, C4 models, draw\.io, SVG, and more. We don’t replace your tools — we connect them. MermaidMiroIce PanelExcalidrawDraw\.ioSVG / PNG Version your diagrams alongside your docs Track changes to your architecture diagrams over time. See how your system evolved from v1.0 to today. Stored in Git. You own everything. Your diagrams live in your repository. No vendor lock-in, no external dependencies. Perfect for regulated industries. ![EventCatalog Diagrams Screenshot](/img/diagrams-demo.png) Searchable and discoverable Your diagrams become part of your searchable catalog. Find the right diagram when you need it, not buried in a wiki. AI-ready architecture diagrams Connect your diagrams to AI tools. Let your models understand your architecture visually and contextually. ## How teams go from chaos to clarity Architecture shouldn’t end with documentation. With EventCatalog, every decision, diagram, and change fuels a continuous cycle of clarity, design, and evolution. STAGE 1 ### Document Create an authoritative source of truth your teams can trust. Capture domains, services, and events once — so knowledge isn’t lost in slides, confluence pages, or tribal memory. STAGE 2 ### Visualize Give every team a shared understanding of how the system really works. Turn your architecture into a searchable, explorable map every team can understand. STAGE 3 ### Design Design using real architecture - not blank canvases. Reuse your existing architecture to plan changes, discover impact, and evolve safely with EventCatalog Studio. Document Visualize Design Continuous Evolution ## Why architects choose EventCatalog Trusted by engineers and architects building complex systems [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) > EventCatalog, together with AsyncAPI and other specs, makes sure your architecture stays controlled, preventing it from spiraling into chaos ![Fran Mendez](/img/fran.jpeg) Fran Mendez Creator of AsyncAPI > "EventCatalog has been a game-changer for how we think about and communicate our architecture. Within days of adopting it, our entire system, domains, services, events, and the relationships between them, became something anyone on the team could actually understand and reason about. It's the rare tool that's a joy to use. We're building on it for the long haul." ![Dustin Cole](/img/people/dustin-cole.jpg) Dustin Cole Datawake (datawake.io) > "As a team working with DDD and Event-Driven Architecture, keeping everyone aligned on domains, services and message contracts is a real challenge. EventCatalog tackles this head-on. We use it both as a company-wide architectural overview and as living documentation generated directly from our code. It is one of those rare tools that genuinely fits how we think about software. Our architects are happy, our developers are happy, and our documentation is finally up to date!" ![Bart Kardol](/img/people/bart-kardol.jpg) Bart Kardol Essent > "Creating easy to maintain and easy to consume API and event documentation that is always up to date has been one of the most consistent challenges of my career. EventCatalog has become the keystone tool to finally make it possible." ![Adam Fanello](/img/people/adam-fanello.jpeg) Adam Fanello Strategic Cloud Software Architect, Rackspace Technology > "EventCatalog is my go to solution when I introduce event-driven architecture to an audience." ![Ruben Fonseca](/img/people/ruben-fonseca.jpeg) Ruben Fonseca Senior Solutions Architect, AWS > "EventCatalog helps to bridge the gap between a PO's business view and an Engineer's technical view." ![Jan Wagebach](/img/people/jan-wagebach.png) Jan Wagebach PRISMA, CTO > "At my current project we have a large event-driven architecture setup with more than 100 events across different domains owned by multiple teams. With EventCatalog we now have a clear view of all events and schemas — and more importantly, we know who to reach out to when we want to consume data." ![Dennis Baerten](/img/people/dennis-baerten.jpeg) Dennis Baerten Freelance Lead Engineer at Nike ## Join our community Connect with developers, share ideas, and contribute to the future of event-driven architecture ### [Join our Discord](https://eventcatalog.dev/discord) [1,200+ members online](https://eventcatalog.dev/discord) [Ask questions, get help, and share your ideas with the community. Connect with other developers building event-driven systems.](https://eventcatalog.dev/discord) [Join community](https://eventcatalog.dev/discord) ### [Open Source](https://github.com/event-catalog/eventcatalog) [2.6k stars on GitHub](https://github.com/event-catalog/eventcatalog) [EventCatalog is open source. Explore our codebase, weigh in on RFCs, and contribute on GitHub.](https://github.com/event-catalog/eventcatalog) [View on GitHub](https://github.com/event-catalog/eventcatalog) Ready to get started? Try EventCatalog today [Get Started Now](/docs/development/getting-started/installation.md) ![EventCatalog](/img/cat-peak.png) --- OpenAPI orders-api.yaml OrderCreated Event PaymentService Service Commerce Domain AsyncAPI events.asyncapi.yaml CreateOrder Command OrderSchema Avro Schema PaymentProcessed Event Fulfillment Subdomain GetOrderHistory Query orders/created Channel InventoryService Service AuthService UserLoggedIn CartService ItemAdded CartUpdated OrderService OrderCreated OrderUpdated NotificationService PaymentService PaymentProcessed RefundIssued InventoryService StockUpdated WarehouseService API Gateway orders/new Consumer # Know what exists. Know who owns it. Know how it connects. EventCatalog is the architecture catalog for distributed systems, making your domains, services, events, and schemas discoverable by your team and your AI tools. Self-hosted · Open source · Your data stays yours [Create your first catalog](/docs/development/getting-started/installation.md)[See demo](https://demo.eventcatalog.dev) $`npx @eventcatalog/create-eventcatalog@latest my-catalog` Trusted by teams at Nike, AWS, GOV.UK, and more. 33,000+ catalogs created [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) ## Your architecture grows. Discoverability doesn't. These problems get worse with every new service, every new team, every new schema. You need to understand how services connect. Nobody knows where to look, or which view reflects reality. You need to find the owner of a service. It takes longer than fixing the bug. Three teams build the same integration. Nobody knew it already existed. A schema changes without warning. You find out in production. Data changes upstream without anyone noticing. Dashboards break. Models drift. Trust disappears. Knowledge lives across Confluence, Notion, Slack, and people's heads. New engineers spend weeks piecing together what should be obvious. Eventually, teams stop trusting documentation at all. When that happens, every change feels risky. Even small ones. Confluence Updated: 2 years ago Miro Board Owner: ??? Notion Google Doc v3 (or is it v5?) \#architecture "Where's the OrderService docs?" 23 replies... Excalidraw Lucidchart \#platform "Did we already build this?" No replies yet Wiki Deprecated? "Who owns this service?" "Is this diagram current?" "Which version is correct?" "How does this connect?" "Who owns this event?" "Who is consuming this event?" "Where is the schema?" ? ? ? Your architecture needs a catalog, not another wiki. UserCreated Event OrderPlaced Event Auth Service Microservice Order Service Microservice Payments Domain ## Document. Visualize. Query. One place for your domains, services, events, and schemas. So your team can find what exists, who owns it, and how it connects. ### Document Domains, services, events, and schemas. Documented, versioned in Git, and owned by the teams who build them. ### Visualize See how services connect, how data flows, and how messages move. Generated from your documentation, not drawn by hand. ### Query Ask questions about your architecture from your browser, your IDE, or any AI tool connected via MCP. Powered by markdownContextual navigationSchemas & SpecificationsAI-ready architecture [Demo →](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) ### Powered by markdown Store documentation in your Git repository. Version controlled and developer-friendly. ![Document](/img/hero-banner-5.png) [Demo →](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3) ### Your architecture visualized EventCatalog will visualize your domains, services and messages. ![Visualize](/img/hero-banner-6.png) [Demo →](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) ### Natural language questions Ask about your architecture in plain English. Get accurate answers instantly. ![Query](/img/ai-assistant.png) ### Document Domains, services, events, and schemas. Documented, versioned in Git, and owned by the teams who build them. ### Visualize See how services connect, how data flows, and how messages move. Generated from your documentation, not drawn by hand. ### Query Ask questions about your architecture from your browser, your IDE, or any AI tool connected via MCP. [View Demo →](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) ### Powered by markdown Store documentation in your Git repository. Version controlled and developer-friendly. 1 / 4 ![Document](/img/hero-banner-5.png) [View Demo →](https://demo.eventcatalog.dev/visualiser/domains/Orders/0.0.3) ### Your architecture visualized EventCatalog will visualize your domains, services and messages. 1 / 2 ![Visualize](/img/hero-banner-6.png) [View Demo →](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) ### Natural language questions Ask about your architecture in plain English. Get accurate answers instantly. 1 / 3 ![Query](/img/ai-assistant.png) ### Document your entire architecture EventCatalog is purpose-built for architecture, not implementation details. Document and discover your system without coupling to any specific codebase or tooling. Domains Services Messages Schemas Teams & Owners Channels Workflows Ubiquitous Language Databases Versions ## Context matters. For your team and your AI. Help engineers find answers faster, and give AI tools the structured context they need to understand your architecture. DomainsServicesEventsCommandsQueriesSchemasOpenAPIAsyncAPIKafkaGraphQL EventCatalog MCP $ Your system has 4 domains: 1 .Orders handles order lifecycle 2 .Payments processes transactions 3 .Inventory manages stock levels 4 .Notifications sends alerts and emails $ Your team asks in Slack. Your AI asks via MCP. Both get answers from the same source of truth. #### Your data never leaves Self-hosted and secure by default. Your architecture, your queries, your AI context all stay on your infrastructure. #### Built-in MCP Server Ask Cursor 'what services consume OrderCreated?' and get a real answer. Works with Claude, VS Code, Windsurf, or any MCP-compatible tool. #### Bring Your Own Models You own your models and your data. Connect OpenAI, Anthropic, or any LLM. Your architecture context stays private. #### llms.txt, generated for you Every build produces an llms.txt file so any AI agent can discover your architecture without custom integrations. API SDK YAML CLI ## Your schemas change. Your docs update automatically. Pull from OpenAPI, AsyncAPI, and schema registries to keep generated docs in sync. Diagrams, context, and language stay human-owned. ### Generate from your specs Use OpenAPI, AsyncAPI, and schema registries as inputs to generate and update services, events, and schemas without duplicating work. ### Stay in sync When schemas change, generated content updates automatically. Your diagrams, descriptions, and relationships stay exactly as you wrote them. ### One command Run npm run generate locally or in CI/CD. One command refreshes everything. ### SDK & API support Extend EventCatalog to integrate with any system in your stack. If you can extract architectural data, you can model it. Generated content stays in sync with your systems.
Architectural context stays intentional. [Explore integrations](/integrations.md)[View SDK docs](/docs/sdk.md) ### Connect to your stack [![OpenAPI](/img/integrations/openapi.svg)](/docs/plugins/openapi/intro.md)[![AsyncAPI](/img/integrations/asyncapi.svg)](/docs/plugins/asyncapi/intro.md)[![GraphQL](/img/integrations/graphql.svg)](/docs/plugins/graphql/intro.md)[![Confluent](/img/integrations/confluent.svg)](/docs/plugins/confluent-schema-registry/intro.md)[![AWS](/img/integrations/aws-dark.svg)](/integrations.md)[![Azure](/img/integrations/azure.svg)](/integrations.md)[![GCP](/img/integrations/gcp.svg)](/integrations.md)[![Backstage](/img/integrations/backstage.svg)](/docs/plugins/backstage/intro.md)[![GitHub](/img/integrations/github-dark.svg)](/docs/plugins/github/intro.md)[![Apicurio](/img/integrations/apicurio.png)](/docs/plugins/apicurio/intro.md) terminal $npm run generate Fetching OpenAPI specs... Syncing AsyncAPI definitions... Pulling schemas from registry... Done in 2.3s. 47 resources updated. Docs always in sync Add to CI/CD. Never think about it again. sequenceDiagram Mermaid Canvas Miro Whiteboard c4 Diagrams Architecture IcePanel diagram.svg Any Tool ## Architecture diagrams. Versioned. Discoverable. Bring your existing architecture diagrams into EventCatalog and treat them as first-class architectural knowledge. MermaidPlantUMLArchimateMiroIce Panelc4 DiagramsDraw\.ioSVG / PNG We don't replace your tools. We connect them. ### Version your diagrams alongside your docs See how diagrams looked last quarter, last year, or before the migration. Every version is preserved alongside the docs that explain them. ### Stored in Git. You own everything. Your diagrams live in your repository. No vendor lock-in, no external dependencies. Perfect for regulated industries. ### Searchable and discoverable Diagrams are indexed alongside your architecture. Find flows, dependencies, and system views when you need them, not buried in a wiki or slide deck. ### Diagrams your AI tools can understand Because diagrams are linked to real architectural resources, AI tools can explain flows, dependencies, and responsibilities, not just render images. ![EventCatalog Diagrams Screenshot](/img/diagrams-ai.png) ## Fits your workflow. Updates on every push. Trigger catalog builds from any CI/CD pipeline: GitHub Actions, GitLab CI, Jenkins, or anything else. Teams update schemas in their own repos, and the catalog rebuilds automatically. team-orders feat: add OrderCreated event schema team-payments docs: update PaymentService API team-inventory fix: correct StockUpdated schema main Merge: Build unified catalog Deploy successful catalog.yourcompany.com updated 3 services, 12 events, 4 schemas Works with any CI/CD GitHub, GitLab, Jenkins, and more ### Each team owns their docs Teams update specs and schemas in their own repos. The catalog picks up changes on the next build. No central bottleneck. ### Fits your pipeline GitHub Actions, GitLab CI, Jenkins, or any CI/CD tool. EventCatalog integrates without dictating how you deploy. ### Trigger on change Rebuild documentation on schema changes, merges, releases, or on demand. You control when and how architectural changes become visible. EventCatalog doesn't impose a workflow. It reflects the ones you already have. [View deployment docs](/docs/development/deployment/build-and-deploy.md) ## Why architects choose EventCatalog Trusted by engineers and architects building complex systems [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) > EventCatalog, together with AsyncAPI and other specs, makes sure your architecture stays controlled, preventing it from spiraling into chaos ![Fran Mendez](/img/fran.jpeg) Fran Mendez Creator of AsyncAPI > "EventCatalog has been a game-changer for how we think about and communicate our architecture. Within days of adopting it, our entire system, domains, services, events, and the relationships between them, became something anyone on the team could actually understand and reason about. It's the rare tool that's a joy to use. We're building on it for the long haul." ![Dustin Cole](/img/people/dustin-cole.jpg) Dustin Cole Datawake (datawake.io) > "As a team working with DDD and Event-Driven Architecture, keeping everyone aligned on domains, services and message contracts is a real challenge. EventCatalog tackles this head-on. We use it both as a company-wide architectural overview and as living documentation generated directly from our code. It is one of those rare tools that genuinely fits how we think about software. Our architects are happy, our developers are happy, and our documentation is finally up to date!" ![Bart Kardol](/img/people/bart-kardol.jpg) Bart Kardol Essent > "Creating easy to maintain and easy to consume API and event documentation that is always up to date has been one of the most consistent challenges of my career. EventCatalog has become the keystone tool to finally make it possible." ![Adam Fanello](/img/people/adam-fanello.jpeg) Adam Fanello Strategic Cloud Software Architect, Rackspace Technology > "EventCatalog is my go to solution when I introduce event-driven architecture to an audience." ![Ruben Fonseca](/img/people/ruben-fonseca.jpeg) Ruben Fonseca Senior Solutions Architect, AWS > "EventCatalog helps to bridge the gap between a PO's business view and an Engineer's technical view." ![Jan Wagebach](/img/people/jan-wagebach.png) Jan Wagebach PRISMA, CTO > "At my current project we have a large event-driven architecture setup with more than 100 events across different domains owned by multiple teams. With EventCatalog we now have a clear view of all events and schemas — and more importantly, we know who to reach out to when we want to consume data." ![Dennis Baerten](/img/people/dennis-baerten.jpeg) Dennis Baerten Freelance Lead Engineer at Nike 0 \+ Catalogs created 0 \+ GitHub stars 0 \+ Community members 0 \+ Contributors ## Make your architecture discoverable today. Install in under 5 minutes. No credit card. No vendor lock-in. Your data stays in your Git repo. $`npx @eventcatalog/create-eventcatalog@latest my-catalog` [Create your first catalog](/docs/development/getting-started/installation.md)[Explore Demo](https://demo.eventcatalog.dev) Free forever for open source. Deploy on your own infrastructure. --- [Skip to main content](#__docusaurus_skipToContent_fallback) 🚀 [New: Index and search your schemas across your organization](/docs/development/guides/schemas/fields-explorer.md) ## Stay up to date with EventCatalog Subscribe to our newsletter to get release notes, updates, and articles directly to your inbox. [Subscribe to newsletter](https://newsletter.eventcatalog.dev) * * Release notes * Videos * Integrations * No spam - Get notified of new features, bug fixes, and improvements. - Tutorials and videos when they are released - New integrations when they are released - Unsubscribe at any time. We won't send you spam. EventCatalog [GitHub](https://github.com/event-catalog/eventcatalog)[Twitter](https://x.com/event_catalog)[LinkedIn](https://www.linkedin.com/company/eventcatalog/)[YouTube](https://www.youtube.com/@event-catalog/videos) ### Product * [EventCatalog](/features/documentation.md) * [EventCatalog SDK](/docs/sdk.md) * [Pricing](/pricing.md) * [Changelog](/changelog.md) * [Open Source](https://github.com/event-catalog/eventcatalog) ### Integrations * [AsyncAPI](/specifications/asyncapi.md) * [OpenAPI](/integrations/openapi.md) * [Confluent Schema Registry](/integrations/confluent-schema-registry.md) * [Apicurio Registry](/integrations/apicurio.md) * [Amazon EventBridge](/integrations/amazon-eventbridge.md) * [Amazon API Gateway](/integrations/amazon-api-gateway.md) * [Azure Schema Registry](/integrations/azure-schema-registry.md) * [Backstage](/integrations/backstage.md) * [Github](/integrations/github.md) * [Federation](/federation.md) * [Custom integrations](/services.md) ### Company * [About Us](/about-us.md) * [Terms of service](/terms.md) * [Privacy policy](/privacy.md) ### Resources * [Blog](/blog.md) * [Videos](https://www.youtube.com/@event-catalog/videos) * [Learn event-driven architecture](https://eda-visuals.boyney.io/) * [Community](https://discord.com/invite/3rjaZMmrAm) * [Support & Services](https://www.eventcatalog.dev/services) © 2026 Copyright EventCatalog Ltd. EventCatalog was founded by David Boyne and is hosted by EventCatalog Ltd. EventCatalog Ltd is a registered company in England and Wales with number: 15764703 --- [Skip to main content](#__docusaurus_skipToContent_fallback) 🚀 [New: Index and search your schemas across your organization](/docs/development/guides/schemas/fields-explorer.md) Self-hosted pricing that grows with your team From early-stage teams to enterprise-wide platforms — EventCatalog scales with you. No per-seat pricing. No surprises. [Just fair, transparent pricing.](#fair-use-policy) $ USD€ EUR ### Community Edition Perfect for small teams learning EDA—get started for free. $0/month * Perfect for learning and evaluation * [Document domains, services, events, commands and queries](/docs/guides.md) * [Fetch & Sync public schemas at runtime](/blog/remote-schema-component.md) * [Schema Explorer (Basic)](/docs/development/guides/schemas/fields-explorer.md) * [Assign owners (teams and users) to all your resources](/docs/owners.md) * Version all your documentation * [EventCatalog Linter](/docs/development/developer-tools/eventcatalog-linter.md) * Visualize your architecture * [Document business workflows](/docs/development/guides/flows/introduction.md) * EventCatalog Branding * Community support (Discord) [Get started](/docs/development/getting-started.md) Start with the OOS version of EventCatalog ### Starter For teams ready to customize and scale $199/month (Billed annually, per self-hosted instance) * **Everything in Community Plan** * Up to 20 users * [Custom Landing Page](/docs/development/customization/customize-landing-page.md) * [Bring your own documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md) * [Embed diagrams from Miro, IcePanel, Lucid, DrawIO and FigJam](/integrations.md) * [EventCatalog Assistant](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md) * Remove EventCatalog branding * [Custom themes](/docs/development/customization/themes.md) * Email support [Try Starter for 14 days](https://eventcatalog.cloud) No credit card required Most Popular ### Scale For growing teams—reduce bugs, speed up delivery, stay in control. Start to automate your documentation. $399/month (Billed annually, per self-hosted instance) * **Everything in Starter Plan** * Up to 50 users * [1 integration license of your choice](/integrations.md) * [Field Intelligence](/docs/development/guides/schemas/fields-explorer.md#trace-field-lineage) * [Resource-level documentation](/docs/development/bring-your-own-documentation/resource-docs/introduction.md) * [EventCatalog MCP](/docs/development/ask-your-architecture/mcp-server/introduction.md) * [Architecture Change Detection](/docs/development/governance/architecture-change-detection/introduction.md) * [Fetch & Sync private schemas at runtime](/blog/remote-schema-component.md) * [GitHub authentication](/docs/development/authentication/providers/setting-up-github.md) * [Federate catalogs into a single view](/federation.md) * [Custom tools for AI Assistant](/docs/development/ask-your-architecture/eventcatalog-assistant/bring-your-own-tools.md) * [Slack Bot Integration](/docs/development/ask-your-architecture/slack-integration/introduction.md) * [EventCatalog GitHub Action](/docs/development/developer-tools/github-action.md) * [Analytics integrations](/docs/development/analytics/overview.md) * Embed into external systems * Schema Version Diffs * [Schema API](/docs/development/guides/schemas/schema-api.md) * Priority support (email) [Try Scale for 14 days](https://eventcatalog.cloud) No credit card required ### Enterprise For complex systems—build governance at scale, avoid costly mistakes. Contact us (Billed annually, per self-hosted instance) * **Everything in Scale Plan** * Unlimited users * Invoice billing * Custom contract * Procurement & compliance support * [Unlimited integrations](/integrations.md) * Unlimited catalogs * [SSO (Okta, Auth0, Azure AD (Entra ID), Custom SSO)](/docs/development/authentication/introduction.md) * [Role-Based Access Control (RBAC)](/docs/development/authentication/rbac-middleware.md) * [Federate unlimited catalogs](/federation.md) * Customer success program * Priority feature requests * Dedicated support (private slack/discord channel) [Schedule a Call](mailto:hello@eventcatalog.dev?subject=Enterprise%20Plan%20Enquiry) We'll help you build a scalable event governance platform for your organization [✦**Small Business Program** — Company with financials under $5M USD? Read more about the program.](/pricing/small-business-program.md) [→](/pricing/small-business-program.md) Teams at every stage of their architecture journey rely on EventCatalog to document, govern, and scale with confidence. [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) ![Adam Fanello](/img/people/adam-fanello.jpeg) Trusted by architects at world-class engineering orgs "Creating easy to maintain and easy to consume API and event documentation that is always up to date has been one of the most consistent challenges of my career. EventCatalog has become the keystone tool to finally make it possible" Adam Fanello, Strategic Cloud Software Architect, Rackspace Technology ## Feature Comparison Compare features across all plans to find the perfect fit for your organization's documentation and architecture visualization needs. *Swipe left or right to see all features* | Features | CommunityFree forever — try EventCatalog on your own | StarterFor small teams starting to document their architecture | ScaleFor teams scaling their architecture governance and documentation | EnterpriseFor large organizations with multiple teams and domains | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | -------------------------------------------------------------- | ---------------------------------------------------------------------- | ----------------------------------------------------------------- | | Pricing | Free | $199 | $399 | Contact us | | UsersFair use defines the typical team size this plan is designed for. If your team exceeds this number of active users, we ask that you upgrade in accordance with our usage policy.EventCatalog is a fair usage product. Fair usage defines the typical team size this plan is designed for. If your team exceeds this number of active users, we ask that you upgrade in accordance with our usage policy. | | 20 | 50 | Unlimited | | IntegrationsAutomate and generate your documentation from your existing systems. Keep your schemas in sync with your documentation. [(See a list of integrations)](https://eventcatalog.dev/integrations) | ✗ | $199/month per integration | 1 included$199/month per integration | All integrations included | | Self-hostedHost your own instance, any platform. You own your data.Host your own instance, any platform. You own your data. | ✓ | ✓ | ✓ | ✓ | | Embed diagramsEmbed diagrams from Miro, IcePanel, Lucid, DrawIO and FigJam into your documentation.Embed diagrams from Miro, IcePanel, Lucid, DrawIO and FigJam into your documentation. | ✗ | ✓ | ✓ | ✓ | | EventCatalog AssistantAn AI-powered assistant that helps users navigate and understand your event-driven architecture. Users can ask natural language questions about events, services, and their relationships.Ask questions about your catalog. Browser based models, or bring your own API keys to EventCatalog. | ✗ | ✓ | ✓ | ✓ | | Architecture Change DetectionDetect architecture changes in your catalog and notify your teams automatically. | ✗ | ✗ | ✓ | ✓ | | GitHub AuthenticationSecure your documentation with GitHub authentication.Secure your documentation with GitHub authentication. | ✗ | ✗ | ✓ | ✓ | | Invoice BillingGet an invoice for your EventCatalog subscription.Get an invoice for your EventCatalog subscription. | ✗ | ✗ | ✗ | ✓ | | EventCatalog MCP ServerAccess EventCatalog directly from your development environment. View event documentation, schemas, and relationships without leaving your code editor.Integrate EventCatalog with MCP Clients (e.g. Cursor, VSCode, Windsurf, Claude Desktop, etc.). Save time and get more out of your EventCatalog. | ✗ | ✗ | ✓ | ✓ | | EventCatalog GitHub ActionCapture breaking changes in your EventCatalog with the EventCatalog GitHub Action. Capture breaking changes before they happen.Access to EventCatalog GitHub Action. Capture breaking changes before they happen. | ✗ | ✗ | ✓ | ✓ | | Slack Bot IntegrationSelf-hosted Slack bot that connects to your EventCatalog MCP server. Teams can @mention the bot or use dedicated channels to ask questions about events, services, and schemas.Query your architecture documentation directly from Slack. | ✗ | ✗ | ✓ | ✓ | | Connect multiple catalogs across teamsConnect multiple catalog instances to create a unified view of your entire event-driven architecture. This allows teams to work independently while maintaining a centralized documentation hub.Scale and merge multiple catalogs into one view | ✗ | ✗ | Federate up to 3 catalogs | Unlimited federation | | Schema APIAccess and query your schemas through an API (GET requests). | ✗ | ✗ | ✓ | ✓ | | Schema Version DiffsQuickly compare and understand the differences between your schemas in the Schema Explorer. | ✗ | ✗ | ✓ | ✓ | | [Schema Fields Explorer](/docs/development/guides/schemas/fields-explorer.md)Index and explore every field across your message schemas. Search, filter, and browse fields from JSON Schema, Avro, and Protobuf. | ✓ | ✓ | ✓ | ✓ | | [Field lineage & traceability](/docs/development/guides/schemas/fields-explorer.md)Trace any field across your architecture. Visualize which messages share fields and detect type conflicts between schemas. | ✗ | ✗ | ✓ | ✓ | | [Schema Explorer (Basic)](/docs/development/guides/schemas/fields-explorer.md)Explore your schema fields across all your messages. Search, filter, and browse fields from JSON Schema, Avro, and Protobuf. | ✓ | ✓ | ✓ | ✓ | | [Field Intelligence](/docs/development/guides/schemas/fields-explorer.md#trace-field-lineage)Understand how data flows across your architecture. Discover shared fields, trace relationships, and explore interactive traceability graphs. | ✗ | ✗ | ✓ | ✓ | | [Analytics integrations](/docs/development/analytics/overview.md)Track how your team navigates and uses your catalog with your existing analytics tools. | ✗ | ✗ | ✓ | ✓ | | SSO AuthenticationSecure your documentation with SSO authentication. (Okta, Auth0, etc.) | ✗ | ✗ | ✗ | ✓ | | Custom plugins supportBuild and integrate custom plugins. | ✗ | ✗ | ✗ | ✓Custom development available | | Influence our roadmapGet priority feature requests. | ✗ | ✗ | ✗ | ✓ | | Customer success programMonthly calls for the first 12 months to make sure you get the most out of EventCatalog and maximize your return on investment. | ✗ | Optional extra | Optional extra | ✓ | | SupportGet support from the team. | Community (Discord) | Email support | Priority Email/Slack | Dedicated Support + SLAs | ![Jan Wagebach](/img/people/jan-wagebach.png) EventCatalog bridges the gap between business and engineering "EventCatalog helps to bridge the gap between a PO's business view and an Engineer's technical view" Jan Wagebach, PRISMA, CTO ## Fair usage policy Our Approach to Fair Pricing ## 🔒 What is the Fair Use Policy? EventCatalog is an open source project built to be a self-hosted, transparent, and developer-first tool — no per-seat billing, no unexpected overages, no vendor lock-in. To keep things simple, sustainable, and fair for everyone, we apply a **fair use policy** to some of our pricing tiers. ### 💡 Why Fair Use? Rather than enforce strict technical limits, we trust our users to choose the plan that best reflects the **scale and value** they're getting from EventCatalog. We use **organization size** (number of active users) and **company stage** (ARR) as soft guidelines to help determine which tier is appropriate. * ✅ Keep EventCatalog **simple to deploy and operate** * ✅ Avoid complex billing models like per-user pricing * ✅ Ensure small teams can access powerful tooling affordably * ✅ Encourage larger companies to contribute fairly to our sustainability ### 👥 What counts as an "active user"? An active user (or organization member) is someone who regularly accesses your EventCatalog instance to create, manage, or collaborate on documentation. We define fair use based on typical team sizes: * **Starter**: Up to 20 users, under €1M ARR * **Scale**: Up to 50 users, under €5M ARR * **Enterprise**: 50+ users, regulated environments, or advanced needs ### 🤝 What if we grow beyond our plan? That's a good thing! 🎉 If your usage consistently exceeds the fair use limits of your plan, we'll reach out to discuss an appropriate upgrade. We won't cut you off or block features — we just ask that you help support the project in proportion to the value you're getting. ## Frequently Asked Questions * ### What is the meaning of 'Users'? ### What payment methods do you accept? ### Do you offer discounts for startups and small businesses? ### How many catalogs do I need? ### I need a custom integration, can you help? ### Do you offer support or training? ### Do you offer a free trial? ## Trusted by companies around the world Join the teams behind 31,000+ catalogs
Self hosting documentation and governance for your organization. [Get started](/docs/development/getting-started/installation.md)[See the demo →](https://demo.eventcatalog.dev) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) EventCatalog [GitHub](https://github.com/event-catalog/eventcatalog)[Twitter](https://x.com/event_catalog)[LinkedIn](https://www.linkedin.com/company/eventcatalog/)[YouTube](https://www.youtube.com/@event-catalog/videos) ### Product * [EventCatalog](/features/documentation.md) * [EventCatalog SDK](/docs/sdk.md) * [Pricing](/pricing.md) * [Changelog](/changelog.md) * [Open Source](https://github.com/event-catalog/eventcatalog) ### Integrations * [AsyncAPI](/specifications/asyncapi.md) * [OpenAPI](/integrations/openapi.md) * [Confluent Schema Registry](/integrations/confluent-schema-registry.md) * [Apicurio Registry](/integrations/apicurio.md) * [Amazon EventBridge](/integrations/amazon-eventbridge.md) * [Amazon API Gateway](/integrations/amazon-api-gateway.md) * [Azure Schema Registry](/integrations/azure-schema-registry.md) * [Backstage](/integrations/backstage.md) * [Github](/integrations/github.md) * [Federation](/federation.md) * [Custom integrations](/services.md) ### Company * [About Us](/about-us.md) * [Terms of service](/terms.md) * [Privacy policy](/privacy.md) ### Resources * [Blog](/blog.md) * [Videos](https://www.youtube.com/@event-catalog/videos) * [Learn event-driven architecture](https://eda-visuals.boyney.io/) * [Community](https://discord.com/invite/3rjaZMmrAm) * [Support & Services](https://www.eventcatalog.dev/services) © 2026 Copyright EventCatalog Ltd. EventCatalog was founded by David Boyne and is hosted by EventCatalog Ltd. EventCatalog Ltd is a registered company in England and Wales with number: 15764703 --- [Skip to main content](#__docusaurus_skipToContent_fallback) 🚀 [New: Index and search your schemas across your organization](/docs/development/guides/schemas/fields-explorer.md) Small Business Program Great tooling shouldn't be out of reach for growing teams. We offer significant discounts on **Starter** and **Scale** plans for startups and small businesses. ## How it works Discounts are based on your organization's financials, whichever is largest: annual income, expenses, or assets in USD. | Annual Financials (USD) | Discount | | ----------------------- | -------- | | Under $1M | 100% | | $1M – $2M | 90% | | $2M – $3M | 80% | | $3M – $4M | 60% | | $4M – $5M | 20% | ## Program benefits * Free for organizations with financials under $1M USD * Discounted pricing for organizations with financials between $1M and $5M USD * Access to EventCatalog Starter or Scale plans ## Frequently Asked Questions * ### What counts as 'financials'? ### What happens when my company grows beyond $5M? ### What are the terms? ### How do I pay? ### What support is included? ## Apply Reach out and mention the Small Business Program. We'll confirm eligibility and apply your discount. [Contact us](mailto:hello@eventcatalog.dev?subject=Small%20Business%20Program%20Enquiry)[View pricing](/pricing.md) [← Back to pricing](/pricing.md) [Small Business Program](https://github.com/Particular/SmallBusinessProgram) is licensed from [Particular Software](https://particular.net/) under [CC-BY](https://creativecommons.org/licenses/by/4.0/). EventCatalog [GitHub](https://github.com/event-catalog/eventcatalog)[Twitter](https://x.com/event_catalog)[LinkedIn](https://www.linkedin.com/company/eventcatalog/)[YouTube](https://www.youtube.com/@event-catalog/videos) ### Product * [EventCatalog](/features/documentation.md) * [EventCatalog SDK](/docs/sdk.md) * [Pricing](/pricing.md) * [Changelog](/changelog.md) * [Open Source](https://github.com/event-catalog/eventcatalog) ### Integrations * [AsyncAPI](/specifications/asyncapi.md) * [OpenAPI](/integrations/openapi.md) * [Confluent Schema Registry](/integrations/confluent-schema-registry.md) * [Apicurio Registry](/integrations/apicurio.md) * [Amazon EventBridge](/integrations/amazon-eventbridge.md) * [Amazon API Gateway](/integrations/amazon-api-gateway.md) * [Azure Schema Registry](/integrations/azure-schema-registry.md) * [Backstage](/integrations/backstage.md) * [Github](/integrations/github.md) * [Federation](/federation.md) * [Custom integrations](/services.md) ### Company * [About Us](/about-us.md) * [Terms of service](/terms.md) * [Privacy policy](/privacy.md) ### Resources * [Blog](/blog.md) * [Videos](https://www.youtube.com/@event-catalog/videos) * [Learn event-driven architecture](https://eda-visuals.boyney.io/) * [Community](https://discord.com/invite/3rjaZMmrAm) * [Support & Services](https://www.eventcatalog.dev/services) © 2026 Copyright EventCatalog Ltd. EventCatalog was founded by David Boyne and is hosted by EventCatalog Ltd. EventCatalog Ltd is a registered company in England and Wales with number: 15764703 --- # Privacy Policy **Last Updated:** February 2026 **EventCatalog Ltd** is a company registered in England and Wales (company number 15764703). We are the data controller for the personal information described in this policy. This policy explains what data we collect, why, and how we handle it. We collect very little - EventCatalog is self-hosted, so your content and data stay on your infrastructure. *** ## 1. Information We Collect[​](#1-information-we-collect "Direct link to 1. Information We Collect") **Account and billing information** - when you create an account or purchase a license, we collect your name, email address, company name, and billing details. Payments are processed securely by Stripe; we do not store full card numbers. **License validation data** - the Software connects to EventCatalog's servers at build time to verify your license status. This connection transmits your license key and basic request metadata (such as IP address). No catalog content or user data is transmitted during validation. **Telemetry data** - the Software collects limited, anonymised usage data during builds and catalog creation, including: build frequency, catalog creation events, and aggregate resource counts. This data is not linked to individual users or the content of your catalogs. There is currently no option to opt out of telemetry. **Website analytics** - we collect anonymous, aggregate analytics on our website (eventcatalog.dev) to understand traffic and usage patterns. *** ## 2. Self-Hosted Users[​](#2-self-hosted-users "Direct link to 2. Self-Hosted Users") EventCatalog is a self-hosted product. Your documentation, diagrams, event definitions, schemas, and all other content remain entirely under your control on your own infrastructure. We do not access, store, or process any of that data. The only data sent to EventCatalog from a self-hosted Instance is: (i) the license validation check at build time, and (ii) the anonymised telemetry described above. We are not a data processor for any personal data you process through the Software. No Data Processing Agreement (DPA) is required. *** ## 3. How We Use Your Information[​](#3-how-we-use-your-information "Direct link to 3. How We Use Your Information") We use your information for the following purposes: * **Account management** - to create and maintain your account, manage your license, and communicate with you about your subscription. * **Payment processing** - to process payments and comply with tax obligations. * **License validation** - to verify that your license is valid and active. * **Product improvement** - to understand how the Software is used in aggregate and improve it. * **Support** - to respond to your enquiries and provide technical assistance. *** ## 4. Legal Basis (UK GDPR)[​](#4-legal-basis-uk-gdpr "Direct link to 4. Legal Basis (UK GDPR)") We process your personal data on the following bases: * **Contract** - processing your account and billing information is necessary to perform our contract with you (our Terms of Service). * **Legitimate interests** - telemetry and analytics help us improve the product. We've assessed that this processing is proportionate given the data is anonymised and aggregate. * **Legal obligation** - we retain billing records as required by UK tax law. *** ## 5. Third-Party Services[​](#5-third-party-services "Direct link to 5. Third-Party Services") We share information with the following providers, each of which processes data under its own privacy policy: | Provider | Purpose | Data Shared | | -------------------- | --------------------------- | --------------------------------- | | **Stripe** | Payment processing | Billing and payment details | | **Supabase** | Authentication and database | Account information, license data | | **PostHog** | Product telemetry | Anonymised build and usage events | | **Simple Analytics** | Website analytics | Anonymous page view data | | **Resend** | Transactional email | Email address, message content | We do not sell your data to anyone. *** ## 6. International Transfers[​](#6-international-transfers "Direct link to 6. International Transfers") Some of our third-party providers process data outside the UK. Where this occurs, we rely on appropriate safeguards as required by UK GDPR, including adequacy decisions and standard contractual clauses. *** ## 7. Data Retention[​](#7-data-retention "Direct link to 7. Data Retention") * **Account data** - deleted within 90 days of account closure. * **Billing and payment records** - retained for 7 years to comply with UK tax and legal obligations. * **Telemetry and analytics** - stored only in anonymised, aggregate form. * **Support correspondence** - retained for the duration of your subscription plus 12 months, then deleted. *** ## 8. Cookies[​](#8-cookies "Direct link to 8. Cookies") Our website does not use cookies. *** ## 9. Data Security[​](#9-data-security "Direct link to 9. Data Security") We store minimal personal data (email addresses, license keys, and account information) securely in Supabase. For details on infrastructure security, see [Supabase's security documentation](https://supabase.com/security). For self-hosted users, the security of your hosting environment and the data within it is your responsibility. We recommend keeping your EventCatalog installation up to date, as we regularly release security patches. *** ## 10. Your Rights[​](#10-your-rights "Direct link to 10. Your Rights") Under UK GDPR, you have the right to: * **Access** the personal data we hold about you. * **Correct** inaccurate or incomplete data. * **Delete** your data (subject to legal retention requirements). * **Export** your data in a portable format. * **Object** to processing based on legitimate interests. * **Complain** to the Information Commissioner's Office (ICO) at [ico.org.uk](https://ico.org.uk) if you believe your rights have been infringed. To exercise any of these rights, contact us at ****. *** ## 11. Children[​](#11-children "Direct link to 11. Children") EventCatalog is a business product and is not directed at children. We do not knowingly collect personal data from anyone under 18. *** ## 12. Changes to This Policy[​](#12-changes-to-this-policy "Direct link to 12. Changes to This Policy") We may update this Privacy Policy from time to time. We will notify you of material changes by email or through the Website at least 30 days before they take effect. The "Last Updated" date above will always reflect the current version. *** ## 13. Contact[​](#13-contact "Direct link to 13. Contact") For privacy-related questions, contact: **** EventCatalog Ltd Company registered in England and Wales (15764703). --- [Need help? governing your architecture? Work with us →](/services.md) # Architecture documentation for your teams EventCatalog helps you document your architecture.
Providing a single source of truth for your teams. [Get started →](/docs/development/getting-started/installation.md) [View the demo](https://demo.eventcatalog.dev) ![EventCatalog Visualizer Screenshot](/img/hero-banner-6.png) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) --- [Skip to main content](#__docusaurus_skipToContent_fallback) 🚀 [New: Index and search your schemas across your organization](/docs/development/guides/schemas/fields-explorer.md) # Search the documentation Type your search here Powered by[](https://www.algolia.com/) EventCatalog [GitHub](https://github.com/event-catalog/eventcatalog)[Twitter](https://x.com/event_catalog)[LinkedIn](https://www.linkedin.com/company/eventcatalog/)[YouTube](https://www.youtube.com/@event-catalog/videos) ### Product * [EventCatalog](/features/documentation.md) * [EventCatalog SDK](/docs/sdk.md) * [Pricing](/pricing.md) * [Changelog](/changelog.md) * [Open Source](https://github.com/event-catalog/eventcatalog) ### Integrations * [AsyncAPI](/specifications/asyncapi.md) * [OpenAPI](/integrations/openapi.md) * [Confluent Schema Registry](/integrations/confluent-schema-registry.md) * [Apicurio Registry](/integrations/apicurio.md) * [Amazon EventBridge](/integrations/amazon-eventbridge.md) * [Amazon API Gateway](/integrations/amazon-api-gateway.md) * [Azure Schema Registry](/integrations/azure-schema-registry.md) * [Backstage](/integrations/backstage.md) * [Github](/integrations/github.md) * [Federation](/federation.md) * [Custom integrations](/services.md) ### Company * [About Us](/about-us.md) * [Terms of service](/terms.md) * [Privacy policy](/privacy.md) ### Resources * [Blog](/blog.md) * [Videos](https://www.youtube.com/@event-catalog/videos) * [Learn event-driven architecture](https://eda-visuals.boyney.io/) * [Community](https://discord.com/invite/3rjaZMmrAm) * [Support & Services](https://www.eventcatalog.dev/services) © 2026 Copyright EventCatalog Ltd. EventCatalog was founded by David Boyne and is hosted by EventCatalog Ltd. EventCatalog Ltd is a registered company in England and Wales with number: 15764703 --- # Expert support for your
event-driven journey Whether you're starting your event-driven architecture journey or looking to improve your existing setup, we can help. [Contact Us →](mailto:hello@eventcatalog.dev?subject=Professional%20Services%20Inquiry) [Build your own EventCatalog](/docs/development/getting-started/installation.md) [![EventCatalog Professional Services](/img/consulting-2.png)](https://www.youtube.com/watch?v=VLUvfIm9wnQ) David Boyne - "The lack of governance is the biggest gotcha of event-driven architecture" [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) --- [Skip to main content](#__docusaurus_skipToContent_fallback) 🚀 [New: Index and search your schemas across your organization](/docs/development/guides/schemas/fields-explorer.md) ![Your Company](https://tailwindui.com/img/logos/mark.svg?color=indigo\&shade=600) [What's newJust shipped v0.1.0](#) # EventCatalog Professional Services Anim aute id magna aliqua ad ad non deserunt sunt. Qui irure qui lorem cupidatat commodo. Elit sunt amet fugiat veniam occaecat fugiat aliqua. [Documentation](#)[View on GitHub →](#) /events/InventoryAdjusted/index.mdx domains/Inventory ``` --- title: Inventory Adjusted version: 1 description: Inventory adjusted event --- ``` EventCatalog [GitHub](https://github.com/event-catalog/eventcatalog)[Twitter](https://x.com/event_catalog)[LinkedIn](https://www.linkedin.com/company/eventcatalog/)[YouTube](https://www.youtube.com/@event-catalog/videos) ### Product * [EventCatalog](/features/documentation.md) * [EventCatalog SDK](/docs/sdk.md) * [Pricing](/pricing.md) * [Changelog](/changelog.md) * [Open Source](https://github.com/event-catalog/eventcatalog) ### Integrations * [AsyncAPI](/specifications/asyncapi.md) * [OpenAPI](/integrations/openapi.md) * [Confluent Schema Registry](/integrations/confluent-schema-registry.md) * [Apicurio Registry](/integrations/apicurio.md) * [Amazon EventBridge](/integrations/amazon-eventbridge.md) * [Amazon API Gateway](/integrations/amazon-api-gateway.md) * [Azure Schema Registry](/integrations/azure-schema-registry.md) * [Backstage](/integrations/backstage.md) * [Github](/integrations/github.md) * [Federation](/federation.md) * [Custom integrations](/services.md) ### Company * [About Us](/about-us.md) * [Terms of service](/terms.md) * [Privacy policy](/privacy.md) ### Resources * [Blog](/blog.md) * [Videos](https://www.youtube.com/@event-catalog/videos) * [Learn event-driven architecture](https://eda-visuals.boyney.io/) * [Community](https://discord.com/invite/3rjaZMmrAm) * [Support & Services](https://www.eventcatalog.dev/services) © 2026 Copyright EventCatalog Ltd. EventCatalog was founded by David Boyne and is hosted by EventCatalog Ltd. EventCatalog Ltd is a registered company in England and Wales with number: 15764703 --- ## Turn your AsyncAPI specifications
into a visual story everyone can follow Centralized architecture visualization. EventCatalog's visualizer provides teams with a comprehensive view of events, channels, services, domains, and their relationships, all in one place, enhancing clarity and collaboration. Automated documentation Connect your AsyncAPI specifications to EventCatalog and automatically generate your documentation, architecture diagrams, and more. ![EventCatalog Visualizer Screenshot](/img/hero-banner-6.png) Enrich with markdown Enrich your AsyncAPI specifications with markdown. Use markdown to enrich meaning to your messages, channels and services. Documentation is synced between imports of AsyncAPI specifications. Bring discoverability to your AsyncAPI specifications Empower teams to visualize and explore events, services, and domains, facilitating collaboration between technical and non-technical members. > One of the biggest challenges and risks of EDA is the critical lack of discoverability and governance. > > EventCatalog, together with AsyncAPI, makes sure your EDA stays controlled, preventing it from spiraling into chaos. ![](/img/fran.jpeg) Fran Mendez Creator of AsyncAPI ## Your specifications into beautiful documentation Turn your AsyncAPI specifications into a cohesive, discoverable, and interactive documentation portal. ### Markdown Powered Enrich your specifications with markdown. Use markdown to enrich meaning to your messages, channels and services. ### Automation Connect your AsyncAPI specifications to EventCatalog and automatically generate your documentation, architecture diagrams, and more. ### Quickly find insights Find and explore documentation with powerful search or talk to your architecture with [EventCatalog Chat](/features/ai-assistant.md). ### Ownership Assign owners and teams to your messages, channels and services. Let your team know who is responsible for what. ### Scales with your teams Use [EventCatalog Federation](/federation.md) to scale your documentation across your organization. ### Visualize your specifications EventCatalog will [visualize your architecture](/features/visualization.md) and help you understand your system. [Learn more](/docs/plugins/asyncapi/intro.md)[See examples on GitHub →](https://github.com/event-catalog/generators/tree/main/examples/generator-asyncapi) account-service.yml ``` asyncapi: 3.0.0 info: title: Account Service version: 1.0.0 description: This service is in charge of processing user signups channels: userSignedup: address: user/signedup messages: UserSignedUp: $ref: '#/components/messages/UserSignedUp' operations: sendUserSignedup: action: send channel: $ref: '#/channels/userSignedup' messages: - $ref: '#/channels/userSignedup/messages/UserSignedUp' components: messages: UserSignedUp: payload: type: object properties: displayName: type: string description: Name of the user email: type: string format: email description: Email of the user ``` ## Enrich your AsyncAPI specifications with EventCatalog No more searching through specifications to find information Generate documentation from your AsyncAPI specifications.
Reduce the time it takes to find the information you need. Search or ask your Catalog Assign ownership to your resources, quickly search or ask your Catalog (with EventCatalog Chat) the information you need. ![EventCatalog Visualizer Screenshot](/img/hero-banner-8.png) Schema Registry Let your users see and search your schemas from your AsyncAPI specifications. xRegistry support coming soon. Automatic versioning Your documentation will automatically be versioned when you update your AsyncAPI specifications. ## Why architects choose EventCatalog Trusted by engineers and architects building complex systems [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) > EventCatalog, together with AsyncAPI and other specs, makes sure your architecture stays controlled, preventing it from spiraling into chaos ![Fran Mendez](/img/fran.jpeg) Fran Mendez Creator of AsyncAPI > "EventCatalog has been a game-changer for how we think about and communicate our architecture. Within days of adopting it, our entire system, domains, services, events, and the relationships between them, became something anyone on the team could actually understand and reason about. It's the rare tool that's a joy to use. We're building on it for the long haul." ![Dustin Cole](/img/people/dustin-cole.jpg) Dustin Cole Datawake (datawake.io) > "As a team working with DDD and Event-Driven Architecture, keeping everyone aligned on domains, services and message contracts is a real challenge. EventCatalog tackles this head-on. We use it both as a company-wide architectural overview and as living documentation generated directly from our code. It is one of those rare tools that genuinely fits how we think about software. Our architects are happy, our developers are happy, and our documentation is finally up to date!" ![Bart Kardol](/img/people/bart-kardol.jpg) Bart Kardol Essent > "Creating easy to maintain and easy to consume API and event documentation that is always up to date has been one of the most consistent challenges of my career. EventCatalog has become the keystone tool to finally make it possible." ![Adam Fanello](/img/people/adam-fanello.jpeg) Adam Fanello Strategic Cloud Software Architect, Rackspace Technology > "EventCatalog is my go to solution when I introduce event-driven architecture to an audience." ![Ruben Fonseca](/img/people/ruben-fonseca.jpeg) Ruben Fonseca Senior Solutions Architect, AWS > "EventCatalog helps to bridge the gap between a PO's business view and an Engineer's technical view." ![Jan Wagebach](/img/people/jan-wagebach.png) Jan Wagebach PRISMA, CTO > "At my current project we have a large event-driven architecture setup with more than 100 events across different domains owned by multiple teams. With EventCatalog we now have a clear view of all events and schemas — and more importantly, we know who to reach out to when we want to consume data." ![Dennis Baerten](/img/people/dennis-baerten.jpeg) Dennis Baerten Freelance Lead Engineer at Nike ## Get started in minutes Bring your AsyncAPI specifications to EventCatalog in minutes. Run the CLI to generate your own catalog with example AsyncAPI specifications. [Get Started](/docs/plugins/asyncapi/intro.md)[Watch the video →](https://www.youtube.com/watch?v=XglwSNAnpKY) Installation ``` npx @eventcatalog/create-eventcatalog@latest my-catalog --template asyncapi ``` ## Project sponsors ## Gold sponsors [![Gravitee](/img/sponsors/gravitee-logo-black.svg)](https://gravitee.io?utm_source=eventcatalog\&utm_medium=web\&utm_campaign=sponsorship)[](https://gravitee.io?utm_source=eventcatalog\&utm_medium=web\&utm_campaign=sponsorship) [Manage, secure, and govern every API in your organization.](https://gravitee.io?utm_source=eventcatalog\&utm_medium=web\&utm_campaign=sponsorship) [ ](https://gravitee.io?utm_source=eventcatalog\&utm_medium=web\&utm_campaign=sponsorship)[Learn more.](https://gravitee.io?utm_source=eventcatalog\&utm_medium=web\&utm_campaign=sponsorship) [Become a sponsor](https://github.com/sponsors/event-catalog) --- [Skip to main content](#__docusaurus_skipToContent_fallback) 🚀 [New: Index and search your schemas across your organization](/docs/development/guides/schemas/fields-explorer.md) # Help fix discoverability
Sponsor our project Using EventCatalog and want to give back? We would love your sponsorship. [Contact us](mailto:hello@eventcatalog.dev?subject=Sponsor)[Learn more →](#support-packages) ## Thank you to our community EventCatalog is used and supported by developers across the world. * Catalogs created 14,000+ * Pull requests 400 * Contributors 40+ * GitHub stars 1.5k EventCatalog [GitHub](https://github.com/event-catalog/eventcatalog)[Twitter](https://x.com/event_catalog)[LinkedIn](https://www.linkedin.com/company/eventcatalog/)[YouTube](https://www.youtube.com/@event-catalog/videos) ### Product * [EventCatalog](/features/documentation.md) * [EventCatalog SDK](/docs/sdk.md) * [Pricing](/pricing.md) * [Changelog](/changelog.md) * [Open Source](https://github.com/event-catalog/eventcatalog) ### Integrations * [AsyncAPI](/specifications/asyncapi.md) * [OpenAPI](/integrations/openapi.md) * [Confluent Schema Registry](/integrations/confluent-schema-registry.md) * [Apicurio Registry](/integrations/apicurio.md) * [Amazon EventBridge](/integrations/amazon-eventbridge.md) * [Amazon API Gateway](/integrations/amazon-api-gateway.md) * [Azure Schema Registry](/integrations/azure-schema-registry.md) * [Backstage](/integrations/backstage.md) * [Github](/integrations/github.md) * [Federation](/federation.md) * [Custom integrations](/services.md) ### Company * [About Us](/about-us.md) * [Terms of service](/terms.md) * [Privacy policy](/privacy.md) ### Resources * [Blog](/blog.md) * [Videos](https://www.youtube.com/@event-catalog/videos) * [Learn event-driven architecture](https://eda-visuals.boyney.io/) * [Community](https://discord.com/invite/3rjaZMmrAm) * [Support & Services](https://www.eventcatalog.dev/services) © 2026 Copyright EventCatalog Ltd. EventCatalog was founded by David Boyne and is hosted by EventCatalog Ltd. EventCatalog Ltd is a registered company in England and Wales with number: 15764703 --- # Terms of Service **Last Updated: February 2026** EVENTCATALOG LTD ("**EVENTCATALOG**") OWNS AND OPERATES THE SOFTWARE AND SERVICES DESCRIBED AT [WWW.EVENTCATALOG.DEV](http://WWW.EVENTCATALOG.DEV) (THE "**WEBSITE**") AND MADE AVAILABLE THROUGH OUR SELF-HOSTED SOFTWARE PLATFORM (COLLECTIVELY WITH THE WEBSITE, THE "**SERVICES**"). THESE TERMS OF SERVICE APPLY TO ALL USERS WHO PURCHASE, SUBSCRIBE TO, OR OTHERWISE USE THE SERVICES (COLLECTIVELY, "**YOU**", "**YOUR**" AND SIMILAR). PLEASE READ THESE TERMS OF SERVICE CAREFULLY. BY PURCHASING A SUBSCRIPTION, STARTING A FREE TRIAL, CONTINUING TO PAY SUBSCRIPTION FEES, OR CONTINUING TO USE THE SOFTWARE AFTER ANY UPDATE TO THESE TERMS, YOU INDICATE YOUR ACCEPTANCE OF THESE TERMS OF SERVICE. IF YOU DO NOT ACCEPT THESE TERMS OF SERVICE, THEN DO NOT PURCHASE OR USE THE SOFTWARE OR ACCESS ANY OF THE CONTENT MADE AVAILABLE THROUGH THE SERVICES. THESE TERMS OF SERVICE MAY BE AMENDED OR UPDATED BY EVENTCATALOG FROM TIME TO TIME. YOUR USE OF THE SOFTWARE OR CONTINUED PAYMENT OF SUBSCRIPTION FEES AFTER ANY AMENDMENTS SHALL SIGNIFY YOUR ACCEPTANCE OF SUCH REVISED TERMS. **Business Use Only.** The Software is intended solely for commercial, business, and professional use. By agreeing to these Terms, you confirm you are purchasing in a business capacity, not as a consumer. Consumer protection laws do not apply to this agreement. **Custom Terms.** These Terms apply to all self-service plans (Starter and Scale). If you require custom contracts, redlines, vendor registration, or specific procurement requirements, contact about our Enterprise plans. Custom legal agreements are not available on standard tiers. *** ## 1. Definitions.[​](#1-definitions "Direct link to 1. Definitions.") a. "**Software**" means the EventCatalog software licensed under your Plan, including any updates provided by EventCatalog. b. "**Plan**" means the specific license tier you have purchased (e.g. Starter, Scale), as described on the Website at the time of purchase. c. "**Authorized Users**" means your employees, contractors, and those of your affiliates (entities you control, that control you, or under common control with you) who you authorize to use the Software. d. "**Integration License**" means a separately purchased license to use a specific EventCatalog integration, as listed on the Website. Integration Licenses are activated via the same license key mechanism as the core Software. e. "**Instance**" means each separately deployed environment of the Software. For example, production, staging, and development deployments each constitute a separate Instance. Each Instance requires its own license under a separate Plan. f. "**Order**" means your online subscription through the Website, an order form, or similar purchasing mechanism, which together with these Terms forms the agreement between you and EventCatalog. g. "**Community Edition**" means the open-source version of EventCatalog, licensed separately under the MIT License. *** ## 2. Provision and Use of the Software.[​](#2-provision-and-use-of-the-software "Direct link to 2. Provision and Use of the Software.") a. **License Grant.** Where you subscribe for the Software, whether through an online subscription through the Website, an order form, or similar (together, an "Order"), EventCatalog will make the Software available to you on the terms of the Order and these Terms of Service. EventCatalog grants you a non-exclusive, non-transferable, worldwide license to self-host and use the Software for your team's internal business purposes, for as long as your subscription is active. The license is granted per Instance. "Internal business purposes" means use by your Authorized Users for your own work — not to provide the Software as a service to third parties (no service bureau, time-sharing, or reselling). b. **Features and User Limits.** Your Plan determines what features you get and the intended team size for that Plan. These details are published on the Website and form part of these Terms. If you have purchased Integration Licenses, they entitle you to use the specific integrations listed, subject to the same terms as the core Software. c. **Fair Use.** Each Plan is designed for a typical team size (e.g. up to 20 users for Starter, up to 50 users for Scale). EventCatalog operates on a trust-based model. If your usage consistently exceeds your Plan's intended team size, we will reach out to discuss upgrading to a Plan that better fits your needs. You shall not give access to people outside your organization without our written consent. d. **Use Guidelines.** You shall not: (i) license, sublicense, sell, resell, rent, lease, transfer, assign, distribute, or otherwise commercially exploit or make the Software available to any third party, other than to your Authorized Users as contemplated by these Terms; (ii) reverse engineer, decompile, disassemble, or create derivative works based on the Software; (iii) circumvent any user limits, license validation, or other restrictions built into the Software; (iv) remove or alter any proprietary notices, labels, or marks from the Software; (v) access the Software in order to build a competitive product or service, or copy any ideas, features, functions, or graphics of the Software; (vi) interfere with or disrupt the integrity or performance of the Software or its license validation systems; or (vii) use the Software in violation of any applicable laws. e. **Free Trials.** If you register for a free trial, EventCatalog will make the Software available to you on a trial basis until the earlier of: (a) the end of the trial period, or (b) the start date of a paid subscription. These Terms apply during the trial period except for the payment sections. We may limit features during the trial. EventCatalog may terminate any free trial at any time in its sole discretion. f. **Subscriber Responsibilities.** You are responsible for all activities that occur under your account and for your Authorized Users' compliance with these Terms. You shall: (i) have sole responsibility for the accuracy, quality, integrity, legality, and appropriateness of all data you process through the Software; (ii) use commercially reasonable efforts to prevent unauthorized access to the Software and notify EventCatalog promptly of any such unauthorized access; and (iii) comply with all applicable laws in using the Software. g. **Purchases Through Resellers.** If you purchase a subscription through an authorised reseller or partner, these Terms still apply in full. No reseller or partner has authority to modify these Terms, make representations, or grant rights on behalf of EventCatalog beyond what is stated herein. Any additional terms between you and a reseller are solely between you and that reseller. *** ## 3. Self-Hosted Deployment.[​](#3-self-hosted-deployment "Direct link to 3. Self-Hosted Deployment.") a. **You Host It.** You are responsible for deploying, installing, and maintaining the Software on your own infrastructure. EventCatalog does not guarantee compatibility with any specific hardware or software environment unless explicitly stated. b. **Your Responsibilities.** You are solely responsible for: (i) the security and maintenance of your hosting environment; (ii) performing regular data backups; (iii) controlling access to the system; and (iv) complying with applicable laws and regulations. EventCatalog is not liable for data loss or security breaches caused by your hosting practices. c. **Modifications.** Any modifications you make to the Software are at your own risk and void support and warranty obligations. *** ## 4. Software Updates.[​](#4-software-updates "Direct link to 4. Software Updates.") a. **Update Availability.** EventCatalog will make updates available as released. You are responsible for downloading and installing them on your self-hosted Instances. EventCatalog will not manage updates on your environment unless separately agreed. b. **Versioning.** EventCatalog follows Semantic Versioning. Minor and patch releases are backwards-compatible. Major releases may include breaking changes, which will be documented with migration guidance provided. c. **End of Life.** EventCatalog reserves the right to discontinue support for older versions according to its end-of-life policy (available on request). Continued use of unsupported versions is at your own risk. *** ## 5. Support Services.[​](#5-support-services "Direct link to 5. Support Services.") a. **Availability.** Support is available via email, Monday to Friday, 9 AM – 5 PM GMT. Response times are determined by your Plan. b. **Scope.** Support includes: bug fixes, configuration assistance, feature guidance, and installation troubleshooting. Support does not include: custom development, training beyond published documentation, third-party integrations not provided by EventCatalog, issues arising from your modifications to the Software, or support for unsupported environments. *** ## 6. Fees and Payment.[​](#6-fees-and-payment "Direct link to 6. Fees and Payment.") a. **Fees.** Your access to and use of the Software is subject to payment of the applicable fees for the Plan selected by you, as set out on the Website or Order. All fees are due in advance as shown at checkout. You may pay by credit card or other payment methods offered at checkout. b. **Taxes.** All fees are exclusive of applicable taxes, levies, or duties imposed by taxing authorities, which shall be your responsibility, excluding only taxes based on EventCatalog's net income. c. **Card Payments.** If a credit card or other automated payment method fails, EventCatalog will make reasonable attempts to process the payment. If payment cannot be collected, your subscription may be suspended or terminated. d. **Invoice Payments.** Where fees are payable by invoice, payment is due within 30 days of the invoice date unless otherwise agreed in writing. Overdue invoice balances accrue interest at the rate specified by the Late Payment of Commercial Debts (Interest) Act 1998 (currently Bank of England base rate + 8%). EventCatalog may suspend access to the Software if invoiced fees remain unpaid for more than 14 days past the due date. e. **No Refunds.** Fees paid are non-refundable. No refunds will be provided for unused portions of the term following termination, or for unused features or services. *** ## 7. Subscription Term and Renewal.[​](#7-subscription-term-and-renewal "Direct link to 7. Subscription Term and Renewal.") a. **Term.** Your subscription begins on the date of purchase and runs for an annual period. b. **Auto-Renewal.** Your subscription will automatically renew for successive annual periods unless you provide written cancellation notice at least thirty (30) days prior to the renewal date by emailing . c. **Price Adjustments.** EventCatalog may adjust renewal pricing with at least 60 days' notice prior to your renewal date. *** ## 8. Proprietary Rights.[​](#8-proprietary-rights "Direct link to 8. Proprietary Rights.") a. **Reservation of Rights.** Subject to the limited rights expressly granted hereunder, EventCatalog reserves all rights, title, and interest in and to the Software, including all related intellectual property rights. No rights are granted to you other than as expressly set forth herein. b. **Restrictions.** You shall not (and shall not allow any third party to): (i) modify, translate, reverse engineer, decompile, disassemble, or create derivative works based on the Software; (ii) circumvent any user limits or other restrictions built into the Software, including the license validation mechanism; (iii) remove any proprietary notices, labels, or marks from the Software; (iv) access the Software in order to build a competitive product or service, or copy any ideas, features, functions, or graphics of the Software; or (v) transfer, sublicense, or redistribute the Software. c. **Feedback.** We welcome your suggestions, comments, and feedback on the Software ("Feedback"). If you provide EventCatalog with any Feedback, EventCatalog may use such Feedback in the Software or in any other EventCatalog products or services without obligation or compensation to you. d. **Community Edition.** The open-source Community Edition is MIT licensed — these Terms don't restrict it. The restrictions in this Section 8 apply only to features, integrations, and functionality that require a paid license to activate or use, regardless of where in the codebase they reside. *** ## 9. License Validation and Telemetry.[​](#9-license-validation-and-telemetry "Direct link to 9. License Validation and Telemetry.") a. **License Validation.** The Software includes a license validation mechanism that connects to EventCatalog's servers at build time to verify your license status. You acknowledge and agree that: (i) a valid, active license is required to use paid features and integrations; (ii) if the license cannot be validated at build time, paid features and integrations will not function — however, Community Edition features and previously deployed Instances will continue to operate unaffected; (iii) you must maintain an internet connection for license validation at build time; and (iv) tampering with or attempting to circumvent the license validation mechanism is a material breach of these Terms. b. **Offline License Keys.** If your environment requires builds without internet access, you may request an offline license key from EventCatalog at no additional cost. Offline keys are available to active paying subscribers on request by contacting . c. **Telemetry.** The Software collects limited, anonymised usage data during builds and catalog creation, including: build frequency, catalog creation events, and aggregate resource counts. This data is anonymised and is not linked to individual users, your data, or the content of your catalogs. Telemetry data is processed by EventCatalog's third-party analytics provider. There is currently no option to opt out of telemetry. EventCatalog may use this aggregated data to improve the Software and for internal analytics purposes. d. **License Server Availability.** EventCatalog will use commercially reasonable efforts to keep its license validation infrastructure available. Because license validation only occurs at build time and only affects paid features and integrations, temporary unavailability of the license server will not impact previously deployed Instances or Community Edition functionality. *** ## 10. Your Data.[​](#10-your-data "Direct link to 10. Your Data.") a. **Self-Hosted Data Control.** Given the self-hosted nature of the Software, you acknowledge and agree that: (i) you own and control all data processed through the Software; (ii) except for the limited telemetry described in Section 9(c), EventCatalog does not access, store, or process your data in the normal course of providing the Software; (iii) you are the sole data controller for any personal data processed using the Software; and (iv) EventCatalog acts solely as a technology provider and not as a data processor under applicable data protection laws. This agreement does not constitute a Data Processing Agreement (DPA) as EventCatalog does not process personal data on your behalf. b. **Your Data Responsibilities.** You are solely responsible for: (i) compliance with all applicable data protection laws (including GDPR, UK GDPR, and other relevant privacy regulations); (ii) implementing appropriate technical and organizational measures to protect personal data; (iii) obtaining necessary consents and providing required notices to data subjects; and (iv) all other obligations that come with being a data controller. c. **Limited Data Access.** EventCatalog may only access your self-hosted environment and associated data: (i) with your explicit consent; (ii) when specifically required to provide technical support; (iii) for the minimum duration necessary to resolve the specific issue; and (iv) under confidentiality obligations. Any data accessed during support will be deleted or returned within 30 days of resolution. d. **Account Information.** While EventCatalog does not access data within the self-hosted Software, EventCatalog collects and processes your account and billing information (e.g. contact names, emails, payment details) to manage the subscription. This data is processed in accordance with our Privacy Policy at . *** ## 11. Representations, Warranties and Disclaimers.[​](#11-representations-warranties-and-disclaimers "Direct link to 11. Representations, Warranties and Disclaimers.") a. **Limited Warranty.** EventCatalog warrants that the Software will substantially conform to its published documentation for a period of 90 days from the date of purchase. Your exclusive remedy for breach of this warranty shall be for EventCatalog to use commercially reasonable efforts to correct the non-conformity, or if EventCatalog cannot do so within a reasonable time, to refund the fees attributable to the non-conforming Software. b. EXCEPT AS EXPRESSLY PROVIDED HEREIN, EVENTCATALOG MAKES NO REPRESENTATIONS AND PROVIDES NO WARRANTIES OR CONDITIONS OF ANY KIND, WHETHER EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, AND SPECIFICALLY DISCLAIMS ALL IMPLIED WARRANTIES, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT, SATISFACTORY QUALITY, OR FITNESS FOR A PARTICULAR PURPOSE, TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW. EVENTCATALOG DOES NOT GUARANTEE THAT THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR-FREE. THE SOFTWARE IS PROVIDED "AS-IS" SUBJECT ONLY TO THE LIMITED WARRANTY IN SECTION 11(a) ABOVE. *** ## 12. Limitation of Liability.[​](#12-limitation-of-liability "Direct link to 12. Limitation of Liability.") a. UNDER NO CIRCUMSTANCES SHALL EVENTCATALOG BE LIABLE FOR: (A) ANY INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL, EXEMPLARY OR OTHER DAMAGES WHATSOEVER, INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA, OR OTHER INTANGIBLE LOSSES RESULTING FROM (I) YOUR USE OF OR INABILITY TO USE THE SOFTWARE, (II) THE COST OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, (III) ERRORS, MISTAKES, OR INACCURACIES IN THE SOFTWARE, OR (IV) ANY OTHER MATTER RELATING TO THE SOFTWARE; OR (B) ANY DAMAGES (IN AGGREGATE) IN EXCESS OF THE FEES PAID BY YOU TO EVENTCATALOG IN THE TWELVE (12) MONTHS PRECEDING THE CLAIM. b. **IP Claims Cap.** For claims that the Software infringes third-party intellectual property rights, EventCatalog's aggregate liability shall not exceed three times (3x) the fees paid by you in the twelve (12) months preceding the claim. c. **Exceptions.** Nothing in these Terms shall limit or exclude either party's liability for: (i) fraud or fraudulent misrepresentation; (ii) death or personal injury caused by negligence; or (iii) any other liability which cannot be limited or excluded under applicable law. d. THESE LIMITATIONS SHALL APPLY EVEN IF EVENTCATALOG HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE FOREGOING LIMITATIONS SHALL APPLY TO THE FULLEST EXTENT PERMITTED BY LAW IN THE APPLICABLE JURISDICTION. *** ## 13. Indemnification.[​](#13-indemnification "Direct link to 13. Indemnification.") a. **IP Infringement Response.** If a third party makes a claim that your use of the Software (excluding the Community Edition and any third-party software) infringes that third party's intellectual property rights (an "Infringement Claim"), EventCatalog will use commercially reasonable efforts to resolve the claim. You must promptly notify EventCatalog in writing of any Infringement Claim and not make any admission of liability without EventCatalog's prior written consent. b. **EventCatalog's Remedies.** In response to an Infringement Claim, EventCatalog may at its sole option and expense: (i) procure for you the right to continue using the Software; (ii) modify the Software so that it becomes non-infringing while providing substantially equivalent functionality; or (iii) if neither (i) nor (ii) is commercially practicable, terminate your license and refund any prepaid fees for the unused portion of your subscription term. This Section 13(a)-(c) states EventCatalog's entire liability and your sole remedy with respect to any Infringement Claim. c. **Exclusions.** EventCatalog shall have no obligation under Section 13(a) or (b) to the extent an Infringement Claim arises from: (i) modifications to the Software made by anyone other than EventCatalog; (ii) use of the Software in violation of these Terms or the Documentation; (iii) use of the Software in combination with third-party products, data, or services, where the infringement would not have occurred but for such combination; (iv) use of a version of the Software other than the then-current version, where the infringement would have been avoided by using the current version; or (v) use of the Community Edition, which is provided under the MIT License without warranty or indemnity. d. **Your Indemnification.** You will defend, indemnify, and hold harmless EventCatalog, its affiliates, and their respective officers, directors, employees, and agents from and against any third-party claims, damages, liabilities, and reasonable costs (including legal fees) arising from: (i) your misuse of the Software; (ii) your violation of these Terms; or (iii) your breach of applicable laws in connection with the Software. EventCatalog must: (a) promptly notify you in writing of any such claim; (b) give you sole control of the defence and settlement; and (c) provide reasonable cooperation at your expense. *** ## 14. Confidential Information.[​](#14-confidential-information "Direct link to 14. Confidential Information.") "Confidential Information" means any proprietary information shared by either party during the term of these Terms, including but not limited to business plans, technical data, product information, and financial information. Each party agrees not to disclose the Confidential Information of the other to any third party without the prior written consent of the disclosing party, and to use such information only as necessary to fulfill these Terms. Obligations of non-disclosure will not apply to information which: (i) was already known to the receiving party without obligation of confidentiality; (ii) becomes publicly available without fault of the receiving party; (iii) is disclosed by a third party under no obligation of confidentiality; or (iv) is independently developed by the receiving party. The receiving party may disclose Confidential Information in accordance with a judicial or governmental order, provided the receiving party gives the disclosing party reasonable notice prior to such disclosure. These confidentiality obligations shall survive termination for a period of 3 years. *** ## 15. Termination.[​](#15-termination "Direct link to 15. Termination.") a. **Termination for Breach.** Either party may terminate these Terms upon 30 days' written notice if the other commits a material breach, including but not limited to: failure to pay fees when due, violation of license terms, or infringement of intellectual property rights. b. **Effect of Termination.** Upon termination: (i) all licenses granted herein shall immediately terminate; (ii) paid features and integrations will no longer function once the license is invalidated, though previously deployed Instances and Community Edition features are not actively disabled; (iii) you must cease use of the paid Software and delete all copies; and (iv) you shall pay all outstanding fees due through the date of termination. c. **Community Edition.** Termination of these Terms does not affect your right to use the Community Edition of EventCatalog under the MIT License. d. **Survival.** Sections 8 (Proprietary Rights), 9 (License Validation and Telemetry), 10 (Your Data), 11 (Warranties and Disclaimers), 12 (Limitation of Liability), 13 (Indemnification), 14 (Confidential Information), 16(b) (Governing Law), and all payment obligations shall survive termination of these Terms. *** ## 16. General Provisions.[​](#16-general-provisions "Direct link to 16. General Provisions.") a. **Dispute Resolution.** Before commencing any legal proceedings, each party agrees to provide the other with a written description of the dispute and make a good faith effort to resolve it amicably within 30 days. Nothing in this clause prevents either party from seeking urgent injunctive or equitable relief where necessary. b. **Governing Law.** These Terms shall be governed by the laws of England and Wales. Each party irrevocably submits to the exclusive jurisdiction of the courts of England and Wales for any disputes arising out of or in connection with these Terms. c. **Publicity.** EventCatalog may include your name and logo in customer lists on the Website unless you notify us in writing at . We will remove it within 30 days of your request. You agree not to remove EventCatalog branding from the Software unless your Plan expressly permits removal of branding. d. **Force Majeure.** Neither party shall be liable for any failure to perform due to causes beyond their reasonable control, including natural disasters, war, cyber-attacks, or government actions. e. **Assignment.** You may not assign or transfer these Terms, or any rights or licenses granted hereunder, without EventCatalog's prior written consent. EventCatalog may assign these Terms at any time without notice. f. **Amendments.** EventCatalog may update these Terms from time to time. We will notify you of material changes via email or through the Website at least 30 days before they take effect. Continued use of the Software or continued payment of subscription fees after such changes constitutes acceptance of the updated terms. g. **Severability.** If any part of these Terms is unlawful, void, or unenforceable, that part shall be deemed severable and shall not affect the validity and enforceability of the remaining provisions. h. **Compliance with Laws.** You agree to use the Software in compliance with all applicable laws and regulations, including export control laws. i. **Reseller Purchases.** Purchases made through authorised resellers or partners remain subject to these Terms. Resellers and partners have no authority to modify these Terms or make binding representations on behalf of EventCatalog. j. **Notices.** All notices under these Terms must be in writing and sent by email — to for notices to EventCatalog, and to the email address associated with your account for notices to you. Notices are deemed received on the next business day after sending. k. **Waiver.** A party's failure to enforce any right or provision of these Terms shall not constitute a waiver of that right or provision. Any waiver must be in writing and signed by the waiving party. l. **Entire Agreement.** These Terms, together with any Order and our Privacy Policy, constitute the entire agreement between the parties relating to the Software and supersede all prior or contemporaneous communications, representations, or agreements, whether oral or written. *** ## 17. Contact Information.[​](#17-contact-information "Direct link to 17. Contact Information.") **EventCatalog Ltd** Company registered in England. Email: *** *By completing your purchase, starting a trial, or using EventCatalog, you acknowledge that you have read, understood, and agree to be bound by these Terms of Service.* --- OrderCreated Event PaymentService Service Commerce Domain OpenAPI orders-api.yaml AsyncAPI events.yaml CreateOrder Command # How teams are using EventCatalog Explore common workflows and patterns for documenting, governing, and evolving your architecture. [Get started](/docs/development/getting-started/installation.md)[View the demo](https://demo.eventcatalog.dev) ### [Architecture Documentation](/use-cases/architecture-documentation.md) [Purpose-built documentation for software architectures. Document services, events, domains, and flows in one place.](/use-cases/architecture-documentation.md) [Learn more](/use-cases/architecture-documentation.md) ### [Domain-Driven Design Documentation](/use-cases/domain-driven-design.md) [Document and map your bounded contexts, domains, and ubiquitous language.](/use-cases/domain-driven-design.md) [Learn more](/use-cases/domain-driven-design.md) ### [AI/LLM Context Foundation](/use-cases/ai-llm-context-foundation.md) [Documentation for humans AND machines. Connect AI assistants to your living architecture.](/use-cases/ai-llm-context-foundation.md) [Learn more](/use-cases/ai-llm-context-foundation.md) ### [Breaking Change Detection](/use-cases/breaking-change-detection.md) [Know who you're about to break before making schema changes.](/use-cases/breaking-change-detection.md) [Learn more](/use-cases/breaking-change-detection.md) ### [Architecture Planning](/use-cases/architecture-planning.md) [Design and plan your future architecture before writing code.](/use-cases/architecture-planning.md) [Learn more](/use-cases/architecture-planning.md) ### [API Documentation & Beyond](/use-cases/beyond-api-documentation.md) [More than API docs, document your entire software architecture.](/use-cases/beyond-api-documentation.md) [Learn more](/use-cases/beyond-api-documentation.md) ### [Automated Documentation](/use-cases/automated-documentation.md) [Generate documentation automatically from your OpenAPI, AsyncAPI, and broker specifications.](/use-cases/automated-documentation.md) [Learn more](/use-cases/automated-documentation.md) ### [CI/CD Integration](/use-cases/ci-cd-integration.md) [Integrate your catalog into CI/CD pipelines and rebuild automatically when things change.](/use-cases/ci-cd-integration.md) [Learn more](/use-cases/ci-cd-integration.md) ### [Enrich Schemas with Documentation](/use-cases/schema-documentation.md) [Enrich your schemas with business context, ownership, and documentation.](/use-cases/schema-documentation.md) [Learn more](/use-cases/schema-documentation.md) Trusted by engineering teams worldwide [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) --- [← Back to use cases](/use-cases.md) # AI/LLM Context Foundation Give your AI assistants the architectural context they need. EventCatalog becomes the source of truth that LLMs can query to understand your domains, services, events, and organizational boundaries. ## The problem[​](#the-problem "Direct link to The problem") AI tools are transforming how we build software, but they are missing something critical. They need your business context. Your domains, your ubiquitous language, your service boundaries, your systems, your organizational patterns and rules. Without this context, AI assistants generate generic advice that does not align with your actual architecture. Developers spend their time repeatedly explaining their architecture in every conversation. AI suggests patterns that contradict your domain boundaries. It recommends building features that already exist under different names. It generates code that does not understand which services own what data or functionality. The AI has the capability to help, but it lacks the foundational knowledge of your specific organization. Where is the AI going to get that information? Your architecture lives in scattered documentation, tribal knowledge, and code comments. The AI cannot access it, cannot understand it, and cannot reason about it. You need a single source of truth that both humans and machines can consume. ## The solution[​](#the-solution "Direct link to The solution") EventCatalog provides foundational context for AI and LLMs. Every EventCatalog instance comes with a built-in [Model Context Protocol (MCP) server](/docs/development/ask-your-architecture/mcp-server/introduction.md) that exposes your architecture documentation to any AI assistant. Connect your preferred AI tools, bring your own models, and give them direct access to your living documentation. The MCP server transforms your Markdown-based documentation into a queryable knowledge base. Ask EventCatalog questions directly from your IDE or any MCP-compatible client. What events do we have? What services do we have? Who owns them? What domains exist in our organization? The AI gets accurate answers based on your actual architecture, not generic assumptions. Because EventCatalog is powered by Markdown, the quality of your documentation directly determines the quality of AI responses. Document your architecture for humans, and machines automatically benefit. The [technical implementations](/docs/development/guides/messages/events/introduction.md), [producers and consumers](/docs/development/guides/services/introduction.md), [domain boundaries](/docs/development/guides/domains/introduction.md), and [ownership structures](/docs/development/guides/owners/teams/introduction.md) you already maintain become the context that makes AI truly useful. ## Beyond text: Diagrams as queryable knowledge[​](#beyond-text-diagrams-as-queryable-knowledge "Direct link to Beyond text: Diagrams as queryable knowledge") EventCatalog takes this further with its visualization capabilities. The [automated node graphs and visualizations](/docs/development/components/components/nodegraph.md) that help humans understand relationships get transformed into Mermaid diagrams that LLMs can read and reason about. When you ask a question about a visualization, the AI understands the relationships between services, events, and domains because the diagram itself becomes part of the context. This means AI can help you understand not just what exists, but how components relate to each other. It can trace event flows, identify potential impacts of changes, and recommend architectural patterns that align with your existing system design. ## Real workflows enabled[​](#real-workflows-enabled "Direct link to Real workflows enabled") The market is changing. Organizations are adopting AI tools at an accelerating pace. EventCatalog positions you to take advantage of this shift by providing the architectural context that makes AI assistants genuinely valuable. For onboarding, new team members ask questions and get accurate answers immediately. What things do we have in our architecture? What produces this event? I am looking for this specific event to integrate with. The AI becomes an always-available guide to your system, drawing directly from your maintained documentation. For reducing redundant work, developers planning new features can ask the AI to find similar existing events or services. Instead of accidentally rebuilding functionality that already exists under a different name, they discover what is already available. The AI can make better architectural recommendations because it knows what systems you already have and how they are structured. The AI understands ownership and team boundaries because that information lives in EventCatalog. It can reference your actual service names, event types, and domain language. It speaks your organization's ubiquitous language because that language is documented and accessible. ## How this can help you[​](#how-this-can-help-you "Direct link to How this can help you") Documentation for humans and machines. That is the vision. EventCatalog becomes the heart of how your organization shares knowledge, not just among people, but with the AI tools you increasingly rely on. You get AI assistants that understand your specific context, not just general software patterns. They help you work within your architectural constraints and standards rather than against them. They surface relevant existing components instead of suggesting you build everything from scratch. Your documentation investment pays double returns. The effort you put into maintaining EventCatalog helps your human team members and simultaneously powers your AI tools. The Markdown format that makes documentation maintainable also makes it machine-readable. The diagrams that help visualize complexity become queryable knowledge graphs. As AI adoption grows across your organization, EventCatalog ensures those tools have the foundational context they need to be genuinely useful. Connect any MCP client, bring your own models, and give them access to the architectural knowledge that makes the difference between generic advice and truly helpful assistance. ## Ready to try it? Get started with EventCatalog and connect your AI tools to your architecture. [Get started](/docs/development/getting-started/installation.md) [Learn about the MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) --- [← Back to use cases](/use-cases.md) # Architecture Documentation Document your software architecture with a tool designed specifically for software primitives. Bring all your architecture artifacts into one place, version them with Git, and make them discoverable for humans and AI. ## The problem[​](#the-problem "Direct link to The problem") Most teams document their software architectures using generic tools that were never designed for this purpose. Your service definitions live in Confluence. Your event schemas sit in a wiki. Your domain boundaries exist as diagrams scattered across Google Slides. Your business flows are documented in Miro boards. Team ownership information hides in spreadsheets or only exists as tribal knowledge. These tools are not built around software architecture primitives. They do not understand what a service is, what an event represents, or how domains relate to each other. They cannot show you the relationships between your components. They cannot help you navigate from a high-level domain view down to individual message schemas. They were designed for general documentation, not for the specific needs of documenting software systems. The result is fragmentation and decay. Documentation lives everywhere and nowhere. Developers cannot find what they need. New team members struggle to understand how systems connect. Architects lose track of the bigger picture as the system grows. The documentation that does exist becomes outdated because updating it means editing multiple tools, none of which make it easy to maintain technical content. Eventually, teams stop documenting altogether because the tools fight against them rather than supporting their workflow. You need a tool that understands software architecture. One that treats services, events, commands, queries, domains, and flows as first-class citizens. One that helps you visualize relationships and navigate your architecture at any level of detail. One that makes documentation discoverable for both humans trying to understand the system and AI tools trying to assist with development. ## The solution[​](#the-solution "Direct link to The solution") EventCatalog is purpose-built for documenting software architectures. It provides an opinionated structure based on the primitives that make up modern distributed systems. [Services](/docs/development/guides/services/introduction.md), [events](/docs/development/guides/messages/events/introduction.md), [commands](/docs/development/guides/messages/commands/introduction.md), [queries](/docs/development/guides/messages/queries/introduction.md), [domains](/docs/development/guides/domains/introduction.md), [flows](/docs/development/guides/flows/introduction.md), and [channels](/docs/development/guides/channels/introduction.md) all have dedicated documentation patterns that reflect how these components actually work in your system. The tool is technology-agnostic, focusing on architectural patterns rather than implementation details. Whether you use Kafka, SQS, SNS, RabbitMQ, or any other messaging technology, EventCatalog lets you document how messages flow through your system. Whether your services are built with Node.js, Java, Python, or Go, the documentation focuses on what those services do and how they interact, not the technical stack underneath. Everything in EventCatalog is stored as Markdown files in your own Git repository. You control your data. You own your documentation. The information lives alongside your code, versioned with the same tools your team already uses. This means your architecture documentation gets the same benefits as your codebase: version history, pull request workflows, branch management, and an audit trail of every change. Git is not just for version control. It becomes your audit trail. Every change to your architecture documentation is tracked. Who added this service? When did this domain get introduced? What version of this event schema was in use six months ago? The answers live in your Git history, giving you a complete evolutionary story of your architecture over time. ## Built for discovery and navigation[​](#built-for-discovery-and-navigation "Direct link to Built for discovery and navigation") EventCatalog is designed around discoverability. Start at a high level by exploring [domains and subdomains](/docs/development/guides/domains/introduction.md) to understand your business boundaries. Drill down into the services within those domains to see what responsibilities they handle. Navigate to the events those services produce and consume to understand integration patterns. Follow relationships to see which other services depend on those events. Move between flows to understand business processes that span multiple services. The navigation style supports both breadth and depth. Architects can stay at the domain level to see the big picture. Product managers can explore events to find opportunities in the architecture. Developers can dive deep into service schemas to understand implementation details. Analysts can trace flows to document data contracts and understand how information moves through the system. Automated node graphs and Mermaid diagrams visualize the relationships between components. See which services produce and consume specific events. Understand domain boundaries and how integration events cross those boundaries. Trace the path of a business flow as it touches different services and generates various events. These visualizations are not static diagrams that become outdated. They are generated from your documentation, staying synchronized with your architecture as it evolves. The search functionality lets you find components quickly. Looking for a specific event? Search for it and see its producers, consumers, schema, and version history. Need to understand what a domain contains? Search for the domain and explore its services, events, and subdomains. Trying to find who owns a particular service? Search and see team ownership, contact information, and related components. ## Documentation that grows with you[​](#documentation-that-grows-with-you "Direct link to Documentation that grows with you") Teams typically start small. Document a few events. Add one or two services. Define a domain or two. As you document, you see the value. The information becomes useful. Team members start referencing EventCatalog instead of asking in Slack. New developers use it for onboarding. Architects use it to plan changes. The return on investment becomes clear. From there, EventCatalog grows with your needs. Add more services as they are built. Document new events as they are introduced. Capture business flows to explain complex processes. Define channels to show how messages are transported. Bring in [team ownership information](/docs/development/guides/owners/teams/introduction.md) so everyone knows who maintains what. Add [ubiquitous language terms](/docs/development/guides/domains/ownership-and-language/adding-ubiquitous-language.md) to build a shared vocabulary across your organization. The tool scales from a handful of components to hundreds or thousands. Set up CI/CD pipelines to automate documentation updates. Write [custom plugins](/docs/plugins/intro.md) to generate documentation from your existing tools and schemas. Create workflows that keep documentation synchronized with code. Self-host it within your infrastructure to maintain complete control over your data and access patterns. Because EventCatalog is powered by Markdown, extending it is straightforward. Add custom fields to capture information specific to your organization. Include code examples, runbooks, or architecture decision records alongside your component documentation. Embed images, diagrams, or videos to enhance understanding. The format is flexible enough to adapt to your needs while remaining structured enough to provide consistency. ## For humans and AI[​](#for-humans-and-ai "Direct link to For humans and AI") Modern development increasingly involves AI assistants. Developers use AI to write code, understand systems, and plan changes. These tools need context. They need to understand your architecture, your domain language, your service boundaries, and your organizational patterns. Without that context, AI generates generic advice that does not align with your actual system. EventCatalog provides the foundational context that makes AI tools genuinely useful. The built-in [Model Context Protocol (MCP) server](/docs/development/ask-your-architecture/mcp-server/introduction.md) exposes your architecture documentation to any compatible AI assistant. Connect your IDE, chat interface, or custom tools, and give AI direct access to your living documentation. Ask questions in natural language and get accurate answers based on your actual architecture. What events do we have? What services produce this event? Who owns this domain? Which teams should I coordinate with for this change? The AI understands your system because your documentation is structured, discoverable, and maintained. The same documentation that helps your human team members onboard, plan changes, and understand impacts also powers your AI tools. Document once, benefit twice. The Markdown format that makes documentation maintainable also makes it machine-readable. The relationships you define to help humans navigate your architecture become the knowledge graph that helps AI reason about your system. ## How this can help you[​](#how-this-can-help-you "Direct link to How this can help you") EventCatalog solves the fragmentation problem that plagues software architecture documentation. Instead of scattered artifacts across multiple generic tools, you have a single source of truth designed specifically for architectural primitives. Your team knows where to look. Your documentation stays synchronized. Your architecture becomes discoverable rather than hidden in tribal knowledge. Developers find the information they need without asking around or digging through outdated wikis. Architects maintain visibility into the bigger picture as the system scales. Product managers explore opportunities by understanding which events and services exist. Analysts document flows and data contracts using the same tool engineers use for technical specifications. New team members onboard faster because the documentation is structured around the components they need to understand. The Git-based approach means your documentation benefits from the workflows your team already knows. Pull requests for documentation changes. Code reviews to ensure accuracy. Branch management to experiment with documentation approaches. Merge conflicts that force conversations when multiple people update the same component. The same collaboration patterns that work for code now work for architecture documentation. Versioning everything provides the historical context that matters for evolving architectures. Understand what changed and when. Track how domains evolved over time. See which version of a service introduced a particular event. Reference old schemas when debugging legacy systems. The evolutionary story of your architecture lives in Git, giving you a complete audit trail. For distributed teams working across time zones and business units, EventCatalog becomes the shared understanding that makes coordination possible. Teams in different regions see how their services integrate with others. Data teams understand which application services produce events they depend on. Platform teams visualize the bigger picture across all domains and services. The documentation creates alignment without requiring everyone to be in the same room or even the same time zone. As your organization adopts AI tools, EventCatalog ensures those tools have the context they need. Your documentation investment pays double returns, helping both humans and machines understand your architecture. The structured, discoverable format that makes navigation easy for developers also makes reasoning easy for AI. Ultimately, EventCatalog helps you maintain the understanding of your architecture as it grows. Small systems are easy to keep in your head. Large systems require documentation. But that documentation only helps if it is maintained, discoverable, and designed for the specific needs of software architecture. EventCatalog provides the foundation that scales with your system, keeping your team aligned and your architecture understandable. ## Ready to try it? Get started with EventCatalog and bring your architecture documentation into one place. [Get started](/docs/development/getting-started/installation.md) [Explore the guides](/docs/development/guides/services/introduction.md) --- [← Back to use cases](/use-cases.md) # Architecture Planning Plan your future architecture alongside your current state. Use drafts, versioning, and visual comparison to design changes before writing code. ## The problem[​](#the-problem "Direct link to The problem") Architects plan in tools that disconnect from reality. Whiteboards get photographed and forgotten. Lucidchart diagrams drift out of sync with what actually got built. There is no single place where the current state and the planned future state live together. When it comes time to communicate changes, architects piece together slides from multiple sources. Engineers see the current architecture in one place and proposals in another. Nobody can easily compare what exists today with what is being proposed, and the history of how decisions evolved gets lost. ## The solution[​](#the-solution "Direct link to The solution") EventCatalog lets you plan your future architecture right alongside your current state. Mark new services, events, and schemas as drafts. Use versioning to distinguish between what exists today and what is coming next. Everything lives in Git, giving you full audit history of how your architecture evolves. Compare different versions side by side to see exactly what is being added, removed, or modified. When the design is approved through your normal PR workflow, it becomes part of the documented current state. Engineers browsing the catalog see not just what exists today, but what is coming. Modernization strategies, schema changes, and new service proposals all live in the same place as your production architecture. ## How this can help you[​](#how-this-can-help-you "Direct link to How this can help you") Planning in EventCatalog means your architecture documentation stays accurate for both current and future state. Architects stop maintaining separate slide decks and diagrams that drift out of sync. The full history of architectural decisions lives in Git, so you can always understand how and why the system evolved. Teams get faster buy-in on proposed changes because everyone can see the same picture. Engineers understand the direction before implementation starts. When new team members join, they can explore not just how things work today, but the roadmap for where things are headed. You reduce rework by validating designs before writing code. The visual comparison features let stakeholders understand the impact of proposed changes. And because everything goes through your normal PR process, you maintain the governance and review workflows your organization already uses. ## Ready to try it? Get started with EventCatalog, or contact us to discuss your workflow. [Get started](/docs/development/getting-started/installation.md) [Contact us to book a demo](https://calendly.com/boyneyy123/30min) --- [← Back to use cases](/use-cases.md) # Automated Documentation Sync your catalog from OpenAPI and AsyncAPI specs. Automate the technical details, keep manual control over business context. ## The problem[​](#the-problem "Direct link to The problem") Documentation falls behind. Teams write docs once, then the system evolves. Within months, your documentation no longer reflects reality. Traditional tools force a choice: automate everything (losing business context) or write everything manually (constant maintenance). ## The solution[​](#the-solution "Direct link to The solution") EventCatalog takes a hybrid approach. Automate what changes often—schemas, specifications, visualizations—while keeping manual control over what doesn't: domains, ownership, and business context. Teams own their OpenAPI and AsyncAPI specs. EventCatalog pulls these from GitHub, private repos, or schema registries—syncing automatically via CI/CD. Your team then enriches with domains, ownership, and the business context that specs can't capture. Supported sources include OpenAPI, AsyncAPI, Confluent Schema Registry, AWS Glue, and GitHub. ## How this can help you[​](#how-this-can-help-you "Direct link to How this can help you") With EventCatalog, your documentation becomes something teams actually trust. Developers find accurate schemas when they need to understand how a service works. Architects get visualizations that reflect reality, not outdated diagrams. You don't have to choose between automation and context. Technical details stay current automatically while business knowledge gets captured and preserved alongside it. New engineers onboard faster because they can trust what they're reading. Architects plan changes with confidence. And you stop spending hours every sprint manually updating docs that nobody reads. ## Ready to try it? Get started with EventCatalog, or contact us to discuss your workflow. [Get started](/docs/development/getting-started/installation.md) [Contact us to book a demo](https://calendly.com/boyneyy123/30min) --- [← Back to use cases](/use-cases.md) # Not Just an API Documentation Tool EventCatalog is more than an API documentation tool. Capture business context, flows, domains, team ownership, and ubiquitous language alongside your technical specifications. ## The problem[​](#the-problem "Direct link to The problem") Traditional API documentation tools focus on one thing: showing developers the inputs and outputs of an API. You get a list of endpoints, request parameters, response schemas, and example calls. Tools like Swagger UI, Stoplight, and ReadMe excel at this technical layer. But the buck does not stop at the APIs. When a new developer joins your team and asks "how does payment processing work in our system?", an API documentation tool shows them a `/payments` endpoint. It does not show them the business flow from user signup to payment completion. It does not explain what events fire when a payment succeeds or fails. It does not reveal which services are involved or which teams own them. It does not define what a "payment" means in your specific business context. In distributed systems and event-driven architectures, this narrow focus leaves critical questions unanswered. How do services connect to each other? What domains and bounded contexts exist? What is the ubiquitous language your organization uses? Who owns which parts of the system? These questions matter just as much as knowing which JSON fields an endpoint accepts. ## The solution[​](#the-solution "Direct link to The solution") EventCatalog keeps the API documentation—with full [AsyncAPI](/integrations/asyncapi.md) and [OpenAPI](/integrations/openapi.md) rendering—but adds comprehensive software architecture documentation around it. You capture the bigger picture: business context, system flows, domain models, team ownership, and ubiquitous language definitions. When someone explores your Payment Processing service in EventCatalog, they discover multiple layers of understanding. At the technical level, they see the [OpenAPI specification](/docs/development/guides/schemas/introduction.md) with all the routes and request details. But they also see the [business flow](/docs/development/guides/flows/introduction.md) that maps the journey from user signup through payment completion. They understand which [events](/docs/development/guides/messages/events/introduction.md) fire at each step, which [services](/docs/development/guides/services/introduction.md) consume those events, and how the pieces connect. The system belongs to a clearly defined [domain](/docs/development/guides/domains/introduction.md) with its bounded context. The [ubiquitous language](/docs/development/guides/domains/ownership-and-language/adding-ubiquitous-language.md) section defines what "payment" means in your organization's specific context. [Team ownership](/docs/development/guides/owners/teams/introduction.md) is explicit, so anyone knows who to contact with questions. Related [entities](/docs/development/guides/domains/entities/introduction.md) and data models are documented alongside the APIs that use them. ## Visualization unlocks understanding[​](#visualization-unlocks-understanding "Direct link to Visualization unlocks understanding") The biggest differentiator is visualization. EventCatalog lets you see your entire system at multiple levels. Visualize how events, messages, commands, and services interact. See producers and consumers for any event. Understand domain boundaries and relationships. Zoom in to examine a single service's OpenAPI specification, or zoom out to see how twenty services collaborate across your architecture. This visual discovery replaces the flat list of APIs with an explorable map of your system. A developer joining the team does not start with isolated endpoint documentation. They start by visually seeing how services connect, clicking into an event to find its schema, then exploring a service to view its OpenAPI file with all routes rendered as expected. These visualizations work in the EventCatalog UI through interactive [node graphs](/docs/development/components/components/nodegraph.md), and you can export them as Mermaid diagrams to share directly with AI and LLM tools. Speaking of which, this comprehensive documentation becomes incredibly valuable for AI assistants through EventCatalog's [MCP server integration](/docs/development/ask-your-architecture/mcp-server/introduction.md), giving your LLMs full context about your organization, topologies, and ubiquitous language. ## Domain-Driven Design meets technical specifications[​](#domain-driven-design-meets-technical-specifications "Direct link to Domain-Driven Design meets technical specifications") EventCatalog embraces Domain-Driven Design principles alongside technical API specifications. When you document a service, you place it within its bounded context. You define the ubiquitous language that domain experts and engineers share. You map team topologies so organizational structure is clear. This integration creates unique value when planning architecture or onboarding team members. Someone can start at the domain level to understand business capabilities, drill down to services within that domain, examine the events those services produce and consume, and finally look at the OpenAPI or AsyncAPI specifications for implementation details. Every layer connects to the next, creating a complete story rather than isolated technical fragments. ## How this can help you[​](#how-this-can-help-you "Direct link to How this can help you") Organizations using EventCatalog gain a single source of truth where people can go to understand the system. Not just the APIs, but how everything fits together. Teams onboard faster because new developers see the whole picture instead of piecing together understanding from scattered documentation. Architects and senior engineers understand how components are actually used across the system. Business analysts can document workflows that map to technical implementations. In distributed systems where complexity grows fast, EventCatalog helps you keep control and maintain governance. You use modern technology and get value from event-driven architecture, but you also help people understand what is happening. The AI and LLM angle amplifies this benefit—you can give all this organizational context to AI assistants, making them far more effective at understanding and working with your specific system. The result is faster onboarding, better architectural decisions, improved cross-team collaboration, and reduced incidents from misunderstanding dependencies. Most importantly, you capture more context about your organization and make it discoverable. EventCatalog positions you to succeed with complex systems by ensuring everyone—humans and AI alike—can understand the full architecture, not just the API surface. ## Ready to try it? Get started with EventCatalog, or contact us to discuss your workflow. [Get started](/docs/development/getting-started/installation.md) [Contact us to book a demo](https://calendly.com/boyneyy123/30min) --- [← Back to use cases](/use-cases.md) # Breaking Change Detection Know who you're about to break before making schema changes. Visualize downstream consumers, understand ownership, and use AI to detect breaking changes before they reach production. ## The problem[​](#the-problem "Direct link to The problem") When your architecture is small, keeping track of who consumes your schemas is manageable. You hold a mental model of the handful of services that depend on your events. Making a change feels safe because you know exactly who to talk to. But as your architecture scales, that mental model breaks down. Distributed teams across different time zones build new services. Data pipelines start consuming your events for analytics. Machine learning teams depend on your schemas for model training. New microservices spin up without your knowledge. Suddenly, you have no idea who is consuming your schemas or what will break when you make a change. Most organizations define versioning strategies and preach non-breaking changes, but the reality is different. Companies typically start with schemas and don't think about schema evolution until it becomes painful. A developer makes what seems like a simple change, removing an unused field, renaming a property for clarity, or changing a data type. The change gets deployed. Then the incidents start rolling in. Services you didn't know existed begin failing. Data pipelines break. Reports stop updating. A downstream team on the other side of the world wakes up to production alerts. Without EventCatalog, capturing and maintaining this knowledge across a distributed system is nearly impossible. Your architecture grows and scales, but your understanding of the relationships between services cannot keep pace. Teams work in isolation, unaware of the intricate dependencies they're part of. The question "who will I break if I change this schema?" has no reliable answer. ## The solution[​](#the-solution "Direct link to The solution") EventCatalog gives you visibility into the downstream impact of schema changes before they reach production. By [documenting your producers and consumers](/docs/development/guides/messages/common/map-to-producers-and-consumers.md), you create a living map of dependencies across your entire architecture. When someone needs to modify a schema, they can immediately see who consumes that message, who owns those consuming services, and what versions they depend on. This visibility extends beyond microservices to data products and analytics. When you document that an event flows from your application services to data warehouses, reports, and dashboards, you understand the full scope of impact. Before making a breaking change, you see not just the microservices that might fail, but also the downstream reports that will stop updating and the data teams who need to be involved. EventCatalog's [AI integration through MCP servers](/docs/development/ask-your-architecture/mcp-server/introduction.md) brings this information directly into your development workflow. Open your IDE with a schema file, connect to the EventCatalog MCP server, and ask questions in natural language. "Who consumes the OrderCreated event?" "I want to remove the legacy\_customer\_id field, who will I break?" "Who owns the services that depend on this schema?" The AI understands breaking changes, knows about different versioning strategies, and can tell you exactly which services and teams will be affected. The workflow becomes straightforward. A developer opens a schema file and considers making a change. Before modifying anything, they ask the AI about the downstream impact. EventCatalog shows them the list of consuming services, their versions, and the teams that own them. Armed with this knowledge, they can coordinate the change properly, reaching out to affected teams, planning migration paths, and ensuring everyone is prepared before the change ships. For teams that have version strategies or schema registries in place, EventCatalog complements those tools by adding the human and organizational context. You might know a change is technically breaking, but EventCatalog tells you which teams to coordinate with and helps you understand the broader business impact. For teams that don't have those practices established yet, EventCatalog provides immediate value by making the implicit dependencies explicit. Looking ahead, EventCatalog's breaking change detection will integrate with CI/CD pipelines to catch these issues automatically before code reaches production. Schema changes will be analyzed as part of pull requests, with automated checks that fail builds when breaking changes are detected without proper coordination. This shift-left approach ensures that schema governance happens at development time, not when incidents occur in production. ## How this can help you[​](#how-this-can-help-you "Direct link to How this can help you") EventCatalog solves the scaling problem that all distributed architectures face. As your system grows from a handful of services to dozens or hundreds, your ability to understand the relationships between components grows with it instead of deteriorating. Teams working across different time zones and business units can see the full picture of dependencies without relying on tribal knowledge or manual documentation that quickly becomes outdated. When someone needs to make a breaking change, the process transforms from risky and stressful to coordinated and deliberate. Instead of hoping nothing breaks, you know exactly who will be affected. Instead of broadcasting in Slack channels and hoping the right people see it, you have a clear list of teams to contact. Instead of discovering dependencies through production incidents, you discover them before writing a single line of code. For distributed teams specifically, EventCatalog becomes the shared source of truth that makes coordination possible. A team in one region can see that their schema is consumed by services owned by teams in other regions. The data platform team can understand which application services produce events they depend on. Product teams can visualize how their microservices fit into the larger ecosystem. This visibility enables proactive communication and reduces the organizational friction that typically slows down schema evolution. The AI integration means developers get answers immediately without context-switching or waiting for others. They don't need to know who to ask or where to look. The information comes to them in their IDE as they work. This reduces the cognitive load of working in a distributed system and makes it easier for new team members to understand impact before making changes. For data teams and data products, EventCatalog closes the gap that often exists between application developers and data consumers. Application teams see that their events flow into analytics pipelines, data warehouses, and downstream reports. Data teams see which application services produce the events they depend on and can proactively reach out when they need schema changes or additions. The result is better collaboration between engineering and data organizations and fewer broken data pipelines. Ultimately, EventCatalog helps you maintain velocity as you scale. Schema changes don't grind to a halt because of fear of breaking things. Teams don't avoid necessary improvements because coordination seems too difficult. You get the benefits of a well-governed system without the overhead of manual processes that don't scale. Your architecture documentation stays synchronized with reality, and everyone has the visibility they need to move fast without breaking things. ## Ready to try it? Get started with EventCatalog and integrate the MCP server to ask questions about your architecture. [Get started](/docs/development/getting-started/installation.md) [Learn about MCP Server](/docs/development/ask-your-architecture/mcp-server/introduction.md) --- [← Back to use cases](/use-cases.md) # CI/CD Integration Integrate EventCatalog into your CI/CD pipelines. Rebuild your catalog automatically when schemas change, on a schedule, or on demand. ## The problem[​](#the-problem "Direct link to The problem") Organizations operate with distributed teams, multiple repositories, and external systems that change constantly. AsyncAPI specifications get updated in one repository, OpenAPI schemas evolve in another, and event definitions change across your architecture. When documentation lives separately from these systems, keeping everything synchronized becomes a manual burden that teams cannot sustain. Traditional documentation approaches force a choice between accuracy and effort. You can manually update docs after every change, but this becomes unsustainable as your architecture grows. Or you can accept that documentation will drift out of sync, losing the trust of your teams and becoming another neglected artifact that nobody references. ## The solution[​](#the-solution "Direct link to The solution") EventCatalog treats documentation as code that lives in your Git workflow. Because everything is stored in Git and you host the catalog yourself, you can integrate it directly into your CI/CD pipelines and deploy it as frequently as your architecture demands. Some organizations rebuild their catalogs hundreds of times per day. The workflow model is entirely up to you. Teams just getting started often begin with simple time-based automation, scheduling a cron job to rebuild the catalog every hour or every day. This requires minimal setup but immediately ensures documentation stays current without manual intervention. More mature teams evolve toward event-driven documentation. When a developer pushes a change to an AsyncAPI specification or updates an OpenAPI file, this triggers an automated rebuild. The change flows through your CI/CD pipeline, generators pull the updated schemas, and a fresh version deploys automatically. Your documentation updates within minutes of the actual change. EventCatalog works with whatever CI/CD platform your organization already uses. Teams successfully integrate it with GitHub Actions, GitLab CI, Jenkins, and many other systems. The GitOps-based approach means you define your deployment pipeline using the same tools and practices you use for your applications. There is no vendor lock-in, just standard CI/CD workflows. Because you own the data and host the catalog yourself, you have complete control over how and when documentation updates happen. You can sync with external systems continuously or on a schedule. You can trigger rebuilds based on specific events or run them manually. The flexibility lets you design a documentation workflow that matches how your organization actually operates. ## How this can help you[​](#how-this-can-help-you "Direct link to How this can help you") When documentation automatically stays synchronized with your systems, teams start trusting it again. Developers know that the API specifications they see in the catalog match what is actually deployed. Architects make decisions confident that the architecture view reflects current reality. New team members onboard with documentation that accurately represents your systems as they exist today. Distributed teams particularly benefit from this approach. When you have developers across different time zones working in separate repositories, manual documentation coordination becomes nearly impossible. Automated syncing means changes made by a team in one location automatically flow into the catalog, keeping everyone working from the same understanding of your architecture regardless of where they sit. The trust that comes from always-current documentation changes how teams use EventCatalog. Instead of treating it as a reference to occasionally consult, it becomes a tool they actively rely on for daily work. Both humans and AI systems can reference the catalog knowing the information is current and accurate. Documentation transforms from a compliance checkbox into an operational tool that genuinely helps teams work more effectively. ## Ready to try it? Get started with EventCatalog, or contact us to discuss your workflow. [Get started](/docs/development/getting-started/installation.md) [Contact us to book a demo](https://calendly.com/boyneyy123/30min) --- [← Back to use cases](/use-cases.md) # Domain-Driven Design Documentation Document your domain model with first-class support for domains, bounded contexts, ubiquitous language, and team ownership. Map business context to technical implementation. ## The problem[​](#the-problem "Direct link to The problem") Organizations adopt Domain-Driven Design to align their systems with business reality, but documenting the domain model becomes a challenge. Generic tools like Wikis and Confluence let you write anything, but they weren't built for DDD concepts. Your bounded contexts end up as random pages. Ubiquitous language terms scatter across repositories. There is no clear way to see which teams own which domains or how integration events cross boundaries. When new engineers join, they struggle to understand where one domain ends and another begins. Architects can't easily visualize the relationships between domains. And everyone keeps asking the same questions: what does this term mean in our domain? Who owns the payments context? Which events flow between orders and inventory? ## The solution[​](#the-solution "Direct link to The solution") EventCatalog was built with Domain-Driven Design principles at its core. Rather than forcing you to document domains in freeform text, EventCatalog provides first-class resources for [domains](/docs/development/guides/domains/introduction.md), [subdomains](/docs/development/guides/domains/creating-domains/subdomains.md), [ubiquitous language](/docs/development/guides/domains/ownership-and-language/adding-ubiquitous-language.md), and [entities](/docs/development/guides/domains/entities/introduction.md). These are actual primitives you document and connect, not just wiki pages. You define your domains as Markdown files, perhaps after running event storming sessions or domain discovery workshops. Each domain can contain services, messages, specifications, and subdomains. The hierarchy reflects your organizational structure: the e-commerce domain, the payments domain, the orders domain. [Ubiquitous language terms](/docs/development/guides/domains/ownership-and-language/adding-ubiquitous-language.md) get defined in Markdown and associated with specific domains. EventCatalog renders these as a searchable dictionary, so everyone knows what terms mean within each bounded context. No more hunting through random repositories to find out what "fulfillment" means in the shipping domain versus the warehouse domain. The visualization shows bounded context maps with events flowing between domains. You can see which services belong to which domain and which messages cross boundaries. Start at the high level to understand the overall architecture, then drill down into specific subdomains, services, and individual events. ## How this can help you[​](#how-this-can-help-you "Direct link to How this can help you") Documenting your architecture with DDD primitives means your documentation aligns with how your organization actually works. When you map business context alongside technical implementation, engineers can find what they need by following domain boundaries rather than guessing where information lives. Teams save time during onboarding because new members can explore domains, see who owns them, and understand the ubiquitous language all in one place. The aha moment comes when teams discover they can finally document their domain model without being forced into implementation details. You can model different workflows and business contexts in a tool specifically designed for these practices. Unlike generic wikis, EventCatalog understands what a bounded context is, how domains relate to each other, and why ubiquitous language matters within a specific context. Finding owners becomes effortless. You can see which teams and individuals are responsible for domains, services, and messages. When something breaks in the payments domain, you know exactly who to contact. When planning a change that crosses bounded contexts, you can identify all the stakeholders by looking at the domains involved. The integration with AI through [MCP](/blog/built-in-mcp-server.md) means your entire domain model becomes queryable context. Engineers and architects can ask questions about domain interactions, ubiquitous language definitions, and architectural boundaries. The LLM has full access to your documented domain knowledge, making it far more valuable than searching through scattered Confluence pages. ## Ready to try it? Get started with EventCatalog, or contact us to discuss your workflow. [Get started](/docs/development/getting-started/installation.md) [Contact us to book a demo](https://calendly.com/boyneyy123/30min) --- [← Back to use cases](/use-cases.md) # Enrich Schemas with Documentation Transform technical schemas into business-contextualized documentation. Sync from any source, enrich with ownership and purpose, track changes over time. ## The problem[​](#the-problem "Direct link to The problem") Schemas live everywhere. Some teams use Confluent Schema Registry. Others store OpenAPI specs in GitHub. Protobuf definitions sit in private repositories. Avro schemas exist in Kafka clusters. AsyncAPI documents get scattered across wikis and confluence pages. The technical definitions exist, but they only tell part of the story. A JSON Schema describes the structure of your data, but not why that data exists. An Avro schema defines the fields, but not which team owns it or how to request changes. When developers need to understand a schema, they get the technical specification and a message that essentially says "here's the structure, good luck figuring out the rest." The business context—why this schema exists, who maintains it, how it fits into your domain model, when to use it versus similar schemas—lives in someone's head or buried in Slack threads. Teams create duplicate schemas because they can't discover existing ones. New engineers spend days tracking down owners to ask basic questions about purpose and usage. ## The solution[​](#the-solution "Direct link to The solution") EventCatalog connects to your schemas wherever they live and brings them into a unified documentation platform. Use [plugins](/integrations.md) to sync schemas from Confluent Schema Registry, Kafka Schema Registry, Apicurio, GitHub repositories, OpenAPI files, or AsyncAPI specifications. The technical definitions stay in your existing tools while EventCatalog creates a centralized view enriched with business context. Once schemas sync into EventCatalog, you enrich them with Markdown documentation that renders alongside the technical specification. Explain why the schema exists, assign [owners](/docs/development/guides/messages/common/owners.md) and teams, map schemas to [domains](/docs/development/guides/domains/introduction.md), and document how to request changes. EventCatalog renders the technical schema and your business context together, giving teams the complete picture. When schemas evolve, EventCatalog automatically [versions](/docs/development/guides/messages/common/versioning.md) them. Your plugins detect changes in the source systems and create new versions in the catalog. The version history shows what properties changed and when, while your business context documentation remains stable. A schema may go through multiple technical iterations, but the fundamental purpose, ownership, and domain mapping stay consistent. ## How this can help you[​](#how-this-can-help-you "Direct link to How this can help you") Developers find schemas faster through EventCatalog's search and schema explorer. Instead of asking in Slack "does anyone know if we have a schema for customer addresses," they search the catalog and immediately see what exists, who owns it, and when to use it. Version history and changelogs answer "why did this property change" without tracking down the person who made the modification three months ago. Teams stop creating duplicate schemas because discovery actually works. When you can search schemas by purpose and see their business context, you realize that the "new" schema you were about to create already exists under a different name. EventCatalog's AI capabilities can even analyze your schemas to identify duplicates or highlight schemas that look suspiciously similar across your organization. Ownership becomes clear and actionable. Each schema shows who maintains it and which team to contact for questions or change requests. New engineers don't spend hours playing detective to figure out who knows about a particular schema. The information lives in the catalog alongside the technical definition. Schema changes get planned with full context rather than guesswork. When you can see the version history, understand who depends on a schema, and review the documented purpose, you make better decisions about breaking changes and deprecation strategies. Your organization treats schemas as the critical contracts they are, not just technical artifacts that someone happened to define once. ## Ready to try it? Get started with EventCatalog, or contact us to discuss your workflow. [Get started](/docs/development/getting-started/installation.md) [Contact us to book a demo](https://calendly.com/boyneyy123/30min) --- # De-Risk Your EDA.
Scale with Confidence. Workshops for architects and technical leaders designed to implement the governance and tooling required for a successful, scalable event-driven architecture. [Enquire about a workshop →](mailto:hello@eventcatalog.dev?subject=Workshop%20Inquiry) [![EventCatalog Professional Services](/img/consulting-2.png)](https://www.youtube.com/watch?v=VLUvfIm9wnQ) David Boyne - "The lack of governance is the biggest gotcha of event-driven architecture" [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) [![](/img/trusted/payfit.svg)](https://payfit.com) [![](/img/trusted/nike.svg)](https://engineering.nike.com/) [![](/img/trusted/ticketmaster.svg)](https://www.ticketmaster.co.uk/) [![](/img/trusted/govuk.svg)](https://gov.uk) [![](/img/trusted/motorway.svg)](https://www.motorway.co.uk/) [![](/img/trusted/airtime.svg)](https://www.airtime.com/) [![](/img/trusted/flipdish.svg)](https://www.flipdish.com/) [![](/img/trusted/american-logistics.svg)](https://www.americanlogistics.com/) [![](/img/trusted/transfergo.svg)](https://www.transfergo.com/) [![](/img/trusted/prisma.svg)](https://www.prisma-capacity.eu/) [![](/img/trusted/projectcor.svg)](https://projectcor.com) [![](/img/trusted/tui.svg)](https://tui.co.uk) [![](/img/trusted/everquote.svg)](https://www.everquote.com/) [![](/img/trusted/maxda.svg)](https://www.mazda.co.uk/) [![](/img/trusted/eurostar.svg)](https://eurostar.com) [![](/img/trusted/mands.svg)](https://www.marksandspencer.com/) [![](/img/trusted/aws.svg)](https://aws.amazon.com/) --- ## [📄️ Creating a domain](/docs/development/guides/domains/creating-domains/adding-domains.md) [Creating and managing domains within EventCatalog.](/docs/development/guides/domains/creating-domains/adding-domains.md) --- ## [📄️ Messages](/docs/development/guides/services/adding-to-services/messages.md) [Understanding how to add messages to services.](/docs/development/guides/services/adding-to-services/messages.md) --- ## [📄️ Introduction](/docs/plugins/amazon-apigateway/intro.md) [Getting started with Amazon EventBridge plugin](/docs/plugins/amazon-apigateway/intro.md) --- ## [📄️ Introduction](/docs/plugins/eventbridge/intro.md) [Getting started with Amazon EventBridge plugin](/docs/plugins/eventbridge/intro.md) --- # Channel frontmatter API **Added in** `eventcatalog@2.13.0` ## Overview[​](#overview "Direct link to Overview") Channels are just markdown files, with this comes the use of Content, MDX components and also [front-matter](https://jekyllrb.com/docs/front-matter/). Here is an example of the channel frontmatter you will find in your `/channels` folder. /channels/inventory.{env}.events/index.mdx (example) ``` --- # id of your channel, used for slugs and references in EventCatalog. id: inventory.{env}.events # Display name of the channel, rendered in EventCatalog name: Inventory Events Channel # Version of the channel version: 1.0.0 # Short summary of your channel summary: | Central event stream for all inventory-related events including stock updates, allocations, and adjustments # Optional owners, references teams or users owners: - dboyne # address of the channel # supports parameters in the address address: inventory.{env}.events # list of protocols for the channel # see https://eventcatalog.dev/docs/development/guides/channels/introduction#protocols protocols: - kafka # Optional list of parameters for the channel # This example shows the `env` value in the channel name can be `dev, stg, prod`. parameters: env: enum: - dev - stg - prod description: 'Environment to use' --- ### Overview The Inventory Events channel is the central stream for all inventory-related events across the system. This includes stock level changes, inventory allocations, adjustments, and stocktake events. Events for a specific SKU are guaranteed to be processed in sequence when using productId as the partition key. ``` ## Required fields[​](#required-fields "Direct link to Required fields") ### `id`[​](#id "Direct link to id") * Type: `string` Unqiue id of the channel. EventCatalog uses this for references and slugs. Example ``` --- id: inventory.{env}.events --- ``` ### `name`[​](#name "Direct link to name") * Type: `string` Name of the channel this is used to display the name on the UI. Example ``` --- name: Inventory events --- ``` ### `version`[​](#version "Direct link to version") * Type: `string` Version of the channel. Example ``` --- version: 0.0.1 --- ``` ## Optional fields[​](#optional-fields "Direct link to Optional fields") ### `summary`[​](#summary "Direct link to summary") Short summary of your channel. Example ``` --- summary: | Central event stream for all inventory-related events including stock updates, allocations, and adjustments --- ``` ### `address`[​](#address "Direct link to address") Address of the channel. Example ``` --- # example of dynamic address address: inventory.{env}.events # static address address: MyEventBus --- ``` ### `protocols`[​](#protocols "Direct link to protocols") Protocol/s of the channel. Example ``` --- # example of a kafka channel protocol: - kafka # example of a channel that is http, mqtt or kafka (if you ever wanted too...) protocol: - http - mqtt - kafka --- ``` **Added in** `eventcatalog@3.18.0` ### `deliveryGuarantee`[​](#deliveryGuarantee "Direct link to deliveryGuarantee") The delivery guarantee for messages transported through this channel. When set, the visualiser displays a colored badge on the channel node to communicate the guarantee level to your team. Example ``` --- deliveryGuarantee: at-least-once --- ``` Accepted values: | Value | Description | | --------------- | --------------------------------------------------------------- | | `at-most-once` | Messages may be lost but are never delivered more than once | | `at-least-once` | Messages are never lost but may be delivered more than once | | `exactly-once` | Messages are delivered exactly once with no loss or duplication | ### `parameters`[​](#parameters "Direct link to parameters") Parameters for your channel. Example ``` --- parameters: # any string value env: # list of possible values for the parameter enum: - dev - stg - prod # description for the parameter (optional) description: 'Environment to use' # list of examples (optional) examples - dev - stg # default value for channel default - dev --- ``` ### `owners`[​](#owners "Direct link to owners") An array of user ids that own the channel. Example ``` --- owners: - dboyne - mSmith --- ``` ### `badges`[​](#badges "Direct link to badges") An array of badges that get rendered on the page. Example ``` --- badges: - content: My badge backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) # Or the name of the broker (e.g Kafka, EventBridge, etc) icon: BoltIcon --- ``` ### `repository`[​](#repository "Direct link to repository") **Added in** `eventcatalog@2.11.2` Repository language and code url for the channel. Example ``` --- repository: language: JavaScript url: https://github.com/event-catalog/pretend-shipping-service --- ``` ### `editUrl`[​](#editUrl "Direct link to editUrl") **Added in** `eventcatalog@2.49.4` Override the default edit url for the page. This is used to navigate the user to the edit page for the page (e.g GitHub, GitLab url). Example ``` --- editUrl: https://github.com/event-catalog/eventcatalog/edit/main/channels/inventory.{env}.events/index.mdx --- ``` ### `detailsPanel`[​](#detailsPanel "Direct link to detailsPanel") **Added in** `eventcatalog@2.53.0` Override the default details panel for the page. You can use this show/hide areas of the details panel. ![Details panel](/assets/images/domain-details-panel-71f92ae7e5cc2ed29bb9254c2bd3dcb4.png) Example ``` --- detailsPanel: producers: visible: false consumers: visible: false channels: visible: false versions: visible: false --- ``` Options: | Property | Type | Required | Description | | ------------ | -------- | -------- | ------------------------------------------------------------------------------------------------ | | `producers` | `object` | No | An object with a `visible` property to show/hide the producers section | | `consumers` | `object` | No | An object with a `visible` property to show/hide the consumers section | | `messages` | `object` | No | An object with a `visible` property to show/hide the messages section | | `protocols` | `object` | No | An object with a `visible` property to show/hide the protocols section | | `parameters` | `object` | No | An object with a `visible` property to show/hide the parameters section | | `versions` | `object` | No | An object with a `visible` property to show/hide the versions section | | `repository` | `object` | No | An object with a `visible` property to show/hide the repository section (e.g GitHub, GitLab url) | | `owners` | `object` | No | An object with a `visible` property to show/hide the owners section | | `changelog` | `object` | No | An object with a `visible` property to show/hide the changelog button | ### `attachments`[​](#attachments "Direct link to attachments") **Added in** `eventcatalog@2.57.2` An array of attachments for this resource type. Example ``` --- attachments: - url: https://example.com/adr/001 title: ADR-001 - Use Kafka for asynchronous messaging description: Learn more about why we chose Kafka for asynchronous messaging in this architecture decision record. type: 'architecture-decisions' icon: FileTextIcon - https://example.com/adr/002 --- ``` Options: The attachments can be a url (string) or an object with additional properties. Object properties: | Property | Type | Required | Description | | ------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- | | `url` | `string` | Yes | The url of the attachment | | `title` | `string` | optional | The title of the attachment | | `description` | `string` | optional | The description of the attachment | | `type` | `string` | optional | The type of the attachment, this will be used to group attachments together in the UI | | `icon` | `string` | optional | The icon of the attachment, you can pick from the [lucide icons](https://lucide.dev/icons/) library. | --- # Code blocks EventCatalog is powered by markdown files, this allows you to add custom code blocks. EventCatalog is using [expressive-code](https://expressive-code.com/) which provides a range of additional features for your code blocks. **Features include:** * [Editor & Terminal Frames](https://expressive-code.com/key-features/frames/) * [Text & Line Markers](https://expressive-code.com/key-features/text-markers/) * [Adding labels to line markers](https://expressive-code.com/key-features/text-markers/#adding-labels-to-line-markers) - Great way to give context to your example code. * [Using diff-like syntax](https://expressive-code.com/key-features/text-markers/#using-diff-like-syntax) - Add diffs to your examples (e.g Schemas) * [Marking individual text inside lines](https://expressive-code.com/key-features/text-markers/#marking-individual-text-inside-lines) * [Word wrapping](https://expressive-code.com/key-features/word-wrap/) * [And more...](https://expressive-code.com/) ## Examples of code blocks[​](#examples-of-code-blocks "Direct link to Examples of code blocks") ### Diff code blocks[​](#diff-code-blocks "Direct link to Diff code blocks") Highlight diffs with your code, could be useful for your Schemas or any changes you want to show to your teams. ![Example](/assets/images/diff-7754356651bbb42959315aa8c943be2d.png) ![Example](/assets/images/diff2-d558ec3bc1de19244937d54bd0bee84f.png) See ### Word highlighting[​](#word-highlighting "Direct link to Word highlighting") If you want to highlight words in your code blocks you can use this feature. ![Example](/assets/images/word-highlight-42b11a5f3780969ac3536d4d3ad1bff3.png) ![Example](/assets/images/word-highlight2-b08b747e0dd3cf936de68375fe045a0e.png) See ### Labels to line markers[​](#labels-to-line-markers "Direct link to Labels to line markers") Great way to give context to changes in your code. For example if your Schema has changed, then maybe use this to give context with additional labels. ![Example](/assets/images/context-diff-9385d98d9b29ad1d73889408149de92d.png) See ### Frames[​](#frames "Direct link to Frames") Nice UI for your code blocks. ![Example](/assets/images/title-blocks-07b5856da20430ba60b5dd77f12d3d4a.png) See --- # Command frontmatter API ## Overview[​](#overview "Direct link to Overview") Commands are just markdown files, with this comes the use of Content, MDX components and also [front-matter](https://jekyllrb.com/docs/front-matter/). Here is an example of the command frontmatter you will find in your `/commands` folder. /commands/UpdateInventory/index.mdx (example) ``` --- # id of your command, used for slugs and references in EventCatalog. id: UpdateInventory # Display name of the command, rendered in EventCatalog name: Update inventory # Version of the command version: 0.0.3 # Short summary of your command summary: | Command with the intent to update the inventory # Optional owners, references teams or users owners: - dboyne # Optional details about the programming language and url for the code repository: language: JavaScript url: https://github.com/event-catalog/pretend-shipping-service # Optional badges, rendered to UI by EventCatalog badges: - content: New service backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) icon: BoltIcon --- ## Overview The `Update Inventory` command represents intent to update the inventory of a given item over HTTP. ``` ## Required fields[​](#required-fields "Direct link to Required fields") ### `id`[​](#id "Direct link to id") * Type: `string` Unqiue id of the command. EventCatalog uses this for references and slugs. Example ``` --- id: UpdateInventory --- ``` ### `name`[​](#name "Direct link to name") * Type: `string` Name of the command this is used to display the name on the UI. Example ``` --- name: Update Inventory --- ``` ### `version`[​](#version "Direct link to version") * Type: `string` Version of the command. Example ``` --- version: 0.0.1 --- ``` ## Optional fields[​](#optional-fields "Direct link to Optional fields") **Added in** `eventcatalog@3.18.0` ### `operation`[​](#operation "Direct link to operation") Document an HTTP operation for this command. When set, the visualiser displays an HTTP method badge, API path, and status code pills on the command node. Example ``` --- operation: method: POST path: /orders statusCodes: - "201" - "400" --- ``` | Property | Type | Required | Description | | ------------- | ------------------------------------------------- | -------- | -------------------------------------------------- | | `method` | `'GET' \| 'POST' \| 'PUT' \| 'DELETE' \| 'PATCH'` | No | The HTTP method for the operation | | `path` | `string` | No | The API path for the operation | | `statusCodes` | `string[]` | No | List of HTTP status codes the operation may return | ### `summary`[​](#summary "Direct link to summary") Short summary of your command, shown on command summary pages. Example ``` --- summary: | Command that updated the inventory over HTTP. --- ``` ### `owners`[​](#owners "Direct link to owners") An array of user ids that own the command. Example ``` --- owners: - dboyne - mSmith --- ``` ### `badges`[​](#badges "Direct link to badges") An array of badges that get rendered on the page. Example ``` --- badges: - content: My badge backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) # Or the name of the broker (e.g Kafka, EventBridge, etc) icon: BoltIcon --- ``` ### `schemaPath`[​](#schemaPath "Direct link to schemaPath") Path to the schema of the message. *Path is relative*. Example ``` --- schemaPath: schema.json --- ``` ### `repository`[​](#repository "Direct link to repository") **Added in** `eventcatalog@2.11.2` Repository language and code url for the command. Example ``` --- repository: language: JavaScript url: https://github.com/event-catalog/pretend-shipping-service --- ``` ### `sidebar`[​](#sidebar "Direct link to sidebar") **Added in** `eventcatalog@2.29.3` Configure the event label and message in the [docs sidebar](/docs/development/customization/customize-sidebars/documentation-sidebar.md). Example ``` --- sidebar: badge: POST label: Update Inventory --- ``` ### `visualiser`[​](#visualiser "Direct link to visualiser") **Added in** `eventcatalog@2.39.2` Turn off the visualiser for this resource. This means the resource will not be included in the visualiser or the navigation bar for the visualiser. **Default: `true`** Example ``` --- visualiser: false --- ``` ### `draft`[​](#draft "Direct link to draft") **Added in** `eventcatalog@2.48.4` Mark the command as a draft. This will show the command as a draft in the UI. You can also specify a title and summary for your draft to help you communicate the status of the draft. /commands/UpdateInventoryStock/index.mdx (example) ``` --- # Uses the default title and summary to mark things as draft in the UI draft: true # Or you can specify a title and summary for your draft draft: title: "Update Inventory Stock 1.0.1 is in draft" # Supports markdown message: | ### New version of Update Inventory Stock command is in draft This is a new version of the Update Inventory Stock command. It is not yet ready for production. We are still working on it and collecting feedback from the team. You can use this version in lower environments, **but please be aware that it is still in draft and may change.** You can still use a previous version of the command, [Update Inventory Stock 1.0.0](/docs/commands/UpdateInventoryStock/1.0.0), until that version is deprecated. _If you would like to provide feedback, please contact us at [feedback@eventcatalog.io](mailto:feedback@eventcatalog.io) or our slack channel [Order Management](https://join.slack.com/t/eventcatalog/shared_invite/zt-1q900000000000000000000000000000)_ --- ``` ### `editUrl`[​](#editUrl "Direct link to editUrl") **Added in** `eventcatalog@2.49.4` Override the default edit url for the page. This is used to navigate the user to the edit page for the page (e.g GitHub, GitLab url). Example ``` --- editUrl: https://github.com/event-catalog/eventcatalog/edit/main/commands/UpdateInventory/index.mdx --- ``` ### `detailsPanel`[​](#detailsPanel "Direct link to detailsPanel") **Added in** `eventcatalog@2.53.0` Override the default details panel for the page. You can use this show/hide areas of the details panel. ![Details panel](/assets/images/domain-details-panel-71f92ae7e5cc2ed29bb9254c2bd3dcb4.png) Example ``` --- detailsPanel: producers: visible: false consumers: visible: false channels: visible: false versions: visible: false --- ``` Options: | Property | Type | Required | Description | | ------------ | -------- | -------- | ------------------------------------------------------------------------------------------------ | | `producers` | `object` | No | An object with a `visible` property to show/hide the producers section | | `consumers` | `object` | No | An object with a `visible` property to show/hide the consumers section | | `channels` | `object` | No | An object with a `visible` property to show/hide the channels section | | `versions` | `object` | No | An object with a `visible` property to show/hide the versions section | | `repository` | `object` | No | An object with a `visible` property to show/hide the repository section (e.g GitHub, GitLab url) | | `owners` | `object` | No | An object with a `visible` property to show/hide the owners section | | `changelog` | `object` | No | An object with a `visible` property to show/hide the changelog button | ### `attachments`[​](#attachments "Direct link to attachments") **Added in** `eventcatalog@2.57.2` An array of attachments for this resource type. Example ``` --- attachments: - url: https://example.com/adr/001 title: ADR-001 - Use Kafka for asynchronous messaging description: Learn more about why we chose Kafka for asynchronous messaging in this architecture decision record. type: 'architecture-decisions' icon: FileTextIcon - https://example.com/adr/002 --- ``` Options: The attachments can be a url (string) or an object with additional properties. Object properties: | Property | Type | Required | Description | | ------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- | | `url` | `string` | Yes | The url of the attachment | | `title` | `string` | optional | The title of the attachment | | `description` | `string` | optional | The description of the attachment | | `type` | `string` | optional | The type of the attachment, this will be used to group attachments together in the UI | | `icon` | `string` | optional | The icon of the attachment, you can pick from the [lucide icons](https://lucide.dev/icons/) library. | --- # eventcatalog.config.js ## Overview[​](#overview "Direct link to Overview") `eventcatalog.config.js` contains configurations for your site and is placed in the root directory of your site. ## Required fields[​](#required-fields "Direct link to Required fields") ### `cId`[​](#cId "Direct link to cId") * Type: `string` An automated generated ID for your catalog. EventCatalog will generate this for you. eventcatalog.config.js ``` module.exports = { cId: '107fdebb-7c68-42cc-975d-413b1d30d758', }; ``` ### `title`[​](#title "Direct link to title") * Type: `string` Title for your website. eventcatalog.config.js ``` module.exports = { title: 'EventCatalog', }; ``` ### `organizationName`[​](#organizationName "Direct link to organizationName") * Type: `string` Your organization name. eventcatalog.config.js ``` module.exports = { organizationName: 'Your Company', }; ``` ## Optional fields[​](#optional-fields "Direct link to Optional fields") ### `base`[​](#base "Direct link to base") * Type: `string` * Default value: `/` The base path to deploy to. EventCatalog will use this path as the root for your pages and assets both in development and in production build. eventcatalog.config.js ``` module.exports = { base: '/', }; ``` ### `output`[​](#output "Direct link to output") **Added in** `eventcatalog@2.35.4` * Type: `string` * Default value: `static` The output type for your EventCatalog, choose from `static` or `server`. "What is the difference between static and server?" * `static` - The default output type for EventCatalog. This will output a static website that you can host anywhere. * `server` - This will output a Node.js server that you can host anywhere. This is required for certain features like the [EventCatalog Chat](/features/ai-assistant.md) (bring your own keys). The easiest way to host this is with our [Docker image](/docs/development/deployment/hosting-options.md#hosting-a-server). eventcatalog.config.js ``` module.exports = { output: 'static', }; ``` ### `outDir`[​](#outDir "Direct link to outDir") **Added in** `eventcatalog@2.11.4` * Type: `string` * Default value: `dist` The output path of your EventCatalog. By default it will output to the `dist` folder. eventcatalog.config.js ``` module.exports = { // Catalog would output to the /build folder outDir: 'build', }; ``` ### `trailingSlash`[​](#trailingSlash "Direct link to trailingSlash") * Type: `boolean` * Default: `false` Set the route matching behavior of the dev server. Choose from the following options: 'true' - Only match URLs that include a trailing slash (ex: “/foo/“) 'false' - Match URLs regardless of whether a trailing ”/” exists Use this configuration option if your production host has strict handling of how trailing slashes work or do not work. eventcatalog.config.js ``` module.exports = { // Setting to true will add / onto all routes e.g http://website.com/visualiser/ trailingSlash: true, }; ``` ### `port`[​](#port "Direct link to port") * Type: `number` * Default: 3000 Configure the port EventCatalog is running on. eventcatalog.config.js ``` module.exports = { // Changes the port from default 3000 to 5000 port: 5000, }; ``` ### `host`[​](#host "Direct link to host") **Added in** `eventcatalog@2.42.9` * Type: `string` | `boolean` * Default: `false` Set which network IP addresses the dev server should listen on (i.e. non-localhost IPs). * `false` - do not expose on a network IP address * `true` - listen on all addresses, including LAN and public addresses * `[custom-address]` - expose on a network IP address at `[custom-address]` eventcatalog.config.js ``` module.exports = { host: '0.0.0.0', }; ``` ### `server.allowedHosts`[​](#server.allowedHosts "Direct link to server.allowedHosts") **Added in** `eventcatalog@2.64.0` * Type: `string[]` | `true` * Default: `[]` A list of hostnames that Astro is allowed to respond to. When the value is set to true, any hostname is allowed. You can read more on the Astro documentation [here](https://docs.astro.build/en/reference/configuration-reference/#serverallowedhosts). eventcatalog.config.js ``` module.exports = { server: { allowedHosts: ['example.com', 'subdomain.example.com'], }, }; ``` ### `generators`[​](#generators "Direct link to generators") * Type: `Generator[]` * Default: `[]` Generators are the foundation of plugins with EventCatalog. EventCatalog will call your generators on build. eventcatalog.config.js ``` module.exports = { generators: [ [ // This will load plugin.js in the root of your catalog '/plugin.js', // configuration for your generator { customValue: true, test: "Add any configuration values you want" }, ], ], }; ``` ### `environments`[​](#environment "Direct link to environment") **Added in** `eventcatalog@2.48.2` * Type: `object` * Default: `{}` Optional configuration for EventCatalog environments. When environments are set, a dropdown will be shown in the top right of the EventCatalog allowing your users to switch between environments. eventcatalog.config.js ``` module.exports = { environments: [ { // Name of the environment name: 'Development', // URL of the environment url: 'https://demo.eventcatalog.dev', // Description of the environment description: 'Local development environment', // Short name of the environment (optional, used in the dropdown) shortName: 'Dev' }, { name: 'Test', url: 'https://demo.eventcatalog.dev', description: 'Test environment for QA', shortName: 'Test' }, { name: 'Production', url: 'https://demo.eventcatalog.dev', description: 'Production environment', shortName: 'Prod' }, ] }; ``` ### `landingPage`[​](#landingPage "Direct link to landingPage") * Type: `string` * Default: `'/docs'` Configure the landing page URL your EventCatalog loads. By default EventCatalog loads `/` (the default or [custom landing page](/docs/development/customization/customize-landing-page.md#how-to-customize-your-landing-page)). Clicking on the EventCatalog logo (or [your custom logo](/docs/api/config.md#logo)), will also go to this URL. If you set this value the `Home` icon in the vertical navigation will not be shown and your users will be redirected to this default URL. You can set this to any EventCatalog page URL. Examples: * `/visualiser` * `/discover/events` * `/docs/services/InventoryService/0.0.2` eventcatalog.config.js ``` module.exports = { landingPage: '/visualiser', }; ``` ### `sidebar`[​](#sidebar "Direct link to sidebar") **Added in** `eventcatalog@2.30.1` * Type: `Array[{ id: string, visible: boolean }]` Configure the [application sidebar](/docs/development/customization/customize-sidebars/application-sidebar.md) in EventCatalog. Show/hide items in the sidebar, [see list of options](/docs/development/customization/customize-sidebars/application-sidebar.md#showhide-items-in-the-application-sidebar). eventcatalog.config.js ``` module.exports = { sidebar: { // Will hide the AI chat feature in the sidebar id: '/chat', visible: false } }; ``` ### `visualiser`[​](#visualiser "Direct link to visualiser") **Added in** `eventcatalog@2.42.0` * Type: `object` Configuration for the [EventCatalog visualiser](/features/visualization.md). eventcatalog.config.js ``` module.exports = { visualiser: { // visualizer is enabled by default // you can turn it off by setting it to false enabled: true, channels: { // The render mode for channels in the visualiser // Flat or single renderMode: 'flat' } } }; ``` | Configuration | Option | Default | Description | | -------------------------------- | ------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `visualiser.enabled` | `true` or `false` | `true` | **Enabled or disables the visualiser**. Setting this to false will not render any visualiser pages in your catalog and also remove references to the visualiser features in your catalog. *(Added in 2.65.1)* | | `visualiser.channels.renderMode` | `flat` or `single` | `flat` | The render mode for the visualiser. `flat` means the channel node is duplicated for each message. `single` means the channel node is a single node for all messages. Depending on your use case/preferences you may want to use one or the other. | ### `docs`[​](#docs "Direct link to docs") * Type: `object` Configure the [documentation sidebar](/docs/development/customization/customize-sidebars/documentation-sidebar.md) in EventCatalog. eventcatalog.config.js ``` module.exports = { docs: { sidebar: { type: 'LIST_VIEW' } } }; ``` Configuration for the documentation sidebar. ### `docs.sidebar` options[​](#docssidebar-options "Direct link to docssidebar-options") #### Sidebar Type[​](#sidebar-type "Direct link to Sidebar Type") You can choose between `LIST_VIEW` or `TREE_VIEW` to render your documentation. * `LIST_VIEW` will render your docs as you see in the [demo](https://demo.eventcatalog.dev/docs/) * `TREE_VIEW` will render the DOCS as a tree view and map your file system folder structure. * Can be useful for large catalogs and navigation **Added in** `eventcatalog@2.28.0` eventcatalog.config.js ``` docs: { sidebar: { type: 'LIST_VIEW' }, }, ``` ### Show/Hide Orphaned Messages[​](#showhide-orphaned-messages "Direct link to Show/Hide Orphaned Messages") **Added in** `eventcatalog@2.61.8` Any messages that do not belong to a service will be shown as orphaned messages in the sidebar (LIST\_VIEW only). If you wish to hide orphaned messages you can set the `showOrphanedMessages` to `false`. eventcatalog.config.js ``` docs: { sidebar: { type: 'LIST_VIEW', // Default is true showOrphanedMessages: false, }, }, ``` ### `changelog`[​](#changelog "Direct link to changelog") * Type: `object` Configuration for EventCatalog Changelog. **Changelogs are disabled by default.** You can enable changelogs by setting `enabled` to `true`. eventcatalog.config.js ``` module.exports = { changelog: { // Default is false enabled: true, }, }; ``` ### `editUrl`[​](#editUrl "Direct link to editUrl") * Type: `string` URL used when people want to edit the documentation. For example your GitHub repo and branch. eventcatalog.config.js ``` module.exports = { editUrl: 'https://github.com/boyney123/eventcatalog-demo/edit/master', }; ``` ### `repositoryUrl`[​](#repositoryUrl "Direct link to repositoryUrl") **Added in** `eventcatalog@2.42.3` * Type: `string` tip For Stater or Scale plans. This gives you the ability to show your own GitHub repository in EventCatalog (in the header bar). URL to your repository for EventCatalog. eventcatalog.config.js ``` module.exports = { repositoryUrl: 'https://github.com/boyney123/eventcatalog-demo', }; ``` ### `logo`[​](#logo "Direct link to logo") * Type: `object` Logo, alt and text for your company logo. Public directory Add your logo to your `/public` directory. eventcatalog.config.js ``` module.exports = { logo: { // This logo is located at public/logo.svg src: '/logo.svg', alt: 'Company logo', text: 'Urban Slice | EventCatalog', }, }; ``` **Example output** ![./logo.png](/assets/images/logo-ee906eed23d470458b090b8973323b2c.png) ### `homepageLink`[​](#homepageLink "Direct link to homepageLink") * Type: `string` URL used when people want to link the logo & title in the top navigation to the homepage of a website. eventcatalog.config.js ``` module.exports = { homepageLink: 'https://eventcatalog.dev', }; ``` ### `mdxOptimize`[​](#mdxOptimize "Direct link to mdxOptimize") * Type: `string` This is an optional configuration setting to optimize the MDX output for faster builds. This may be useful if you have many catalog files and notice slow builds. However, this option may generate some unescaped HTML, so make sure your catalog interactive parts still work correctly after enabling it. This is disabled by default. Read [Astro documentation on optimize for MDX](https://docs.astro.build/en/guides/integrations-guide/mdx/#optimize) for more information. eventcatalog.config.js ``` module.exports = { mdxOptimize: true }; ``` ### `compress`[​](#compress "Direct link to compress") **Added in** `eventcatalog@2.48.5` * Type: `boolean` Setting this to true will automatically compress all your CSS, HTML, SVG, JavaScript, JSON and image files in the Astro outDir folder. This is disabled by default from EventCatalog v2.61.9. **This only works for static builds.** eventcatalog.config.js ``` module.exports = { compress: true }; ``` ### `asyncAPI.renderParsedSchemas`[​](#asyncAPI.renderParsedSchemas "Direct link to asyncAPI.renderParsedSchemas") **Added in** `eventcatalog@2.12.1` * Type: `boolean` EventCatalog will render your AsyncAPI files into their own pages. By default EventCatalog will read your AsyncAPI files and parse your schemas to render them on the screen. Part of this process is validating your schemas and also adding metadata onto them (default). If you want to keep your schemas as they are then you can set the `asyncAPI.renderParsedSchemas` to false. Having issues rendering AsyncAPI files? If you are having issues seeing or rendering your AsyncAPI file try setting the renderParsedSchemas to `false` eventcatalog.config.js ``` module.exports = { asyncAPI: { renderParsedSchemas: false // default is true } }; ``` ### `mermaid`[​](#mermaid "Direct link to mermaid") **Added in** `eventcatalog@2.18.1` * Type: `object` EventCatalog uses [mermaid](https://mermaid.js.org/) to render diagrams. Using mermaid you can render icons in your diagrams (e.g [AWS architecture icons](/docs/development/components/mermaid.md#architecture-diagrams-with-icons)). ![Example output of mermaid](/img/mermaid/mermaid-custom-icons.png) eventcatalog.config.js ``` module.exports = { mermaid: { iconPacks: ['logos'], // will load https://icones.js.org/collection/logos into eventcatalog maxTextSize: 100000 // maximum text size for Mermaid diagrams (default: 100000) } }; ``` You can choose from over **200,000 icons** from [icones.js.org](https://icones.js.org/collection/logos). #### `mermaid.iconPacks`[​](#mermaidiconpacks "Direct link to mermaidiconpacks") **Added in** `eventcatalog@2.18.1` * Type: `string[]` * Default: `[]` Icon packs to load from [icones.js.org](https://icones.js.org/). Use icon pack names like `['logos', 'mdi']` to load AWS, Azure, and other service icons. [Learn more about using icons in mermaid diagrams](/docs/development/components/mermaid.md#architecture-diagrams-with-icons). #### `mermaid.maxTextSize`[​](#mermaidmaxtextsize "Direct link to mermaidmaxtextsize") **Added in** `eventcatalog@3.9.1` * Type: `number` * Default: `100000` Maximum text size for Mermaid diagrams in characters. Increase this value if you have large diagrams that fail to render. eventcatalog.config.js ``` module.exports = { mermaid: { maxTextSize: 200000 // Allow larger diagrams } }; ``` ### `rss`[​](#asyncAPI.renderParsedSchemas "Direct link to asyncAPI.renderParsedSchemas") **Added in** `eventcatalog@2.21.1` Enable RSS feeds for messages, services, domains and flows. **RSS feeds are disabled by default.** eventcatalog.config.js ``` { rss: { // Turn rss on or off enabled: true, // The number of items to include in the RSS feed limit: 20 } } ``` See the [RSS documentation](/docs/development/configuration/rss-feed.md) for more information and examples. ### `llms.txt`[​](#llms.txt "Direct link to llms.txt") **Added in** `eventcatalog@2.20.0` Enable tools like Claude, ChatGPT, GitHub Copilot, and Cursor to quickly understand your EventCatalog. eventcatalog.config.js ``` { llmsTxt: { enabled: true, } } ``` See the [LLMs documentation](/docs/development/developer-tools/llms.txt.md) for more information, how you can use it and examples. ### `fullCatalogAPIEnabled`[​](#fullCatalogAPIEnabled "Direct link to fullCatalogAPIEnabled") **Added in** `eventcatalog@3.10.2` * Type: `boolean` * Default: `true` Enable or disable the full catalog API which allows you to get the full catalog dump in the `/api/catalog` endpoint. eventcatalog.config.js ``` module.exports = { api: { fullCatalogAPIEnabled: false, // default is true } }; ``` ### `domains`[​](#domains "Direct link to domains") **Added in** `eventcatalog@2.63.0` * Type: `object` Configuration for the domains table. eventcatalog.config.js ``` module.exports = { domains: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, services: { visible: true, label: 'Services' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } } } }; ``` See the [Customize tables](/docs/development/customization/customize-tables.md) documentation for more information and examples. ### `events`[​](#events "Direct link to events") **Added in** `eventcatalog@2.63.0` * Type: `object` Configuration for the events table. eventcatalog.config.js ``` module.exports = { events: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, producers: { visible: true, label: 'Producers' }, consumers: { visible: true, label: 'Consumers' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } } } }; ``` See the [Customize tables](/docs/development/customization/customize-tables.md) documentation for more information and examples. ### `queries`[​](#queries "Direct link to queries") **Added in** `eventcatalog@2.63.0` * Type: `object` Configuration for the queries table. eventcatalog.config.js ``` module.exports = { queries: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, producers: { visible: true, label: 'Producers' }, consumers: { visible: true, label: 'Consumers' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } } } }; ``` ### `commands`[​](#commands "Direct link to commands") **Added in** `eventcatalog@2.63.0` * Type: `object` Configuration for the commands table. eventcatalog.config.js ``` module.exports = { commands: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, producers: { visible: true, label: 'Producers' }, consumers: { visible: true, label: 'Consumers' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } } } }; ``` See the [Customize tables](/docs/development/customization/customize-tables.md) documentation for more information and examples. ### `services`[​](#services "Direct link to services") **Added in** `eventcatalog@2.63.0` * Type: `object` Configuration for the services table. eventcatalog.config.js ``` module.exports = { services: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, sends: { visible: true, label: 'Sends' }, receives: { visible: true, label: 'Receives' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } } } }; ``` See the [Customize tables](/docs/development/customization/customize-tables.md) documentation for more information and examples. ### `containers`[​](#containers "Direct link to containers") **Added in** `eventcatalog@2.63.0` * Type: `object` Configuration for the containers table. eventcatalog.config.js ``` module.exports = { containers: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, writes: { visible: true, label: 'Writes' }, reads: { visible: true, label: 'Reads' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } } } }; ``` See the [Customize tables](/docs/development/customization/customize-tables.md) documentation for more information and examples. ### `flows`[​](#flows "Direct link to flows") **Added in** `eventcatalog@2.63.0` * Type: `object` Configuration for the flows table. eventcatalog.config.js ``` module.exports = { flows: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, version: { visible: true, label: 'Version' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } } } }; ``` See the [Customize tables](/docs/development/customization/customize-tables.md) documentation for more information and examples. ### `users`[​](#users "Direct link to users") **Added in** `eventcatalog@2.63.0` * Type: `object` Configuration for the users table. eventcatalog.config.js ``` module.exports = { users: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, email: { visible: true, label: 'Email' }, slackDirectMessageUrl: { visible: true, label: 'Slack URL' }, summary: { visible: true, label: 'Summary' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } } } }; ``` See the [Customize tables](/docs/development/customization/customize-tables.md) documentation for more information and examples. ### `scalarConfiguration`[​](#scalarConfiguration "Direct link to scalarConfiguration") * Type: `object` Pass custom configuration directly to the [Scalar](https://scalar.com/) OpenAPI reference component. Any properties set here are spread into Scalar's configuration, allowing you to override or extend the defaults EventCatalog applies. This is useful when you need Scalar-specific behaviour such as routing API requests through a proxy, changing the theme, or disabling built-in UI controls. eventcatalog.config.js ``` module.exports = { scalarConfiguration: { // Route OpenAPI requests through a proxy proxy: 'https://proxy.example.com', }, }; ``` Refer to the [Scalar configuration reference](https://github.com/scalar/scalar/blob/main/documentation/configuration.md) for the full list of supported options. Note on defaults EventCatalog sets several Scalar options by default (such as `theme`, `showSidebar`, and `hideDarkModeToggle`). Any matching keys in `scalarConfiguration` will override these defaults. ### `teams`[​](#teams "Direct link to teams") **Added in** `eventcatalog@2.63.0` * Type: `object` Configuration for the teams table. eventcatalog.config.js ``` module.exports = { teams: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } } } }; ``` See the [Customize tables](/docs/development/customization/customize-tables.md) documentation for more information and examples. --- # Data frontmatter API **Added in** `eventcatalog@2.59.0` ## Overview[​](#overview "Direct link to Overview") [Data stores](/docs/development/guides/data/introduction.md) are just markdown files, with this comes the use of Content, MDX components and also [front-matter](https://jekyllrb.com/docs/front-matter/). Here is an example of of a basic data store. /services/OrdersService/containers/OrdersDatabase/index.mdx (example) ``` --- # id of your data store, used for slugs and references in EventCatalog. id: orders-db # Display name of the data store, rendered in EventCatalog. name: Orders DB # Version of the data store version: 1.0.0 # Type of the data store (e.g. database, cache, objectStore, searchIndex) container_type: database # Technology of the data store (e.g. postgres@14, redis@7, etc) technology: postgres@14 # Classification of the data store (e.g. internal, external, etc) classification: internal # Retention of the data store (e.g. 7y, 10y, etc) retention: 7y # Residency of the data store (e.g. eu-west-1, us-east-1, etc) residency: eu-west-1 # Badges to display badges: - content: "Core Data Store" backgroundColor: "blue" textColor: "white" --- The orders database is a core data store for the orders domain. ``` ## Required fields[​](#required-fields "Direct link to Required fields") ### `id`[​](#id "Direct link to id") * Type: `string` Unique id of the data store. EventCatalog uses this for references and slugs. Example ``` --- id: orders-db --- ``` ### `name`[​](#name "Direct link to name") * Type: `string` Name of the data store this is used to display the name on the UI. Example ``` --- name: Orders DB --- ``` ### `version`[​](#version "Direct link to version") * Type: `string` Version of the data store. Example ``` --- version: 0.0.1 --- ``` ### `container_type`[​](#container_type "Direct link to container_type") * Type: `string` Type of the data store. Example ``` --- container_type: database --- ``` Options: `database`, `cache`, `objectStore`, `searchIndex`, `dataWarehouse`, `dataLake`, `other` ## Optional fields[​](#optional-fields "Direct link to Optional fields") ### `summary`[​](#summary "Direct link to summary") Short summary of your data store, shown on data store summary pages. Example ``` --- summary: | Orders database is a core data store for the orders domain. --- ``` ### `technology`[​](#technology "Direct link to technology") * Type: `string` Technology of the data store. Example ``` --- technology: postgres@14 --- ``` ### `classification`[​](#classification "Direct link to classification") * Type: `string` Classification of the data store. Example ``` --- classification: internal --- ``` Options: `internal`, `external`, `confidential`, `regulated` ### `retention`[​](#retention "Direct link to retention") * Type: `string` Retention of the data store. Example ``` --- retention: 7y --- ``` ### `residency`[​](#residency "Direct link to residency") * Type: `string` Residency of the data store. Example ``` --- residency: eu-west-1 --- ``` ### `detailsPanel`[​](#detailsPanel "Direct link to detailsPanel") **Added in** `eventcatalog@2.53.0` Override the default details panel for the page. You can use this show/hide areas of the details panel. ![Details panel](/assets/images/domain-details-panel-71f92ae7e5cc2ed29bb9254c2bd3dcb4.png) Example ``` --- detailsPanel: versions: visible: false owners: visible: false --- ``` Options: | Property | Type | Required | Description | | ------------- | -------- | -------- | ------------------------------------------------------------------------ | | `versions` | `object` | No | An object with a `visible` property to show/hide the versions section | | `changelog` | `object` | No | An object with a `visible` property to show/hide the changelog button | | `owners` | `object` | No | An object with a `visible` property to show/hide the owners section | | `attachments` | `object` | No | An object with a `visible` property to show/hide the attachments section | | `repository` | `object` | No | An object with a `visible` property to show/hide the repository section | ### `attachments`[​](#attachments "Direct link to attachments") An array of attachments for this resource type. Example ``` --- attachments: - url: https://example.com/erd/orders-database.png title: ERD for Orders Database description: Learn more about the ERD for the Orders Database. type: 'architecture-decisions' icon: FileTextIcon --- ``` Options: The attachments can be a url (string) or an object with additional properties. Object properties: | Property | Type | Required | Description | | ------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- | | `url` | `string` | Yes | The url of the attachment | | `title` | `string` | optional | The title of the attachment | | `description` | `string` | optional | The description of the attachment | | `type` | `string` | optional | The type of the attachment, this will be used to group attachments together in the UI | | `icon` | `string` | optional | The icon of the attachment, you can pick from the [lucide icons](https://lucide.dev/icons/) library. | --- # Data Product frontmatter API **Added in** `eventcatalog@3.8.0` Beta Feature Data Products are currently in **beta** and accepting feedback. The frontmatter API and supported fields may change based on community input. ## Overview[​](#overview "Direct link to Overview") [Data products](/docs/development/guides/data-products/introduction.md) are markdown files with Content, MDX components and [front-matter](https://jekyllrb.com/docs/front-matter/). Here is an example of a basic data product. /data-products/PaymentAnalytics/index.mdx (example) ``` --- # Unique identifier for your data product id: payment-analytics # Display name rendered in EventCatalog name: Payment Analytics # Version of the data product version: 1.0.0 # Brief summary of what this data product provides summary: Payment performance metrics and fraud detection insights # Optional owners (references teams or users) owners: - analytics-team # Optional badges for categorization badges: - content: Analytics backgroundColor: purple textColor: purple # Input dependencies (events, services, data stores) inputs: - id: PaymentProcessed - id: FraudCheckCompleted - id: PaymentService # Output data products (events, services, data stores with optional contracts) outputs: - id: payment-analytics-db contract: path: payment-metrics-contract.json name: Payment Metrics Contract type: json-schema --- ## Overview The Payment Analytics data product transforms payment events into actionable insights. ``` ## Required fields[​](#required-fields "Direct link to Required fields") ### `id`[​](#id "Direct link to id") * Type: `string` Unique id of the data product. EventCatalog uses this for references and slugs. Example ``` --- id: payment-analytics --- ``` ### `name`[​](#name "Direct link to name") * Type: `string` Name of the data product used to display on the UI. Example ``` --- name: Payment Analytics --- ``` ### `version`[​](#version "Direct link to version") * Type: `string` Version of the data product. Example ``` --- version: 1.0.0 --- ``` ## Optional fields[​](#optional-fields "Direct link to Optional fields") ### `summary`[​](#summary "Direct link to summary") Short summary of your data product, shown on summary pages. Example ``` --- summary: | Comprehensive payment performance metrics including success rates, failure analysis, and fraud detection insights. --- ``` ### `inputs`[​](#inputs "Direct link to inputs") * Type: `array` Array of input dependencies that feed the data product. Inputs can be events, commands, queries, services, data stores, or channels. Example ``` --- inputs: - id: PaymentProcessed - id: OrderConfirmed - id: PaymentService - id: payments-db --- ``` Each input can optionally specify a version: Example with versions ``` --- inputs: - id: PaymentProcessed version: 2.1.0 - id: OrderConfirmed version: latest # Default if not specified --- ``` ### `outputs`[​](#outputs "Direct link to outputs") * Type: `array` Array of outputs produced by the data product. Outputs can be events, commands, queries, services, or data stores. Example ``` --- outputs: - id: OrderMetricsCalculated - id: NotificationService - id: orders-analytics-db --- ``` Outputs can include contracts to define schema specifications: Example with contracts ``` --- outputs: - id: payment-analytics-db contract: path: payment-metrics-contract.json name: Payment Metrics Contract type: json-schema - id: daily-sales-db contract: path: daily-sales-odcs.yaml name: Daily Sales ODCS type: odcs --- ``` Contract properties: | Property | Type | Required | Description | | -------- | -------- | -------- | -------------------------------------------- | | `path` | `string` | Yes | File path relative to data product directory | | `name` | `string` | Yes | Display name for the contract | | `type` | `string` | Yes | Contract format: `json-schema` or `odcs` | ### `owners`[​](#owners "Direct link to owners") * Type: `array` Array of owners for the data product. Owners reference teams or users defined in your catalog. Example ``` --- owners: - analytics-team - dboyne --- ``` ### `badges`[​](#badges "Direct link to badges") * Type: `array` Array of badges to display on the data product page. Example ``` --- badges: - content: Analytics backgroundColor: purple textColor: purple - content: dbt backgroundColor: orange textColor: orange --- ``` Badge properties: | Property | Type | Required | Description | | ----------------- | -------- | -------- | ------------------------- | | `content` | `string` | Yes | Text content of the badge | | `backgroundColor` | `string` | Yes | Background color | | `textColor` | `string` | Yes | Text color | ### `repository`[​](#repository "Direct link to repository") * Type: `object` Repository information for the data product. Example ``` --- repository: language: Python url: https://github.com/example/payment-analytics --- ``` Properties: | Property | Type | Required | Description | | ---------- | -------- | -------- | -------------------- | | `language` | `string` | No | Programming language | | `url` | `string` | No | Repository URL | ### `schemaPath`[​](#schemapath "Direct link to schemapath") * Type: `string` Path to the main schema file for the data product. Example ``` --- schemaPath: ./payment-schema.json --- ``` ### `sidebar`[​](#sidebar "Direct link to sidebar") * Type: `object` Customize sidebar appearance for the data product. Example ``` --- sidebar: label: Payment Analytics badge: New color: "#4F46E5" backgroundColor: "#EEF2FF" --- ``` ### `specifications`[​](#specifications "Direct link to specifications") * Type: `array` Array of specification files for the data product (OpenAPI, AsyncAPI, GraphQL). Example ``` --- specifications: - type: openapi path: ./api-spec.yaml name: Payment Analytics API --- ``` ### `hidden`[​](#hidden "Direct link to hidden") * Type: `boolean` Hide the data product from the catalog UI. Example ``` --- hidden: true --- ``` ### `editUrl`[​](#editurl "Direct link to editurl") * Type: `string` Custom edit URL for the data product documentation. Example ``` --- editUrl: https://github.com/example/docs/edit/main/data-products/PaymentAnalytics/index.mdx --- ``` ### `resourceGroups`[​](#resourcegroups "Direct link to resourcegroups") * Type: `array` Define groups of related resources to display on the data product page. Example ``` --- resourceGroups: - id: input-events title: Input Events items: - id: PaymentProcessed type: event - id: FraudCheckCompleted type: event limit: 10 sidebar: true --- ``` ### `styles`[​](#styles "Direct link to styles") * Type: `object` Custom styling for the data product. Example ``` --- styles: icon: DatabaseIcon node: color: "#4F46E5" label: Payment Analytics --- ``` ### `deprecated`[​](#deprecated "Direct link to deprecated") * Type: `boolean | object` Mark the data product as deprecated. Example (boolean) ``` --- deprecated: true --- ``` Example (object) ``` --- deprecated: message: Migrate to PaymentAnalyticsV2 date: 2026-06-01 --- ``` ### `visualiser`[​](#visualiser "Direct link to visualiser") * Type: `boolean` Enable or disable the visualizer for the data product. Defaults to `true`. Example ``` --- visualiser: false --- ``` ### `attachments`[​](#attachments "Direct link to attachments") * Type: `array` Array of attachments for the data product. Example ``` --- attachments: - url: https://example.com/pipeline-diagram.png title: Pipeline Architecture description: Data flow diagram for Payment Analytics type: architecture-diagram icon: FileTextIcon --- ``` Attachments can be URLs (strings) or objects with additional properties. Object properties: | Property | Type | Required | Description | | ------------- | -------- | -------- | --------------------------------------------------- | | `url` | `string` | Yes | URL of the attachment | | `title` | `string` | No | Title of the attachment | | `description` | `string` | No | Description | | `type` | `string` | No | Type for grouping attachments | | `icon` | `string` | No | Icon from [lucide icons](https://lucide.dev/icons/) | --- # Domain frontmatter API ## Overview[​](#overview "Direct link to Overview") Domains are just markdown files, with this comes the use of Content, MDX components and also [front-matter](https://jekyllrb.com/docs/front-matter/). Here is an example of the domain frontmatter you will find in your domain files. /domains/Orders/index.mdx (example) ``` --- # id of your domain, used for slugs and references in EventCatalog. id: Orders # Display name of the domain, rendered in EventCatalog name: Orders # Version of the domain version: 0.0.1 # Short summary of your domain summary: | Domain that contains order related information # Optional owners, references teams or users owners: - dboyne # Optional services. Groups services into this domain. services: - id: PaymentService version: 0.0.1 # Optional flows associated with this domain flows: - id: OrderProcessing version: 1.0.0 # Optional messages this domain sends _(added in 3.7.0)_ sends: - id: OrderCreated version: 1.0.0 # Optional messages this domain receives _(added in 3.7.0)_ receives: - id: PaymentInitiated version: 1.0.0 # Optional badges, rendered to UI by EventCatalog badges: - content: New domain backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) # Or the name of the broker (e.g Kafka, EventBridge, etc) icon: BoltIcon --- ## Overview Domain that contains all services that are related to the orders domain within FakeCompany. ``` ## Required fields[​](#required-fields "Direct link to Required fields") ### `id`[​](#id "Direct link to id") * Type: `string` Unqiue id of the domain. EventCatalog uses this for references and slugs. Example ``` --- id: Orders --- ``` ### `name`[​](#name "Direct link to name") * Type: `string` Name of the domain this is used to display the name on the UI. Example ``` --- name: My orders domain --- ``` ### `version`[​](#version "Direct link to version") * Type: `string` Version of the domain. Example ``` --- version: 0.0.1 --- ``` ## Optional fields[​](#optional-fields "Direct link to Optional fields") ### `summary`[​](#summary "Direct link to summary") Short summary of your domain, shown on domain summary pages. Example ``` --- summary: | Domain that contains everything about orders --- ``` ### `owners`[​](#owners "Direct link to owners") An array of user ids that own the domain. Example ``` --- owners: - dboyne - mSmith --- ``` ### `services`[​](#services "Direct link to services") An array of services ids that belong to the this domain. Which services belong to this domains bounded context. Example ``` --- services: - id: InventoryService - id: OrderService # Optional version of the service, latest version is used if not provided version: 0.0.1 --- ``` ### `entities`[​](#entities "Direct link to entities") **Added in** `eventcatalog@2.36.0` An array of [entities](/docs/development/guides/domains/entities/introduction.md) ids that belong to the this domain. Which entities belong to this domains bounded context. Example ``` --- entities: - id: Order - id: OrderItem # Optional version of the entity, latest version is used if not provided version: 0.0.1 --- ``` ### `flows`[​](#flows "Direct link to flows") An array of [flows](/docs/development/guides/flows/introduction.md) ids that are associated with this domain. Example ``` --- flows: - id: OrderProcessing - id: PaymentFlow # Optional version of the flow, latest version is used if not provided version: 1.0.0 --- ``` ### `sends`[​](#sends "Direct link to sends") **Added in** `eventcatalog@3.7.0` An array of [messages](/docs/development/guides/messages/overview.md) ids that this domain sends/publishes. In domain driven design these can be classed as domain events, which are events that are published by the domain. This allows you to document messags (e.g events) at a domain level and have services document them as the implementation of the domain event. Where to store these messages? You can store messages anywhere in your catalog. If you prefer you can store them in your domain folder. But remember you can also reference them in your services anyway. ``` domains/ Orders/ events/ OrderCreated/ index.mdx ``` Example ``` --- sends: - id: OrderCreated - id: PaymentProcessed # Optional version of the message, latest version is used if not provided version: 1.0.0 --- ``` ### `receives`[​](#receives "Direct link to receives") **Added in** `eventcatalog@3.7.0` An array of [messages](/docs/development/guides/messages/overview.md) ids that this domain receives. These typically are messages that are consumed by your domain (external messages). You can store these anywhere in your catalog, and your domain can just reference them. Example ``` --- receives: - id: PaymentInitiated - id: FraudDetected # Optional version of the message, latest version is used if not provided version: 0.0.1 --- ``` ### `badges`[​](#badges "Direct link to badges") An array of badges that get rendered on the page. Example ``` --- badges: - content: My badge backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) # Or the name of the broker (e.g Kafka, EventBridge, etc) icon: BoltIcon --- ``` ### `specifications`[​](#specifications "Direct link to specifications") **Added in** `eventcatalog@2.6.0` Specifications to include on the page **Added in** `eventcatalog@2.39.1` You can assign one or more specifications to a domain. Example ``` --- specifications: - type: asyncapi path: order-service-asyncapi.yaml name: AsyncAPI Specification - type: openapi path: openapi.yml name: OpenAPI Specification - type: graphql path: graphql.yml name: GraphQL Specification --- ``` | Property | Type | Required | Description | | -------- | -------- | -------- | -------------------------------------------------------------------------------- | | `type` | `string` | Yes | The type of specification, currently only `asyncapi` and `openapi` are supported | | `path` | `string` | Yes | The path to the specification file | | `name` | `string` | No | Optional friendly name of the specification, rendered in the UI | **Older versions of EventCatalog (< 2.39.0)** If you are using an older version of EventCatalog you will need to use the following syntax. Example ``` --- specifications: asyncapiPath: order-service-asyncapi.yaml openapiPath: openapi.yml --- ``` ### `visualiser`[​](#visualiser "Direct link to visualiser") **Added in** `eventcatalog@2.39.2` Turn off the visualiser for this resource. This means the resource will not be included in the visualiser or the navigation bar for the visualiser. **Default: `true`** Example ``` --- visualiser: false --- ``` ### `editUrl`[​](#editUrl "Direct link to editUrl") **Added in** `eventcatalog@2.49.4` Override the default edit url for the page. This is used to navigate the user to the edit page for the page (e.g GitHub, GitLab url). Example ``` --- editUrl: https://github.com/event-catalog/eventcatalog/edit/main/domains/Orders/index.mdx --- ``` ### `detailsPanel`[​](#detailsPanel "Direct link to detailsPanel") **Added in** `eventcatalog@2.53.0` Override the default details panel for the page. You can use this show/hide areas of the details panel. ![Details panel](/assets/images/domain-details-panel-71f92ae7e5cc2ed29bb9254c2bd3dcb4.png) Example ``` --- detailsPanel: services: visible: false entities: visible: true messages: visible: false ubiquitousLanguage: visible: false --- ``` Options: | Property | Type | Required | Description | | -------------------- | -------- | -------- | ------------------------------------------------------------------------------------------------ | | `services` | `object` | No | An object with a `visible` property to show/hide the services section | | `entities` | `object` | No | An object with a `visible` property to show/hide the entities section | | `messages` | `object` | No | An object with a `visible` property to show/hide the messages section (sends and receives) | | `ubiquitousLanguage` | `object` | No | An object with a `visible` property to show/hide the ubiquitous language section | | `repository` | `object` | No | An object with a `visible` property to show/hide the repository section (e.g GitHub, GitLab url) | | `versions` | `object` | No | An object with a `visible` property to show/hide the versions section | | `owners` | `object` | No | An object with a `visible` property to show/hide the owners section | | `changelog` | `object` | No | An object with a `visible` property to show/hide the changelog button | ### `attachments`[​](#attachments "Direct link to attachments") **Added in** `eventcatalog@2.57.2` An array of attachments for this resource type. Example ``` --- attachments: - url: https://example.com/adr/001 title: ADR-001 - Use Kafka for asynchronous messaging description: Learn more about why we chose Kafka for asynchronous messaging in this architecture decision record. type: 'architecture-decisions' icon: FileTextIcon - https://example.com/adr/002 --- ``` Options: The attachments can be a url (string) or an object with additional properties. Object properties: | Property | Type | Required | Description | | ------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- | | `url` | `string` | Yes | The url of the attachment | | `title` | `string` | optional | The title of the attachment | | `description` | `string` | optional | The description of the attachment | | `type` | `string` | optional | The type of the attachment, this will be used to group attachments together in the UI | | `icon` | `string` | optional | The icon of the attachment, you can pick from the [lucide icons](https://lucide.dev/icons/) library. | --- # Entity frontmatter API ## Overview[​](#overview "Direct link to Overview") Entities are just markdown files, with this comes the use of Content, MDX components and also [front-matter](https://jekyllrb.com/docs/front-matter/). Here is an example of of a basic entity. /entities/User/index.mdx (example) ``` --- # id of the entity id: "User" # Display name of the entity, rendered in EventCatalog name: "User" # version for your entity version: "1.0.0" # Short summary of your entity summary: "Represents a user in the system" # Whether this entity is an aggregate root aggregateRoot: true # The unique identifier for this entity identifier: "userId" # Properties of the entity properties: - name: "userId" type: "string" required: true description: "Unique identifier for the user" - name: "email" type: "string" required: true description: "User's email address" - name: "firstName" type: "string" required: true description: "User's first name" - name: "lastName" type: "string" required: true description: "User's last name" - name: "dateOfBirth" type: "date" required: false description: "User's date of birth" - name: "profileId" type: "string" required: false description: "Reference to user's profile" references: "Profile" referencesIdentifier: "profileId" relationType: "one-to-one" # Badges to display badges: - content: "Core Entity" backgroundColor: "blue" textColor: "white" --- The User entity represents a user in our system and serves as an aggregate root for user-related operations. This entity contains core user information and is referenced by multiple services across the platform. ``` ## Required fields[​](#required-fields "Direct link to Required fields") ### `id`[​](#id "Direct link to id") * Type: `string` Unique id of the entity. EventCatalog uses this for references and slugs. Example ``` --- id: User --- ``` ### `name`[​](#name "Direct link to name") * Type: `string` Name of the entity this is used to display the name on the UI. Example ``` --- name: User --- ``` ### `version`[​](#version "Direct link to version") * Type: `string` Version of the entity. Example ``` --- version: 1.0.0 --- ``` ## Optional fields[​](#optional-fields "Direct link to Optional fields") ### `summary`[​](#summary "Direct link to summary") Short summary of your entity, shown on entity summary pages. Example ``` --- summary: | Represents a user in the system with personal information and authentication details --- ``` ### `aggregateRoot`[​](#aggregateroot "Direct link to aggregateroot") * Type: `boolean` Indicates whether this entity is an aggregate root in Domain-Driven Design terms. Example ``` --- aggregateRoot: true --- ``` ### `identifier`[​](#identifier "Direct link to identifier") * Type: `string` The unique identifier property for this entity. Example ``` --- identifier: userId --- ``` ### `properties`[​](#properties "Direct link to properties") * Type: `Property[]` List of properties that define the structure of the entity. Example ``` --- properties: - name: "userId" type: "string" required: true description: "Unique identifier for the user" - name: "email" type: "string" required: true description: "User's email address" - name: "profileId" type: "string" required: false description: "Reference to user's profile" references: "Profile" referencesIdentifier: "profileId" relationType: "one-to-one" --- ``` Each property can have the following fields: * `name` (required): The name of the property * `type` (required): The data type of the property * `required` (optional): Whether the property is required * `description` (optional): Description of the property * `references` (optional): References another entity * `referencesIdentifier` (optional): The identifier used for the reference * `relationType` (optional): Type of relationship (e.g., "one-to-one", "one-to-many") ### `badges`[​](#badges "Direct link to badges") An array of badges that get rendered on the page. Example ``` --- badges: - content: Core Entity backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) icon: BoltIcon --- ``` ### `editUrl`[​](#editUrl "Direct link to editUrl") **Added in** `eventcatalog@2.49.4` Override the default edit url for the page. This is used to navigate the user to the edit page for the page (e.g GitHub, GitLab url). Example ``` --- editUrl: https://github.com/event-catalog/eventcatalog/edit/main/entities/User/index.mdx --- ``` ### `detailsPanel`[​](#detailsPanel "Direct link to detailsPanel") **Added in** `eventcatalog@2.53.0` Override the default details panel for the page. You can use this show/hide areas of the details panel. ![Details panel](/assets/images/domain-details-panel-71f92ae7e5cc2ed29bb9254c2bd3dcb4.png) Example ``` --- detailsPanel: domains: visible: false services: visible: false messages: visible: false versions: visible: false owners: visible: false --- ``` Options: | Property | Type | Required | Description | | ----------- | -------- | -------- | --------------------------------------------------------------------- | | `domains` | `object` | No | An object with a `visible` property to show/hide the domains section | | `services` | `object` | No | An object with a `visible` property to show/hide the services section | | `messages` | `object` | No | An object with a `visible` property to show/hide the messages section | | `versions` | `object` | No | An object with a `visible` property to show/hide the versions section | | `changelog` | `object` | No | An object with a `visible` property to show/hide the changelog button | | `owners` | `object` | No | An object with a `visible` property to show/hide the owners section | ### `attachments`[​](#attachments "Direct link to attachments") **Added in** `eventcatalog@2.57.2` An array of attachments for this resource type. Example ``` --- attachments: - url: https://example.com/adr/001 title: ADR-001 - Use Kafka for asynchronous messaging description: Learn more about why we chose Kafka for asynchronous messaging in this architecture decision record. type: 'architecture-decisions' icon: FileTextIcon - https://example.com/adr/002 --- ``` Options: The attachments can be a url (string) or an object with additional properties. Object properties: | Property | Type | Required | Description | | ------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- | | `url` | `string` | Yes | The url of the attachment | | `title` | `string` | optional | The title of the attachment | | `description` | `string` | optional | The description of the attachment | | `type` | `string` | optional | The type of the attachment, this will be used to group attachments together in the UI | | `icon` | `string` | optional | The icon of the attachment, you can pick from the [lucide icons](https://lucide.dev/icons/) library. | --- # Event frontmatter API ## Overview[​](#overview "Direct link to Overview") Events are just markdown files, with this comes the use of Content, MDX components and also [front-matter](https://jekyllrb.com/docs/front-matter/). Here is an example of the event frontmatter you will find in your `/events` folder. /events/InventoryOutOfStock/index.mdx (example) ``` --- # id of your event, used for slugs and references in EventCatalog. id: InventoryOutOfStock # Display name of the event, rendered in EventCatalog name: Out of stock # Version of the event version: 0.0.3 # Short summary of your event summary: | Event that is raised when an inventory item goes out of stock. # Optional owners, references teams or users owners: - dboyne repository: language: JavaScript url: https://github.com/event-catalog/pretend-shipping-service # Optional badges, rendered to UI by EventCatalog badges: - content: New event backgroundColor: blue textColor: blue # Optional link to display (optional) link: https://github.com/event-catalog/pretend-shipping-service --- ## Overview Event is published when the inventory is out of stock. ``` ## Required fields[​](#required-fields "Direct link to Required fields") ### `id`[​](#id "Direct link to id") * Type: `string` Unqiue id of the event. EventCatalog uses this for references and slugs. Example ``` --- id: InventoryOutOfStock --- ``` ### `name`[​](#name "Direct link to name") * Type: `string` Name of the event this is used to display the name on the UI. Example ``` --- name: Out of stock --- ``` ### `version`[​](#version "Direct link to version") * Type: `string` Version of the event. Example ``` --- version: 0.0.1 --- ``` ## Optional fields[​](#optional-fields "Direct link to Optional fields") **Added in** `eventcatalog@3.18.0` ### `operation`[​](#operation "Direct link to operation") Document an HTTP operation for this event. When set, the visualiser displays an HTTP method badge, API path, and status code pills on the event node. Example ``` --- operation: method: POST path: /orders statusCodes: - "201" - "400" --- ``` | Property | Type | Required | Description | | ------------- | ------------------------------------------------- | -------- | -------------------------------------------------- | | `method` | `'GET' \| 'POST' \| 'PUT' \| 'DELETE' \| 'PATCH'` | No | The HTTP method for the operation | | `path` | `string` | No | The API path for the operation | | `statusCodes` | `string[]` | No | List of HTTP status codes the operation may return | ### `summary`[​](#summary "Direct link to summary") Short summary of your event, shown on event summary pages. Example ``` --- summary: | Event that is raised when an inventory item goes out of stock. --- ``` ### `owners`[​](#owners "Direct link to owners") An array of user ids that own the event. Example ``` --- owners: - dboyne - mSmith --- ``` ### `badges`[​](#badges "Direct link to badges") An array of badges that get rendered on the page. Example ``` --- badges: - content: My badge backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) # Or the name of the broker (e.g Kafka, EventBridge, etc) icon: BoltIcon --- ``` ### `schemaPath`[​](#schemaPath "Direct link to schemaPath") Path to the schema of the message. *Path is relative*. Example ``` --- schemaPath: schema.json --- ``` ### `repository`[​](#repository "Direct link to repository") **Added in** `eventcatalog@2.11.2` Repository language and code url for the event. Example ``` --- repository: language: JavaScript url: https://github.com/event-catalog/pretend-shipping-service --- ``` ### `sidebar`[​](#sidebar "Direct link to sidebar") **Added in** `eventcatalog@2.29.3` Configure the event label and message in the [docs sidebar](/docs/development/customization/customize-sidebars/documentation-sidebar.md). Example ``` --- sidebar: badge: Event label: Inventory Adjusted --- ``` ### `visualiser`[​](#visualiser "Direct link to visualiser") **Added in** `eventcatalog@2.39.2` Turn off the visualiser for this resource. This means the resource will not be included in the visualiser or the navigation bar for the visualiser. **Default: `true`** Example ``` --- visualiser: false --- ``` ### `draft`[​](#draft "Direct link to draft") **Added in** `eventcatalog@2.48.4` Mark the event as a draft. This will show the event as a draft in the UI. You can also specify a title and summary for your draft to help you communicate the status of the draft. /commands/UpdateInventoryStock/index.mdx (example) ``` --- # Uses the default title and summary to mark things as draft in the UI draft: true # Or you can specify a title and summary for your draft draft: title: "Update Inventory Stock 1.0.1 is in draft" # Supports markdown message: | ### New version of Update Inventory Stock command is in draft This is a new version of the Update Inventory Stock command. It is not yet ready for production. We are still working on it and collecting feedback from the team. You can use this version in lower environments, **but please be aware that it is still in draft and may change.** You can still use a previous version of the command, [Update Inventory Stock 1.0.0](/docs/commands/UpdateInventoryStock/1.0.0), until that version is deprecated. _If you would like to provide feedback, please contact us at [feedback@eventcatalog.io](mailto:feedback@eventcatalog.io) or our slack channel [Order Management](https://join.slack.com/t/eventcatalog/shared_invite/zt-1q900000000000000000000000000000)_ --- ``` ### `editUrl`[​](#editUrl "Direct link to editUrl") **Added in** `eventcatalog@2.49.4` Override the default edit url for the page. This is used to navigate the user to the edit page for the page (e.g GitHub, GitLab url). Example ``` --- editUrl: https://github.com/event-catalog/eventcatalog/edit/main/events/InventoryOutOfStock/index.mdx --- ``` ### `detailsPanel`[​](#detailsPanel "Direct link to detailsPanel") **Added in** `eventcatalog@2.53.0` Override the default details panel for the page. You can use this show/hide areas of the details panel. ![Details panel](/assets/images/domain-details-panel-71f92ae7e5cc2ed29bb9254c2bd3dcb4.png) Example ``` --- detailsPanel: producers: visible: false consumers: visible: false channels: visible: false versions: visible: false --- ``` Options: | Property | Type | Required | Description | | ------------ | -------- | -------- | ------------------------------------------------------------------------------------------------ | | `producers` | `object` | No | An object with a `visible` property to show/hide the producers section | | `consumers` | `object` | No | An object with a `visible` property to show/hide the consumers section | | `channels` | `object` | No | An object with a `visible` property to show/hide the channels section | | `versions` | `object` | No | An object with a `visible` property to show/hide the versions section | | `repository` | `object` | No | An object with a `visible` property to show/hide the repository section (e.g GitHub, GitLab url) | | `owners` | `object` | No | An object with a `visible` property to show/hide the owners section | | `changelog` | `object` | No | An object with a `visible` property to show/hide the changelog button | ### `attachments`[​](#attachments "Direct link to attachments") **Added in** `eventcatalog@2.57.2` An array of attachments for this resource type. Example ``` --- attachments: - url: https://example.com/adr/001 title: ADR-001 - Use Kafka for asynchronous messaging description: Learn more about why we chose Kafka for asynchronous messaging in this architecture decision record. type: 'architecture-decisions' icon: FileTextIcon - https://example.com/adr/002 --- ``` Options: The attachments can be a url (string) or an object with additional properties. Object properties: | Property | Type | Required | Description | | ------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- | | `url` | `string` | Yes | The url of the attachment | | `title` | `string` | optional | The title of the attachment | | `description` | `string` | optional | The description of the attachment | | `type` | `string` | optional | The type of the attachment, this will be used to group attachments together in the UI | | `icon` | `string` | optional | The icon of the attachment, you can pick from the [lucide icons](https://lucide.dev/icons/) library. | --- # Flow frontmatter API ## Overview[​](#overview "Direct link to Overview") Flows are just markdown files, with this comes the use of Content, MDX components and also [front-matter](https://jekyllrb.com/docs/front-matter/). Here is an example of of a basic flow. /events/InventoryOutOfStock/index.mdx (example) ``` --- # id of the flow id: "CancelSubscriptionFlow" # Display name of the flow, rendered in EventCatalog name: "User Cancels Subscription" # version for your flow version: "0.0.1" # Short summary of your event summary: "Flow for when a user has cancelled a subscription" # A list of steps for your flow steps: # id of your step, required for linking between stages in your flow - id: "cancel_subscription_initiated" # rendered title of your step title: "Cancels Subscription" # Short summary of a step summary: "User cancels their subscription" # Defining an actor will render an actor node in the graph. actor: name: "User" # What happens next? Define the next step next_step: id: "cancel_subscription_request" label: "Initiate subscription cancellation" - id: "cancel_subscription_request" title: "Cancel Subscription" # This step is a message, include the message and version message: id: "CancelSubscription" version: "0.0.1" next_step: id: "subscription_service" label: "Proceed to subscription service" - id: "stripe_integration" title: "Stripe" # This is an external system (e.g Stripe) externalSystem: name: "Stripe" summary: "3rd party payment system" url: "https://stripe.com/" next_step: id: "subscription_service" label: "Return to subscription service" - id: "subscription_service" title: "Subscription Service" # This node is a service, include that. service: id: "SubscriptionService" version: "0.0.1" # Define multiple steps next_steps: - id: "stripe_integration" label: "Cancel subscription via Stripe" - id: "subscription_cancelled" label: "Successful cancellation" - id: "subscription_rejected" label: "Failed cancellation" - id: "subscription_cancelled" title: "Subscription has been Cancelled" message: id: "UserSubscriptionCancelled" version: "0.0.1" next_step: id: "notification_service" label: "Email customer" - id: "subscription_rejected" title: "Subscription cancellation has been rejected" - id: "notification_service" title: "Notifications Service" service: id: "NotificationService" version: "0.0.2" --- This flow documents what happens when a User Cancels Subscription in our system. ``` ## Required fields[​](#required-fields "Direct link to Required fields") ### `id`[​](#id "Direct link to id") * Type: `CancelSubscriptionFlow` Unqiue id of the flow. EventCatalog uses this for references and slugs. Example ``` --- id: InventoryOutOfStock --- ``` ### `name`[​](#name "Direct link to name") * Type: `string` Name of the flow this is used to display the name on the UI. Example ``` --- name: User Cancels Subscription --- ``` ### `version`[​](#version "Direct link to version") * Type: `string` Version of the flow. Example ``` --- version: 0.0.1 --- ``` ### `steps`[​](#steps "Direct link to steps") * Type: `Step[]` List of steps for your flow. Example ``` --- steps: - id: "cancel_subscription_initiated" title: "Cancels Subscription" summary: "User cancels their subscription" # Define a single step that happens next next_step: id: "cancel_subscription_request" label: "Initiate subscription cancellation" # OR define a multiple next steps next_steps: - id: "stripe_integration" label: "Cancel subscription via Stripe" - id: "subscription_cancelled" label: "Successful cancellation" - id: "subscription_rejected" label: "Failed cancellation" --- ``` #### Actor Nodes[​](#actor-nodes "Direct link to Actor Nodes") Flows allow you to create [Actor nodes](https://en.wikipedia.org/wiki/Event_storming). Actors represent A person who executes a command or flow. Example ``` --- steps: - id: "cancel_subscription_initiated" title: "Cancels Subscription" summary: "User cancels their subscription" # Defining an actor will render an actor node in the graph. actor: name: "User" next_step: id: "cancel_subscription_request" label: "Initiate subscription cancellation" --- ``` #### External Services Nodes[​](#external-services-nodes "Direct link to External Services Nodes") Flows allow you to create External Service. These services tend to be other external services you may interact with that are not part of your business domain. (e.g Stripe API) Example ``` --- steps: - id: "stripe_integration" title: "Stripe" # This is an external system (e.g Stripe) externalSystem: name: "Stripe" summary: "3rd party payment system" url: "https://stripe.com/" next_step: id: "subscription_service" label: "Return to subscription service" --- ``` *[See example of Actor node in a workflow](https://demo.eventcatalog.dev/visualiser/flows/CancelSubscription/0.0.1).* #### Message Nodes[​](#message-nodes "Direct link to Message Nodes") Flows allow you to create [message nodes](/docs/messages.md). Messages link to your commands or events. Example ``` --- steps: - id: "cancel_subscription_request" title: "Cancel Subscription" # This step is a message, include the message and version message: id: "CancelSubscription" version: "0.0.1" next_step: id: "subscription_service" label: "Proceed to subscription service" --- ``` *[See example of Message node in a workflow](https://demo.eventcatalog.dev/visualiser/flows/CancelSubscription/0.0.1).* #### Service Nodes[​](#service-nodes "Direct link to Service Nodes") Flows allow you to create [service nodes](/docs/services.md). Services link to your defined services in EventCatalog. Example ``` --- - id: "subscription_service" title: "Subscription Service" # This node is a service, include that. service: id: "SubscriptionService" version: "0.0.1" # Define multiple steps next_steps: - id: "stripe_integration" label: "Cancel subscription via Stripe" - id: "subscription_cancelled" label: "Successful cancellation" - id: "subscription_rejected" label: "Failed cancellation" --- ``` *[See example of Message node in a workflow](https://demo.eventcatalog.dev/visualiser/flows/CancelSubscription/0.0.1).* ## Optional fields[​](#optional-fields "Direct link to Optional fields") ### `summary`[​](#summary "Direct link to summary") Short summary of your flow, shown on flow summary pages. Example ``` --- summary: | Flow that explains how a user unsubscribes to our system --- ``` ### `badges`[​](#badges "Direct link to badges") An array of badges that get rendered on the page. Example ``` --- badges: - content: My badge backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) # Or the name of the broker (e.g Kafka, EventBridge, etc) icon: BoltIcon --- ``` ### `editUrl`[​](#editUrl "Direct link to editUrl") **Added in** `eventcatalog@2.49.4` Override the default edit url for the page. This is used to navigate the user to the edit page for the page (e.g GitHub, GitLab url). Example ``` --- editUrl: https://github.com/event-catalog/eventcatalog/edit/main/flows/CancelSubscription/index.mdx --- ``` ### `detailsPanel`[​](#detailsPanel "Direct link to detailsPanel") **Added in** `eventcatalog@2.53.0` Override the default details panel for the page. You can use this show/hide areas of the details panel. ![Details panel](/assets/images/domain-details-panel-71f92ae7e5cc2ed29bb9254c2bd3dcb4.png) Example ``` --- detailsPanel: owners: visible: false --- ``` Options: | Property | Type | Required | Description | | ----------- | -------- | -------- | --------------------------------------------------------------------- | | `owners` | `object` | No | An object with a `visible` property to show/hide the owners section | | `versions` | `object` | No | An object with a `visible` property to show/hide the versions section | | `changelog` | `object` | No | An object with a `visible` property to show/hide the changelog button | ### `attachments`[​](#attachments "Direct link to attachments") **Added in** `eventcatalog@2.57.2` An array of attachments for this resource type. Example ``` --- attachments: - url: https://example.com/adr/001 title: ADR-001 - Use Kafka for asynchronous messaging description: Learn more about why we chose Kafka for asynchronous messaging in this architecture decision record. type: 'architecture-decisions' icon: FileTextIcon - https://example.com/adr/002 --- ``` Options: The attachments can be a url (string) or an object with additional properties. Object properties: | Property | Type | Required | Description | | ------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- | | `url` | `string` | Yes | The url of the attachment | | `title` | `string` | optional | The title of the attachment | | `description` | `string` | optional | The description of the attachment | | `type` | `string` | optional | The type of the attachment, this will be used to group attachments together in the UI | | `icon` | `string` | optional | The icon of the attachment, you can pick from the [lucide icons](https://lucide.dev/icons/) library. | --- # EventCatalog CLI EventCatalog provides a set of scripts to help you generate, serve, and deploy your catalog. Once your catalog is bootstrapped, the source will contain the EventCatalog scripts that you can invoke with your package manager: package.json ``` { // ... "scripts": { // Runs the dev server locally "dev": "eventcatalog dev", // Builds the catalog "build": "eventcatalog build", // start/preview both run the built catalog locally. "start": "eventcatalog start", "preview": "eventcatalog preview", // Export your catalog as JSON "export": "eventcatalog export", } } ``` * [`eventcatalog dev`](#eventcatalog-dev-sitedir) * [`eventcatalog start/preview`](#eventcatalog-start-sitedir) * [`eventcatalog build`](#eventcatalog-build-sitedir) * [`eventcatalog export`](#eventcatalog-export) ## EventCatalog CLI commands[​](#eventcatalog-cli-commands "Direct link to EventCatalog CLI commands") Below is a list of EventCatalog CLI commands and their usages: ### `eventcatalog dev`[​](#eventcatalog-dev-sitedir "Direct link to eventcatalog-dev-sitedir") Runs your catalog in development mode. This will start the dev server and watch for changes to your catalog. You will use this as you develop your catalog. ### `eventcatalog start/preview`[​](#eventcatalog-start-sitedir "Direct link to eventcatalog-start-sitedir") Runs EventCatalog in production mode, requires a `build` first. This will serve the built catalog from the `dist` folder. Can be used to preview your catalog before deploying. ### `eventcatalog build`[​](#eventcatalog-build-sitedir "Direct link to eventcatalog-build-sitedir") Builds your catalog for production, and outputs the catalog to the `dist` folder. ### `eventcatalog export`[​](#eventcatalog-export "Direct link to eventcatalog-export") Exports your entire catalog as a JSON file using the SDK's `dumpCatalog` function. The export is saved to the `exports/` directory in your project with a date stamp (e.g. `exports/catalog-2026-03-30.json`). **Options:** | Option | Description | | -------------------- | --------------------------------------------------------- | | `--include-markdown` | Include markdown content in the export (default: `false`) | ``` # Export catalog as JSON eventcatalog export # Export with markdown content included eventcatalog export --include-markdown ``` --- # Query frontmatter API ## Overview[​](#overview "Direct link to Overview") Queries are just markdown files, with this comes the use of Content, MDX components and also [front-matter](https://jekyllrb.com/docs/front-matter/). Here is an example of the query frontmatter you will find in your `/queries` folder. /queries/GetOrder/index.mdx (example) ``` --- # id of your query, used for slugs and references in EventCatalog. id: GetOrder # Display name of the query, rendered in EventCatalog name: Out of stock # Version of the query version: 0.0.3 # Short summary of your query summary: | Query that is raised when an inventory item goes out of stock. # Optional owners, references teams or users owners: - dboyne repository: language: JavaScript url: https://github.com/event-catalog/pretend-shipping-service # Optional badges, rendered to UI by EventCatalog badges: - content: New query backgroundColor: blue textColor: blue --- ## Overview Query is published when the inventory is out of stock. ``` ## Required fields[​](#required-fields "Direct link to Required fields") ### `id`[​](#id "Direct link to id") * Type: `string` Unqiue id of the query. EventCatalog uses this for references and slugs. Example ``` --- id: GetOrder --- ``` ### `name`[​](#name "Direct link to name") * Type: `string` Name of the query this is used to display the name on the UI. Example ``` --- name: Out of stock --- ``` ### `version`[​](#version "Direct link to version") * Type: `string` Version of the query. Example ``` --- version: 0.0.1 --- ``` ## Optional fields[​](#optional-fields "Direct link to Optional fields") **Added in** `eventcatalog@3.18.0` ### `operation`[​](#operation "Direct link to operation") Document an HTTP operation for this query. When set, the visualiser displays an HTTP method badge, API path, and status code pills on the query node. Example ``` --- operation: method: GET path: /orders/{id} statusCodes: - "200" - "404" --- ``` | Property | Type | Required | Description | | ------------- | ------------------------------------------------- | -------- | -------------------------------------------------- | | `method` | `'GET' \| 'POST' \| 'PUT' \| 'DELETE' \| 'PATCH'` | No | The HTTP method for the operation | | `path` | `string` | No | The API path for the operation | | `statusCodes` | `string[]` | No | List of HTTP status codes the operation may return | ### `summary`[​](#summary "Direct link to summary") Short summary of your query, shown on query summary pages. Example ``` --- summary: | query that is raised when an inventory item goes out of stock. --- ``` ### `owners`[​](#owners "Direct link to owners") An array of user ids that own the query. Example ``` --- owners: - dboyne - mSmith --- ``` ### `badges`[​](#badges "Direct link to badges") An array of badges that get rendered on the page. Example ``` --- badges: - content: My badge backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) # Or the name of the broker (e.g Kafka, EventBridge, etc) icon: BoltIcon --- ``` ### `schemaPath`[​](#schemaPath "Direct link to schemaPath") Path to the schema of the message. *Path is relative*. Example ``` --- schemaPath: schema.json --- ``` ### `repository`[​](#repository "Direct link to repository") **Added in** `eventcatalog@2.11.2` Repository language and code url for the query. Example ``` --- repository: language: JavaScript url: https://github.com/event-catalog/pretend-shipping-service --- ``` ### `sidebar`[​](#sidebar "Direct link to sidebar") **Added in** `eventcatalog@2.29.3` Configure the event label and message in the [docs sidebar](/docs/development/customization/customize-sidebars/documentation-sidebar.md). Example ``` --- sidebar: badge: GET label: List Inventory Items --- ``` ### `visualiser`[​](#visualiser "Direct link to visualiser") **Added in** `eventcatalog@2.39.2` Turn off the visualiser for this resource. This means the resource will not be included in the visualiser or the navigation bar for the visualiser. **Default: `true`** Example ``` --- visualiser: false --- ``` ### `draft`[​](#draft "Direct link to draft") **Added in** `eventcatalog@2.48.4` Mark the query as a draft. This will show the query as a draft in the UI. You can also specify a title and summary for your draft to help you communicate the status of the draft. /queries/GetInventoryStock/index.mdx (example) ``` --- # Uses the default title and summary to mark things as draft in the UI draft: true # Or you can specify a title and summary for your draft draft: title: "Get Inventory Stock 1.0.1 is in draft" # Supports markdown message: | ### New version of Get Inventory Stock query is in draft This is a new version of the Get Inventory Stock query. It is not yet ready for production. We are still working on it and collecting feedback from the team. You can use this version in lower environments, **but please be aware that it is still in draft and may change.** You can still use a previous version of the query, [Get Inventory Stock 1.0.0](/docs/queries/GetInventoryStock/1.0.0), until that version is deprecated. _If you would like to provide feedback, please contact us at [feedback@eventcatalog.io](mailto:feedback@eventcatalog.io) or our slack channel [Order Management](https://join.slack.com/t/eventcatalog/shared_invite/zt-1q900000000000000000000000000000)_ --- ``` ### `editUrl`[​](#editUrl "Direct link to editUrl") **Added in** `eventcatalog@2.49.4` Override the default edit url for the page. This is used to navigate the user to the edit page for the page (e.g GitHub, GitLab url). Example ``` --- editUrl: https://github.com/event-catalog/eventcatalog/edit/main/queries/GetInventoryStock/index.mdx --- ``` ### `detailsPanel`[​](#detailsPanel "Direct link to detailsPanel") **Added in** `eventcatalog@2.53.0` Override the default details panel for the page. You can use this show/hide areas of the details panel. ![Details panel](/assets/images/domain-details-panel-71f92ae7e5cc2ed29bb9254c2bd3dcb4.png) Example ``` --- detailsPanel: producers: visible: false consumers: visible: false channels: visible: false versions: visible: false --- ``` Options: | Property | Type | Required | Description | | ------------ | -------- | -------- | ------------------------------------------------------------------------------------------------ | | `producers` | `object` | No | An object with a `visible` property to show/hide the producers section | | `consumers` | `object` | No | An object with a `visible` property to show/hide the consumers section | | `channels` | `object` | No | An object with a `visible` property to show/hide the channels section | | `versions` | `object` | No | An object with a `visible` property to show/hide the versions section | | `repository` | `object` | No | An object with a `visible` property to show/hide the repository section (e.g GitHub, GitLab url) | | `owners` | `object` | No | An object with a `visible` property to show/hide the owners section | | `changelog` | `object` | No | An object with a `visible` property to show/hide the changelog button | ### `attachments`[​](#attachments "Direct link to attachments") **Added in** `eventcatalog@2.57.2` An array of attachments for this resource type. Example ``` --- attachments: - url: https://example.com/adr/001 title: ADR-001 - Use Kafka for asynchronous messaging description: Learn more about why we chose Kafka for asynchronous messaging in this architecture decision record. type: 'architecture-decisions' icon: FileTextIcon - https://example.com/adr/002 --- ``` Options: The attachments can be a url (string) or an object with additional properties. Object properties: | Property | Type | Required | Description | | ------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- | | `url` | `string` | Yes | The url of the attachment | | `title` | `string` | optional | The title of the attachment | | `description` | `string` | optional | The description of the attachment | | `type` | `string` | optional | The type of the attachment, this will be used to group attachments together in the UI | | `icon` | `string` | optional | The icon of the attachment, you can pick from the [lucide icons](https://lucide.dev/icons/) library. | --- # Service frontmatter API ## Overview[​](#overview "Direct link to Overview") Services are just markdown files, with this comes the use of Content, MDX components and also [front-matter](https://jekyllrb.com/docs/front-matter/). Here is an example of the service frontmatter you will find in your `/services` folder. /services/Orders/index.mdx (example) ``` --- # id of your service, used for slugs and references in EventCatalog. id: Orders # Display name of the Service, rendered in EventCatalog name: Orders # Version of the Service version: 0.0.1 # Short summary of your Service summary: | Service that contains order related information # Optional owners, references teams or users owners: - dboyne # Optional messages this service receives and it's version receives: - id: InventoryAdjusted version: 0.0.3 # Optional messages this service sends and it's version sends: - id: AddInventory version: 0.0.3 # Optional flows associated with this service flows: - id: OrderProcessing version: 1.0.0 # Optional details about the programming language and url for the code repository: language: JavaScript url: https://github.com/event-catalog/pretend-shipping-service # Optional badges, rendered to UI by EventCatalog badges: - content: New service backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) # Or the name of the broker (e.g Kafka, EventBridge, etc) icon: BoltIcon --- ## Overview This orders service gives API consumers the ability to produce orders in the systems. Events are raised from this system for downstream consumption. ``` ## Required fields[​](#required-fields "Direct link to Required fields") ### `id`[​](#id "Direct link to id") * Type: `string` Unqiue id of the service. EventCatalog uses this for references and slugs. Example ``` --- id: Orders --- ``` ### `name`[​](#name "Direct link to name") * Type: `string` Name of the service this is used to display the name on the UI. Example ``` --- name: My orders service --- ``` ### `version`[​](#version "Direct link to version") * Type: `string` Version of the service. Example ``` --- version: 0.0.1 --- ``` ## Optional fields[​](#optional-fields "Direct link to Optional fields") ### `summary`[​](#summary "Direct link to summary") Short summary of your service, shown on service summary pages. Example ``` --- summary: | service that contains everything about orders --- ``` ### `owners`[​](#owners "Direct link to owners") An array of user ids that own the service. Example ``` --- owners: - dboyne - mSmith --- ``` ### `sends`[​](#sends "Direct link to sends") An array of messages (ids) the service sends. These can be commands, queries or events ids. Example ``` --- sends: - OrderFulfilled - OrderComplete --- ``` ### `receives`[​](#receives "Direct link to receives") An array of messages (ids) the service receives. These can be commands, queries or events ids. Example ``` --- receives: - OrderPlaced - OrderAdjusted --- ``` ### `writesTo`[​](#writesTo "Direct link to writesTo") **Added in** `eventcatalog@2.59.0` An array of [data stores](/docs/development/guides/data/introduction.md) ids that the service writes to. Example ``` --- writesTo: - id: OrdersDatabase # The version of the data store you want to add (optional, if not provided latest will be used) version: 0.0.1 --- ``` ### `readsFrom`[​](#readsFrom "Direct link to readsFrom") **Added in** `eventcatalog@2.59.0` An array of [data stores](/docs/development/guides/data/introduction.md) ids that the service reads from. Example ``` --- readsFrom: - id: OrdersDatabase # The version of the data store you want to add (optional, if not provided latest will be used) version: 0.0.1 --- ``` ### `entities`[​](#entities "Direct link to entities") **Added in** `eventcatalog@2.36.0` An array of [entities](/docs/development/guides/domains/entities/introduction.md) ids that belong to the this service. Which entities belong to this service. Example ``` --- entities: - id: Order - id: OrderItem # Optional version of the entity, latest version is used if not provided version: 0.0.1 --- ``` ### `flows`[​](#flows "Direct link to flows") An array of [flows](/docs/development/guides/flows/introduction.md) ids that are associated with this service. Example ``` --- flows: - id: OrderProcessing - id: PaymentFlow # Optional version of the flow, latest version is used if not provided version: 1.0.0 --- ``` ### `badges`[​](#badges "Direct link to badges") An array of badges that get rendered on the page. Example ``` --- badges: - content: My badge backgroundColor: blue textColor: blue # Optional icon to display (from https://heroicons.com/) icon: BoltIcon --- ``` ### `specifications`[​](#specifications "Direct link to specifications") **Added in** `eventcatalog@2.39.1` You can assign one or more specifications to a service. The visualiser shows spec type badges (OpenAPI, AsyncAPI, GraphQL) on the service node when specifications are defined, making it easy to see which specs a service exposes at a glance. Example ``` --- specifications: - type: asyncapi path: order-service-asyncapi.yaml name: AsyncAPI Specification - type: openapi path: openapi.yml name: OpenAPI Specification - type: graphql path: graphql.yml name: GraphQL Specification --- ``` | Property | Type | Required | Description | | -------- | -------- | -------- | ----------------------------------------------------------------------------------------------------------------------- | | `type` | `string` | Yes | The type of specification, currently only `asyncapi`, `openapi` and `graphql` are supported. *GraphQL added in v2.58.0* | | `path` | `string` | Yes | The path to the specification file | | `name` | `string` | No | Optional friendly name of the specification, rendered in the UI | **Older versions of EventCatalog (< 2.39.0)** If you are using an older version of EventCatalog you will need to use the following syntax. Example ``` --- specifications: asyncapiPath: order-service-asyncapi.yaml openapiPath: openapi.yml --- ``` ### `visualiser`[​](#visualiser "Direct link to visualiser") **Added in** `eventcatalog@2.39.2` Turn off the visualiser for this resource. This means the resource will not be included in the visualiser or the navigation bar for the visualiser. **Default: `true`** Example ```` --- visualiser: false --- ### `editUrl` \{#editUrl} Override the default edit url for the page. This is used to navigate the user to the edit page for the page (e.g GitHub, GitLab url). ```mdx title="Example" --- editUrl: https://github.com/event-catalog/eventcatalog/edit/main/services/Orders/index.mdx --- ```` ### `detailsPanel`[​](#detailsPanel "Direct link to detailsPanel") **Added in** `eventcatalog@2.53.0` Override the default details panel for the page. You can use this show/hide areas of the details panel. ![Details panel](/assets/images/domain-details-panel-71f92ae7e5cc2ed29bb9254c2bd3dcb4.png) Example ``` --- detailsPanel: domains: visible: false messages: visible: false versions: visible: false specifications: visible: false --- ``` Options: | Property | Type | Required | Description | | ---------------- | -------- | -------- | ------------------------------------------------------------------------------------------------ | | `domains` | `object` | No | An object with a `visible` property to show/hide the domains section | | `messages` | `object` | No | An object with a `visible` property to show/hide the messages section (sends and receives) | | `versions` | `object` | No | An object with a `visible` property to show/hide the versions section | | `specifications` | `object` | No | An object with a `visible` property to show/hide the specifications section | | `entities` | `object` | No | An object with a `visible` property to show/hide the entities section | | `repository` | `object` | No | An object with a `visible` property to show/hide the repository section (e.g GitHub, GitLab url) | | `owners` | `object` | No | An object with a `visible` property to show/hide the owners section | | `changelog` | `object` | No | An object with a `visible` property to show/hide the changelog button | ### `attachments`[​](#attachments "Direct link to attachments") **Added in** `eventcatalog@2.57.2` An array of attachments for this resource type. Example ``` --- attachments: - url: https://example.com/adr/001 title: ADR-001 - Use Kafka for asynchronous messaging description: Learn more about why we chose Kafka for asynchronous messaging in this architecture decision record. type: 'architecture-decisions' icon: FileTextIcon - https://example.com/adr/002 --- ``` Options: The attachments can be a url (string) or an object with additional properties. Object properties: | Property | Type | Required | Description | | ------------- | -------- | -------- | ---------------------------------------------------------------------------------------------------- | | `url` | `string` | Yes | The url of the attachment | | `title` | `string` | optional | The title of the attachment | | `description` | `string` | optional | The description of the attachment | | `type` | `string` | optional | The type of the attachment, this will be used to group attachments together in the UI | | `icon` | `string` | optional | The icon of the attachment, you can pick from the [lucide icons](https://lucide.dev/icons/) library. | --- ## [📄️ Introduction](/docs/plugins/apicurio/intro.md) [Getting started with Apicurio Registry plugin](/docs/plugins/apicurio/intro.md) --- ## [📄️ Using AI with EventCatalog](/docs/development/ask-your-architecture/intro.md) [Architecture documentation for humans and AI](/docs/development/ask-your-architecture/intro.md) --- ## [📄️ Introduction](/docs/plugins/asyncapi/intro.md) [Getting started with AsyncAPI plugin](/docs/plugins/asyncapi/intro.md) --- ## [📄️ Introduction](/docs/plugins/aws-glue-registry/intro.md) [Getting started with AWS Glue Schema Registry plugin](/docs/plugins/aws-glue-registry/intro.md) --- ## [📄️ Introduction](/docs/plugins/azure-schema-registry/intro.md) [Getting started with Azure Schema Registry plugin](/docs/plugins/azure-schema-registry/intro.md) --- ## [📄️ Introduction](/docs/plugins/backstage/intro.md) [Getting started with Backstage plugin](/docs/plugins/backstage/intro.md) --- ## [📄️ Introduction](/docs/development/bring-your-own-documentation/introduction.md) [Bring your own documentation to EventCatalog](/docs/development/bring-your-own-documentation/introduction.md) --- ## [📄️ Getting Involved](/docs/miro/getting-involved.md) [How to contribute to the EventCatalog Miro App](/docs/miro/getting-involved.md) --- ## [📄️ Understanding diagrams](/docs/development/guides/diagrams/introduction.md) [Bring your own diagrams to EventCatalog - version them, compare them, and assign them to any resource](/docs/development/guides/diagrams/introduction.md) --- ## [📄️ Diagram Nodes](/docs/studio/diagrams/using-nodes.md) [Understanding how to use nodes in EventCatalog Studio](/docs/studio/diagrams/using-nodes.md) --- ## [📄️ Self-host](/docs/studio/enterprise/self-host.md) [Understand the CLI of EventCatalog](/docs/studio/enterprise/self-host.md) --- ## [📄️ Welcome to EventCatalog Studio](/docs/studio/welcome.md) [Understand the CLI of EventCatalog](/docs/studio/welcome.md) --- ## [📄️ Overview](/docs/miro/overview.md) [Bring your EventCatalog architecture into Miro for collaborative visual design](/docs/miro/overview.md) --- ## [📄️ Adding resources to the board](/docs/miro/adding-resources.md) [Drag and drop services, events, commands, and more onto your Miro board](/docs/miro/adding-resources.md) --- ## [📄️ AsyncAPI](/docs/miro/asyncapi.md) [Import your AsyncAPI specifications into Miro via EventCatalog](/docs/miro/asyncapi.md) --- ## [📄️ Managing your organization](/docs/studio/organization-teams/inviting-users.md) [Understand the CLI of EventCatalog](/docs/studio/organization-teams/inviting-users.md) --- ## [📄️ Roadmap](/docs/studio/project/roadmap.md) [Understand the CLI of EventCatalog](/docs/studio/project/roadmap.md) --- ## [📄️ From Miro to EventCatalog](/docs/miro/using-ai.md) [Use AI to turn your Miro board designs into EventCatalog documentation automatically](/docs/miro/using-ai.md) --- ## [📄️ What are changelogs?](/docs/development/guides/changelogs/introduction.md) [What are changelogs](/docs/development/guides/changelogs/introduction.md) --- ## [📄️ What are channels?](/docs/development/guides/channels/introduction.md) [What are channels? Why are they useful for event-driven architectures?](/docs/development/guides/channels/introduction.md) --- ## [📄️ Owners](/docs/development/guides/channels/ownership-and-components/owners.md) [Adding owners to channels with EventCatalog.](/docs/development/guides/channels/ownership-and-components/owners.md) --- ## [📄️ Versioning](/docs/development/guides/channels/versioning-and-lifecycle/versioning.md) [Learn how to version channels](/docs/development/guides/channels/versioning-and-lifecycle/versioning.md) --- ## [📄️ Versioning](/docs/development/guides/channels/versioning-and-lifecycle/versioning.md) [Learn how to version channels](/docs/development/guides/channels/versioning-and-lifecycle/versioning.md) --- # EventCatalog CLI The EventCatalog CLI allows you to interact with your EventCatalog directly from the command line. Execute any SDK function without writing code. ## Installation[​](#installation "Direct link to Installation") You can run the CLI directly using `npx` without installing: ``` npx @eventcatalog/cli [args...] ``` Or install globally: ``` npm install -g @eventcatalog/cli ``` Then use the `eventcatalog` command: ``` eventcatalog [args...] ``` ## Basic Usage[​](#basic-usage "Direct link to Basic Usage") ### Specifying the catalog directory[​](#specifying-the-catalog-directory "Direct link to Specifying the catalog directory") By default, the CLI uses the current directory. Use `--dir` to specify a different path: ``` npx @eventcatalog/cli --dir /path/to/catalog getEvents ``` ### Listing available functions[​](#listing-available-functions "Direct link to Listing available functions") ``` npx @eventcatalog/cli list ``` ### Getting help[​](#getting-help "Direct link to Getting help") ``` npx @eventcatalog/cli --help ``` ## Output Format[​](#output-format "Direct link to Output Format") All commands output JSON, making it easy to pipe to other tools like `jq`: ``` # Get all events and extract IDs npx @eventcatalog/cli getEvents | jq '.[].id' # Count total events npx @eventcatalog/cli getEvents | jq 'length' # Filter events by version npx @eventcatalog/cli getEvents | jq '.[] | select(.version == "1.0.0")' ``` ## Argument Types[​](#argument-types "Direct link to Argument Types") Arguments are automatically parsed: | Type | Format | Example | | ----------- | -------------------- | ----------------------------------- | | String | Plain text or quoted | `"OrderCreated"` | | Number | Numeric value | `42` or `3.14` | | Boolean | `true` or `false` | `true` | | JSON Object | `'{...}'` | `'{"id":"test","version":"1.0.0"}'` | | JSON Array | `'[...]'` | `'["item1","item2"]'` | ## Quick Examples[​](#quick-examples "Direct link to Quick Examples") ### Read operations[​](#read-operations "Direct link to Read operations") ``` # Get a specific event npx @eventcatalog/cli getEvent "OrderCreated" # Get all services (latest versions only) npx @eventcatalog/cli getServices '{"latestOnly":true}' # Check if a version exists npx @eventcatalog/cli eventHasVersion "OrderCreated" "1.0.0" ``` ### Write operations[​](#write-operations "Direct link to Write operations") ``` # Create a new event npx @eventcatalog/cli writeEvent '{"id":"OrderCreated","name":"Order Created","version":"1.0.0","markdown":"# Order Created Event"}' # Add a service to a domain npx @eventcatalog/cli addServiceToDomain "Orders" '{"id":"OrderService","version":"1.0.0"}' ``` ### Delete operations[​](#delete-operations "Direct link to Delete operations") ``` # Remove an event by ID npx @eventcatalog/cli rmEventById "OrderCreated" # Remove a specific version npx @eventcatalog/cli rmEventById "OrderCreated" "1.0.0" ``` ### Version operations[​](#version-operations "Direct link to Version operations") ``` # Version an event (move current to versioned directory) npx @eventcatalog/cli versionEvent "OrderCreated" ``` --- # Channels CLI Commands Manage channels in your EventCatalog from the command line. ## getChannel[​](#getchannel "Direct link to getChannel") Returns a channel from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------------------- | | id | string | Yes | The ID of the channel to retrieve | | version | string | No | Specific version to retrieve | **Examples:** ``` # Get the latest channel npx @eventcatalog/cli getChannel "orders.events" # Get a specific version npx @eventcatalog/cli getChannel "orders.events" "1.0.0" ``` *** ## getChannels[​](#getchannels "Direct link to getChannels") Returns all channels from EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------- | | options | json | No | Options: {latestOnly?} | **Examples:** ``` # Get all channels npx @eventcatalog/cli getChannels ``` *** ## writeChannel[​](#writechannel "Direct link to writeChannel") Writes a channel to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | --------------------------------------------------- | | channel | json | Yes | Channel object with id, name, version, and markdown | | options | json | No | Options: {path?, override?} | *** ## rmChannel[​](#rmchannel "Direct link to rmChannel") Removes a channel by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------- | | path | string | Yes | Path to the channel | **Examples:** ``` # Remove a channel npx @eventcatalog/cli rmChannel "/orders.events" ``` *** ## rmChannelById[​](#rmchannelbyid "Direct link to rmChannelById") Removes a channel by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------------------- | | id | string | Yes | The ID of the channel to remove | | version | string | No | Specific version to remove | **Examples:** ``` # Remove a channel npx @eventcatalog/cli rmChannelById "orders.events" ``` *** ## versionChannel[​](#versionchannel "Direct link to versionChannel") Moves the current channel to a versioned directory **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the channel to version | **Examples:** ``` # Version a channel npx @eventcatalog/cli versionChannel "orders.events" ``` *** ## addEventToChannel[​](#addeventtochannel "Direct link to addEventToChannel") Adds an event to a channel **Arguments:** | Name | Type | Required | Description | | --------- | ------ | -------- | ------------------------------------------- | | channelId | string | Yes | The ID of the channel | | event | json | Yes | Event reference: {id, version, parameters?} | *** ## addCommandToChannel[​](#addcommandtochannel "Direct link to addCommandToChannel") Adds a command to a channel **Arguments:** | Name | Type | Required | Description | | --------- | ------ | -------- | --------------------------------------------- | | channelId | string | Yes | The ID of the channel | | command | json | Yes | Command reference: {id, version, parameters?} | *** ## addQueryToChannel[​](#addquerytochannel "Direct link to addQueryToChannel") Adds a query to a channel **Arguments:** | Name | Type | Required | Description | | --------- | ------ | -------- | ------------------------------------------- | | channelId | string | Yes | The ID of the channel | | query | json | Yes | Query reference: {id, version, parameters?} | *** ## channelHasVersion[​](#channelhasversion "Direct link to channelHasVersion") Checks if a specific version of a channel exists **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------- | | id | string | Yes | The ID of the channel | | version | string | Yes | Version to check | **Examples:** ``` # Check if version exists npx @eventcatalog/cli channelHasVersion "orders.events" "1.0.0" ``` *** --- # Commands CLI Commands Manage commands in your EventCatalog from the command line. ## getCommand[​](#getcommand "Direct link to getCommand") Returns a command from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ---------------------------------------------- | | id | string | Yes | The ID of the command to retrieve | | version | string | No | Specific version to retrieve (supports semver) | **Examples:** ``` # Get the latest command npx @eventcatalog/cli getCommand "CreateOrder" # Get a specific version npx @eventcatalog/cli getCommand "CreateOrder" "1.0.0" ``` *** ## getCommands[​](#getcommands "Direct link to getCommands") Returns all commands from EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ------------------------------------- | | options | json | No | Options: {latestOnly?, attachSchema?} | **Examples:** ``` # Get all commands npx @eventcatalog/cli getCommands ``` *** ## writeCommand[​](#writecommand "Direct link to writeCommand") Writes a command to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------------------------------------- | | command | json | Yes | Command object with id, name, version, and markdown | | options | json | No | Options: {path?, override?, versionExistingContent?} | *** ## writeCommandToService[​](#writecommandtoservice "Direct link to writeCommandToService") Writes a command to a specific service **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ------------------------------------ | | command | json | Yes | Command object | | service | json | Yes | Service reference: {id, version?} | | options | json | No | Options: {path?, format?, override?} | *** ## rmCommand[​](#rmcommand "Direct link to rmCommand") Removes a command by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------- | | path | string | Yes | Path to the command | **Examples:** ``` # Remove a command npx @eventcatalog/cli rmCommand "/CreateOrder" ``` *** ## rmCommandById[​](#rmcommandbyid "Direct link to rmCommandById") Removes a command by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------------------- | | id | string | Yes | The ID of the command to remove | | version | string | No | Specific version to remove | **Examples:** ``` # Remove a command npx @eventcatalog/cli rmCommandById "CreateOrder" ``` *** ## versionCommand[​](#versioncommand "Direct link to versionCommand") Moves the current command to a versioned directory **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the command to version | **Examples:** ``` # Version a command npx @eventcatalog/cli versionCommand "CreateOrder" ``` *** ## addFileToCommand[​](#addfiletocommand "Direct link to addFileToCommand") Adds a file to a command **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the command | | file | json | Yes | File object: {content, fileName} | | version | string | No | Specific version | *** ## addSchemaToCommand[​](#addschematocommand "Direct link to addSchemaToCommand") Adds a schema to a command **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------------------- | | id | string | Yes | The ID of the command | | schema | json | Yes | Schema object: {schema, fileName} | | version | string | No | Specific version | *** ## commandHasVersion[​](#commandhasversion "Direct link to commandHasVersion") Checks if a specific version of a command exists **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------- | | id | string | Yes | The ID of the command | | version | string | Yes | Version to check | **Examples:** ``` # Check if version exists npx @eventcatalog/cli commandHasVersion "CreateOrder" "1.0.0" ``` *** --- # Custom Docs CLI Commands Manage custom docs in your EventCatalog from the command line. ## getCustomDoc[​](#getcustomdoc "Direct link to getCustomDoc") Returns a custom doc from EventCatalog by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ---------------------- | | path | string | Yes | Path to the custom doc | **Examples:** ``` # Get a custom doc npx @eventcatalog/cli getCustomDoc "/getting-started" ``` *** ## getCustomDocs[​](#getcustomdocs "Direct link to getCustomDocs") Returns all custom docs from EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------- | | options | json | No | Options: {path?} | **Examples:** ``` # Get all custom docs npx @eventcatalog/cli getCustomDocs ``` *** ## writeCustomDoc[​](#writecustomdoc "Direct link to writeCustomDoc") Writes a custom doc to EventCatalog **Arguments:** | Name | Type | Required | Description | | --------- | ---- | -------- | ---------------------------------------------- | | customDoc | json | Yes | Custom doc object with id, title, and markdown | | options | json | No | Options: {path?, override?} | *** ## rmCustomDoc[​](#rmcustomdoc "Direct link to rmCustomDoc") Removes a custom doc by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | -------------------------------- | | path | string | Yes | Path to the custom doc to remove | **Examples:** ``` # Remove a custom doc npx @eventcatalog/cli rmCustomDoc "/getting-started" ``` *** --- # Data Products CLI Commands Manage data products in your EventCatalog from the command line. ## getDataProduct[​](#getdataproduct "Direct link to getDataProduct") Returns a data product from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------------- | | id | string | Yes | The ID of the data product to retrieve | | version | string | No | Specific version to retrieve | **Examples:** ``` # Get the latest data product npx @eventcatalog/cli getDataProduct "customer-360" # Get a specific version npx @eventcatalog/cli getDataProduct "customer-360" "1.0.0" ``` *** ## getDataProducts[​](#getdataproducts "Direct link to getDataProducts") Returns all data products from EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------- | | options | json | No | Options: {latestOnly?} | **Examples:** ``` # Get all data products npx @eventcatalog/cli getDataProducts ``` *** ## writeDataProduct[​](#writedataproduct "Direct link to writeDataProduct") Writes a data product to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------------------------------------- | | options | json | No | Options: {path?, override?, versionExistingContent?} | *** ## writeDataProductToDomain[​](#writedataproducttodomain "Direct link to writeDataProductToDomain") Writes a data product to a specific domain **Arguments:** | Name | Type | Required | Description | | ----------- | ---- | -------- | -------------------------------- | | dataProduct | json | Yes | Data product object | | domain | json | Yes | Domain reference: {id, version?} | | options | json | No | Options | *** ## rmDataProduct[​](#rmdataproduct "Direct link to rmDataProduct") Removes a data product by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------------ | | path | string | Yes | Path to the data product | **Examples:** ``` # Remove a data product npx @eventcatalog/cli rmDataProduct "/customer-360" ``` *** ## rmDataProductById[​](#rmdataproductbyid "Direct link to rmDataProductById") Removes a data product by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------------------------ | | id | string | Yes | The ID of the data product to remove | | version | string | No | Specific version to remove | **Examples:** ``` # Remove a data product npx @eventcatalog/cli rmDataProductById "customer-360" ``` *** ## versionDataProduct[​](#versiondataproduct "Direct link to versionDataProduct") Moves the current data product to a versioned directory **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------------------------- | | id | string | Yes | The ID of the data product to version | **Examples:** ``` # Version a data product npx @eventcatalog/cli versionDataProduct "customer-360" ``` *** ## addFileToDataProduct[​](#addfiletodataproduct "Direct link to addFileToDataProduct") Adds a file to a data product **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the data product | | file | json | Yes | File object: {content, fileName} | | version | string | No | Specific version | *** ## addDataProductToDomain[​](#adddataproducttodomain "Direct link to addDataProductToDomain") Adds a data product reference to a domain **Arguments:** | Name | Type | Required | Description | | ------------- | ------ | -------- | ------------------------------------- | | domainId | string | Yes | The ID of the domain | | dataProduct | json | Yes | Data product reference: {id, version} | | domainVersion | string | No | Specific domain version | *** ## dataProductHasVersion[​](#dataproducthasversion "Direct link to dataProductHasVersion") Checks if a specific version of a data product exists **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------- | | id | string | Yes | The ID of the data product | | version | string | Yes | Version to check | *** --- # Data Stores CLI Commands Manage data stores in your EventCatalog from the command line. ## getDataStore[​](#getdatastore "Direct link to getDataStore") Returns a data store from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------------------------ | | id | string | Yes | The ID of the data store to retrieve | | version | string | No | Specific version to retrieve | **Examples:** ``` # Get the latest data store npx @eventcatalog/cli getDataStore "orders-db" # Get a specific version npx @eventcatalog/cli getDataStore "orders-db" "1.0.0" ``` *** ## getDataStores[​](#getdatastores "Direct link to getDataStores") Returns all data stores from EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------- | | options | json | No | Options: {latestOnly?} | **Examples:** ``` # Get all data stores npx @eventcatalog/cli getDataStores ``` *** ## writeDataStore[​](#writedatastore "Direct link to writeDataStore") Writes a data store to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------------------------------------- | | options | json | No | Options: {path?, override?, versionExistingContent?} | *** ## writeDataStoreToService[​](#writedatastoretoservice "Direct link to writeDataStoreToService") Writes a data store to a specific service **Arguments:** | Name | Type | Required | Description | | --------- | ---- | -------- | --------------------------------- | | dataStore | json | Yes | Data store object | | service | json | Yes | Service reference: {id, version?} | *** ## rmDataStore[​](#rmdatastore "Direct link to rmDataStore") Removes a data store by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ---------------------- | | path | string | Yes | Path to the data store | **Examples:** ``` # Remove a data store npx @eventcatalog/cli rmDataStore "/orders-db" ``` *** ## rmDataStoreById[​](#rmdatastorebyid "Direct link to rmDataStoreById") Removes a data store by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ---------------------------------- | | id | string | Yes | The ID of the data store to remove | | version | string | No | Specific version to remove | **Examples:** ``` # Remove a data store npx @eventcatalog/cli rmDataStoreById "orders-db" ``` *** ## versionDataStore[​](#versiondatastore "Direct link to versionDataStore") Moves the current data store to a versioned directory **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ----------------------------------- | | id | string | Yes | The ID of the data store to version | **Examples:** ``` # Version a data store npx @eventcatalog/cli versionDataStore "orders-db" ``` *** ## addFileToDataStore[​](#addfiletodatastore "Direct link to addFileToDataStore") Adds a file to a data store **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the data store | | file | json | Yes | File object: {content, fileName} | | version | string | No | Specific version | *** ## dataStoreHasVersion[​](#datastorehasversion "Direct link to dataStoreHasVersion") Checks if a specific version of a data store exists **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------------ | | id | string | Yes | The ID of the data store | | version | string | Yes | Version to check | **Examples:** ``` # Check if version exists npx @eventcatalog/cli dataStoreHasVersion "orders-db" "1.0.0" ``` *** --- # Diagrams CLI Commands Manage diagrams in your EventCatalog from the command line. ## getDiagram[​](#getdiagram "Direct link to getDiagram") Returns a diagram from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------------------- | | id | string | Yes | The ID of the diagram to retrieve | | version | string | No | Specific version to retrieve | **Examples:** ``` # Get the latest diagram npx @eventcatalog/cli getDiagram "ArchitectureDiagram" # Get a specific version npx @eventcatalog/cli getDiagram "ArchitectureDiagram" "1.0.0" ``` *** ## getDiagrams[​](#getdiagrams "Direct link to getDiagrams") Returns all diagrams from EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------- | | options | json | No | Options: {latestOnly?} | **Examples:** ``` # Get all diagrams npx @eventcatalog/cli getDiagrams ``` *** ## writeDiagram[​](#writediagram "Direct link to writeDiagram") Writes a diagram to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------------------------------------- | | options | json | No | Options: {path?, override?, versionExistingContent?} | *** ## rmDiagram[​](#rmdiagram "Direct link to rmDiagram") Removes a diagram by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------- | | path | string | Yes | Path to the diagram | **Examples:** ``` # Remove a diagram npx @eventcatalog/cli rmDiagram "/ArchitectureDiagram" ``` *** ## rmDiagramById[​](#rmdiagrambyid "Direct link to rmDiagramById") Removes a diagram by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------------------- | | id | string | Yes | The ID of the diagram to remove | | version | string | No | Specific version to remove | **Examples:** ``` # Remove a diagram npx @eventcatalog/cli rmDiagramById "ArchitectureDiagram" ``` *** ## versionDiagram[​](#versiondiagram "Direct link to versionDiagram") Moves the current diagram to a versioned directory **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the diagram to version | **Examples:** ``` # Version a diagram npx @eventcatalog/cli versionDiagram "ArchitectureDiagram" ``` *** ## addFileToDiagram[​](#addfiletodiagram "Direct link to addFileToDiagram") Adds a file to a diagram **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the diagram | | file | json | Yes | File object: {content, fileName} | | version | string | No | Specific version | *** ## diagramHasVersion[​](#diagramhasversion "Direct link to diagramHasVersion") Checks if a specific version of a diagram exists **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------- | | id | string | Yes | The ID of the diagram | | version | string | Yes | Version to check | *** --- # Domains CLI Commands Manage domains in your EventCatalog from the command line. ## getDomain[​](#getdomain "Direct link to getDomain") Returns a domain from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the domain to retrieve | | version | string | No | Specific version to retrieve | **Examples:** ``` # Get the latest domain npx @eventcatalog/cli getDomain "Orders" # Get a specific version npx @eventcatalog/cli getDomain "Orders" "1.0.0" ``` *** ## getDomains[​](#getdomains "Direct link to getDomains") Returns all domains from EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------- | | options | json | No | Options: {latestOnly?} | **Examples:** ``` # Get all domains npx @eventcatalog/cli getDomains ``` *** ## writeDomain[​](#writedomain "Direct link to writeDomain") Writes a domain to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------------------------------------- | | domain | json | Yes | Domain object with id, name, version, and markdown | | options | json | No | Options: {path?, override?, versionExistingContent?} | *** ## rmDomain[​](#rmdomain "Direct link to rmDomain") Removes a domain by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------ | | path | string | Yes | Path to the domain | **Examples:** ``` # Remove a domain npx @eventcatalog/cli rmDomain "/Orders" ``` *** ## rmDomainById[​](#rmdomainbyid "Direct link to rmDomainById") Removes a domain by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------------------ | | id | string | Yes | The ID of the domain to remove | | version | string | No | Specific version to remove | **Examples:** ``` # Remove a domain npx @eventcatalog/cli rmDomainById "Orders" ``` *** ## versionDomain[​](#versiondomain "Direct link to versionDomain") Moves the current domain to a versioned directory **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------------------- | | id | string | Yes | The ID of the domain to version | **Examples:** ``` # Version a domain npx @eventcatalog/cli versionDomain "Orders" ``` *** ## addFileToDomain[​](#addfiletodomain "Direct link to addFileToDomain") Adds a file to a domain **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the domain | | file | json | Yes | File object: {content, fileName} | | version | string | No | Specific version | *** ## addServiceToDomain[​](#addservicetodomain "Direct link to addServiceToDomain") Adds a service to a domain **Arguments:** | Name | Type | Required | Description | | ------------- | ------ | -------- | -------------------------------- | | domainId | string | Yes | The ID of the domain | | service | json | Yes | Service reference: {id, version} | | domainVersion | string | No | Specific domain version | *** ## addSubDomainToDomain[​](#addsubdomaintodomain "Direct link to addSubDomainToDomain") Adds a subdomain to a domain **Arguments:** | Name | Type | Required | Description | | ------------- | ------ | -------- | ---------------------------------- | | domainId | string | Yes | The ID of the parent domain | | subDomain | json | Yes | Subdomain reference: {id, version} | | domainVersion | string | No | Specific domain version | *** ## addEntityToDomain[​](#addentitytodomain "Direct link to addEntityToDomain") Adds an entity to a domain **Arguments:** | Name | Type | Required | Description | | ------------- | ------ | -------- | ------------------------------- | | domainId | string | Yes | The ID of the domain | | entity | json | Yes | Entity reference: {id, version} | | domainVersion | string | No | Specific domain version | *** ## addEventToDomain[​](#addeventtodomain "Direct link to addEventToDomain") Adds an event relationship to a domain **Arguments:** | Name | Type | Required | Description | | ------------- | ------ | -------- | -------------------------------- | | domainId | string | Yes | The ID of the domain | | direction | string | Yes | Direction: "sends" or "receives" | | event | json | Yes | Event reference: {id, version} | | domainVersion | string | No | Specific domain version | *** ## addCommandToDomain[​](#addcommandtodomain "Direct link to addCommandToDomain") Adds a command relationship to a domain **Arguments:** | Name | Type | Required | Description | | ------------- | ------ | -------- | -------------------------------- | | domainId | string | Yes | The ID of the domain | | direction | string | Yes | Direction: "sends" or "receives" | | command | json | Yes | Command reference: {id, version} | | domainVersion | string | No | Specific domain version | *** ## addQueryToDomain[​](#addquerytodomain "Direct link to addQueryToDomain") Adds a query relationship to a domain **Arguments:** | Name | Type | Required | Description | | ------------- | ------ | -------- | -------------------------------- | | domainId | string | Yes | The ID of the domain | | direction | string | Yes | Direction: "sends" or "receives" | | query | json | Yes | Query reference: {id, version} | | domainVersion | string | No | Specific domain version | *** ## addUbiquitousLanguageToDomain[​](#addubiquitouslanguagetodomain "Direct link to addUbiquitousLanguageToDomain") Adds ubiquitous language definitions to a domain **Arguments:** | Name | Type | Required | Description | | ------------- | ------ | -------- | ----------------------------------- | | domainId | string | Yes | The ID of the domain | | dictionary | json | Yes | Array of {term, definition} objects | | domainVersion | string | No | Specific domain version | *** ## getUbiquitousLanguageFromDomain[​](#getubiquitouslanguagefromdomain "Direct link to getUbiquitousLanguageFromDomain") Gets ubiquitous language definitions from a domain **Arguments:** | Name | Type | Required | Description | | ------------- | ------ | -------- | ----------------------- | | domainId | string | Yes | The ID of the domain | | domainVersion | string | No | Specific domain version | **Examples:** ``` # Get ubiquitous language npx @eventcatalog/cli getUbiquitousLanguageFromDomain "Orders" ``` *** ## domainHasVersion[​](#domainhasversion "Direct link to domainHasVersion") Checks if a specific version of a domain exists **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------- | | id | string | Yes | The ID of the domain | | version | string | Yes | Version to check | **Examples:** ``` # Check if version exists npx @eventcatalog/cli domainHasVersion "Orders" "1.0.0" ``` *** --- # Entities CLI Commands Manage entities in your EventCatalog from the command line. ## getEntity[​](#getentity "Direct link to getEntity") Returns an entity from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the entity to retrieve | | version | string | No | Specific version to retrieve | **Examples:** ``` # Get the latest entity npx @eventcatalog/cli getEntity "Order" # Get a specific version npx @eventcatalog/cli getEntity "Order" "1.0.0" ``` *** ## getEntities[​](#getentities "Direct link to getEntities") Returns all entities from EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------- | | options | json | No | Options: {latestOnly?} | **Examples:** ``` # Get all entities npx @eventcatalog/cli getEntities ``` *** ## writeEntity[​](#writeentity "Direct link to writeEntity") Writes an entity to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------------------------------------- | | entity | json | Yes | Entity object with id, name, version, and markdown | | options | json | No | Options: {path?, override?, versionExistingContent?} | *** ## rmEntity[​](#rmentity "Direct link to rmEntity") Removes an entity by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------ | | path | string | Yes | Path to the entity | **Examples:** ``` # Remove an entity npx @eventcatalog/cli rmEntity "/Order" ``` *** ## rmEntityById[​](#rmentitybyid "Direct link to rmEntityById") Removes an entity by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------------------ | | id | string | Yes | The ID of the entity to remove | | version | string | No | Specific version to remove | **Examples:** ``` # Remove an entity npx @eventcatalog/cli rmEntityById "Order" ``` *** ## versionEntity[​](#versionentity "Direct link to versionEntity") Moves the current entity to a versioned directory **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------------------- | | id | string | Yes | The ID of the entity to version | **Examples:** ``` # Version an entity npx @eventcatalog/cli versionEntity "Order" ``` *** ## entityHasVersion[​](#entityhasversion "Direct link to entityHasVersion") Checks if a specific version of an entity exists **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------- | | id | string | Yes | The ID of the entity | | version | string | Yes | Version to check | **Examples:** ``` # Check if version exists npx @eventcatalog/cli entityHasVersion "Order" "1.0.0" ``` *** --- # Events CLI Commands Manage events in your EventCatalog from the command line. ## getEvent[​](#getevent "Direct link to getEvent") Returns an event from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ---------------------------------------------- | | id | string | Yes | The ID of the event to retrieve | | version | string | No | Specific version to retrieve (supports semver) | | options | json | No | Options object, e.g. {"attachSchema": true} | **Examples:** ``` # Get the latest version of an event npx @eventcatalog/cli getEvent "OrderCreated" # Get a specific version npx @eventcatalog/cli getEvent "OrderCreated" "1.0.0" ``` *** ## getEvents[​](#getevents "Direct link to getEvents") Returns all events from EventCatalog **Arguments:** None **Examples:** ``` # Get all events npx @eventcatalog/cli getEvents ``` *** ## writeEvent[​](#writeevent "Direct link to writeEvent") Writes an event to EventCatalog **Arguments:** | Name | Type | Required | Description | | ----- | ---- | -------- | ------------------------------------------------- | | event | json | Yes | Event object with id, name, version, and markdown | *** ## writeEventToService[​](#writeeventtoservice "Direct link to writeEventToService") Writes an event to a specific service in EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ------------------------------------------------- | | event | json | Yes | Event object with id, name, version, and markdown | | service | json | Yes | Service reference: {id, version?} | | options | json | No | Options: {path?, format?, override?} | *** ## rmEvent[​](#rmevent "Direct link to rmEvent") Removes an event by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------------------------------ | | path | string | Yes | Path to the event, e.g. /InventoryAdjusted | **Examples:** ``` # Remove an event by path npx @eventcatalog/cli rmEvent "/InventoryAdjusted" ``` *** ## rmEventById[​](#rmeventbyid "Direct link to rmEventById") Removes an event by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ----------------------------- | | id | string | Yes | The ID of the event to remove | | version | string | No | Specific version to remove | **Examples:** ``` # Remove latest version npx @eventcatalog/cli rmEventById "OrderCreated" # Remove specific version npx @eventcatalog/cli rmEventById "OrderCreated" "1.0.0" ``` *** ## versionEvent[​](#versionevent "Direct link to versionEvent") Moves the current event to a versioned directory **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------------------ | | id | string | Yes | The ID of the event to version | **Examples:** ``` # Version an event npx @eventcatalog/cli versionEvent "OrderCreated" ``` *** ## addFileToEvent[​](#addfiletoevent "Direct link to addFileToEvent") Adds a file to an event **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the event | | file | json | Yes | File object: {content, fileName} | | version | string | No | Specific version to add file to | *** ## addSchemaToEvent[​](#addschematoevent "Direct link to addSchemaToEvent") Adds a schema file to an event **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------------------- | | id | string | Yes | The ID of the event | | schema | json | Yes | Schema object: {schema, fileName} | | version | string | No | Specific version to add schema to | *** ## eventHasVersion[​](#eventhasversion "Direct link to eventHasVersion") Checks if a specific version of an event exists **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ---------------------------------- | | id | string | Yes | The ID of the event | | version | string | Yes | Version to check (supports semver) | **Examples:** ``` # Check if version exists npx @eventcatalog/cli eventHasVersion "OrderCreated" "1.0.0" # Check with semver range npx @eventcatalog/cli eventHasVersion "OrderCreated" "1.0.x" ``` *** --- # Export CLI Commands Manage export in your EventCatalog from the command line. ## export[​](#export "Direct link to export") Export catalog resources to EventCatalog DSL (.ec) format **Arguments:** | Name | Type | Required | Description | | ------- | ------- | -------- | ----------------------------------------------------- | | all | boolean | No | Export the entire catalog (all resource types) | | id | string | No | Resource ID (omit to export all of the given type) | | version | string | No | Resource version (defaults to latest) | | stdout | boolean | No | Print to stdout instead of writing a file | | output | string | No | Output file path (defaults to \.ec or catalog.ec) | *** --- # Governance CLI Commands Manage governance in your EventCatalog from the command line. ## governanceCheck[​](#governancecheck "Direct link to governanceCheck") Compare the current catalog (or a target branch) against a base branch and evaluate governance rules defined in governance.yaml (or governance.yml) **Arguments:** | Name | Type | Required | Description | | -------- | ------ | -------- | ---------------------------------------------- | | --base | string | No | Base branch to compare against (default: main) | | --format | string | No | Output format: text or json (default: text) | *** --- # Import CLI Commands Manage import in your EventCatalog from the command line. ## import[​](#import "Direct link to import") Import EventCatalog DSL (.ec) files into catalog markdown files. Existing resources with the same version are overridden. Importing a newer version automatically moves the old version into the versioned/ folder. **Arguments:** | Name | Type | Required | Description | | ------- | ------- | -------- | ------------------------------------ | | files | string | No | One or more .ec file paths to import | | stdin | boolean | No | Read DSL from stdin | | dry-run | boolean | No | Preview resources without writing | | no-init | boolean | No | Skip catalog initialization prompt | *** --- # Messages CLI Commands Manage messages in your EventCatalog from the command line. ## getProducersAndConsumersForMessage[​](#getproducersandconsumersformessage "Direct link to getProducersAndConsumersForMessage") Returns the producers and consumers (services) for a given message **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------- | | id | string | Yes | The ID of the message | | version | string | No | Specific version | *** ## getConsumersOfSchema[​](#getconsumersofschema "Direct link to getConsumersOfSchema") Returns services that consume a given schema **Arguments:** | Name | Type | Required | Description | | ---------- | ------ | -------- | ----------------------- | | schemaPath | string | Yes | Path to the schema file | *** ## getProducersOfSchema[​](#getproducersofschema "Direct link to getProducersOfSchema") Returns services that produce a given schema **Arguments:** | Name | Type | Required | Description | | ---------- | ------ | -------- | ----------------------- | | schemaPath | string | Yes | Path to the schema file | *** ## getOwnersForResource[​](#getownersforresource "Direct link to getOwnersForResource") Returns the owners (users/teams) for a given resource **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ---------------------- | | id | string | Yes | The ID of the resource | | version | string | No | Specific version | **Examples:** ``` # Get owners for a resource npx @eventcatalog/cli getOwnersForResource "OrderService" ``` *** --- # Queries CLI Commands Manage queries in your EventCatalog from the command line. ## getQuery[​](#getquery "Direct link to getQuery") Returns a query from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------------------- | | id | string | Yes | The ID of the query to retrieve | | version | string | No | Specific version to retrieve | **Examples:** ``` # Get the latest query npx @eventcatalog/cli getQuery "GetOrder" # Get a specific version npx @eventcatalog/cli getQuery "GetOrder" "1.0.0" ``` *** ## getQueries[​](#getqueries "Direct link to getQueries") Returns all queries from EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ------------------------------------- | | options | json | No | Options: {latestOnly?, attachSchema?} | **Examples:** ``` # Get all queries npx @eventcatalog/cli getQueries ``` *** ## writeQuery[​](#writequery "Direct link to writeQuery") Writes a query to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------------------------------------- | | query | json | Yes | Query object with id, name, version, and markdown | | options | json | No | Options: {path?, override?, versionExistingContent?} | *** ## writeQueryToService[​](#writequerytoservice "Direct link to writeQueryToService") Writes a query to a specific service **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ------------------------------------ | | query | json | Yes | Query object | | service | json | Yes | Service reference: {id, version?} | | options | json | No | Options: {path?, format?, override?} | *** ## rmQuery[​](#rmquery "Direct link to rmQuery") Removes a query by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ----------------- | | path | string | Yes | Path to the query | **Examples:** ``` # Remove a query npx @eventcatalog/cli rmQuery "/GetOrder" ``` *** ## rmQueryById[​](#rmquerybyid "Direct link to rmQueryById") Removes a query by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ----------------------------- | | id | string | Yes | The ID of the query to remove | | version | string | No | Specific version to remove | **Examples:** ``` # Remove a query npx @eventcatalog/cli rmQueryById "GetOrder" ``` *** ## versionQuery[​](#versionquery "Direct link to versionQuery") Moves the current query to a versioned directory **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------------------ | | id | string | Yes | The ID of the query to version | **Examples:** ``` # Version a query npx @eventcatalog/cli versionQuery "GetOrder" ``` *** ## addFileToQuery[​](#addfiletoquery "Direct link to addFileToQuery") Adds a file to a query **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the query | | file | json | Yes | File object: {content, fileName} | | version | string | No | Specific version | *** ## addSchemaToQuery[​](#addschematoquery "Direct link to addSchemaToQuery") Adds a schema to a query **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------------------- | | id | string | Yes | The ID of the query | | schema | json | Yes | Schema object: {schema, fileName} | | version | string | No | Specific version | *** ## queryHasVersion[​](#queryhasversion "Direct link to queryHasVersion") Checks if a specific version of a query exists **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------- | | id | string | Yes | The ID of the query | | version | string | Yes | Version to check | **Examples:** ``` # Check if version exists npx @eventcatalog/cli queryHasVersion "GetOrder" "1.0.0" ``` *** --- # Services CLI Commands Manage services in your EventCatalog from the command line. ## getService[​](#getservice "Direct link to getService") Returns a service from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------------------- | | id | string | Yes | The ID of the service to retrieve | | version | string | No | Specific version to retrieve | **Examples:** ``` # Get the latest service npx @eventcatalog/cli getService "OrderService" # Get a specific version npx @eventcatalog/cli getService "OrderService" "1.0.0" ``` *** ## getServices[​](#getservices "Direct link to getServices") Returns all services from EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------- | | options | json | No | Options: {latestOnly?} | **Examples:** ``` # Get all services npx @eventcatalog/cli getServices ``` *** ## writeService[​](#writeservice "Direct link to writeService") Writes a service to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | ---------------------------------------------------- | | service | json | Yes | Service object with id, name, version, and markdown | | options | json | No | Options: {path?, override?, versionExistingContent?} | *** ## writeServiceToDomain[​](#writeservicetodomain "Direct link to writeServiceToDomain") Writes a service to a specific domain **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | -------------------------------- | | service | json | Yes | Service object | | domain | json | Yes | Domain reference: {id, version?} | | options | json | No | Options | *** ## rmService[​](#rmservice "Direct link to rmService") Removes a service by its path **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------- | | path | string | Yes | Path to the service | **Examples:** ``` # Remove a service npx @eventcatalog/cli rmService "/OrderService" ``` *** ## rmServiceById[​](#rmservicebyid "Direct link to rmServiceById") Removes a service by its ID **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | ------------------------------- | | id | string | Yes | The ID of the service to remove | | version | string | No | Specific version to remove | **Examples:** ``` # Remove a service npx @eventcatalog/cli rmServiceById "OrderService" ``` *** ## versionService[​](#versionservice "Direct link to versionService") Moves the current service to a versioned directory **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the service to version | **Examples:** ``` # Version a service npx @eventcatalog/cli versionService "OrderService" ``` *** ## addFileToService[​](#addfiletoservice "Direct link to addFileToService") Adds a file to a service **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | -------------------------------- | | id | string | Yes | The ID of the service | | file | json | Yes | File object: {content, fileName} | | version | string | No | Specific version | *** ## addEventToService[​](#addeventtoservice "Direct link to addEventToService") Adds an event relationship to a service **Arguments:** | Name | Type | Required | Description | | -------------- | ------ | -------- | -------------------------------- | | serviceId | string | Yes | The ID of the service | | direction | string | Yes | Direction: "sends" or "receives" | | event | json | Yes | Event reference: {id, version} | | serviceVersion | string | No | Specific service version | *** ## addCommandToService[​](#addcommandtoservice "Direct link to addCommandToService") Adds a command relationship to a service **Arguments:** | Name | Type | Required | Description | | -------------- | ------ | -------- | -------------------------------- | | serviceId | string | Yes | The ID of the service | | direction | string | Yes | Direction: "sends" or "receives" | | command | json | Yes | Command reference: {id, version} | | serviceVersion | string | No | Specific service version | *** ## addQueryToService[​](#addquerytoservice "Direct link to addQueryToService") Adds a query relationship to a service **Arguments:** | Name | Type | Required | Description | | -------------- | ------ | -------- | -------------------------------- | | serviceId | string | Yes | The ID of the service | | direction | string | Yes | Direction: "sends" or "receives" | | query | json | Yes | Query reference: {id, version} | | serviceVersion | string | No | Specific service version | *** ## addEntityToService[​](#addentitytoservice "Direct link to addEntityToService") Adds an entity to a service **Arguments:** | Name | Type | Required | Description | | -------------- | ------ | -------- | ------------------------------- | | serviceId | string | Yes | The ID of the service | | entity | json | Yes | Entity reference: {id, version} | | serviceVersion | string | No | Specific service version | *** ## addDataStoreToService[​](#adddatastoretoservice "Direct link to addDataStoreToService") Adds a data store relationship to a service **Arguments:** | Name | Type | Required | Description | | -------------- | ------ | -------- | --------------------------------------- | | serviceId | string | Yes | The ID of the service | | relationship | string | Yes | Relationship: "writesTo" or "readsFrom" | | dataStore | json | Yes | Data store reference: {id, version} | | serviceVersion | string | No | Specific service version | *** ## serviceHasVersion[​](#servicehasversion "Direct link to serviceHasVersion") Checks if a specific version of a service exists **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------- | | id | string | Yes | The ID of the service | | version | string | Yes | Version to check | **Examples:** ``` # Check if version exists npx @eventcatalog/cli serviceHasVersion "OrderService" "1.0.0" ``` *** ## getSpecificationFilesForService[​](#getspecificationfilesforservice "Direct link to getSpecificationFilesForService") Returns specification files (OpenAPI, AsyncAPI) for a service **Arguments:** | Name | Type | Required | Description | | ------- | ------ | -------- | --------------------- | | id | string | Yes | The ID of the service | | version | string | No | Specific version | **Examples:** ``` # Get spec files npx @eventcatalog/cli getSpecificationFilesForService "OrderService" ``` *** --- # Snapshots CLI Commands Manage snapshots in your EventCatalog from the command line. ## createSnapshot[​](#createsnapshot "Direct link to createSnapshot") Take a point-in-time snapshot of the entire catalog, capturing all resources and their metadata as a JSON file **Arguments:** None *** ## diffSnapshots[​](#diffsnapshots "Direct link to diffSnapshots") Compare two snapshot files and output a structured diff showing added, removed, modified, and versioned resources plus relationship changes **Arguments:** | Name | Type | Required | Description | | ----- | ------ | -------- | ---------------------------------------- | | fileA | string | Yes | Path to the first (older) snapshot file | | fileB | string | Yes | Path to the second (newer) snapshot file | *** ## listSnapshots[​](#listsnapshots "Direct link to listSnapshots") List all snapshots in the catalog .snapshots directory with their labels, timestamps, and git info **Arguments:** None *** --- # Teams CLI Commands Manage teams in your EventCatalog from the command line. ## getTeam[​](#getteam "Direct link to getTeam") Returns a team from EventCatalog by its ID **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------------------ | | id | string | Yes | The ID of the team to retrieve | **Examples:** ``` # Get a team npx @eventcatalog/cli getTeam "platform-team" ``` *** ## getTeams[​](#getteams "Direct link to getTeams") Returns all teams from EventCatalog **Arguments:** None **Examples:** ``` # Get all teams npx @eventcatalog/cli getTeams ``` *** ## writeTeam[​](#writeteam "Direct link to writeTeam") Writes a team to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | --------------------------------------- | | team | json | Yes | Team object with id, name, and markdown | | options | json | No | Options: {path?, override?} | *** ## rmTeamById[​](#rmteambyid "Direct link to rmTeamById") Removes a team by its ID **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ---------------------------- | | id | string | Yes | The ID of the team to remove | **Examples:** ``` # Remove a team npx @eventcatalog/cli rmTeamById "platform-team" ``` *** --- # Users CLI Commands Manage users in your EventCatalog from the command line. ## getUser[​](#getuser "Direct link to getUser") Returns a user from EventCatalog by their ID **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ------------------------------ | | id | string | Yes | The ID of the user to retrieve | **Examples:** ``` # Get a user npx @eventcatalog/cli getUser "jsmith" ``` *** ## getUsers[​](#getusers "Direct link to getUsers") Returns all users from EventCatalog **Arguments:** None **Examples:** ``` # Get all users npx @eventcatalog/cli getUsers ``` *** ## writeUser[​](#writeuser "Direct link to writeUser") Writes a user to EventCatalog **Arguments:** | Name | Type | Required | Description | | ------- | ---- | -------- | --------------------------------------- | | user | json | Yes | User object with id, name, and markdown | | options | json | No | Options: {path?, override?} | *** ## rmUserById[​](#rmuserbyid "Direct link to rmUserById") Removes a user by their ID **Arguments:** | Name | Type | Required | Description | | ---- | ------ | -------- | ---------------------------- | | id | string | Yes | The ID of the user to remove | **Examples:** ``` # Remove a user npx @eventcatalog/cli rmUserById "jsmith" ``` *** --- # Utilities CLI Commands Manage utilities in your EventCatalog from the command line. ## dumpCatalog[​](#dumpcatalog "Direct link to dumpCatalog") Dumps the entire catalog to a JSON structure **Arguments:** None **Examples:** ``` # Dump entire catalog npx @eventcatalog/cli dumpCatalog # Dump and save to file npx @eventcatalog/cli dumpCatalog > catalog.json ``` *** ## getEventCatalogConfigurationFile[​](#geteventcatalogconfigurationfile "Direct link to getEventCatalogConfigurationFile") Returns the EventCatalog configuration file **Arguments:** None **Examples:** ``` # Get config file npx @eventcatalog/cli getEventCatalogConfigurationFile ``` *** --- ## [📄️ What are commands?](/docs/development/guides/messages/commands/introduction.md) [What are commands? Why are they useful for event-driven architectures?](/docs/development/guides/messages/commands/introduction.md) --- ## [📄️ Introduction](/docs/development/components/using-components.md) [Understanding components](/docs/development/components/using-components.md) --- ## [📄️ Introduction](/docs/development/components/using-components.md) [Understanding components](/docs/development/components/using-components.md) --- ## [📄️ \](/docs/development/components/components/01a-attachments.md) [Learn how to add attachments to your EventCatalog resources](/docs/development/components/components/01a-attachments.md) --- ## [📄️ Configuration overview](/docs/development/configuration.md) [Configure EventCatalog](/docs/development/configuration.md) --- ## [📄️ Introduction](/docs/plugins/confluent-schema-registry/intro.md) [Getting started with AsyncAPI plugin](/docs/plugins/confluent-schema-registry/intro.md) --- # Contributing to EventCatalog [EventCatalog](https://eventcatalog.dev) is designed to help teams document their document Event Driven Architectures. If you're interested in contributing to EventCatalog, hopefully, this document makes the process for contributing clear. The [Open Source Guides](https://opensource.guide/) website has a collection of resources for individuals, communities, and companies who want to learn how to run and contribute to an open source project. Contributors and people new to open source alike will find the following guides especially useful: * [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) * [Building Welcoming Communities](https://opensource.guide/building-community/) ## Get Involved[​](#get-involved "Direct link to Get Involved") There are many ways to contribute to EventCatalog, and many of them do not involve writing any code. Here's a few ideas to get started: * Simply start using EventCatalog. Go through the [Getting Started](/docs/development/getting-started/installation.md) guide. Does everything work as expected? If not, we're always looking for improvements. Let us know by [opening an issue](#reporting-new-issues). * Look through the [open issues](https://github.com/event-catalog/eventcatalog/issues). Provide workarounds, ask for clarification, or suggest labels. Help [triage issues](#triaging-issues-and-pull-requests). * If you find an issue you would like to fix, [open a pull request](#your-first-pull-request). Issues tagged as [*Good first issue*](https://github.com/event-catalog/eventcatalog/labels/Good%20first%20issue) are a good place to get started. * Read through the [EventCatalog docs](/docs/development/getting-started/installation.md). If you find anything that is confusing or can be improved, you can click "Edit this page" at the bottom of most docs, which takes you to the GitHub interface to make and propose changes. * Take a look at the [features requested](https://github.com/event-catalog/eventcatalog/labels/feature) by others in the community and consider opening a pull request if you see something you want to work on. Contributions are very welcome. If you think you need help planning your contribution, please ping on Twitter at [@boyney123](https://twitter.com/boyney123) and let us know you are looking for a bit of help. ### Join our Discord Channel[​](#join-our-discord-channel "Direct link to Join our Discord Channel") We have the [`#contributors`](https://eventcatalog.dev/discord) channel on [Discord](https://eventcatalog.dev/discord) to discuss all things about EventCatalog development. You can also be of great help by helping other users in the help channel. ### Triaging Issues and Pull Requests[​](#triaging-issues-and-pull-requests "Direct link to Triaging Issues and Pull Requests") One great way you can contribute to the project without writing any code is to help triage issues and pull requests as they come in. * Ask for more information if you believe the issue does not provide all the details required to solve it. * Suggest [labels](https://github.com/event-catalog/eventcatalog/labels) that can help categorize issues. * Flag issues that are stale or that should be closed. * Ask for test plans and review code. ## Our Development Process[​](#our-development-process "Direct link to Our Development Process") EventCatalog uses [GitHub](https://github.com/event-catalog/eventcatalog) as its source of truth. All changes will be public from the beginning. All pull requests will be checked by the continuous integration system, GitHub actions. ### Running the project locally[​](#running-the-project-locally "Direct link to Running the project locally") To run the project locally follow these steps: 1. Clone the repo `git clone git@github.com:event-catalog/eventcatalog.git` 2. Install project dependencies `npm run i` 3. Run the project locally `npm run start:catalog` * This will load EventCatalog locally using the catalog found in the [`/examples` folder](https://github.com/event-catalog/eventcatalog/tree/main/examples/default). ### Branch Organization[​](#branch-organization "Direct link to Branch Organization") EventCatalog has one primary branch `main` and we use feature branches to deliver new features with pull requests. ## Proposing a Change[​](#proposing-a-change "Direct link to Proposing a Change") If you would like to request a new feature or enhancement but are not yet thinking about opening a pull request, you can also file an issue with the [feature template](https://github.com/event-catalog/eventcatalog/issues/new?assignees=\&labels=feature%2Cneeds+triage\&template=feature.yml). If you're only fixing a bug, it's fine to submit a pull request right away but we still recommend [filing an issue](https://github.com/event-catalog/eventcatalog/issues/new?assignees=\&labels=bug%2Cneeds+triage\&template=bug.yml) detailing what you're fixing. This is helpful in case we don't accept that specific fix but want to keep track of the issue. ### Reporting New Issues[​](#reporting-new-issues "Direct link to Reporting New Issues") When [opening a new issue](https://github.com/event-catalog/eventcatalog/issues/new/choose), always make sure to fill out the issue template. **This step is very important!** Not doing so may result in your issue not being managed in a timely fashion. Don't take this personally if this happens, and feel free to open a new issue once you've gathered all the information required by the template. * **One issue, one bug:** Please report a single bug per issue. * **Provide reproduction steps:** List all the steps necessary to reproduce the issue. The person reading your bug report should be able to follow these steps to reproduce your issue with minimal effort. ### Bugs[​](#bugs "Direct link to Bugs") We use [GitHub Issues](https://github.com/event-catalog/eventcatalog/issues) for our public bugs. If you would like to report a problem, take a look around and see if someone already opened an issue about it. If you are certain this is a new, unreported bug, you can submit a [bug report](#reporting-new-issues). ### Feature requests[​](#feature-requests "Direct link to Feature requests") You can also file issues as [feature requests or enhancements](https://github.com/event-catalog/eventcatalog/labels/feature%20request). If you see anything you'd like to be implemented, create an issue with [feature template](https://raw.githubusercontent.com/boyney123/eventcatalog/master/.github/ISSUE_TEMPLATE/feature.md) ### Questions[​](#questions "Direct link to Questions") If you have questions about using EventCatalog, ask in [Discord](https://eventcatalog.dev/discord) or contact on [Twitter](https://twitter.com/boyney123) and we will do our best to answer your questions. ## Pull Requests[​](#pull-requests "Direct link to Pull Requests") ### Your First Pull Request[​](#your-first-pull-request "Direct link to Your First Pull Request") So you have decided to contribute code back to upstream by opening a pull request. You've invested a good chunk of time, and we appreciate it. We will do our best to work with you and get the PR looked at. Working on your first Pull Request? You can learn how from this free video series: [**How to Contribute to an Open Source Project on GitHub**](https://egghead.io/courses/how-to-contribute-to-an-open-source-project-on-github) We have a list of [beginner-friendly issues](https://github.com/event-catalog/eventcatalog/labels/good%20first%20issue) to help you get your feet wet in the EventCatalog codebase and familiar with our contribution process. This is a great place to get started. ### Installation[​](#installation "Direct link to Installation") 1. Ensure you have [npm](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) installed. 2. After cloning the repository, run `npm i` in the root of the repository. 3. To start the catalog locally run `npm run start:catalog` ### Sending a Pull Request[​](#sending-a-pull-request "Direct link to Sending a Pull Request") Small pull requests are much easier to review and more likely to get merged. Make sure the PR does only one thing, otherwise please split it. It is recommended to follow this [commit message style](#semantic-commit-messages). Please make sure the following is done when submitting a pull request: 1. Fork [the repository](https://github.com/event-catalog/eventcatalog) and create your branch from `main`. 2. Make sure your code lints (`yarn format && yarn lint`). 3. Make sure your Jest tests pass (`yarn test`). All pull requests should be opened against the `main` branch. #### Breaking Changes[​](#breaking-changes "Direct link to Breaking Changes") When adding a new breaking change, follow this template in your pull request: ``` ### New breaking change here - **Who does this affect**: - **How to migrate**: - **Why make this breaking change**: - **Severity (number of people affected x effort)**: ``` ### What Happens Next?[​](#what-happens-next "Direct link to What Happens Next?") We will be monitoring for pull requests. Do help us by keeping pull requests consistent by following the guidelines above. ## Style Guide[​](#style-guide "Direct link to Style Guide") [Prettier](https://prettier.io) will catch most styling issues that may exist in your code. You can check the status of your code styling by simply running `yarn prettier`. However, there are still some styles that Prettier cannot pick up. ## Semantic Commit Messages[​](#semantic-commit-messages "Direct link to Semantic Commit Messages") See how a minor change to your commit message style can make you a better programmer. Format: `(): ` `` is optional. If your change is specific to one/two packages, consider adding the scope. Scopes should be brief but recognizable, e.g. `content-docs`, `theme-classic`, `core` The various types of commits: * `feat`: a new API or behavior **for the end user**. * `fix`: a bug fix **for the end user**. * `docs`: a change to the website or other Markdown documents in our repo. * `refactor`: a change to production code that leads to no behavior difference, e.g. splitting files, renaming internal variables, improving code style... * `test`: adding missing tests, refactoring tests; no production code change. * `chore`: upgrading dependencies, releasing new versions... Chores that are **regularly done** for maintenance purposes. * `misc`: anything else that doesn't change production code, yet is not `test` or `chore`. e.g. updating GitHub actions workflow. Do not get too stressed about PR titles, however. The maintainers will help you get them right, and we also have a PR label system that doesn't equate with the commit message types. Your code is more important than conventions! ### Example[​](#example "Direct link to Example") ``` feat(core): allow overriding of webpack config ^--^^----^ ^------------^ | | | | | +-> Summary in present tense. | | | +-> The package(s) that this change affected. | +-------> Type: see below for the list we use. ``` Use lower case not title case! ## Code Conventions[​](#code-conventions "Direct link to Code Conventions") ### General[​](#general "Direct link to General") * **Most important: Look around.** Match the style you see used in the rest of the project. This includes formatting, naming files, naming things in code, naming things in documentation, etc. * "Attractive" * We do have Prettier (a formatter) and ESLint (a syntax linter) to catch most stylistic problems. If you are working locally, they should automatically fix some issues during every git commit. ## License[​](#license "Direct link to License") By contributing to EventCatalog, you agree that your contributions will be licensed under its license. --- ## [📄️ What is MDX?](/docs/development/customization/custom-components/what-is-mdx.md) [What is MDX?](/docs/development/customization/custom-components/what-is-mdx.md) --- ## [📄️ Application Sidebar](/docs/development/customization/customize-sidebars/application-sidebar.md) [Pick and customize the application sidebar.](/docs/development/customization/customize-sidebars/application-sidebar.md) --- ## [📄️ Customize nodes](/docs/development/customization/customize-visualizer/visualizer-nodes.md) [Customize the color, label and icon of the visualizer nodes.](/docs/development/customization/customize-visualizer/visualizer-nodes.md) --- ## [📄️ What are data stores?](/docs/development/guides/data/introduction.md) [What are data resources in EventCatalog?](/docs/development/guides/data/introduction.md) --- ## [📄️ What are data products?](/docs/development/guides/data-products/introduction.md) [Data as a product for analytics and insights](/docs/development/guides/data-products/introduction.md) --- ## [📄️ Owners](/docs/development/guides/data/ownership-and-components/owners.md) [Adding owners to data stores with EventCatalog.](/docs/development/guides/data/ownership-and-components/owners.md) --- ## [📄️ Documentation to Design](/docs/development/design/intro.md) [Documentation to Design with EventCatalog](/docs/development/design/intro.md) --- # Analytics i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). **Added in** `eventcatalog@3.21.0` EventCatalog supports analytics integrations that let you track how your team navigates and uses your catalog. Connect your existing analytics tools to understand which services, events, and flows your team visits most. Three providers are supported: **Google Analytics 4**, **Google Tag Manager**, and **PostHog**. Multiple providers can be enabled at the same time. *Don't see your analytics provider? [Get in contact with us](https://discord.gg/3rjaZMmrAm) and let us know.* ## How it works[​](#how-it-works "Direct link to How it works") Analytics are configured in `eventcatalog.config.js` under the `integrations` key. When EventCatalog loads, the provider scripts are injected into the page `` and a tracker listens for every navigation event. Every page view sends a set of properties automatically extracted from the URL: | Property | Description | | ------------------ | --------------------------------------------------------------------------------------------------------- | | `url` | The page pathname | | `section` | Catalog area: `visualiser`, `discover`, `directory`, `schemas`, `custom-docs`, `docs`, `home`, or `other` | | `resource_type` | One of: `service`, `event`, `command`, `query`, `domain`, `flow`, `channel`, `entity` | | `resource_id` | The resource identifier | | `resource_version` | The semver version | Analytics scripts load asynchronously and never block page rendering. If a provider fails, errors are caught silently so analytics never affect the catalog. ## Configure a provider[​](#configure-a-provider "Direct link to Configure a provider") Add an `integrations` block to your `eventcatalog.config.js`. All providers are optional and can be combined. ### Google Analytics 4[​](#google-analytics-4 "Direct link to Google Analytics 4") eventcatalog.config.js ``` export default { // ... integrations: { ga4: { measurementId: 'G-XXXXXXXXXX', }, }, }; ``` ### Google Tag Manager[​](#google-tag-manager "Direct link to Google Tag Manager") eventcatalog.config.js ``` export default { // ... integrations: { gtm: { tagId: 'GTM-XXXXXXX', }, }, }; ``` ### PostHog[​](#posthog "Direct link to PostHog") eventcatalog.config.js ``` export default { // ... integrations: { posthog: { apiKey: 'phc_XXXXXXXXXXXX', // Optional: defaults to US cloud apiHost: 'https://us.i.posthog.com', }, }, }; ``` ### Use multiple providers[​](#use-multiple-providers "Direct link to Use multiple providers") Providers can be combined in a single `integrations` block. eventcatalog.config.js ``` export default { // ... integrations: { ga4: { measurementId: 'G-XXXXXXXXXX', }, gtm: { tagId: 'GTM-XXXXXXX', }, posthog: { apiKey: 'phc_XXXXXXXXXXXX', }, }, }; ``` ## Enable debug mode[​](#enable-debug-mode "Direct link to Enable debug mode") Set `debug: true` to log all analytics events to the browser console. This is useful for verifying that events are being sent correctly before deploying. eventcatalog.config.js ``` export default { // ... integrations: { debug: true, ga4: { measurementId: 'G-XXXXXXXXXX', }, }, }; ``` All events will appear in the browser console prefixed with `[EventCatalog Analytics]`, including adapter registration, page views, and any custom events. ## Track custom events[​](#track-custom-events "Direct link to Track custom events") The analytics manager is exposed on `window.__ec_analytics`. Use it to send custom events from your own scripts or MDX pages. ``` if (window.__ec_analytics) { window.__ec_analytics.track('custom_event', { key: 'value' }); } ``` Custom events are forwarded to all configured providers simultaneously. ## Missing an integration?[​](#missing-an-integration "Direct link to Missing an integration?") If you need support for an analytics provider not listed here, [open a GitHub issue](https://github.com/boyney123/eventcatalog/issues) or [join the Discord community](https://discord.gg/3rjaZMmrAm) and let us know. We are always looking to expand our integrations based on what teams are using. Scale plan required Analytics integrations require an [EventCatalog Scale plan](https://eventcatalog.dev/pricing). If you configure integrations without a valid license, a warning is shown during build. --- # Custom Tools **Added in** `eventcatalog@3.2.0` i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). EventCatalog Assistant comes with built-in tools that allow the AI to search and understand your architecture documentation. But what if you could go beyond static documentation and bring **real-time data** directly into your conversations? With custom tools, you can extend the assistant to query your production metrics, check service health, look up on-call engineers, fetch data from your databases, and much more. ## Why custom tools?[​](#why-custom-tools "Direct link to Why custom tools?") Your architecture documentation tells part of the story, but the real value often lies in the runtime data: * **Production metrics** - How many events per second? What's the error rate? * **Service health** - Is OrderService healthy right now? * **Queue depths** - Are there any event backlogs building up? * **On-call information** - Who should I contact about PaymentService? * **Database queries** - What's the current state of this entity? * **External APIs** - Enrich answers with data from Datadog, PagerDuty, Jira, etc. Custom tools transform EventCatalog from a static documentation site into a **live knowledge hub** where developers can ask questions like: > "Is OrderService healthy and who should I contact if there's an issue?" And get real answers based on live data. ## How it works[​](#how-it-works "Direct link to How it works") Custom tools are defined in your `eventcatalog.chat.js` file alongside your model configuration. Each tool has: 1. **A description** - Tells the AI when to use this tool 2. **An input schema** - Defines what parameters the tool accepts (using Zod) 3. **An execute function** - The code that runs when the tool is called The AI automatically decides when to use your tools based on the user's question and the tool descriptions. ## Creating custom tools[​](#creating-custom-tools "Direct link to Creating custom tools") ### Basic example[​](#basic-example "Direct link to Basic example") Here's a simple tool that returns service health information: eventcatalog.chat.js ``` import { anthropic } from '@ai-sdk/anthropic'; import { tool } from 'ai'; import { z } from 'zod'; // Export your model export default async () => { return anthropic('claude-haiku-4-5'); } // Export custom tools export const tools = { getServiceHealth: tool({ description: 'Get the current health status of a service including uptime and active instances. Use this when users ask if a service is up, healthy, or having issues.', inputSchema: z.object({ serviceName: z.string().describe('The name of the service to check health for'), }), execute: async ({ serviceName }) => { // In production, query your monitoring system (Datadog, Prometheus, etc.) const response = await fetch(`https://your-monitoring-api.com/health/${serviceName}`); const health = await response.json(); return { serviceName, status: health.status, uptime: health.uptime, instances: health.activeInstances, lastIncident: health.lastIncident, }; }, }), }; ``` ### The AI uses tools automatically[​](#the-ai-uses-tools-automatically "Direct link to The AI uses tools automatically") Once configured, the AI will automatically use your tools when relevant. If a user asks: > "Is the OrderService healthy?" The assistant will: 1. Recognize this is a health-related question 2. Call your `getServiceHealth` tool with `serviceName: "OrderService"` 3. Use the returned data to formulate a helpful response ## Example tools[​](#example-tools "Direct link to Example tools") ### Production metrics[​](#production-metrics "Direct link to Production metrics") Query real-time metrics from your observability platform: ``` getEventMetrics: tool({ description: 'Get real-time production metrics for an event including throughput, latency, and error rates. Use this when users ask about event performance, traffic, or production health.', inputSchema: z.object({ eventId: z.string().describe('The event ID to get metrics for'), timeRange: z.enum(['1h', '24h', '7d', '30d']).default('24h').describe('Time range for metrics'), }), execute: async ({ eventId, timeRange }) => { // Query Datadog, Prometheus, CloudWatch, etc. const metrics = await datadogClient.getMetrics(eventId, timeRange); return { eventId, timeRange, throughput: `${metrics.eventsPerSecond.toLocaleString()} events/sec`, latency: { p50: `${metrics.p50}ms`, p99: `${metrics.p99}ms`, }, errorRate: `${metrics.errorRate}%`, status: metrics.errorRate > 0.1 ? 'degraded' : 'healthy', }; }, }), ``` ### On-call information[​](#on-call-information "Direct link to On-call information") Look up who's on-call for a service: ``` getOnCall: tool({ description: 'Get the current on-call engineer and escalation contacts for a service. Use this when users ask who to contact, who owns a service, or who is on-call.', inputSchema: z.object({ serviceName: z.string().describe('The name of the service to get on-call info for'), }), execute: async ({ serviceName }) => { // Query PagerDuty, OpsGenie, or your internal system const oncall = await pagerdutyClient.getOnCall(serviceName); return { serviceName, team: oncall.team, primary: { name: oncall.primary.name, email: oncall.primary.email, slack: oncall.primary.slack, }, secondary: oncall.secondary, slackChannel: oncall.slackChannel, escalationPolicy: oncall.escalationUrl, }; }, }), ``` ### Queue depth and consumer lag[​](#queue-depth-and-consumer-lag "Direct link to Queue depth and consumer lag") Monitor your message brokers: ``` getQueueDepth: tool({ description: 'Get the current queue depth, consumer lag, and processing rate for an event. Use this when users ask about event backlogs, processing delays, or queue health.', inputSchema: z.object({ eventId: z.string().describe('The event ID to check queue depth for'), environment: z.enum(['production', 'staging', 'development']).default('production'), }), execute: async ({ eventId, environment }) => { // Query Kafka, RabbitMQ, SQS, etc. const queue = await kafkaClient.getConsumerLag(eventId, environment); return { eventId, environment, status: queue.lag > 30 ? 'critical' : queue.lag > 5 ? 'warning' : 'healthy', queue: { depth: queue.depth.toLocaleString(), oldestMessage: `${queue.lag.toFixed(1)} seconds ago`, }, consumers: { active: queue.consumers, processingRate: `${queue.rate.toLocaleString()} events/sec`, }, }; }, }), ``` ### Database queries[​](#database-queries "Direct link to Database queries") Look up entity state from your databases: ``` getEntityState: tool({ description: 'Get the current state of an entity from the database. Use this when users ask about the current state of an order, user, or other business entity.', inputSchema: z.object({ entityType: z.enum(['order', 'user', 'product', 'inventory']), entityId: z.string().describe('The ID of the entity to look up'), }), execute: async ({ entityType, entityId }) => { // Query your database const entity = await db.collection(entityType).findOne({ id: entityId }); return { entityType, entityId, state: entity.state, lastUpdated: entity.updatedAt, history: entity.stateHistory?.slice(-5), // Last 5 state changes }; }, }), ``` ## Best practices[​](#best-practices "Direct link to Best practices") ### Write clear descriptions[​](#write-clear-descriptions "Direct link to Write clear descriptions") The AI uses tool descriptions to decide when to call them. Be specific about: * What the tool does * When it should be used * What kind of questions it answers ``` // ❌ Vague description description: 'Gets metrics', // ✅ Clear description description: 'Get real-time production metrics for an event including throughput, latency, and error rates. Use this when users ask about event performance, traffic, or production health.', ``` ### Return structured data[​](#return-structured-data "Direct link to Return structured data") Return well-structured objects that the AI can easily interpret: ``` // ❌ Raw data dump return rawApiResponse; // ✅ Structured, meaningful data return { serviceName, status: health.status, statusEmoji: health.status === 'healthy' ? '✅' : '⚠️', uptime: `${health.uptime}%`, recommendation: health.status !== 'healthy' ? 'Consider scaling up instances' : 'No action needed', }; ``` ### Handle errors gracefully[​](#handle-errors-gracefully "Direct link to Handle errors gracefully") Always handle potential errors in your tools: ``` execute: async ({ serviceName }) => { try { const health = await monitoringApi.getHealth(serviceName); return { serviceName, ...health }; } catch (error) { return { serviceName, error: `Unable to fetch health data: ${error.message}`, suggestion: 'Check if the monitoring API is available', }; } }, ``` ### Secure your tools[​](#secure-your-tools "Direct link to Secure your tools") Remember that tools execute server-side. Keep security in mind: * **Validate inputs** - Don't trust user-provided data * **Use least privilege** - Only grant tools the permissions they need * **Protect secrets** - Store API keys in environment variables * **Rate limit** - Consider adding rate limiting for expensive operations ``` execute: async ({ serviceName }) => { // Validate the service name exists in your catalog const validServices = await getServices(); if (!validServices.includes(serviceName)) { return { error: 'Service not found in catalog' }; } // Proceed with the query... }, ``` ## Complete example[​](#complete-example "Direct link to Complete example") Here's a complete `eventcatalog.chat.js` with multiple tools: eventcatalog.chat.js ``` import { anthropic } from '@ai-sdk/anthropic'; import { tool } from 'ai'; import { z } from 'zod'; // Your model configuration export default async () => { return anthropic('claude-haiku-4-5'); } export const configuration = { temperature: 0.7, maxTokens: 10000, } // Your custom tools export const tools = { getEventMetrics: tool({ description: 'Get real-time production metrics for an event including throughput, latency, and error rates.', inputSchema: z.object({ eventId: z.string(), timeRange: z.enum(['1h', '24h', '7d', '30d']).default('24h'), }), execute: async ({ eventId, timeRange }) => { // Your implementation }, }), getServiceHealth: tool({ description: 'Get the current health status of a service including uptime and active instances.', inputSchema: z.object({ serviceName: z.string(), }), execute: async ({ serviceName }) => { // Your implementation }, }), getOnCall: tool({ description: 'Get the current on-call engineer and escalation contacts for a service.', inputSchema: z.object({ serviceName: z.string(), }), execute: async ({ serviceName }) => { // Your implementation }, }), getQueueDepth: tool({ description: 'Get the current queue depth and consumer lag for an event.', inputSchema: z.object({ eventId: z.string(), environment: z.enum(['production', 'staging', 'development']).default('production'), }), execute: async ({ eventId, environment }) => { // Your implementation }, }), }; ``` ## Viewing available tools[​](#viewing-available-tools "Direct link to Viewing available tools") Users can see all available tools (including custom ones) by clicking the **wrench icon** in the chat panel. Custom tools are labeled with a "Custom" badge to distinguish them from built-in tools. ## What can you build?[​](#what-can-you-build "Direct link to What can you build?") The possibilities are endless. Here are some ideas: * **Cost tracking** - "How much did the OrderCreated event cost to process last month?" * **Compliance checks** - "Does the PaymentService meet our SLA requirements?" * **Deployment info** - "When was InventoryService last deployed?" * **Incident history** - "What incidents has NotificationService had this quarter?" * **Schema validation** - "Would this schema change break any consumers?" * **Test coverage** - "What's the test coverage for OrderService?" * **Documentation gaps** - "Which events are missing descriptions?" Custom tools turn EventCatalog into your organization's single pane of glass for architecture knowledge—combining static documentation with live operational data. *** Have questions about custom tools? [Join our Discord community](https://eventcatalog.dev/discord) to share ideas and get help. --- # Configuration i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). **EventCatalog Assistant is turned off by default.** To enable the assistant feature, you need to set the following: 1. Turn on the `chat` feature in your `eventcatalog.config.js` file and add 2. Add a `eventcatalog.chat.js` file to your catalog. ### Enabling the feature[​](#enabling-the-feature "Direct link to Enabling the feature") To turn on the assistant feature, you need to set the following: eventcatalog.config.js ``` module.exports = { // Enable the chat feature in your catalog chat: { enabled: true, }, // AI integrations require you to run eventcatalog as as server output: 'server' }; ``` ### Installing your model and configuring `eventcatalog.chat.js` file[​](#installing-your-model-and-configuring-eventcatalogchatjs-file "Direct link to installing-your-model-and-configuring-eventcatalogchatjs-file") First you have to install your model of choice ([list of models](https://ai-sdk.dev/docs/foundations/providers-and-models#ai-sdk-providers)) and configure the relevant secrets in your `.env` file. *Example of installing the OpenAI model:* ``` npm install @ai-sdk/openai ``` #### Configuring `eventcatalog.chat.js`[​](#configuring-eventcatalogchatjs "Direct link to configuring-eventcatalogchatjs") This file will provide the model and any model configuration to EventCatalog. In the example below we are using the OpenAI model `gpt-4.1-nano` and configuring the model with some additional parameters. eventcatalog.chat.js ``` import { openai } from '@ai-sdk/openai'; // Export your model using the default export export default async () => { return openai('gpt-4.1-nano'); } // Export the configuration for the model (optional) export const configuration = { topP: 0.9, topK: 40, frequencyPenalty: 0.0, presencePenalty: 0.0, temperature: 0.7, maxTokens: 10000, } ``` Once you have enabled the feature and configured your model, restart EventCatalog and you can start asking questions about your architecture. --- # What is EventCatalog Assistant? i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). EventCatalog Assistant allows users to ask questions about your documentation using natural language. It is embedded directly into your documentation site, enabling users to quickly find answers, understand your system, and succeed without manually searching through pages. **You can bring your own model to EventCatalog and your data is owned by you and never shared.** The assistant integrates with your preferred AI models using the [AI SDK](https://ai-sdk.dev/), giving you full control over which models power the experience. ![EventCatalog Assistant](/assets/images/example-b0a87cee574253596d8e40eda5396700.png) --- # AI with EventCatalog EventCatalog helps you document your architecture for both teams and your AI tools. Your team gets a visual catalog to explore your system. Your AI tools get structured access to query and reason about your architecture. ## AI integrations[​](#ai-integrations "Direct link to AI integrations") EventCatalog supports four ways to connect AI to your documentation: * [EventCatalog Assistant](/docs/development/ask-your-architecture/eventcatalog-assistant/what-is-eventcatalog-assistant.md) * Bring your own model to EventCatalog itself, and ask questions about your documentation directly in the browser. * [EventCatalog MCP Server](/docs/development/ask-your-architecture/mcp-server/introduction.md) * Connect your MCP clients (e.g Cursor, Windsurf, Claude Desktop) to EventCatalog. * [Slack Integration](/docs/development/ask-your-architecture/slack-integration/introduction.md) * Query your architecture directly from Slack using the EventCatalog Slack Bot. * [AI Skills](/docs/development/ask-your-architecture/skills/introduction.md) * Pre-built skills that teach AI coding agents how to generate correct EventCatalog documentation. --- # Getting started i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). ### Prerequisites[​](#prerequisites "Direct link to Prerequisites") 1. **SSR mode** - EventCatalog must run in [server mode](/docs/development/deployment/build-ssr-mode.md#building-your-eventcatalog-ssr) (not static) 2. **Scale license** - You can get a 14 day free trial at [eventcatalog.cloud](https://eventcatalog.cloud) ### Quick start[​](#quick-start "Direct link to Quick start") Your MCP server is available at: ``` https://your-eventcatalog.com/docs/mcp/ ``` For local development: ``` http://localhost:3000/docs/mcp/ ``` ### Verify the server[​](#verify-the-server "Direct link to Verify the server") Visit the endpoint in your browser to verify. It returns available tools and resources: ``` { "name": "EventCatalog MCP Server", "version": "1.0.0", "status": "running", "tools": ["getResources", "getResource", ...], "resources": ["eventcatalog://all", "eventcatalog://events", ...] } ``` ### Connect clients[​](#connect-clients "Direct link to Connect clients") Claude Desktop 1. Get your MCP URL `https://your-eventcatalog.com/docs/mcp/` 2. Navigate to the [Connectors](https://claude.ai/settings/connectors) page in Claude Settings. 3. Select **Add custom connector** 4. Select **Add** 5. When using Claude, select the attachments button (the plus icon). 6. Select your MCP server. Claude Code 1. Get your MCP URL `https://your-eventcatalog.com/docs/mcp/` 2. Run the command to connect claude code to your eventcatalog instance ``` claude mcp add --transport http ``` Cursor 1. Get your MCP URL `https://your-eventcatalog.com/docs/mcp/` 2. Use `Command` + `Shift` + `P` (`Ctrl` + `Shift` + `P` on Windows) to open the Command Palette. 3. Search for "Open MCP settings" 4. Select **Add custom MCP.** This opens the `mcp.json` file. 5. Add the following to the `mcp.json` file: ``` { "servers": { "": { "url": "https://your-eventcatalog.com/docs/mcp/" } } } ``` VS Code 1. Get your MCP URL `https://your-eventcatalog.com/docs/mcp/` 2. Create a `.vscode/mcp.json` file. 3. Inside the `mcp.json` file, add the following: ``` { "servers": { "": { "type": "http", "url": "https://your-eventcatalog.com/docs/mcp/" } } } ``` ## Available tools[​](#available-tools "Direct link to Available tools") ### 15 built-in tools[​](#15-built-in-tools "Direct link to 15 built-in tools") * `getResources` - Get events, services, commands, queries, flows, domains * `getResource` - Get a specific resource by id and version * `getMessagesProducedOrConsumedByResource` - Messages a resource sends/receives * `getSchemaForResource` - Get OpenAPI, AsyncAPI, or other schemas * `findResourcesByOwner` - Resources owned by a team or user * `getProducersOfMessage` - Services that produce a message * `getConsumersOfMessage` - Services that consume a message * `analyzeChangeImpact` - Impact of changing a message * `explainBusinessFlow` - Detailed flow information * `getTeams` / `getTeam` - Query teams * `getUsers` / `getUser` - Query users * `findMessageBySchemaId` - Find messages by schema identifiers * `explainUbiquitousLanguageTerms` - DDD ubiquitous language from domains [See full API documentation →](/docs/development/ask-your-architecture/mcp-server/getting-started.md) ### 12 resources[​](#12-resources "Direct link to 12 resources") * `eventcatalog://all` - All resources * `eventcatalog://events` - All events * `eventcatalog://commands` - All commands * `eventcatalog://queries` - All queries * `eventcatalog://services` - All services * `eventcatalog://channels` - All channels * `eventcatalog://diagrams` - All diagrams * `eventcatalog://containers` - All containers * `eventcatalog://domains` - All domains * `eventcatalog://flows` - All flows * `eventcatalog://teams` - All teams * `eventcatalog://users` - All users ## Add custom tools[​](#add-custom-tools "Direct link to Add custom tools") Extend the MCP server with custom tools in `eventcatalog.chat.js`: ``` // eventcatalog.chat.js export const tools = { myCustomTool: { description: 'My custom tool for EventCatalog', parameters: z.object({ query: z.string().describe('The query parameter'), }), execute: async ({ query }) => { // Your custom logic here return { result: 'Custom data' }; }, }, }; ``` Custom tools appear alongside built-in tools automatically. ## Use standalone server[​](#use-standalone-server "Direct link to Use standalone server") For catalogs without SSR mode, use the standalone `@eventcatalog/mcp-server` package. We plan to deprecate this in a future release, so we recommend migrating to the built-in server when possible. Standalone server on stdio For local development and testing, you can use the MCP Server on stdio. This is useful for single-client, low-latency tools. **Prerequisites:** * EventCatalog configured with the [`LLMS.txt` feature](/docs/development/developer-tools/llms.txt.md) * EventCatalog Scale license * MCP client installed **Command:** ``` npx -y @eventcatalog/mcp-server {URL_TO_YOUR_EVENTCATALOG_INSTANCE} {EVENTCATALOG_LICENSE_KEY} ``` Standalone server over HTTP Run the MCP Server over HTTP for production deployments. **Prerequisites:** * EventCatalog instance running * EventCatalog Scale license * MCP client installed **Run using npx:** ``` npx -y @eventcatalog/mcp-server https://your-eventcatalog-instance.com {EVENTCATALOG_LICENSE_KEY} http {PORT} {ROOT_PATH} ``` **Example:** ``` npx -y @eventcatalog/mcp-server https://demo.eventcatalog.dev {EVENTCATALOG_LICENSE_KEY} http 3000 /mcp ``` This starts the MCP Server over HTTP on port 3000 with root path `/mcp`. **Run using Docker:** See [instructions on the GitHub repository](https://github.com/event-catalog/mcp-server/blob/main/README.Docker.md). --- # MCP server i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). Every EventCatalog instance automatically includes a [Model Context Protocol (MCP) server](https://modelcontextprotocol.io/introduction). --- ## [📄️ Introduction](/docs/development/ask-your-architecture/skills/introduction.md) [Pre-built AI skills to help you document your architecture with EventCatalog](/docs/development/ask-your-architecture/skills/introduction.md) --- # Installing AI Skills ## CLI install (recommended)[​](#cli-install-recommended "Direct link to CLI install (recommended)") Use [npx skills](https://github.com/vercel-labs/skills) to install skills directly into your project: ``` # Install all EventCatalog skills npx skills add event-catalog/skills # Install a specific skill npx skills add event-catalog/skills --skill catalog-documentation-creator ``` This copies the skill files into your project's `.claude/skills/` directory where your AI agent can access them. ## Clone and copy[​](#clone-and-copy "Direct link to Clone and copy") Clone the repository and copy the skills you need: ``` git clone https://github.com/event-catalog/skills.git cp -r skills/skills/catalog-documentation-creator .claude/skills/ ``` ## Git submodule[​](#git-submodule "Direct link to Git submodule") Add as a submodule for easy updates: ``` git submodule add https://github.com/event-catalog/skills.git .claude/skills/eventcatalog ``` When new skills are released, pull updates with: ``` git submodule update --remote ``` ## Fork and customize[​](#fork-and-customize "Direct link to Fork and customize") Fork the repository and tailor skills to your team's conventions: 1. Fork [event-catalog/skills](https://github.com/event-catalog/skills) on GitHub 2. Modify skills to match your naming conventions, ownership patterns, and schema formats 3. Install from your fork: ``` npx add-skill https://github.com/YOUR_ORG/eventcatalog-skills ``` This is useful when your team has specific conventions for IDs, owners, or folder structures that differ from the defaults. --- # AI Skills EventCatalog Skills are pre-built instructions that teach AI agents how to work with your EventCatalog project. Install a skill and your AI agent gains the ability to generate correct documentation, following EventCatalog conventions and best practices. Skills work with any AI coding agent that supports the skills format (e.g. [Claude Code](https://claude.ai/code)). ## Why use skills?[​](#why-use-skills "Direct link to Why use skills?") When you ask an AI agent to generate EventCatalog documentation, it doesn't know about EventCatalog's frontmatter format, folder structure, or component conventions. Skills solve this by providing the agent with structured instructions and reference material. With skills installed, you can ask your agent things like: * "Document my OrderService that receives OrderCreated events and sends OrderConfirmed events" * "Create a Payments domain with a PaymentService, PaymentProcessed event, and ProcessPayment command" * "Look at my src/ directory and generate EventCatalog documentation for the services and events you find" * "Document the checkout flow from cart submission through payment processing to order confirmation" The agent will generate properly formatted `index.mdx` files with correct frontmatter, schemas, and visualizations. ## Available skills[​](#available-skills "Direct link to Available skills") | Skill | Description | | ------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [Catalog Documentation Creator](https://github.com/event-catalog/skills) | Generates EventCatalog documentation files (services, events, commands, queries, domains, flows, channels, containers) with correct frontmatter, folder structure, and best practices. | | [Flow Wizard](https://github.com/event-catalog/skills) | Guides you through documenting a business flow step by step in a conversational session, cross-referencing your existing catalog resources to link services, events, and commands automatically. | ## Getting started[​](#getting-started "Direct link to Getting started") Head to the [installation guide](/docs/development/ask-your-architecture/skills/installation.md) to add skills to your project. **Source code:** [github.com/event-catalog/skills](https://github.com/event-catalog/skills) --- ## [📄️ Introduction](/docs/development/ask-your-architecture/slack-integration/introduction.md) [Query architecture documentation directly from Slack](/docs/development/ask-your-architecture/slack-integration/introduction.md) --- # Deployment i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). Deploy the EventCatalog Slack Bot to your infrastructure. The bot uses Socket Mode, so it maintains an outbound connection to Slack without requiring a public URL, load balancer, or SSL certificates. ## Docker[​](#docker "Direct link to Docker") The simplest way to deploy is using Docker. The bot includes a Dockerfile and docker-compose configuration. ### Build the image[​](#build-the-image "Direct link to Build the image") ``` docker build -t eventcatalog-slack-bot . ``` ### Run with docker-compose[​](#run-with-docker-compose "Direct link to Run with docker-compose") ``` docker compose up -d ``` ### View logs[​](#view-logs "Direct link to View logs") ``` docker compose logs -f ``` The `docker-compose.yml` file mounts your config and reads environment variables from `.env`: ``` services: eventcatalog-slack-bot: build: . container_name: eventcatalog-slack-bot restart: unless-stopped env_file: - .env volumes: - ./eventcatalog-bot.config.ts:/app/eventcatalog-bot.config.ts:ro environment: - NODE_ENV=production ``` ## Docker networking[​](#docker-networking "Direct link to Docker networking") When running the bot in Docker, the container needs network access to your EventCatalog server. Configuration depends on where EventCatalog runs. ### EventCatalog on localhost[​](#eventcatalog-on-localhost "Direct link to EventCatalog on localhost") Docker containers cannot use `localhost` to reach the host machine. Use one of these approaches: **Option 1: Use host.docker.internal (recommended)** Update your config to use the special Docker hostname: ``` eventCatalog: { url: 'http://host.docker.internal:3000', } ``` info Your EventCatalog server must bind to all interfaces (`0.0.0.0`), not just `localhost`. Check your EventCatalog startup logs. If it shows `localhost:3000`, you may need to start it with a `--host 0.0.0.0` flag. **Option 2: Run the bot outside Docker** For local development, skip Docker and run the bot directly: * npm * pnpm ``` npm install npm run dev ``` ``` pnpm install pnpm dev ``` This avoids networking complexity during development. ### EventCatalog in Docker[​](#eventcatalog-in-docker "Direct link to EventCatalog in Docker") Put both containers on the same Docker network and use the container name as hostname: ``` services: eventcatalog: # your EventCatalog config networks: - app-network eventcatalog-slack-bot: build: . env_file: - .env volumes: - ./eventcatalog-bot.config.ts:/app/eventcatalog-bot.config.ts:ro networks: - app-network networks: app-network: ``` Configure the bot to use the container name: ``` eventCatalog: { url: 'http://eventcatalog:3000', } ``` ### EventCatalog at public URL[​](#eventcatalog-at-public-url "Direct link to EventCatalog at public URL") Use the public URL directly - no special configuration needed: ``` eventCatalog: { url: 'https://your-catalog.example.com', } ``` ## Other deployment options[​](#other-deployment-options "Direct link to Other deployment options") Railway Railway automatically detects the Dockerfile and deploys the bot. 1. Create a new project and connect your repository 2. Add environment variables in the Railway dashboard: * `EVENTCATALOG_SCALE_LICENSE_KEY` * `SLACK_BOT_TOKEN` * `SLACK_APP_TOKEN` * `SLACK_SIGNING_SECRET` * `ANTHROPIC_API_KEY` (or your chosen provider) 3. Add your `eventcatalog-bot.config.ts` to the repository 4. Deploy - Railway detects the Dockerfile automatically Fly.io Deploy to Fly.io using their CLI. **Initialize:** ``` fly launch --no-deploy ``` **Set secrets:** ``` fly secrets set EVENTCATALOG_SCALE_LICENSE_KEY=your-key fly secrets set SLACK_BOT_TOKEN=xoxb-... fly secrets set SLACK_APP_TOKEN=xapp-... fly secrets set SLACK_SIGNING_SECRET=... fly secrets set ANTHROPIC_API_KEY=sk-ant-... ``` **Deploy:** ``` fly deploy ``` Render Deploy as a Background Worker on Render. 1. Create a new **Background Worker** (not a Web Service) 2. Connect your repository 3. Set the build and start commands: * npm * pnpm - Build command: `npm install && npm run build` - Start command: `npm start` * Build command: `pnpm install && pnpm build` * Start command: `pnpm start` 4. Add environment variables in the Render dashboard 5. Deploy AWS, GCP, or Azure Deploy as a container or long-running process. The bot requires: * Outbound HTTPS/WSS connections to Slack * No inbound connections (Socket Mode handles communication) * No load balancers or public endpoints needed Suitable services include: * **AWS:** ECS, EKS, EC2 * **GCP:** Cloud Run (always running), GKE, Compute Engine * **Azure:** Container Instances, AKS, Virtual Machines Ensure the process stays running and can make outbound connections to: * `slack.com` (Socket Mode connection) * Your EventCatalog instance * Your AI provider API --- # Installation i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). Install the EventCatalog Slack Bot locally or deploy it to your infrastructure. The bot runs as a long-lived process that maintains a connection to Slack. ## Install locally[​](#install-locally "Direct link to Install locally") ### Clone repository[​](#clone-repository "Direct link to Clone repository") ``` git clone https://github.com/event-catalog/eventcatalog-slack-bot.git cd eventcatalog-slack-bot ``` ### Install dependencies[​](#install-dependencies "Direct link to Install dependencies") * npm * pnpm ``` npm install ``` ``` pnpm install ``` ### Configure environment[​](#configure-environment "Direct link to Configure environment") Create a `.env` file with your credentials: ``` # EventCatalog Scale License (Required) EVENTCATALOG_SCALE_LICENSE_KEY=XXXX-XXXX-XXXX-XXXX-XXXX-XXXX # Slack Credentials (Required) SLACK_BOT_TOKEN=xoxb-... SLACK_APP_TOKEN=xapp-... SLACK_SIGNING_SECRET=... # AI Provider (at least one required) ANTHROPIC_API_KEY=sk-ant-... # OPENAI_API_KEY=sk-... # GOOGLE_GENERATIVE_AI_API_KEY=... ``` ### Create configuration[​](#create-configuration "Direct link to Create configuration") Create `eventcatalog-bot.config.ts`: ``` export default { eventCatalog: { url: 'http://localhost:3000', // Optional: Add authentication headers // headers: { // 'Authorization': 'Bearer your-token', // }, }, ai: { provider: 'anthropic', // 'anthropic' | 'openai' | 'google' // model: 'claude-sonnet-4-20250514', // Optional: override default model maxSteps: 5, temperature: 0.4, }, slack: { // Optional: Channel IDs for auto-reply (bot responds to all messages) autoReplyChannels: [], // Optional: Custom icon URL for bot messages icon: 'https://www.eventcatalog.dev/img/logo.png', // Optional: Custom username for bot messages username: 'EventCatalog', }, }; ``` ### Start the bot[​](#start-the-bot "Direct link to Start the bot") * npm * pnpm ``` npm run dev ``` ``` pnpm dev ``` Or with a custom config path: * npm * pnpm ``` npm run dev -- --config ./my-config.ts ``` ``` pnpm dev --config ./my-config.ts ``` ## Configuration reference[​](#configuration-reference "Direct link to Configuration reference") ### eventCatalog[​](#eventcatalog "Direct link to eventCatalog") | Option | Type | Required | Description | | --------- | ------ | -------- | --------------------------------- | | `url` | string | Yes | URL of your EventCatalog instance | | `headers` | object | No | Authentication headers if needed | ### ai[​](#ai "Direct link to ai") | Option | Type | Default | Description | | ------------- | ------ | ---------------- | -------------------------------------------------------------- | | `provider` | string | Required | AI provider: `anthropic`, `openai`, or `google` | | `model` | string | Provider default | Model to use (see [supported models](#supported-ai-providers)) | | `maxSteps` | number | 5 | Maximum tool-calling steps (1-20) | | `temperature` | number | 0.4 | AI temperature (0-2) | ### slack[​](#slack "Direct link to slack") | Option | Type | Default | Description | | ------------------- | --------- | ----------------- | -------------------------------------------------- | | `autoReplyChannels` | string\[] | \[] | Channel IDs where bot auto-replies to all messages | | `icon` | string | EventCatalog logo | Custom icon URL for bot messages | | `username` | string | 'EventCatalog' | Custom display name for bot messages | ## Supported AI providers[​](#supported-ai-providers "Direct link to Supported AI providers") | Provider | Environment Variable | Default Model | | --------- | ------------------------------ | -------------------------- | | Anthropic | `ANTHROPIC_API_KEY` | `claude-sonnet-4-20250514` | | OpenAI | `OPENAI_API_KEY` | `gpt-4o` | | Google | `GOOGLE_GENERATIVE_AI_API_KEY` | `gemini-2.0-flash` | You can override the default model in your configuration. For a full list of available models, see the [Vercel AI SDK Providers documentation](https://ai-sdk.dev/providers/ai-sdk-providers). ``` ai: { provider: 'anthropic', model: 'claude-opus-4-20250514', // Use a different model } ``` ## License key[​](#license-key "Direct link to License key") Get your EventCatalog Scale license key from [eventcatalog.cloud](https://eventcatalog.cloud). A 14-day free trial is available. The license key must be set as the `EVENTCATALOG_SCALE_LICENSE_KEY` environment variable. --- # Slack integration i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). The EventCatalog Slack Bot connects to your EventCatalog MCP server, allowing teams to query architecture documentation directly from Slack. Ask questions about events, services, domains, and schemas without leaving your workspace. The slack bot is self hosted, you own your data and deployment. ![EventCatalog Slack Bot](/img/slack.png)Example of the EventCatalog Slack Bot in action asking about the OrderCreated event ## How it works[​](#how-it-works "Direct link to How it works") 1. You configure the bot with your own AI provider and model (e.g. Anthropic, OpenAI, Google) 2. Users @mention the bot or post in dedicated channels 3. The bot queries your EventCatalog MCP server 4. AI-powered responses appear in threads to keep channels organized ## Key features[​](#key-features "Direct link to Key features") * **@Mention anywhere** - Add the bot to any channel and ask questions * **Dedicated channels** - Create auto-reply channels for architecture questions * **Multiple AI providers** - Works with Anthropic, OpenAI, or Google * **Self-hosted** - Your data stays private, you control your data and deployment * **Socket Mode** - No public URL or webhooks needed * **Custom tools support** - Bring your own integrations for real-time data ## Custom tools[​](#custom-tools "Direct link to Custom tools") The Slack bot supports [custom tools](/docs/development/ask-your-architecture/eventcatalog-assistant/bring-your-own-tools.md) defined in your `eventcatalog.chat.js` file. This means you can bring real-time data into your Slack conversations: * Query production metrics from Datadog or Prometheus * Check service health and uptime * Look up on-call engineers from PagerDuty * Fetch queue depths from Kafka * Any custom integration your team needs Custom tools work automatically - the AI decides when to use them based on user questions. Ask "who is on-call for OrderService?" and get live data directly in Slack. ## Prerequisites[​](#prerequisites "Direct link to Prerequisites") * EventCatalog instance (with configured MCP server) running in [SSR mode](/docs/development/deployment/build-ssr-mode.md) * [EventCatalog Scale license](https://eventcatalog.cloud) * Slack workspace with app creation permissions * API key for your chosen AI provider ## Repository[​](#repository "Direct link to Repository") The EventCatalog Slack Bot is open source: [github.com/event-catalog/eventcatalog-slack-bot](https://github.com/event-catalog/eventcatalog-slack-bot) --- # Slack app setup i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). Create a Slack app to enable the EventCatalog bot in your workspace. You can create the app using a manifest (recommended) or manually configure all settings. ## Create from manifest (recommended)[​](#create-from-manifest-recommended "Direct link to Create from manifest (recommended)") The fastest way to get started. The manifest automatically configures all required permissions and settings. ### Steps[​](#steps "Direct link to Steps") 1. Navigate to [api.slack.com/apps](https://api.slack.com/apps) 2. Click **Create New App** → **From an app manifest** 3. Select your workspace and click **Next** 4. Choose **YAML** and paste this manifest: ``` display_information: name: EventCatalog Bot description: Query your EventCatalog directly from Slack background_color: "#000000" features: bot_user: display_name: EventCatalog always_online: true oauth_config: scopes: bot: - app_mentions:read - chat:write - reactions:read - reactions:write - channels:history settings: event_subscriptions: bot_events: - app_mention - message.channels interactivity: is_enabled: false org_deploy_enabled: false socket_mode_enabled: true token_rotation_enabled: false ``` 5. Click **Next**, review the summary, and click **Create** ### Get credentials[​](#get-credentials "Direct link to Get credentials") After creating the app, collect three credentials needed to run the bot. #### App-Level Token[​](#app-level-token "Direct link to App-Level Token") 1. Go to **Basic Information** → **App-Level Tokens** 2. Click **Generate Token and Scopes** 3. Name: `socket-mode-token` 4. Add scope: `connections:write` 5. Click **Generate** and copy the token (starts with `xapp-`) 6. Save this as `SLACK_APP_TOKEN` #### Bot Token[​](#bot-token "Direct link to Bot Token") 1. Go to **OAuth & Permissions** 2. Click **Install to Workspace** 3. Review permissions and click **Allow** 4. Copy the **Bot User OAuth Token** (starts with `xoxb-`) 5. Save this as `SLACK_BOT_TOKEN` #### Signing Secret[​](#signing-secret "Direct link to Signing Secret") 1. Go to **Basic Information** → **App Credentials** 2. Copy the **Signing Secret** 3. Save this as `SLACK_SIGNING_SECRET` Setup Slack app manually If you prefer to configure settings yourself, follow these steps. ### Create the app[​](#create-the-app "Direct link to Create the app") 1. Navigate to [api.slack.com/apps](https://api.slack.com/apps) 2. Click **Create New App** → **From scratch** 3. Name your app (e.g., "EventCatalog Bot") and select your workspace 4. Click **Create App** ### Enable Socket Mode[​](#enable-socket-mode "Direct link to Enable Socket Mode") 1. Click **Socket Mode** in the left sidebar 2. Toggle **Enable Socket Mode** to On 3. Create an App-Level Token when prompted: * Name: `socket-mode-token` * Scope: `connections:write` 4. Click **Generate** 5. Copy the token (starts with `xapp-`) - this is `SLACK_APP_TOKEN` ### Configure permissions[​](#configure-permissions "Direct link to Configure permissions") 1. Click **OAuth & Permissions** in the left sidebar 2. Scroll to **Scopes** → **Bot Token Scopes** 3. Add these scopes: * `app_mentions:read` - Receive @mention events * `chat:write` - Send messages * `reactions:read` - Read reactions * `reactions:write` - Add and remove reactions * `channels:history` - Read public channel messages ### Enable events[​](#enable-events "Direct link to Enable events") 1. Click **Event Subscriptions** in the left sidebar 2. Toggle **Enable Events** to On 3. Expand **Subscribe to bot events** 4. Add these events: * `app_mention` * `message.channels` ### Install the app[​](#install-the-app "Direct link to Install the app") 1. Click **OAuth & Permissions** in the left sidebar 2. Click **Install to Workspace** 3. Review permissions and click **Allow** 4. Copy the **Bot User OAuth Token** (starts with `xoxb-`) - this is `SLACK_BOT_TOKEN` ### Get signing secret[​](#get-signing-secret "Direct link to Get signing secret") 1. Click **Basic Information** in the left sidebar 2. Scroll to **App Credentials** 3. Copy the **Signing Secret** - this is `SLACK_SIGNING_SECRET` ## Optional: Private channels and DMs[​](#optional-private-channels-and-dms "Direct link to Optional: Private channels and DMs") By default, the bot only reads thread context in public channels. To enable thread context in private channels and DMs, add these additional scopes: * `groups:history` - Private channels * `im:history` - Direct messages * `mpim:history` - Group DMs After adding scopes, reinstall the app to your workspace. --- # Troubleshooting i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). Common issues and solutions for the EventCatalog Slack Bot. ## Bot doesn't respond[​](#bot-doesnt-respond "Direct link to Bot doesn't respond") ### Check bot invitation[​](#check-bot-invitation "Direct link to Check bot invitation") The bot must be invited to the channel where you're trying to use it. **Solution:** 1. Navigate to the channel 2. Type `/invite @eventcatalog` (use your bot's actual name) 3. Try your question again ### Verify Socket Mode[​](#verify-socket-mode "Direct link to Verify Socket Mode") Socket Mode must be enabled in your Slack app settings. **Solution:** 1. Go to [api.slack.com/apps](https://api.slack.com/apps) 2. Select your app 3. Click **Socket Mode** in the sidebar 4. Verify it's toggled to **On** 5. Restart the bot ### Check bot logs[​](#check-bot-logs "Direct link to Check bot logs") Look for connection errors or startup issues. **Solution:** View logs based on how you're running the bot: ``` # Local development # Check terminal output # Docker docker compose logs -f # Docker (specific container) docker logs eventcatalog-slack-bot ``` Look for error messages about: * Missing credentials * Connection failures * License validation issues ## Missing API key error[​](#missing-api-key-error "Direct link to Missing API key error") The bot cannot find the API key for your configured AI provider. **Solution:** 1. Check your `.env` file contains the correct variable: ``` # For Anthropic ANTHROPIC_API_KEY=sk-ant-... # For OpenAI OPENAI_API_KEY=sk-... # For Google GOOGLE_GENERATIVE_AI_API_KEY=... ``` 2. Verify your config matches the environment variable: ``` ai: { provider: 'anthropic', // Must match your API key } ``` 3. Restart the bot after adding the key ## MCP connection errors[​](#mcp-connection-errors "Direct link to MCP connection errors") The bot cannot connect to your EventCatalog MCP server. ### Verify EventCatalog URL[​](#verify-eventcatalog-url "Direct link to Verify EventCatalog URL") **Solution:** 1. Check your config has the correct URL: ``` eventCatalog: { url: 'https://your-catalog.example.com', } ``` 2. Verify the URL is accessible from where the bot runs: ``` curl https://your-catalog.example.com/docs/mcp/ ``` 3. For Docker deployments, see [Docker networking](/docs/development/ask-your-architecture/slack-integration/deployment.md#docker-networking) ### Check MCP server status[​](#check-mcp-server-status "Direct link to Check MCP server status") **Solution:** 1. Visit your MCP endpoint in a browser: ``` https://your-catalog.example.com/docs/mcp/ ``` 2. You should see JSON output with available tools and resources 3. If you see an error, verify: * EventCatalog is running in [SSR mode](/docs/development/deployment/build-ssr-mode.md) * You have a valid [Scale license](https://eventcatalog.cloud) ### Authentication required[​](#authentication-required "Direct link to Authentication required") If your EventCatalog requires authentication, add headers to your config. **Solution:** ``` eventCatalog: { url: 'https://your-catalog.example.com', headers: { 'Authorization': 'Bearer your-token', }, } ``` ## Permission errors[​](#permission-errors "Direct link to Permission errors") The bot is missing required Slack permissions. **Solution:** 1. Go to [api.slack.com/apps](https://api.slack.com/apps) 2. Select your app 3. Click **OAuth & Permissions** 4. Verify these **Bot Token Scopes** are added: * `app_mentions:read` * `chat:write` * `reactions:read` * `reactions:write` * `channels:history` 5. If you added new scopes, click **Reinstall to Workspace** 6. Restart the bot ## Auto-reply channels not working[​](#auto-reply-channels-not-working "Direct link to Auto-reply channels not working") The bot doesn't auto-reply in configured channels. ### Verify channel ID[​](#verify-channel-id "Direct link to Verify channel ID") **Solution:** 1. Get the correct channel ID: * Right-click channel name * Click **View channel details** * Scroll to bottom for Channel ID 2. Check your config uses the ID (not name): ``` slack: { autoReplyChannels: ['C0123456789'], // Channel ID, not #channel-name } ``` 3. Restart the bot after changing config ### Check event subscription[​](#check-event-subscription "Direct link to Check event subscription") **Solution:** 1. Go to [api.slack.com/apps](https://api.slack.com/apps) 2. Select your app 3. Click **Event Subscriptions** 4. Verify **Enable Events** is On 5. Check `message.channels` is in **Subscribe to bot events** ## Thread context not working[​](#thread-context-not-working "Direct link to Thread context not working") The bot doesn't remember previous messages in a thread. ### Public channels[​](#public-channels "Direct link to Public channels") Thread context should work automatically in public channels. **Solution:** 1. Verify `channels:history` scope is added 2. Reinstall the app if you just added the scope 3. Restart the bot ### Private channels and DMs[​](#private-channels-and-dms "Direct link to Private channels and DMs") Thread context requires additional scopes. **Solution:** 1. Go to [api.slack.com/apps](https://api.slack.com/apps) 2. Select your app 3. Click **OAuth & Permissions** 4. Add these scopes: * `groups:history` - Private channels * `im:history` - Direct messages * `mpim:history` - Group DMs 5. Click **Reinstall to Workspace** 6. Restart the bot ## Docker networking issues[​](#docker-networking-issues "Direct link to Docker networking issues") The bot cannot reach EventCatalog running on localhost. **Solution:** See the [Docker networking guide](/docs/development/ask-your-architecture/slack-integration/deployment.md#docker-networking) for detailed solutions based on your setup. Quick fix for local EventCatalog: ``` eventCatalog: { url: 'http://host.docker.internal:3000', } ``` ## License validation errors[​](#license-validation-errors "Direct link to License validation errors") The bot reports an invalid or expired license. **Solution:** 1. Verify your license key is correct in `.env`: ``` EVENTCATALOG_SCALE_LICENSE_KEY=XXXX-XXXX-XXXX-XXXX-XXXX-XXXX ``` 2. Check your license status at [eventcatalog.cloud](https://eventcatalog.cloud) 3. For expired trials, upgrade to a paid plan 4. Restart the bot after updating the key ## Getting help[​](#getting-help "Direct link to Getting help") If you're still experiencing issues: 1. Check the bot logs for detailed error messages 2. Review the [GitHub repository](https://github.com/event-catalog/eventcatalog-slack-bot) for known issues 3. Join the [EventCatalog Discord](https://eventcatalog.dev/discord) for community support 4. File an issue on [GitHub](https://github.com/event-catalog/eventcatalog-slack-bot/issues) with: * Bot version * Error messages from logs * Steps to reproduce the issue --- # Using the bot i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). Interact with the EventCatalog Slack Bot to query your architecture documentation. The bot responds to @mentions and can auto-reply in dedicated channels. ## @Mention in any channel[​](#mention-in-any-channel "Direct link to @Mention in any channel") Invite the bot to any channel and @mention it to ask questions. The bot replies in a thread to keep channels organized. ### Example questions[​](#example-questions "Direct link to Example questions") ``` @eventcatalog Tell me about the OrderCreated event ``` ``` @eventcatalog What services consume the InventoryUpdated event? ``` ``` @eventcatalog List all events in the Orders domain ``` ``` @eventcatalog Show me the schema for the PaymentProcessed event ``` The bot reads your EventCatalog documentation and provides detailed answers grounded in your architecture. ## Dedicated auto-reply channels[​](#dedicated-auto-reply-channels "Direct link to Dedicated auto-reply channels") Create a channel where the bot automatically responds to every message - no @mention needed. This gives your team a dedicated space for architecture questions. ### Setup[​](#setup "Direct link to Setup") 1. Create a new channel (e.g., `#ask-eventcatalog` or `#ask-eda`) 2. Invite the bot to the channel 3. Get the channel ID: * Right-click the channel name * Click **View channel details** * Scroll to the bottom to find the Channel ID 4. Add the channel ID to your config: ``` slack: { autoReplyChannels: ['C0123456789'], } ``` 5. Restart the bot Now anyone can post questions directly in the channel and receive instant answers. ### Multiple channels[​](#multiple-channels "Direct link to Multiple channels") Configure multiple auto-reply channels: ``` slack: { autoReplyChannels: ['C0123456789', 'C9876543210'], } ``` ## Thread context[​](#thread-context "Direct link to Thread context") The bot automatically reads conversation history in threads. This enables natural follow-up questions without repeating context. ### Example conversation[​](#example-conversation "Direct link to Example conversation") **User:** Tell me about the OrderCreated event **Bot:** The OrderCreated event is published when... **User:** What are its consumers? **Bot:** Based on our earlier discussion about OrderCreated, the consumers are... **User:** Show me the schema **Bot:** Here's the schema for OrderCreated... Thread context works automatically in public channels. For private channels and DMs, add optional scopes to your Slack app: * `groups:history` - Private channels * `im:history` - Direct messages * `mpim:history` - Group DMs After adding scopes, reinstall the app to your workspace. ## Best practices[​](#best-practices "Direct link to Best practices") ### Ask specific questions[​](#ask-specific-questions "Direct link to Ask specific questions") The bot performs best with clear, specific questions: **Good:** * "What services consume the OrderCreated event?" * "Show me all events in the Payment domain" * "What's the schema format for UserRegistered?" **Less effective:** * "Tell me about everything" * "What does this system do?" ### Use thread conversations[​](#use-thread-conversations "Direct link to Use thread conversations") Keep related questions in the same thread. The bot uses thread history to provide better context-aware answers. ### Name resources clearly[​](#name-resources-clearly "Direct link to Name resources clearly") Mention specific event names, service names, or domain names to get precise answers: * "Tell me about the **OrderCreated** event" * "What events does the **PaymentService** produce?" * "List all events in the **Orders** domain" ## Invite the bot to channels[​](#invite-the-bot-to-channels "Direct link to Invite the bot to channels") The bot can only see messages in channels where it's invited. ### Invite the bot[​](#invite-the-bot "Direct link to Invite the bot") 1. Navigate to the channel 2. Click the channel name at the top 3. Click the **Integrations** tab 4. Click **Add an app** 5. Search for your bot and add it Alternatively, type `/invite @eventcatalog` in the channel. --- # Enabling authentication **Added in** `eventcatalog@2.43.0` i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). To enable authentication for your site, you will need to do three things: 1. [Setup Environment](#setup-environment) 2. [Enable EventCatalog Server Side Rendering (SSR)](#enable-eventcatalog-server-side-rendering-ssr) 3. [Create your `eventcatalog.auth.js` file](#create-your-eventcatalogauthjs-file) Authentication is a paid feature Authentication is a paid feature, and is available on EventCatalog Scale and Enterprise plans. You can get a 14 day free trial of EventCatalog Scale and Enterprise [here](https://www.eventcatalog.dev/pricing). You will need to set your license key in your `.env` file. .env ``` EVENTCATALOG_LICENSE_KEY=your-license-key ``` ### Setup Environment[​](#setup-environment "Direct link to Setup Environment") EventCatalog uses [Auth.js](https://authjs.dev/) to handle the authentication flow. Auth.js libraries require you to set an `AUTH_SECRET` environment variable. This is used to encrypt cookies and tokens. It should be a cryptographically secure random string of at least 32 characters: This is the only strictly required environment variable. It is the secret used to encode the JWT and encrypt things in transit. We recommend at least a 32 character random string. This can be generated via openssl with `openssl rand -base64 33`. .env ``` AUTH_SECRET=your-secret ``` #### AUTH\_TRUST\_HOST[​](#auth_trust_host "Direct link to AUTH_TRUST_HOST") When running EventCatalog behind a reverse proxy (Kubernetes/AKS, Nginx, Cloudflare, AWS ALB, etc.), you must set `AUTH_TRUST_HOST=true`. Without it, Auth.js falls back to the internal container URL (e.g. `http://localhost:3000`) instead of the real domain, which causes login and sign-out to fail with CSRF/cross-site errors such as "Cross-site POST form submissions are forbidden". .env ``` AUTH_TRUST_HOST=true ``` Setting this tells Auth.js to trust the `x-forwarded-host` and `x-forwarded-proto` headers forwarded by your proxy so it can resolve the correct callback URL. Vercel and Cloudflare Pages You do not need to set `AUTH_TRUST_HOST` when deploying to Vercel or Cloudflare Pages - it is inferred automatically. It is also not required in local development. To learn more, refer to the [Auth.js deployment documentation](https://authjs.dev/getting-started/deployment#auth_trust_host). ### Enable EventCatalog Server Side Rendering (SSR)[​](#enable-eventcatalog-server-side-rendering-ssr "Direct link to Enable EventCatalog Server Side Rendering (SSR)") Authentication requires EventCatalog to be SSR enabled. This is because EventCatalog needs to be able to access the user's session to determine if they are authenticated. To enable SSR, you will need to add the following to your `eventcatalog.config.js` file: eventcatalog.config.js ``` module.exports = { // ... other config options output: 'server', }; ``` This will ensure that EventCatalog is rendered on the server side, and that the user's session is available to the client. Deploying EventCatalog in SSR mode You will be running EventCatalog in SSR mode when you deploy your site. This means the output of your site will require a server to be running. You can use EventCatalog Docker file to deploy your site or read our [deployment guide](https://www.eventcatalog.dev/docs/deployment/overview) for more information. ### Create your `eventcatalog.auth.js` file[​](#create-your-eventcatalogauthjs-file "Direct link to create-your-eventcatalogauthjs-file") The `eventcatalog.auth.js` file is used to configure the authentication for your site, and is created in the root of your EventCatalog project. eventcatalog.auth.js ``` module.exports = { // Enable debug mode for development debug: false, // List of providers you want to enable providers: { github: { clientId: process.env.GITHUB_CLIENT_ID, clientSecret: process.env.GITHUB_CLIENT_SECRET, }, }, // Optional session configuration session?: { // 30 days default maxAge?: number; }; }; ``` Once you have these three things, you can start setting up your authentication providers. ### Setting up your authentication providers[​](#setting-up-your-authentication-providers "Direct link to Setting up your authentication providers") EventCatalog supports a range of authentication providers, and you can find the documentation for each provider below. [Scale](/docs/development/authentication/providers/setting-up-github.md) ### [Setting up GitHub](/docs/development/authentication/providers/setting-up-github.md) [Scale](/docs/development/authentication/providers/setting-up-google.md) ### [Setting up Google](/docs/development/authentication/providers/setting-up-google.md) [Enterprise](/docs/development/authentication/providers/setting-up-azure-ad.md) ### [Setting up Azure AD](/docs/development/authentication/providers/setting-up-azure-ad.md) [Enterprise](/docs/development/authentication/providers/setting-up-okta.md) ### [Setting up Okta](/docs/development/authentication/providers/setting-up-okta.md) [Enterprise](/docs/development/authentication/providers/setting-up-auth0.md) ### [Setting up Auth0](/docs/development/authentication/providers/setting-up-auth0.md) Missing a provider? [Let us know](https://github.com/event-catalog/eventcatalog/issues/new) and we'll add it to the list. --- # Authentication Guide Feature: `EventCatalog Scale Plan Feature` **Added in** `eventcatalog@2.43.0` EventCatalog provides secure authentication to control access to your event-driven architecture documentation. Whether you're a small team getting started or a large enterprise with complex identity requirements, EventCatalog's flexible authentication system grows with your needs. [YouTube video player](https://www.youtube.com/embed/OVbXNP0Ns_U?si=TagMKL49ZD_G_HYE) ## How it works[​](#how-it-works "Direct link to How it works") EventCatalog uses industry-standard **OpenID Connect (OIDC)** and **OAuth 2.0** protocols to integrate with your identity provider. Here's the authentication flow: 1. **User visits EventCatalog** and attempts to access protected documentation 2. **Redirected to your identity provider** (GitHub, Google, Auth0, etc.) 3. **User authenticates** with their existing credentials 4. **Provider confirms identity** and sends user back to EventCatalog 5. **User gains access** to your documentation and architecture ![Authentication](/assets/images/auth-e7145640199bf3efb1c85d295b1d8ae4.png) EventCatalog runs in **SSR mode** to handle authentication sessions and uses [Auth.js](https://authjs.dev/) to manage the authentication flow securely. ## Authentication by Plan[​](#authentication-by-plan "Direct link to Authentication by Plan") EventCatalog Authentication is a **paid feature** available in Scale and Enterprise plans. #### Scale Plan[​](#scale-plan "Direct link to Scale Plan") Perfect for growing teams that need secure collaboration with popular business providers: * **GitHub** - Ideal for development teams already using GitHub #### Enterprise Plan[​](#enterprise-plan "Direct link to Enterprise Plan") Designed for large organizations with dedicated identity management systems: * **Microsoft Azure AD (Entra ID)** - For organizations using Office 365 and Azure * **Auth0** - Developer-friendly identity platform with advanced features * **Okta** - Popular enterprise identity platform with custom claims * **Custom OIDC** - Contact us to add your provider at ## Why EventCatalog Authentication?[​](#why-eventcatalog-authentication "Direct link to Why EventCatalog Authentication?") * ✅ **No new passwords** - Users authenticate with accounts they already have * ✅ **Secure by default** - Leverage enterprise-grade security from major providers * ✅ **Single sign-on experience** - Seamless access across your tools * ✅ **Centralized management** - Control access through your existing identity systems * ✅ **Team collaboration** - Secure access for distributed teams ## Getting Started[​](#getting-started "Direct link to Getting Started") Ready to secure your EventCatalog with authentication? **New to EventCatalog?** Start your **14-day free trial** at [EventCatalog.cloud](https://eventcatalog.cloud) to explore all authentication features. ## Next steps[​](#next-steps "Direct link to Next steps") Ready to get started? Let's enable authentication in your EventCatalog project: → [Enabling Authentication](/docs/development/authentication/enabling-authentication.md) **Questions?** Join our [Discord community](https://discord.gg/eventcatalog) for support and guidance. --- ## [📄️ GitHub](/docs/development/authentication/providers/setting-up-github.md) [Setting up GitHub authentication for EventCatalog](/docs/development/authentication/providers/setting-up-github.md) --- # Setting up Auth0 **Added in** `eventcatalog@2.43.1` i This feature is available on the [Enterprise](/pricing.md) [ plan](/pricing.md). info This guide takes your through setting up a protected sign-in screen for your docs. Before going through this guide, make sure you've first gone through [Enabling authentication](/docs/development/authentication/enabling-authentication.md). To setup your EventCatalog site with visitor authentication using [Auth0](https://auth0.com/), the process looks as follows: 1. [Create a new Auth0 application](#create-a-new-auth0-application) 2. [Configure the Auth0 app in EventCatalog](#configure-the-auth0-app-in-eventcatalog) 3. [Test the authentication](#test-the-authentication) ## Create a new Auth0 application[​](#create-a-new-auth0-application "Direct link to Create a new Auth0 application") First, you will need to create a new Auth0 application in your Auth0 Dashboard. 1. Go to [auth0.com](https://auth0.com) and sign up for a free account or login 2. In the Auth0 Dashboard, navigate to **Applications** → **Applications** 3. Click **Create Application** 4. Fill in the application details: * **Name:** `EventCatalog` * **Application Type:** Select **Regular Web Applications** 5. Click **Create** 6. In your new application's **Settings** tab, configure the following: * **Allowed Callback URLs:** * Production: `{YOUR_EVENTCATALOG_SITE_URL}/api/auth/callback/auth0` * Local development: `http://localhost:3000/api/auth/callback/auth0` * **Allowed Logout URLs:** * Production: `{YOUR_EVENTCATALOG_SITE_URL}` * Local development: `http://localhost:3000` * **Allowed Web Origins:** * Production: `{YOUR_EVENTCATALOG_SITE_URL}` * Local development: `http://localhost:3000` * **Allowed Origins (CORS):** * Production: `{YOUR_EVENTCATALOG_SITE_URL}` * Local development: `http://localhost:3000` 7. Leave **Initiate Login URI** empty (not required) 8. Click **Save Changes** 9. Copy the **Domain**, **Client ID**, and **Client Secret** from the app settings ## Configure the Auth0 app in EventCatalog[​](#configure-the-auth0-app-in-eventcatalog "Direct link to Configure the Auth0 app in EventCatalog") Add your Auth0 Domain, Client ID, and Client Secret to your `.env` file. .env ``` AUTH_AUTH0_ID={YOUR_AUTH0_CLIENT_ID} AUTH_AUTH0_SECRET={YOUR_AUTH0_CLIENT_SECRET} AUTH_AUTH0_ISSUER=https://{YOUR_AUTH0_DOMAIN} ``` Your Auth0 issuer URL should be in the format: (this is the Domain from your Auth0 application settings). In your eventcatalog.auth.js file, add the following: eventcatalog.auth.js ``` export default { enabled: true, providers: { auth0: { clientId: process.env.AUTH_AUTH0_ID, clientSecret: process.env.AUTH_AUTH0_SECRET, issuer: process.env.AUTH_AUTH0_ISSUER, }, }, }; ``` ## Test the authentication[​](#test-the-authentication "Direct link to Test the authentication") ![Okta authentication](/assets/images/auth0-auth-deec02ff9bc2ab11bc6f78bcf4b4403c.png) Restart your EventCatalog server and test the authentication. ``` npm run dev ``` All pages should now be protected and require an Auth0 account to access. 1. Navigate to your EventCatalog site 2. You should be redirected to the sign-in page 3. Click Sign in with Auth0 4. You'll be redirected to your Auth0 login page 5. Enter your credentials or sign up for a new account 6. After successful authentication, you'll be redirected back to EventCatalog ## Found an issue?[​](#found-an-issue "Direct link to Found an issue?") Remember to setup the prerequisites for this guide: * [Enabling authentication](/docs/development/authentication/enabling-authentication.md) If you still have problems, please [let us know](https://github.com/eventcatalog/eventcatalog/issues/new/choose). --- # Setting up Azure AD (Entra ID) **Added in** `eventcatalog@2.43.1` i This feature is available on the [Enterprise](/pricing.md) [ plan](/pricing.md). info This guide takes your through setting up a protected sign-in screen for your docs. Before going through this guide, make sure you've first gone through [Enabling authentication](/docs/development/authentication/enabling-authentication.md). To setup your EventCatalog site with visitor authentication using [Microsoft Entra ID](https://entra.microsoft.com/) (formerly Azure Active Directory), the process looks as follows: 1. [Create a new Azure app registration](#create-a-new-azure-app-registration) 2. [Configure the Azure app in EventCatalog](#configure-the-azure-app-in-eventcatalog) 3. [Test the authentication](#test-the-authentication) ## Create a new Azure app registration[​](#create-a-new-azure-app-registration "Direct link to Create a new Azure app registration") First, you will need to create a new app registration in the Azure portal. 1. Go to [portal.azure.com](https://portal.azure.com) and sign up for a free account or login 2. Search for **Microsoft Entra ID** (or **Azure Active Directory**) in the top search bar 3. Navigate to **App registrations** → **New registration** 4. Fill in the application details: * **Name:** `EventCatalog` * **Supported account types:** Select **Accounts in any organizational directory and personal Microsoft accounts** (for broader compatibility) * **Redirect URI:** Select **Web** and enter: * Local development: `http://localhost:3000/api/auth/callback/microsoft-entra-id` 5. Click **Register** 6. After registration, note the **Application (client) ID** and **Directory (tenant) ID** from the Overview page 7. Navigate to **Certificates & secrets** → **New client secret** 8. Add a description (e.g., "EventCatalog Secret") and choose an expiration period 9. Click **Add** and immediately copy the secret **Value** (you won't see it again) 10. Go to **Authentication** in the sidebar and configure: * Add additional redirect URIs for production: `{YOUR_EVENTCATALOG_SITE_URL}/api/auth/callback/microsoft-entra-id` * Under **Implicit grant and hybrid flows**, check **ID tokens** * Click **Save** ## Configure the Azure app in EventCatalog[​](#configure-the-azure-app-in-eventcatalog "Direct link to Configure the Azure app in EventCatalog") Add your Azure AD Client ID, Client Secret, and Tenant ID to your `.env` file. .env ``` AUTH_MICROSOFT_ENTRA_ID_ID={YOUR_AZURE_CLIENT_ID} AUTH_MICROSOFT_ENTRA_ID_SECRET={YOUR_AZURE_CLIENT_SECRET} AUTH_MICROSOFT_ENTRA_ID_ISSUER=https://login.microsoftonline.com/{YOUR_AZURE_TENANT_ID}/v2.0 ``` Your Azure AD tenant ID can be found in your app registration's Overview page in the Azure portal. In your eventcatalog.auth.js file, add the following: eventcatalog.auth.js ``` export default { enabled: true, providers: { entra: { clientId: process.env.AUTH_MICROSOFT_ENTRA_ID_ID, clientSecret: process.env.AUTH_MICROSOFT_ENTRA_ID_SECRET, issuer: process.env.AUTH_MICROSOFT_ENTRA_ID_ISSUER, }, }, }; ``` ## Test the authentication[​](#test-the-authentication "Direct link to Test the authentication") ![Okta authentication](/assets/images/microsoft-auth-1908b7e166ba764277a532755225585d.png) Restart your EventCatalog server and test the authentication. ``` npm run dev ``` All pages should now be protected and require a Microsoft account to access. 1. Navigate to your EventCatalog site 2. You should be redirected to the sign-in page 3. Click Sign in with Azure AD 4. You'll be redirected to Microsoft's login page 5. Enter your Microsoft account credentials (personal or organizational) 6. After successful authentication, you'll be redirected back to EventCatalog ## Found an issue?[​](#found-an-issue "Direct link to Found an issue?") Remember to setup the prerequisites for this guide: * [Enabling authentication](/docs/development/authentication/enabling-authentication.md) If you still have problems, please [let us know](https://github.com/eventcatalog/eventcatalog/issues/new/choose). --- # Setting up GitHub **Added in** `eventcatalog@2.43.0` i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). info This guide takes your through setting up a protected sign-in screen for your docs. Before going through this guide, make sure you’ve first gone through [Enabling authentication](/docs/development/authentication/enabling-authentication.md). To setup your EventCatalog site with visitor authentication using [GitHub](https://github.com/), the process looks as follows: 1. Create a new GitHub OAuth app 2. Configure the OAuth app in EventCatalog 3. Test the authentication ## Create a new GitHub OAuth app[​](#create-a-new-github-oauth-app "Direct link to Create a new GitHub OAuth app") First, you will need to create a new GitHub OAuth app. 1. Go to [GitHub Developer Settings](https://github.com/settings/developers) 2. Click on "New OAuth App" 3. Fill in the details for your app * **Application name:** `EventCatalog` * **Homepage URL:** `{YOUR_EVENTCATALOG_SITE_URL}` * Local development: `http://localhost:3000` * **Authorization callback URL:** `{YOUR_EVENTCATALOG_SITE_URL}/api/auth/callback/github` * Local development: `http://localhost:3000/api/auth/callback/github` 4. Click on "Register application" 5. Copy the Client ID and Client Secret ## Configure the OAuth app in EventCatalog[​](#configure-the-oauth-app-in-eventcatalog "Direct link to Configure the OAuth app in EventCatalog") Add your GitHub Client ID and Client Secret to your `.env` file. .env ``` AUTH_GITHUB_CLIENT_ID={YOUR_GITHUB_CLIENT_ID} AUTH_GITHUB_CLIENT_SECRET={YOUR_GITHUB_CLIENT_SECRET} ``` In your `eventcatalog.auth.js` file, add the following: eventcatalog.auth.js ``` export default { providers: { github: { clientId: process.env.AUTH_GITHUB_CLIENT_ID, clientSecret: process.env.AUTH_GITHUB_CLIENT_SECRET, }, }, }; ``` ## Test the authentication[​](#test-the-authentication "Direct link to Test the authentication") Restart your EventCatalog server and test the authentication. ``` npm run dev ``` All pages should now be protected and require a GitHub account to access. ![GitHub authentication](/assets/images/github-auth-00b5c9b360b67325573c070bcb83018b.png) ## Found an issue?[​](#found-an-issue "Direct link to Found an issue?") Remember to setup the prerequisites for this guide: * [Enabling authentication](/docs/development/authentication/enabling-authentication.md) If you still have problems, please [let us know](https://github.com/eventcatalog/eventcatalog/issues/new/choose). --- # Setting up Google **Added in** `eventcatalog@2.43.3` i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). info This guide takes your through setting up a protected sign-in screen for your docs. Before going through this guide, make sure you've first gone through [Enabling authentication](/docs/development/authentication/enabling-authentication.md). To setup your EventCatalog site with visitor authentication using [Google](https://accounts.google.com/), the process looks as follows: 1. Create a new Google OAuth app 2. Configure the OAuth app in EventCatalog 3. Test the authentication ## Create a new Google OAuth app[​](#create-a-new-google-oauth-app "Direct link to Create a new Google OAuth app") First, you will need to create a new Google OAuth app in the Google Cloud Console. 1. Go to [Google Cloud Console](https://console.cloud.google.com/) 2. Create a new project or select an existing one 3. Navigate to "APIs & Services" → "Library" 4. Search for and enable the "Google+ API" 5. Go to "APIs & Services" → "Credentials" 6. Click "Create Credentials" → "OAuth client ID" 7. If prompted, configure the OAuth consent screen: * Choose "External" for testing * Fill in app name: `EventCatalog` * Add your user support email and developer contact email * Save and continue through the remaining screens 8. Create the OAuth client ID: * **Application type:** Web application * **Name:** `EventCatalog` * **Authorized JavaScript origins:** `{YOUR_EVENTCATALOG_SITE_URL}` * Local development: `http://localhost:3000` * **Authorized redirect URIs:** `{YOUR_EVENTCATALOG_SITE_URL}/api/auth/callback/google` * Local development: `http://localhost:3000/api/auth/callback/google` 9. Click "Create" and copy the Client ID and Client Secret ## Configure the OAuth app in EventCatalog[​](#configure-the-oauth-app-in-eventcatalog "Direct link to Configure the OAuth app in EventCatalog") Add your Google Client ID and Client Secret to your `.env` file. .env ``` AUTH_GOOGLE_CLIENT_ID={YOUR_GOOGLE_CLIENT_ID} AUTH_GOOGLE_CLIENT_SECRET={YOUR_GOOGLE_CLIENT_SECRET} ``` In your eventcatalog.auth.js file, add the following: eventcatalog.auth.js ``` export default { enabled: true, google: { clientId: process.env.AUTH_GOOGLE_CLIENT_ID, clientSecret: process.env.AUTH_GOOGLE_CLIENT_SECRET, }, } ``` ## Test the authentication[​](#test-the-authentication "Direct link to Test the authentication") Restart your EventCatalog server and test the authentication. ``` npm run dev ``` All pages should now be protected and require a Google account to access. ![Google authentication](/assets/images/google-auth-a12a93f3c8eeb31fc479c3cbc914d1ea.png) ## Found an issue?[​](#found-an-issue "Direct link to Found an issue?") Remember to setup the prerequisites for this guide: * [Enabling authentication](/docs/development/authentication/enabling-authentication.md) If you still have problems, please [let us know](https://github.com/eventcatalog/eventcatalog/issues/new/choose). --- # Setting up Okta **Added in** `eventcatalog@2.43.0` i This feature is available on the [Enterprise](/pricing.md) [ plan](/pricing.md). info This guide takes your through setting up a protected sign-in screen for your docs. Before going through this guide, make sure you've first gone through [Enabling authentication](/docs/development/authentication/enabling-authentication.md). To setup your EventCatalog site with visitor authentication using [Okta](https://www.okta.com/), the process looks as follows: 1. Create a new Okta OAuth app 2. Configure the OAuth app in EventCatalog 3. Test the authentication ## Create a new Okta OAuth app[​](#create-a-new-okta-oauth-app "Direct link to Create a new Okta OAuth app") First, you will need to create a new Okta OAuth app in your Okta Admin Console. 1. Log in to your **[Okta Admin Console](https://login.okta.com/signin)** 2. Navigate to **Applications** → **Applications** 3. Click **Create App Integration** 4. Select **OIDC - OpenID Connect** as the sign-in method 5. Select **Web Application** as the application type 6. Click **Next** 7. Fill in the application details: * **App integration name:** `EventCatalog` * **Grant types:** Check `Authorization Code` * **Sign-in redirect URIs:** * Production: `{YOUR_EVENTCATALOG_SITE_URL}/api/auth/callback/okta` * Local development: `http://localhost:3000/api/auth/callback/okta` * **Sign-out redirect URIs:** * Production: `{YOUR_EVENTCATALOG_SITE_URL}` * Local development: `http://localhost:3000` 8. Under **Assignments**, choose who can access this application: * **Allow everyone in your organization to access** (recommended) * Or assign to specific groups 9. Click **Save** 10. Copy the **Client ID** and **Client Secret** from the app settings 11. Note your **Okta domain** (e.g., `https://your-domain.okta.com`) ## Configure the OAuth app in EventCatalog[​](#configure-the-oauth-app-in-eventcatalog "Direct link to Configure the OAuth app in EventCatalog") Add your Okta Client ID, Client Secret, and Issuer to your `.env` file. .env ``` AUTH_OKTA_CLIENT_ID={YOUR_OKTA_CLIENT_ID} AUTH_OKTA_CLIENT_SECRET={YOUR_OKTA_CLIENT_SECRET} AUTH_OKTA_ISSUER=https://{YOUR_OKTA_DOMAIN} ``` Your Okta issuer URL should be in the format: (without /oauth2/default unless you're using a custom authorization server). In your eventcatalog.auth.js file, add the following: eventcatalog.auth.js ``` export default { enabled: true, providers: { okta: { clientId: process.env.AUTH_OKTA_CLIENT_ID, clientSecret: process.env.AUTH_OKTA_CLIENT_SECRET, issuer: process.env.AUTH_OKTA_ISSUER, }, }, }; ``` ## Test the authentication[​](#test-the-authentication "Direct link to Test the authentication") ![Okta authentication](/assets/images/okta-auth-00f0dc6f658695ce0a8179e8c02cd3e9.png) Restart your EventCatalog server and test the authentication. ``` npm run dev ``` All pages should now be protected and require an Okta account to access. 1. Navigate to your EventCatalog site 2. You should be redirected to the sign-in page 3. Click Sign in with Okta 4. You'll be redirected to your Okta login page 5. Enter your Okta credentials 6. After successful authentication, you'll be redirected back to EventCatalog ## Found an issue?[​](#found-an-issue "Direct link to Found an issue?") Remember to setup the prerequisites for this guide: * [Enabling authentication](/docs/development/authentication/enabling-authentication.md) If you still have problems, please [let us know](https://github.com/eventcatalog/eventcatalog/issues/new/choose). --- **Added in** `eventcatalog@2.44.0` i This feature is available on the [Enterprise](/pricing.md) [ plan](/pricing.md). # Role-Based Access Control (RBAC) Middleware EventCatalog supports **Role-Based Access Control (RBAC)** through custom middleware, allowing you to control user access to specific pages and sections based on their roles and groups. ## How it works[​](#how-it-works "Direct link to How it works") The RBAC middleware integrates with EventCatalog's authentication system to provide fine-grained access control: 1. **User authenticates** through your configured identity provider 2. **Middleware evaluates** the user's roles and groups against defined access rules 3. **Access is granted or denied** based on the matching rules for the requested path 4. **User sees appropriate content** or receives a 403 Forbidden response ## Prerequisites[​](#prerequisites "Direct link to Prerequisites") Before setting up RBAC middleware, ensure you have: * ✅ [Authentication enabled](/docs/development/authentication/enabling-authentication.md) in your EventCatalog * ✅ An authentication provider configured (GitHub, Google, Azure AD, etc.) * ✅ User roles and groups configured in your identity provider ## Setting up RBAC Middleware[​](#setting-up-rbac-middleware "Direct link to Setting up RBAC Middleware") ### 1. Create the middleware file[​](#1-create-the-middleware-file "Direct link to 1. Create the middleware file") Create a `middleware.ts` file in the root of your EventCatalog project: middleware.ts ``` import type { MiddlewareHandler } from 'astro'; interface Locals { hasRole: (role: string) => boolean; hasGroup: (group: string) => boolean; findMatchingRule: (rules: Record boolean>, pathname: string) => (() => boolean) | null; } export const rbacMiddleware: MiddlewareHandler = async (context, next) => { const { locals, url } = context; const pathname = url.pathname; // Utility functions are available in the locals object const { hasRole, hasGroup, findMatchingRule } = locals as Locals; // Define your access rules // Maps page routes to a function that returns true if the user has access, false otherwise // You can use wildcards to match multiple paths const accessRules = { '/docs/domains/E-Commerce/*': () => !hasGroup('Viewer'), '/visualiser/domains/E-Commerce/*': () => !hasGroup('Viewer'), '/docs/services/payment/*': () => hasRole('Developer') || hasRole('Admin'), '/admin/*': () => hasRole('Admin'), }; if (findMatchingRule) { // Find matching rule for the current path const rule = findMatchingRule(accessRules, pathname); if (rule && !rule()) { return new Response('Forbidden', { status: 403 }); } } return next(); }; ``` ### 2. Configure your access rules[​](#2-configure-your-access-rules "Direct link to 2. Configure your access rules") The `accessRules` object defines path-based access control: ``` const accessRules = { // Block 'Viewer' group from E-Commerce domain docs '/docs/domains/E-Commerce/*': () => !hasGroup('Viewer'), // Require 'Developer' or 'Admin' role for payment services '/docs/services/payment/*': () => hasRole('Developer') || hasRole('Admin'), // Admin-only sections '/admin/*': () => hasRole('Admin'), // Multiple conditions '/docs/sensitive/*': () => hasRole('Admin') && !hasGroup('External'), }; ``` ### 3. Available helper functions[​](#3-available-helper-functions "Direct link to 3. Available helper functions") The middleware provides several helper functions through `locals`: #### `hasRole(role: string)`[​](#hasrolerole-string "Direct link to hasrolerole-string") Checks if the user has a specific role: ``` hasRole('Admin') // Returns true if user has Admin role hasRole('Developer') // Returns true if user has Developer role ``` #### `hasGroup(group: string)`[​](#hasgroupgroup-string "Direct link to hasgroupgroup-string") Checks if the user belongs to a specific group: ``` hasGroup('Viewer') // Returns true if user is in Viewer group hasGroup('External') // Returns true if user is in External group ``` #### `findMatchingRule(rules, pathname)`[​](#findmatchingrulerules-pathname "Direct link to findmatchingrulerules-pathname") Finds the first matching rule for a given pathname using glob patterns: ``` // Matches paths like: // - /docs/domains/E-Commerce/orders // - /docs/domains/E-Commerce/products/catalog '/docs/domains/E-Commerce/*': () => hasRole('Developer') ``` ## Access Rule Patterns[​](#access-rule-patterns "Direct link to Access Rule Patterns") ### Path-based rules[​](#path-based-rules "Direct link to Path-based rules") Control access to specific pages or sections using exact paths or wildcard patterns. ``` const accessRules = { // Exact path match '/admin/settings': () => hasRole('Admin'), // Wildcard matching '/docs/domains/Banking/*': () => hasGroup('Banking-Team'), // Multiple level wildcards '/api/*/internal/*': () => hasRole('Internal-Developer'), }; ``` ### Role-based rules[​](#role-based-rules "Direct link to Role-based rules") Define access permissions based on user roles with single or multiple role requirements. ``` const accessRules = { // Single role requirement '/admin/*': () => hasRole('Admin'), // Multiple role options (OR) '/docs/api/*': () => hasRole('Developer') || hasRole('Architect'), // Multiple role requirements (AND) '/sensitive/*': () => hasRole('Admin') && hasRole('Security-Cleared'), }; ``` ### Group-based rules[​](#group-based-rules "Direct link to Group-based rules") Manage access using group membership with inclusion, exclusion, or complex group logic. ``` const accessRules = { // Exclude specific groups '/public/*': () => !hasGroup('External'), // Include specific groups '/team-docs/*': () => hasGroup('Internal-Team'), // Complex group logic '/project-alpha/*': () => hasGroup('Alpha-Team') || hasGroup('Leadership'), }; ``` ## Common use cases[​](#common-use-cases "Direct link to Common use cases") ### Department-based access[​](#department-based-access "Direct link to Department-based access") Organize access control around your organizational structure, ensuring teams only see documentation relevant to their department. ``` const accessRules = { '/docs/domains/HR/*': () => hasGroup('HR-Department'), '/docs/domains/Finance/*': () => hasGroup('Finance-Department'), '/docs/domains/Engineering/*': () => hasGroup('Engineering-Department'), }; ``` ### Hierarchical permissions[​](#hierarchical-permissions "Direct link to Hierarchical permissions") Create layered access levels where higher privilege users can access all lower-level content. ``` const accessRules = { '/docs/public/*': () => true, // Everyone can access '/docs/internal/*': () => !hasGroup('External'), '/docs/confidential/*': () => hasRole('Manager') || hasRole('Admin'), '/docs/top-secret/*': () => hasRole('Admin'), }; ``` ### Feature-based access[​](#feature-based-access "Direct link to Feature-based access") Control access to specific EventCatalog features based on user roles and responsibilities. ``` const accessRules = { '/visualiser/*': () => hasRole('Architect') || hasRole('Developer'), '/api-explorer/*': () => hasRole('Developer'), '/admin/*': () => hasRole('Admin'), }; ``` ## Troubleshooting[​](#troubleshooting "Direct link to Troubleshooting") ### Users getting 403 errors unexpectedly[​](#users-getting-403-errors-unexpectedly "Direct link to Users getting 403 errors unexpectedly") 1. **Check role/group assignment** in your identity provider 2. **Debug user permissions** by logging the locals to see what roles and groups are available: ``` export const rbacMiddleware: MiddlewareHandler = async (context, next) => { const { locals, url } = context; // Log the user's roles and groups for debugging console.log('User locals:', { pathname: url.pathname, locals: locals }); // Your existing middleware code... }; ``` 3. **Verify rule logic** - ensure your conditions are correct: ``` // Wrong: This blocks everyone except Viewers '/docs/*': () => hasGroup('Viewer') // Correct: This blocks only Viewers '/docs/*': () => !hasGroup('Viewer') ``` ### Rules not matching expected paths[​](#rules-not-matching-expected-paths "Direct link to Rules not matching expected paths") 1. **Test your glob patterns** - ensure wildcards match your URL structure 2. **Check path casing** - paths are case-sensitive 3. **Verify rule order** - more specific rules should come before general ones ### Session issues[​](#session-issues "Direct link to Session issues") 1. **Ensure user is authenticated** before middleware runs 2. **Check session expiration** - users may need to re-authenticate 3. **Verify locals are populated** - `hasRole` and `hasGroup` functions must be available ## Security best practices[​](#security-best-practices "Direct link to Security best practices") * ✅ **Principle of least privilege** - Grant minimum required access * ✅ **Regular access reviews** - Audit user roles and permissions * ✅ **Test thoroughly** - Verify access rules with different user types * ✅ **Monitor access attempts** - Log and review 403 responses * ✅ **Use groups over individual users** - Easier to manage and scale ## Next steps[​](#next-steps "Direct link to Next steps") With RBAC middleware configured, you can: * Set up more complex access patterns based on your organization structure * Integrate with external authorization systems * Add custom logging for access attempts Need help? Join our [Discord community](https://eventcatalog.dev/discord) for support and best practices from other EventCatalog users. --- # Adding global documentation **Added in** `eventcatalog@2.33.0` ## Getting started[​](#getting-started "Direct link to Getting started") Global documentation requires a [Starter or Scale plan](https://eventcatalog.dev/pricing), you can get a 14 day free trial to test it out at [EventCatalog Cloud](https://eventcatalog.cloud). Once you have a license key you can start to use the feature. ## Adding global documentation[​](#adding-global-documentation "Direct link to Adding global documentation") Global documentation is split into two parts: 1. [Creating your documentation (markdown files)](#creating-your-documentation) 2. [Configuring your sidebar (eventcatalog.config.js)](#configuring-your-sidebar) ### Creating documentation[​](#creating-documentation "Direct link to Creating documentation") Global documentation is stored in the `/docs` folder in your catalog [(see example on GitHub)](https://github.com/event-catalog/eventcatalog/tree/main/examples/default/docs), and can be accessed via the url `/docs/custom/`. All documentation is a `.mdx` (markdown extended) file. You can organize these however you want, for example: ``` docs/ ├── architecture-decision-records/ │ ├── drafts/ │ │ ├── 01-introduction.mdx │ │ ├── 02-example-record.mdx │ ├── published/ │ │ ├── 01-introduction.mdx │ │ ├── 02-example-record.mdx │ ├── examples/ │ │ ├── 01-introduction.mdx │ │ ├── 02-example-record.mdx ├── runbooks/ │ ├── 01-introduction.mdx │ ├── 02-deployment-procedure.mdx │ ├── 03-disaster-recovery.mdx │ ├── 04-incident-response.mdx ``` In this example we have global documentation for: * architecture Decision Records * Runbooks Organize your global documentation We added numbers (01, 02, 03) to the files to help with maintenance, you can configure the order of the files in your configuration. #### Structure of markdown files for global documentation[​](#structure-of-markdown-files-for-global-documentation "Direct link to Structure of markdown files for global documentation") Each markdown file is split into two parts: 1. The frontmatter (properties at the top of the file) 2. The content (the rest of the file) ``` --- title: Architecture decision records summary: A comprehensive guide to creating new microservices at FlowMart following our best practices and standards owners: - dboyne badges: - content: 'Guide' backgroundColor: 'teal' textColor: 'teal' --- This is your content for your file. ``` **Frontmatter properties** | Property | Required | Description | | --------- | -------- | ---------------------------------------------- | | `title` | Yes | The title of the page | | `summary` | Yes | A summary of the page | | `slug` | No | Ability to override the slug (url) of the page | | `owners` | No | Owners of the page (EventCatalog owners) | | `badges` | No | The badges of the page | #### Sidebar configuration[​](#sidebar-configuration "Direct link to Sidebar configuration") You need to configure the sidebar to include your custom documentation, we do this by using the `customDocs` property in your `eventcatalog.config.js` file. We have two options for the sidebar: 1. Manually map files and paths to the sidebar 2. Use the autogenerated option to generate the sidebar items Autogenerated sidebar The autogenerated sidebar is the easiest option, it will render all the files in the directory and subdirectories. If you want to choose which files and order they are displayed in, you can manually map the files and paths to the sidebar. ``` export default { // rest of your config customDocs: { sidebar: [ { label: 'architecture Decision Records', badge: { text: 'New', color: 'green' }, collapsed: false, items: [ { // Here we map the directory, and use autogenerated to generate the sidebar items // Any item added to the folder will be rendered automatically in EventCatalog label: 'Drafts', autogenerated: { directory: '/architecture-decision-records/drafts' } }, { label: 'Published', autogenerated: { directory: '/architecture-decision-records/published' } }, { label: 'Examples', autogenerated: { directory: '/architecture-decision-records/examples' } } ] }, { label: 'Runbooks', badge: { text: 'New', color: 'green' }, collapsed: false, items: [ { // Here we create custom pages in the sidebar // We can manually map the slug to a file, or use the autogenerated to generate the sidebar items label: 'Creating a new runbook', items: [ { label: 'Introduction', slug: 'runbooks/01-introduction' }, { label: 'Deployment Procedure', slug: 'runbooks/02-deployment-procedure' }, { label: 'Disaster Recovery', slug: 'runbooks/03-disaster-recovery' }, { label: 'Incident Response', slug: 'runbooks/04-incident-response' }, ] }, ] } ] } }; ``` #### Rendered output[​](#rendered-output "Direct link to Rendered output") The rendered output will be the content of the markdown file, with the frontmatter properties. ![Example](/assets/images/custom-docs-75ecbec1031874c63964890e28bbfba1.png) [View demo](https://demo.eventcatalog.dev/docs/custom/technical-architecture-design/architecture-decision-records/published/01-api-gateway-pattern) ### Custom HTML attributes[​](#custom-html-attributes "Direct link to Custom HTML attributes") **Added in** `eventcatalog@2.33.4` Links can also include an attrs property to add custom HTML attributes to the link element. In the following example, attrs is used to add a target="\_blank" attribute, so that the link opens in a new tab, and to apply a custom style attribute to italicize the link label: ``` export default { // rest of your config customDocs: { sidebar: [ { label: 'My Links', items: [ { label: 'Read more on GitHub', link: 'https://github.com/event-catalog/eventcatalog', attrs: { target: '_blank', style: 'font-style: italic;' }, }, ] }, ] } }; ``` #### Rendered output[​](#rendered-output-1 "Direct link to Rendered output") ![Example](/assets/images/custom-attrs-5858cdab73117f17afc38721227c83fb.png) --- # Components You can add custom EventCatalog components to your custom pages. [See the list of components and how to use them](/docs/development/components/using-components.md). You can also added components designed specifically for custom documentation. ### Embed EventCatalog Visualizer (NodeGraph)[​](#embed-eventcatalog-visualizer-nodegraph "Direct link to Embed EventCatalog Visualizer (NodeGraph)") In your custom documentation pages you can embed the EventCatalog Visualizer (NodeGraph) using the `NodeGraph` component. ![Example](/assets/images/custom-docs-with-nodegraph-0fadf4c1ee51ded46f506a88da048779.png) This let's you embed any visualization (domain, service, message) into your custom documentation page. To embed the NodeGraph component, you need to use the component, and pass in the `id` of the resource, `version` and `type`. ``` This is my custom documentation page, here is a NodeGraph: ## Getting Started Rest of my markdown content... ``` #### NodeGraph props[​](#nodegraph-props "Direct link to NodeGraph props") | Prop | Type | Required | Description | | --------- | ------ | -------- | ----------------------------------------------------------------- | | `id` | string | Yes | The id of the resource (domain, service, or message) | | `version` | string | Yes | The version of the resource | | `type` | string | Yes | The type of the resource (domain, service, command, event, query) | --- # Introduction **Added in** `eventcatalog@2.33.0` [YouTube video player](https://www.youtube.com/embed/auzmEf0AdJg?si=wHe-3X6b6uLN39sB) *** Global documentation is a way to add catalog-wide custom documentation pages to your catalog. This can be a great way to extend your catalog beyond what is provided, and bring your own documentation to EventCatalog, rather than having documentation spread across multiple tools. ![Example](/assets/images/custom-docs-75ecbec1031874c63964890e28bbfba1.png) [View demo](https://demo.eventcatalog.dev/docs/custom/technical-architecture-design/architecture-decision-records/published/01-api-gateway-pattern) Global documentation is not limited, here are some examples of what you can do: * Document architecture decision records * Document infrastructure & operations * Document CI/CD pipelines * Document user journeys * Document API documentation * Document technical debt * Document team processes * Document onboarding information * Document best practices * Document standards It's really up to you what you add here. ### How global documentation can help[​](#how-global-documentation-can-help "Direct link to How global documentation can help") EventCatalog provides the ability to document your architecture with domains, services and messages. Users still have third party tools to document other parts of their architecture (e.g confluence, Google docs, etc), so this is an option to help you keep all your documentation in one place. ### What can I do with global documentation in EventCatalog?[​](#what-can-i-do-with-global-documentation-in-eventcatalog "Direct link to What can I do with global documentation in EventCatalog?") You can add any custom documentation to your catalog, this also gives you access to the [EventCatalog components](/docs/components.md). Your custom documentation is powered by markdown, meaning you can use EventCatalog components within your documentation. ### Roadmap for global documentation[​](#roadmap-for-global-documentation "Direct link to Roadmap for global documentation") This is the initial version of global documentation in EventCatalog. We plan to add the following features: * Add support to embed EventCatalog visualizations into your documentation pages * Embed EventCatalog resources into your custom documentation pages * Add ability to add runtime blocks into your pages (e.g making requests to get third party data to display) --- # Adding custom page owners **Added in** `eventcatalog@2.33.0` Owners in EventCatalog are either **users** or **teams** and are **optional**. To add an owner or a team, you need to add the user or team to the owners field of the custom page. ## Adding owners using frontmatter[​](#adding-owners-using-frontmatter "Direct link to Adding owners using frontmatter") To add owners within a custom page you need to add them to the `owners` array within your custom page frontmatter API. You need to add the `id` of the owner. /docs/guides/creating-a-new-producer/index.mdx (example) ``` --- id: OrderChannel ... # other custom page frontmatter owners: - dboyne # represents a user - webTeam # represents a team --- ``` Assigning owners to your custom pages can provide others with context of who owns this custom page and how to contact them. Creating users and teams EventCatalog gives you the ability to create users and teams. You can read the documentation to get started. --- # Bring your own documentation EventCatalog allows you to centralise architecture documentation alongside your domains, services, and events — keeping knowledge and context in one place. Common use cases include: * Architecture decision records (ADRs) * Infrastructure & operations runbooks * CI/CD documentation * User journeys * API documentation * Technical debt tracking * Team processes * Onboarding information * Best practices & standards EventCatalog provides two ways to bring your own documentation to your catalog: 1. [Global documentation](#1-global-documentation) * for cross-cutting and catalog-wide knowledge 2. [Resource-level documentation](#2-resource-level-documentation) * for implementation details tied to a specific resoruce (e.g domain, service, or event) *** ### Global documentation[​](#global-documentation "Direct link to Global documentation") Global documentation can be used to document cross-cutting and catalog-wide knowledge. You can bring your own documentation to your catalog and have your own documentation section (/docs/custom/) regardless of EventCatalog resources. [Read the custom pages guide](/docs/guides/bring-your-own-documentation/custom-pages.md). ### Resource-level documentation[​](#resource-level-documentation "Direct link to Resource-level documentation") Resource-level documentation can be used to document implementation details tied to a specific EventCatalog resource (e.g domain, service, or event). This can be useful if you want to document details tied to a specific domain, service, message, data product, etc. EventCatalog will render your custom documentation alongside the resource it is tied to in the sidebar. [Read the resource docs guide](/docs/guides/bring-your-own-documentation/resource-docs.md). --- # Adding resource-level documentation **Added in** `eventcatalog@3.15.0` Scale plan required Resource docs require an [EventCatalog Scale plan](https://eventcatalog.dev/pricing). ## Adding resource-level documentation[​](#adding-resource-level-documentation "Direct link to Adding resource-level documentation") Place `.mdx` files inside a `docs/` directory under any resource. EventCatalog will automatically pick them up and display them in the resource's sidebar. ``` services/ └── OrdersService/ ├── index.mdx └── docs/ ├── 01-deployment.mdx └── 02-incident-response.mdx ``` ### Frontmatter properties[​](#frontmatter-properties "Direct link to Frontmatter properties") Each doc file supports the following frontmatter. | Property | Required | Description | | --------- | -------- | ----------------------------------------------------------------------------------------------------- | | `title` | No | Display name of the doc. Defaults to the file name. | | `summary` | No | Short description shown below the title. | | `type` | No | Groups the doc in the sidebar. Defaults to the folder name, or `pages` if placed directly in `docs/`. | | `version` | No | Doc version. Defaults to the resource version. | | `order` | No | Explicit sort position within the group. | | `badges` | No | Badges shown on the doc page. | #### Example of resource-level documentation[​](#example-of-resource-level-documentation "Direct link to Example of resource-level documentation") services/OrdersService/docs/01-deployment.mdx ``` --- title: Deployment runbook summary: Step-by-step guide for deploying the Orders service to production. version: 1.0.0 --- ## Pre-deployment checklist 1. Confirm staging tests pass. 2. Notify the on-call engineer. ... ``` ### Order docs with numeric prefixes[​](#order-docs-with-numeric-prefixes "Direct link to Order docs with numeric prefixes") Files are sorted alphabetically by default. Prefix the file name with a number to control the order. ``` docs/ ├── 01-deployment.mdx ├── 02-incident-response.mdx └── 03-disaster-recovery.mdx ``` The numeric prefix is stripped from the doc's ID and URL, so `01-deployment.mdx` is accessible at `.../pages/deployment`. You can also set an explicit `order` value in frontmatter, which takes precedence over the numeric prefix. ### Use with domains and subdomains[​](#use-with-domains-and-subdomains "Direct link to Use with domains and subdomains") Domains and subdomains follow the same pattern. ``` domains/ └── E-Commerce/ ├── index.mdx └── docs/ └── 01-bounded-context.mdx └── subdomains/ └── Orders/ ├── index.mdx └── docs/ └── 01-order-processing.mdx ``` ## Navigate to a resource doc[​](#navigate-to-a-resource-doc "Direct link to Navigate to a resource doc") Resource docs are served at: ``` http://localhost:3000/docs/{resourceType}/{resourceId}/{version}/{docType}/{docId} ``` For example, `01-deployment.mdx` for `OrdersService` version `1.0.0` would be at: ``` http://localhost:3000/docs/services/OrdersService/1.0.0/pages/deployment ``` ## Grouping docs by type[​](#grouping-docs-by-type "Direct link to Grouping docs by type") Docs can be organised into groups using subdirectories inside `docs/`. Each subdirectory becomes a **doc type** and gets its own section in the resource sidebar. ``` services/ └── OrdersService/ ├── index.mdx └── docs/ ├── adrs/ │ └── 01-use-postgres.mdx ├── runbooks/ │ ├── 01-deployment.mdx │ └── 02-incident-response.mdx └── guides/ └── on-call.mdx ``` The folder name is used as the group label by default. The built-in types `adrs`, `runbooks`, `contracts`, `troubleshooting`, and `guides` are automatically formatted with friendly labels in the sidebar. You can override the type for any doc using the `type` frontmatter field, regardless of which folder it lives in: services/OrdersService/docs/adrs/01-use-postgres.mdx ``` --- title: Use PostgreSQL for order storage type: architecture-records --- ``` The type resolution order is: 1. `type` frontmatter — takes highest precedence 2. Folder name — used when `type` is not set 3. `pages` — fallback when the doc is placed directly in `docs/` with no subfolder --- # Configure categories **Added in** `eventcatalog@2.x.0` When you group resource docs into subdirectories, each subdirectory becomes a section in the resource sidebar. By default, the section label is the folder name and sections are sorted alphabetically. **Categories** let you customise this — you can give a group a friendlier display label and control the order it appears relative to other groups, without renaming the folder. ## Category files[​](#category-files "Direct link to Category files") Place a `category.json` file inside any doc type folder to configure its sidebar label and position. ``` services/ └── OrdersService/ └── docs/ └── runbooks/ ├── category.json ├── 01-deployment.md └── 02-incident-response.md ``` services/OrdersService/docs/runbooks/category.json ``` { "label": "Runbooks", "position": 1 } ``` ### Category file properties[​](#category-file-properties "Direct link to Category file properties") | Property | Required | Description | | ---------- | -------- | ---------------------------------------------------------- | | `label` | No | Display name for the doc type group in the sidebar. | | `position` | No | Sort order of the group relative to other doc type groups. | ### Use `_category_.json` as an alternative[​](#use-_category_json-as-an-alternative "Direct link to use-_category_json-as-an-alternative") EventCatalog also accepts `_category_.json` as the file name. When both files exist in the same folder, `category.json` takes precedence. ### Control group ordering[​](#control-group-ordering "Direct link to Control group ordering") Set `position` on each group to control the order they appear in the sidebar. Groups without a position are sorted alphabetically after positioned groups. docs/adrs/category.json ``` { "label": "Architecture decisions", "position": 1 } ``` docs/runbooks/category.json ``` { "label": "Runbooks", "position": 2 } ``` --- # Resource-level documentation **Added in** `eventcatalog@3.15.0` Scale plan required Resource-level documentation requires an [EventCatalog Scale plan](https://eventcatalog.dev/pricing). Resource-level documentation lets you attach documentation pages directly to any resource in your catalog. Instead of keeping ADRs, runbooks, contracts, and guides in a separate tool, you can place them alongside the resource they describe. ![](/assets/images/docs-39baae0ba68928f628cba7b56c16ac56.png) Attached docs appear in the resource sidebar, grouped by custom defined types, so readers can navigate between the resource overview and its supporting documentation without leaving the catalog. ### Supported resources[​](#supported-resources "Direct link to Supported resources") Resource-level documentation can be attached to any of the following resource types: * Domains and subdomains * Services * Events, Commands, Queries * Flows, Channels, Containers, Entities, Data products --- # Version documents **Added in** `eventcatalog@3.15.0` ## How versioning works[​](#how-versioning-works "Direct link to How versioning works") Resource docs are associated with a specific version of a resource. When you version a resource, the docs in that resource's `docs/` directory apply to the current (latest) version. Previous versions of a doc are stored inside the resource's `versioned/` directory, following the same pattern used for versioned resources. ``` services/ └── OrdersService/ ├── index.mdx ├── docs/ │ └── runbooks/ │ └── 01-deployment.md ← current version └── versioned/ └── 0.0.2/ └── docs/ └── runbooks/ └── 01-deployment.md ← older version ``` ## Navigate between versions[​](#navigate-between-versions "Direct link to Navigate between versions") When a doc has multiple versions, a **Versions** panel is shown in the right-hand column of the doc page. You can use it to jump to any historical version of that document. A banner is shown at the top of older versions to make clear that a newer version exists. ## Doc version vs resource version[​](#doc-version-vs-resource-version "Direct link to Doc version vs resource version") A doc file's `version` frontmatter field refers to the **doc's own version**, not the resource version. This allows a doc to be updated independently of the resource it belongs to. If `version` is omitted from frontmatter, EventCatalog infers it from the resource version the doc file lives under. --- # \ **Added in** `eventcatalog@2.57.2` The Attachments component allows you to link related documents, diagrams, and resources to any EventCatalog resource. This is perfect for connecting Architecture Decision Records (ADRs), design documents, external diagrams, or any other relevant documentation. Attachments can be a url (string) or an object with additional properties. ## Support[​](#support "Direct link to Support") The `` component is supported in all EventCatalog resources, and custom documentation pages. ## Usage[​](#usage "Direct link to Usage") Here we have a domain with two attachments, one is a simple url and the other is an object with additional properties. domains/E-Commerce/index.mdx ``` --- id: E-Commerce name: E-Commerce Domain attachments: - https://example.com/adr/001-microservices-architecture - url: https://example.com/adr/001 title: ADR-001 - Use Kafka for asynchronous messaging description: Learn more about why we chose Kafka for asynchronous messaging in this architecture decision record. type: 'architecture-decisions' icon: FileTextIcon --- ## Domain Overview This domain handles all e-commerce operations. ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/attachments-2fca26b44005d5151f4e84bdae0ca3a3.png) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ------------------------ | -------- | ------- | -------------------------------------------------------------- | | `title` (optional) | `string` | (empty) | Title to render in your attachments block | | `description` (optional) | `string` | (empty) | Any additional description to render in your attachments block | --- # \ **Added in** `eventcatalog@2.49.0` A component to visually render a domain's entity map. The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. info To visualize entities [you need to create entities in EventCatalog](/docs/development/guides/domains/entities/introduction.md) and assign them to your services or domains. ## Interactive controls[​](#interactive-controls "Direct link to Interactive controls") **Added in** `eventcatalog@3.9.0` Entity map visualizations include the same interactive controls as NodeGraph components. Switch between React Flow and Mermaid view modes, export as Mermaid diagram code, or share URLs with your team. [Read more about interactive controls](/docs/development/components/components/nodegraph.md#interactive-controls) Entity maps also support [layout persistence](/docs/development/components/components/nodegraph.md#layout-persistence) in dev mode, allowing you to save custom node positions. ## Usage[​](#usage "Direct link to Usage") 1. Include the `` component inside the markdown * e.g `/domains/OrdersDomain/index.mdx` **Example** ``` --- id: OrdersDomain version: 1.0.0 // rest of your domain frontmatter --- ## Entity Map This is an entity map for the Orders domain. It shows the entities and their relationships with external entities in this domain. ``` #### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/entity-map-c841d327749e10b550462401051d578d.png) #### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ----------------------- | --------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` (optional) | `string` | - | The id of the domain or service entity map to render. By default the component will use the id of the current page. If you want to embed this component into custom documentation pages, you can use the `id` prop to specify the id of the domain or service to render. | | `version` (optional) | `string` | - | The version of the domain or service to render. By default the component will use the version of the current page. If you want to embed this component into custom documentation pages, you can use the `version` prop to specify the version of the domain or service to render. | | `title` (optional) | `string` | - | The title of the entity map to render. | | `maxHeight` (optional) | `string` | 30 | Max height to set the nodegraph in your document. | | `includeKey` (optional) | `boolean` | true | Show or hide the legend. | | `entities` (optional) | `array` | \[] | Array of entities (ids or names) to filter in the map. Useful if you want to render a subset of the entities in the map. (Added in v2.51.1). [Read more about filtering](#filter-entities) | #### Filter Entities[​](#filter-entities "Direct link to Filter Entities") **Added in** `eventcatalog@2.51.1` The `` component will render all entities by default for a given domain. If you want to render a subset of the entities in the map, you can use the `entities` prop. **Example** ``` --- # event frontmatter --- ``` In this example, only the `Order` and `Customer` entities will be chosen to be rendered in the map. If the `Order` or `Customer` entity references other entities, they will also be rendered in the map --- # \ The accordion component renders collapsable section in EventCatalog. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ### Usage[​](#usage "Direct link to Usage") 1. Include the `` component inside the markdown * e.g `/events/MyEvent/index.mdx` **Basic Example** ``` --- #event frontmatter --- This will be rendered as a child inside a collapsible section. ``` **Example with code as child** ```` --- #event frontmatter --- You can run the following command to raise this event. ```sh bin/kafka-topics.sh --create --topic OrderAmended --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 `` ```` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/accordian-230951118757c2deb203ccb3199d26e2.png) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ------------------ | -------- | ------- | --------------------------------------- | | `title` (required) | `string` | (empty) | Title to render in your accordion block | | `children` | `string` | (empty) | Content that goes inside your accordion | --- # \ The accordion group component renders a collection of accordions. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ### Usage[​](#usage "Direct link to Usage") 1. Include the `` component inside the markdown * e.g `/events/MyEvent/index.mdx` **Basic Example** ``` --- #event frontmatter --- Hello Hello this is an example Another example Final example ``` **Code example** Add code inside the Accordion to render code snippets. ```` --- #event frontmatter --- ```js console.log('My code here'); `` ```js console.log('My other code snippet'); `` ```json { "test": true} `` ```` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/accordiangroup-4061859fda8046436118a250280b99ca.png) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ---------- | ----------- | ------- | -------------------------------------------------------- | | `children` | `Accordion` | (empty) | Accordion components that are contained within the group | --- # Admonitions **Added in** `eventcatalog@2.16.6` The admonitions syntax is used to render a block of text with a specific style. You can use it to highlight important information, warnings, or other types of content. ### Support[​](#support "Direct link to Support") The markdown syntax is supported in all pages in EventCatalog. ### Usage[​](#usage "Direct link to Usage") **Basic Example** ``` --- #event frontmatter --- :::note Some content with _Markdown_ syntax. Check [this api](https://eventcatalog.dev/). ::: :::tip Some content with _Markdown_ syntax. Check [this api](https://eventcatalog.dev/). ::: :::warning Some content with _Markdown_ syntax. Check [this api](https://eventcatalog.dev/). ::: :::danger Some content with _Markdown_ syntax. Check [this api](https://eventcatalog.dev/). ::: ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/admonitions-16f48c239c39386b0ded3397f3fce302.png) --- # \ **Added in** `eventcatalog@2.13.0` The ChannelInformation component is a EventCatalog component that will render a table into your markdown page that contains information about the Channel. ### Support[​](#support "Direct link to Support") The `` component is supported in channels. ### Usage[​](#usage "Direct link to Usage") Add ChannelInformation into your markdown file. **Example** ``` --- # channel frontmatter --- ``` ### Rendered example in EventCatalog[​](#rendered-example-in-eventcatalog "Direct link to Rendered example in EventCatalog") ![Example output](/assets/images/channel-9e66c587105a9456af1f483716d82934.png) See example in the [demo EventCatalog application](https://demo.eventcatalog.dev/docs/channels/inventory.%7Benv%7D.events/1.0.0). --- # \ **Added in** `eventcatalog@2.56.0` The **Design** component is a EventCatalog component that will render a [EventCatalog Studio diagram](https://eventcatalog.studio) into your markdown page. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ## Interactive controls[​](#interactive-controls "Direct link to Interactive controls") **Added in** `eventcatalog@3.9.0` Design visualizations include the same interactive controls as NodeGraph components. Switch between React Flow and Mermaid view modes, export as Mermaid diagram code, or share URLs with your team. [Read more about interactive controls](/docs/development/components/components/nodegraph.md#interactive-controls) Design visualizations also support [layout persistence](/docs/development/components/components/nodegraph.md#layout-persistence) in dev mode, allowing you to save custom node positions. ### Usage[​](#usage "Direct link to Usage") Simply include the `` component in your markdown with a file path to your EventCatalog Studio diagram. **Basic Example** ``` --- # event frontmatter --- The User Registered event is triggered when a new user signs up for our platform. ``` **With Custom Title and Height** ``` --- # event frontmatter --- Here's our payment schema fetched directly from our API gateway: ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") When you use the `` component, it will render the diagram in your EventCatalog page. ![Example output](/assets/images/embed-ec-3ec517adda93aa41320658041048d127.png) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ---------------------- | --------- | --------------- | -------------------------------------------------------------------------------------- | | `file` (required) | `string` | (empty) | The `.ecstudio` file to load into the diagram block. Path is resolved by EventCatalog. | | `title` (optional) | `string` | "Remote Schema" | Title to display above the diagram | | `maxHeight` (optional) | `string` | "400" | Maximum height of the diagram in pixels | | `search` (optional) | `boolean` | `false` | Show or hide the search bar in the diagram | --- # \ **Added in** `eventcatalog@2.34.5` The `` component renders a [DrawIO diagram](https://draw.io/) in your documentation. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, all messages and [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). ### Usage[​](#usage "Direct link to Usage") 1. Include the `` component inside the markdown * e.g `/events/MyEvent/index.mdx` **Basic Example** ``` --- #event frontmatter --- ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/drawio-8169e820bd945d3f19c2a1b6b3416db2.png) * [Example: View demo in custom documentation page](https://demo.eventcatalog.dev/docs/custom/guides/event-storming/01-index) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Required | Description | | ----- | -------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------- | | `url` | `string` | | Yes | The URL of the DrawIO diagram to embed. To get the URL, click "File", "embed", then "Notion...", copy the URL to the component. | --- # \ **Added in** `eventcatalog@2.34.6` The `` component renders a [FigJam diagram](https://www.figma.com/figjam/) in your documentation. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, all messages and [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). ### Usage[​](#usage "Direct link to Usage") 1. Include the `` component inside the markdown * e.g `/events/MyEvent/index.mdx` **Basic Example** ``` --- #event frontmatter --- ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/figjam-da9893506920c76e2b286421cf4618eb.png) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Required | Description | | ----- | -------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------- | | `url` | `string` | | Yes | The embed URL of the FigJam diagram. To get the URL, click "Shared", "Get embed code", then copy the URL from the iframe. | --- # \ **Added in** `eventcatalog@3.2.1` The `` component renders an [IcePanel diagram](https://icepanel.io/) in your documentation. Each IcePanel diagram embedded can also be loaded in a full screen mode, letting your teams explore the diagram in detail. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, all messages and [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). ### Usage[​](#usage "Direct link to Usage") 1. Get your IcePanel share URL from your IcePanel diagram (click "Share" and copy the embed URL) 2. Include the `` component inside the markdown * e.g `/events/MyEvent/index.mdx` **Basic Example** ``` --- #event frontmatter --- ``` **Example with title and description** ``` --- #event frontmatter --- ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/ice-panel-5c454588818acf2d27e95d729296b296.png) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Required | Description | | ------------- | -------- | ------- | -------- | -------------------------------------------------------------------------------------------------------------- | | `url` | `string` | | Yes | The share URL of the IcePanel diagram. To get the URL, click "Share" in IcePanel and copy the embed/share URL. | | `title` | `string` | | No | The title to display above the diagram. | | `description` | `string` | | No | A description to display below the title. | | `height` | `string` | `600` | No | The height of the embedded diagram in pixels. | | `width` | `string` | `100%` | No | The width of the embedded diagram. | --- # \ **Added in** `eventcatalog@2.34.4` The `` component renders a [Lucid diagram](https://lucid.app/) in your documentation. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, all messages and [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). ### Usage[​](#usage "Direct link to Usage") 1. Include the `` component inside the markdown * e.g `/events/MyEvent/index.mdx` **Basic Example** ``` --- #event frontmatter --- ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/lucid-c3a21b0d727c8e0653c6d41f9fc06a38.png) * [Example: View demo in a domain page](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3) * [Example: View demo in custom documentation page](https://demo.eventcatalog.dev/docs/custom/guides/event-storming/01-index) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Required | Description | | ----------- | -------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `diagramId` | `string` | | Yes | The ID of the Lucid diagram to embed. You can find the ID in the URL of the Lucid diagram or by clicking "Share" in Lucid and copying the ID from the URL. | --- # \ **Added in** `eventcatalog@2.33.4` The `` component renders a [Miro board](https://miro.com/) in your documentation. Each Miro board embedded can also be loaded in a full screen mode, letting your teams edit the board live ([view demo](https://demo.eventcatalog.dev/miro?autoplay=true\&embedMode=view_only_without_ui\&moveToWidget=3074457347671667709\&boardId=uXjVIHCImos=/\&back=/docs/domains/Orders/0.0.3)). ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, all messages and [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md). ### Usage[​](#usage "Direct link to Usage") 1. Include the `` component inside the markdown * e.g `/events/MyEvent/index.mdx` **Basic Example** ``` --- #event frontmatter --- ``` **Example with edit enabled and scroll to default widget in Miro** ``` --- #event frontmatter --- ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/miro-583efe3e97db513e357f1da27e7c66dc.png) * [Example: View demo in a domain page](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3) * [Example: View demo in custom documentation page](https://demo.eventcatalog.dev/docs/custom/guides/event-storming/01-index) * [Example: View demo of screen Miro board in EventCatalog](https://demo.eventcatalog.dev/miro?autoplay=true\&embedMode=view_only_without_ui\&moveToWidget=3074457347671667709\&boardId=uXjVIHCImos=/\&back=/docs/domains/Orders/0.0.3#undefined-miro-title) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Required | Description | | ---------------- | --------- | ------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `boardId` | `string` | | Yes | The ID of the Miro board to embed. ([miro docs](https://developers.miro.com/docs/miro-live-embed-with-a-direct-link#get-the-board-id)) | | `edit` | `boolean` | `false` | No | Whether to enable edit mode for the Miro board. | | `moveToViewport` | `string` | | No | The ID of the widget to scroll to. ([miro docs](https://developers.miro.com/docs/miro-live-embed-with-a-direct-link#set-the-initial-view-based-on-a-specific-viewport)) | | `moveToWidget` | `string` | | No | The ID of the widget to scroll to. ([miro docs](https://developers.miro.com/docs/miro-live-embed-with-a-direct-link#set-the-initial-view-based-on-a-specific-board-item)) | | `height` | `string` | `500` | No | The height of the Miro board. | | `title` | `string` | | No | The title of the Miro board. | | `autoplay` | `boolean` | `true` | No | Whether to skip the preloader of the miro board. ([miro docs](https://developers.miro.com/docs/miro-live-embed-with-a-direct-link#skip-the-preloader-screen)) | --- # \ Renders a Flow diagram. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ## Interactive controls[​](#interactive-controls "Direct link to Interactive controls") **Added in** `eventcatalog@3.9.0` Flow visualizations include the same interactive controls as NodeGraph components. Switch between React Flow and Mermaid view modes, export as Mermaid diagram code, or share URLs with your team. [Read more about interactive controls](/docs/development/components/components/nodegraph.md#interactive-controls) Flow visualizations also support [layout persistence](/docs/development/components/components/nodegraph.md#layout-persistence) in dev mode, allowing you to save custom node positions. ### Usage[​](#usage "Direct link to Usage") Add Flow component into your markdown of your page. **Example** ``` --- # domain frontmatter --- ## Overview The Orders domain handles all operations related to customer orders, from creation to fulfillment. This documentation provides an overview of the events and services involved in the Orders domain, helping developers and stakeholders understand the event-driven architecture. ## Flows ### Cancel Subscription flow Documented flow when a user cancels their subscription. ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/flows-ff1e6767d6c734327335fcf3c4f0e297.png) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ----------------------- | ----------------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `id` (required) | `string` | (empty) | Flow id to render in your page | | `version` (optional) | `string` | "latest" | Version of the flow to render. Supports exact version and semver versions (e.g 1.0.x, ^1.3.5, latest) | | `includeKey` (optional) | `boolean` | true | Renders the diagram key on the UI | | `search` (optional) | `boolean` | true | Show or hide the search bar in the flow *(Added in v2.50.3)* | | `mode` (optional) | `string` ("simple" or "full") | "simple" | `simple` will render the flow in a simplfied view not rendering descriptions. Full will render the flow in a full view, rendering descriptions and other information *(Added in v2.50.3)* | --- # \ **Added in** `eventcatalog@2.32.3` The `` component renders a link to a resource in EventCatalog. EventCatalog handles links depending on your configuration file (e.g trailing slashes, etc), using this component creates links that are consistent with your EventCatalog configuration. ### Support[​](#support "Direct link to Support") The `` component is supported on all EventCatalog pages. ### Usage[​](#usage "Direct link to Usage") 1. Include the `` component inside the markdown * e.g `/domains/MyDomain/index.mdx` **Basic Example** ``` --- #domain frontmatter --- My Awesome Page ``` ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ------ | -------- | ------- | --------------------- | | `href` | `string` | none | The href of the link. | --- # \ **Added in** `eventcatalog@2.56.4` The **MermaidFileLoader** component is a EventCatalog component that will render a [Mermaid](https://mermaid.js.org/) file into your markdown page. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ### Usage[​](#usage "Direct link to Usage") Simply include the `` component in your markdown with a file path to your Mermaid file. **Basic Example** * Markdown file * Mermaid file (.mmd or .mermaid) ``` --- # event frontmatter --- The User Registered event is triggered when a new user signs up for our platform. ``` ``` sequenceDiagram participant Customer participant OrdersService participant InventoryService participant NotificationService Customer->>OrdersService: Place Order OrdersService->>InventoryService: Check Inventory InventoryService-->>OrdersService: Inventory Available OrdersService->>InventoryService: Reserve Inventory OrdersService->>NotificationService: Send Order Confirmation NotificationService-->>Customer: Order Confirmation OrdersService->>Customer: Order Placed Successfully OrdersService->>InventoryService: Update Inventory ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") When you use the `` component, it will render the diagram in your EventCatalog page. ![Example output](/assets/images/mermaid-70997a9eabab6d0e58ac29b68f100243.png) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ----------------- | -------- | ------- | ----------------------------------------------------------------------------------------------- | | `file` (required) | `string` | (empty) | The `.mmd` or `.mermaid` file to load into the diagram block. Path is resolved by EventCatalog. | --- # \ **Added in** `eventcatalog@2.26.0` The `` component renders a table of messages for a service or domain in EventCatalog. The component renders a paginated table of messages, with the ability to filter by message type (event, command, query), and text search. ### Use case[​](#use-case "Direct link to Use case") * Display all the messages that a service sends and receives. * Display all the messages that a domain sends and receives. * These are all messages that are sent and received in child services of the domain. ### Support[​](#support "Direct link to Support") The `` component is supported in domains and services. ### Usage[​](#usage "Direct link to Usage") 1. Include the `` component inside the markdown * e.g `/domains/MyDomain/index.mdx` **Basic Example** ``` --- #domain frontmatter --- ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/message-table-b4771f82bc198c3353bb6b15dd76d485.png) See the [demo](https://demo.eventcatalog.dev/docs/domains/Orders/0.0.3) for a full example. ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | -------------- | --------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `format` | `string` | 'all' | Which messages to render. `all` will render messages that are sent and received. `sends` will render messages that are sent and `receives` will render messages that are received. | | `limit` | `number` | 10 | The number of messages to render in the table. Results are paginated. | | `showChannels` | `boolean` | true | Whether to show the channel information in the table for each message. | --- # \ A component to visually render your information. The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ## Usage[​](#usage "Direct link to Usage") ### Single NodeGraph[​](#single-nodegraph "Direct link to Single NodeGraph") 1. Include the `` component inside the markdown * e.g `/events/MyEvent/index.mdx` **Example** ``` --- #event frontmatter --- ``` #### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/nodegraph-18ba272d2403768dab484985057ab097.png) #### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ---------------------- | ----------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `maxHeight` (optional) | `string` | 30 | Max height to set the nodegraph in your document | | `search` (optional) | `boolean` | true | Show or hide the search bar in the nodegraph *(Added in v2.50.3)* | | `legend` (optional) | `boolean` | true | Show or hide the legend in the nodegraph *(Added in v2.50.3)* | | `mode` (optional) | `string` ("simple" or "full") | "simple" | `simple` will render the nodegraph in a simplfied view not rendering descriptions. Full will render the nodegraph in a full view, rendering descriptions and other information *(Added in v2.50.3)* | ## Interactive controls[​](#interactive-controls "Direct link to Interactive controls") **Added in** `eventcatalog@3.9.0` All NodeGraph visualizations include interactive controls for better viewing, exploration, and sharing. ![NodeGraph interactive controls](/assets/images/interactive-controls-329ccf09775fb7a8d20217c39566670b.png) ### View modes[​](#view-modes "Direct link to View modes") Switch between two visualization modes using the view switcher dropdown. **React Flow** - Interactive node-based visualization with drag and pan controls. **Mermaid** - Standard Mermaid diagram view with automatic layout and pan/zoom controls. ### Export as Mermaid[​](#export-as-mermaid "Direct link to Export as Mermaid") Copy the NodeGraph as Mermaid diagram code to your clipboard. The diagram preserves all nodes, edges, and styling information. Useful for sharing architectures with LLMs, documentation tools, or pasting into Mermaid-compatible renderers like [mermaid.live](https://mermaid.live). Large diagram exports If you export large NodeGraphs and they fail to render as Mermaid diagrams, increase the `maxTextSize` configuration. [Learn more about maxTextSize](/docs/api/config.md#mermaid). ### Share URL[​](#share-url "Direct link to Share URL") Copy the current page URL to share the visualization with your team. ## Layout persistence[​](#layout-persistence "Direct link to Layout persistence") **Added in** `eventcatalog@3.11.0` Save and restore custom node positions in the visualizer during development. When you drag nodes to arrange your visualization, a "Layout changed" indicator appears with a quick save button. Layouts are saved to `_data/visualizer-layouts/` as JSON files and can be committed to git to share with your team. Dev mode only Layout persistence is only available when running EventCatalog in development mode (`npm run start`). This ensures saved layouts don't affect production builds. ### Saving layouts[​](#saving-layouts "Direct link to Saving layouts") Drag any node to reposition it. When changes are detected, the "Layout changed" indicator appears in the bottom-left corner with a quick save button. You can also save layouts from the dropdown menu: 1. Click the menu icon (three dots) in the top-right corner 2. Select **Layout** > **Save Layout** Layouts are saved to `_data/visualizer-layouts/{collection}/{id}/{version}.json` in your catalog directory. ### Resetting layouts[​](#resetting-layouts "Direct link to Resetting layouts") Reset a saved layout to return to auto-positioning: 1. Click the menu icon (three dots) in the top-right corner 2. Select **Layout** > **Reset Layout** 3. Confirm the reset This deletes the saved layout file and reloads the page with auto-calculated positions. ### Layout files[​](#layout-files "Direct link to Layout files") Layout files are keyed by resource (collection/id/version), so the same layout is used whether viewing in the visualizer or embedded in documentation. Works across all visualizers including services, events, flows, domains, entity maps, and designs. **Example layout file structure:** ``` { "version": 1, "savedAt": "2026-01-29T12:00:00.000Z", "resourceKey": "services/OrderService/1.0.0", "positions": { "node-1": { "x": 100, "y": 200 }, "node-2": { "x": 300, "y": 400 } } } ``` ### Sharing layouts with your team[​](#sharing-layouts-with-your-team "Direct link to Sharing layouts with your team") Saved layouts can be committed to git and shared with your team. When team members pull the changes, they'll see the same node positions in their local development environment. Add the layout directory to your git repository: ``` git add _data/visualizer-layouts git commit -m "Add custom visualizer layouts" ``` ### Multiple NodeGraphs[​](#multiple-nodegraphs "Direct link to Multiple NodeGraphs") **Added in** `eventcatalog@2.37.3` You can add multiple NodeGraphs to your document by using the `NodeGraph` component multiple times. Here is an example of how to add multiple NodeGraphs to your document: ``` --- #document frontmatter ---
``` #### Output example in EventCatalog[​](#output-example-in-eventcatalog-1 "Direct link to Output example in EventCatalog") ![Example output](/assets/images/multi-nodegraph-8c0a70f04f38f38163f0284d1ba16130.png) You can see a demo of this [here](https://demo.eventcatalog.dev/docs/domains/E-Commerce/1.0.0) #### Props[​](#props-1 "Direct link to Props") | Name | Type | Default | Description | | --------- | -------- | ----------- | ------------------------------------------------------------------------------------------------------- | | `id` | `string` | `undefined` | The id of the NodeGraph to render. If not provided, the current page's NodeGraph will be rendered. | | `version` | `string` | `undefined` | The version of the NodeGraph to render. If not provided, the current page's NodeGraph will be rendered. | | `type` | `string` | `undefined` | The type of the NodeGraph to render. If not provided, the current page's NodeGraph will be rendered. | --- # \ warning This component is now deprecated. Please read the frontmatter API documentation [here](/docs/development/guides/services/adding-to-services/openapi.md). You can add specifications to any service in EventCatalog using the specifications frontmatter API. You can read more about it [here](/docs/development/guides/services/adding-to-services/openapi.md). If you are interested in automating your EventCatalog with OpenAPI files, you can use the [OpenAPI plugin](/docs/plugins/openapi/intro.md). --- # \ **Added in** `eventcatalog@2.52.0` The **RemoteSchema** component fetches and renders schemas from remote URLs at runtime, keeping your documentation automatically synchronized with external schema sources. **Schemas can be fetched from any accessible URL and support authentication headers for private APIs.** tip **The `` component fetches schemas at runtime.** This ensures your documentation stays up-to-date with the latest schema versions without manual updates. SSR Mode Required The `` component only works in Server-Side Rendering (SSR) mode. Make sure your EventCatalog is configured to run in SSR mode to use this component. You can read more about how to configure your EventCatalog to run in SSR mode [here](/docs/development/deployment/build-ssr-mode.md). ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ### Usage[​](#usage "Direct link to Usage") Simply include the `` component in your markdown with a URL pointing to your schema. **Basic Example** ``` --- # event frontmatter --- The User Registered event is triggered when a new user signs up for our platform. ``` **With Custom Title and Height** ``` --- # event frontmatter --- Here's our payment schema fetched directly from our API gateway: ``` **Fetching from Private APIs** Feature: `EventCatalog Scale Plan Feature` For private APIs requiring authentication, you can provide headers: ``` --- # event frontmatter --- ``` Loading environment variables Add your environment variables to the `.env` file in the root of your EventCatalog project. The RemoteSchema component will automatically map the environment variables to the template string. **Using JSONPath to Extract Specific Schema Parts** When your API returns nested schemas, use JSONPath to extract specific parts: ``` --- # event frontmatter --- ``` **Rendering as Raw JSON** Force rendering as raw JSON instead of the schema viewer: ``` --- # event frontmatter --- ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") The component automatically detects JSON Schema format and renders an interactive [Schema Viewer](/docs/development/components/components/schema-viewer.md), or displays raw content for other formats. ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ---------------------- | -------- | --------------- | ----------------------------------------------------------------------------------------------------- | | `url` (required) | `string` | (empty) | The URL to fetch the schema from. Supports environment variable templating with `${VAR_NAME}` syntax. | | `title` (optional) | `string` | "Remote Schema" | Title to display above the schema | | `maxHeight` (optional) | `string` | "400" | Maximum height of the schema viewer in pixels | | `headers` (optional) | `object` | `{}` | HTTP headers for authentication (requires EventCatalog Scale plan) | | `jsonPath` (optional) | `string` | (empty) | [JSONPath expression](https://github.com/dchester/jsonpath) to extract specific parts of the response | | `renderAs` (optional) | `string` | "auto" | Rendering mode: "auto", "schema", or "raw" | ### Environment Variable Support[​](#environment-variable-support "Direct link to Environment Variable Support") The `url` and `headers` props support environment variable templating using `${VARIABLE_NAME}` syntax: ``` ``` Loading environment variables Add your environment variables to the `.env` file in the root of your EventCatalog project. The RemoteSchema component will automatically map the environment variables to the template string. ### JSONPath Examples[​](#jsonpath-examples "Direct link to JSONPath Examples") Extract specific schema definitions from complex API responses using [JSONPath](https://github.com/dchester/jsonpath). ``` ``` ### Error Handling[​](#error-handling "Direct link to Error Handling") The component provides clear error messages for common issues: * **Network errors**: Connection timeouts, DNS resolution failures * **Authentication errors**: Invalid credentials or missing headers * **JSONPath errors**: Invalid JSONPath expressions * **Format errors**: Unsupported schema formats ### Benefits for Teams[​](#benefits-for-teams "Direct link to Benefits for Teams") * **Always up-to-date**: Schemas are fetched at runtime, ensuring documentation reflects the latest API changes * **Reduced maintenance**: No need to manually update schema files when APIs change * **Single source of truth**: Documentation pulls directly from your API definitions * **Private API support**: Secure access to internal schemas with authentication headers * **Flexible extraction**: Use JSONPath to document specific parts of large API specifications This component bridges the gap between your live APIs and documentation, ensuring your EventCatalog always reflects the current state of your systems. --- # \ **Added in** `eventcatalog@2.32.0` The `` component renders a table of resources for your page in EventCtalog. The component renders a paginated table of (messages, services, domains, flows, channels), with the ability to filter by resource type, and text search. ### Why use ResourceGroupTable?[​](#why-use-resourcegrouptable "Direct link to Why use ResourceGroupTable?") Sometimes in your catalog you may want to link related resources together or group them in particular ways that EventCatalog does not naturally support. Examples: * List a custom list of messages in a domain page * Create a "Related Resources" section on your docs for your documentation readers * Create a custom list of resources in your page and let people search them easily. ### Support[​](#support "Direct link to Support") The `` component is supported on all EventCatalog pages. ### Usage[​](#usage "Direct link to Usage") The `` component requires **frontmatter** property called **resourceGroups** defined in your resource, and then the component itself. 1. Adding `resourceGroup` property to your resource example /domains/Orders/index.mdx ``` --- id: Orders name: Orders version: 0.0.3 owners: - dboyne - full-stack # Here we define the resourceGroups, in this example we create a group called core resources # We create a list called `related-resources` and we group these services. # Remember you can define any group of information you want, and link to any catalog resource resourceGroups: - id: related-resources title: Core resources items: - id: InventoryService type: service - id: OrdersService type: service - id: NotificationService type: service - id: ShippingService type: service --- ``` 1. Include the `` component inside the markdown * e.g `/domains/MyDomain/index.mdx` **Basic Example** ``` --- #domain frontmatter --- ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/resource-group-table-8695bcf89df0f8d8fc86ce7d8d15bdd7.png) You can see the demo of this in the [Orders domain page](https://demo.eventcatalog.dev/domains/Orders/0.0.3). ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ------------- | --------- | ----------------------------------------------------- | ---------------------------------------------------------------------- | | `id` | `string` | none | Id of the resource group to render. | | `title` | `string` | 'Related Resources' | The title shown above the table. | | `subtitle` | `string` | 'Resources' | The title shown inside the table. | | `description` | `string` | 'Resources that are related to the current resource.' | The description of the table. | | `limit` | `number` | 10 | The number of resources to render in the table. Results are paginated. | | `showOwners` | `boolean` | false | Whether to show the owners of the resources in the table. | --- # \ **Added in** `eventcatalog@2.32.3` Prefer wiki-style syntax For most use cases, we recommend using the newer [resource references](/docs/development/components/resource-references.md) syntax instead: ``` [[service|InventoryService]] ``` This provides interactive tooltips and a more natural writing experience. Use `` only when you need custom link text or explicit component control. The `` component renders a link to a resource in EventCatalog. ### Support[​](#support "Direct link to Support") The `` component is supported on all EventCatalog pages. ### Usage[​](#usage "Direct link to Usage") 1. Include the `` component inside the markdown * e.g `/domains/MyDomain/index.mdx` **Basic Example** ``` --- #domain frontmatter --- This is a custom link ``` ### Props[​](#props "Direct link to Props") | Name | Type | Default | Required | Description | | --------- | -------- | ------- | --------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | `id` | `string` | none | Yes | Id of the resource group to render. | | `type` | `string` | none | Yes | The type of resource to render (service, event, query, command, channel, flow, domain, user, team) | | `version` | `string` | none | Optional. The version of the resource to render, by default the latest version is used. | Version of the resource to link to. | ### Recommended alternative[​](#recommended-alternative "Direct link to Recommended alternative") **Added in** `eventcatalog@3.6.1` For most documentation, prefer the wiki-style syntax which provides interactive tooltips: ``` The [[service|InventoryService]] manages inventory. ``` See [Resource references](/docs/development/components/resource-references.md) for full documentation. --- # \ The schema component renders a given schema into the page. **Schemas can be any file format (.avro, .json etc).** tip **The `` component renders any schema format.** If you need to render JSON Schema, you can also use the [\ component](/docs/development/components/components/schema-viewer.md). ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ### Usage[​](#usage "Direct link to Usage") 1. Add your schema file to your folder. * e.g `/events/MyEvent/schema.avro` 2. Include the `` component inside the markdown * e.g `/events/MyEvent/index.mdx` **Example** ``` --- #event frontmatter --- The Inventory Adjusted event is triggered whenever there is a change in the inventory levels of a product. This could occur due to various reasons such as receiving new stock, sales, returns, or manual adjustments by the inventory management team. ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/schema-f87220e7c0e64851416c24f71a8fd6ae.png) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ------------------ | -------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `file` (required) | `string` | (empty) | The file to load into the schema block. Path is resolved by EventCatalog. | | `title` (optional) | `string` | (empty) | Title to render in your schema block | | `lang` (optional) | `string` | `json` | The code language of the schema. Defaults to `json`. Over 100 languages are supported. [List of options can be found here.](https://github.com/shikijs/textmate-grammars-themes/blob/main/packages/tm-grammars/README.md) | --- # \ A Schema Viewer component for EventCatalog that supports JSON schemas and Avro schemas. Renders the given schema (.json, .yaml, .avro, .avsc) into the page. tip **The `` component only works with JSON Schema and Avro schemas.** If you need to render other schema formats, please use the [\ component](/docs/development/components/components/schema.md). *Avro support was added in 2.64.0. Please upgrade to the latest version of EventCatalog to use this component.* ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ### Usage[​](#usage "Direct link to Usage") 1. Add a JSON or Avro schema file to your folder. * e.g `/events/MyEvent/schema.json` * e.g `/events/MyEvent/schema.avro` 2. Include the `` component inside the markdown * e.g `/events/MyEvent/index.mdx` **Example** ``` --- #event frontmatter --- The Inventory Adjusted event is triggered whenever there is a change in the inventory levels of a product. This could occur due to various reasons such as receiving new stock, sales, returns, or manual adjustments by the inventory management team. ``` ### Output example in EventCatalog[​](#output-example-in-eventcatalog "Direct link to Output example in EventCatalog") ![Example output](/assets/images/schemaviewer-13eeff95f0dd7a3441dfa36e9b9a7737.png) ### Props[​](#props "Direct link to Props") | Name | Type | Default | Description | | ------------------------- | --------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `title` (optional) | `string` | (empty) | Title to render above your schema | | `file` (required) | `string` | (empty) | The file to load into the schema block. Path is resolved by EventCatalog. | | `maxHeight` (optional) | `string` | "500" | Max height of the JSON Schema viewer (in pixels). | | `search` (optional) | `boolean` | false | Renders a search input in the viewer | | `expand` (optional) | `boolean` | false | Expands all properties by default | | `showRequired` (optional) | `boolean` | false | **Avro Schemas only**: Will show which fields are required. Fields are required if they don't have a default value or null as their type. As documented in the [Avro Specification](https://avro.apache.org/docs/++version++/specification/) | ## Rendering multiple schemas[​](#rendering-multiple-schemas "Direct link to Rendering multiple schemas") You can use the SchemaViewer multiple times in your page. **Example** ``` --- #event frontmatter --- The Inventory Adjusted event is triggered whenever there is a change in the inventory levels of a product. This could occur due to various reasons such as receiving new stock, sales, returns, or manual adjustments by the inventory management team. ``` --- # \ **Added in** `eventcatalog@2.7.14` The Steps component is a powerful tool for creating structured, sequential guides in EventCatalog. It's ideal for presenting step-by-step instructions, tutorials, or workflows, particularly when explaining processes, API integrations, or code implementations. ### Key Features:[​](#key-features "Direct link to Key Features:") * Automatic Numbering: Steps are automatically numbered, providing clear sequence and structure. * Flexible Content: Supports various content types including text, code snippets, and embedded components. ### Use Cases:[​](#use-cases "Direct link to Use Cases:") * Walking users through setup procedures * Explaining complex workflows * Presenting API integration steps * Showcasing code examples with explanations ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ### Usage[​](#usage "Direct link to Usage") Add Steps and Step component into your markdown of your page. **Example** ```` --- # service frontmatter --- The Inventory Service is a critical component of the system responsible for managing product stock levels, tracking inventory movements, and ensuring product availability. It interacts with other services to maintain accurate inventory records and supports operations such as order fulfillment, restocking, and inventory audits. Request API credentials from the Inventory Service team. Run the following command in your project directory: ```bash npm install inventory-service-sdk ```_ Use the following code to initialize the Inventory Service client: ```js const InventoryService = require('inventory-service-sdk'); const client = new InventoryService.Client({ clientId: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET', apiUrl: 'https://api.inventoryservice.com/v1' }); ```_ You can now use the client to make API calls. For example, to get all products: ```js client.getProducts() .then(products => console.log(products)) .catch(error => console.error(error)); ```_ ```` ### Rendered example in EventCatalog[​](#rendered-example-in-eventcatalog "Direct link to Rendered example in EventCatalog") ![Example output](/assets/images/steps-df0104a094e26230098f1085b2d58385.png) See example in the [demo EventCatalog application](https://demo.eventcatalog.dev/docs/services/InventoryService/0.0.2). ### Props (``)[​](#props-steps "Direct link to props-steps") | Name | Type | Default | Description | | ------------------ | -------- | ------- | --------------------------------------- | | `title` (optional) | `string` | (empty) | Title that gets renders above the steps | ### Props (``)[​](#props-step "Direct link to props-step") | Name | Type | Default | Description | | ------------------ | -------- | ------- | ------------------ | | `title` (required) | `string` | (empty) | Title for the step | --- # \ **Added in** `eventcatalog@2.16.5` The `` component is a EventCatalog component that will render a tabs into your markdown page. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ### Usage[​](#usage "Direct link to Usage") Add Tabs and TabItems into your markdown file. **Example** ``` --- # channel frontmatter --- This is the content for tab 1 This is the content for tab 2 ``` **Example with code as child** ``` --- # channel frontmatter --- ``sh This is the content for tab 1 `` ``js console.log('This is the content for tab 2'); `` ``` ### Rendered example in EventCatalog[​](#rendered-example-in-eventcatalog "Direct link to Rendered example in EventCatalog") ![Example output](/assets/images/tabs-033819d9b9e53e631e615b2a88ec5438.png) See example in the [demo EventCatalog application](https://demo.eventcatalog.dev/docs/events/InventoryAdjusted/1.0.1). --- # \ **Added in** `eventcatalog@2.7.12` Renders Tiles in EventCatalog, can be great for internal and external links. ### Support[​](#support "Direct link to Support") The `` component is supported in domains, services, and all messages, changelogs, and custom documentation pages. ### Usage[​](#usage "Direct link to Usage") Add Tiles and Tile component into your markdown of your page. Tile icons are from [hero icons](https://heroicons.com/), you can find a [list of them here](https://unpkg.com/browse/@heroicons/react@2.1.5/24/outline/). **Example** ``` --- # service frontmatter --- ## Overview The subscription Service is responsible for handling customer subscriptions in our system. It handles new subscriptions, cancelling subscriptions and updating them. ``` ### Rendered example in EventCatalog[​](#rendered-example-in-eventcatalog "Direct link to Rendered example in EventCatalog") ![Example output](/assets/images/tiles-008f6782b3baebc1e7fa21817a86ccd4.png) See example in the [demo EventCatalog application](https://demo.eventcatalog.dev/docs/services/InventoryService/0.0.2). ### Props (``)[​](#props-tiles "Direct link to props-tiles") | Name | Type | Default | Description | | -------------------- | -------- | ------- | ---------------------------------------- | | `title` (optional) | `string` | (empty) | Title that gets renders above the tiles | | `columns` (optional) | `number` | 2 | Number of columns to render the tiles in | ### Props (``)[​](#props-tile "Direct link to props-tile") | Name | Type | Default | Description | | ------------------------ | --------- | ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | | `title` (optional) | `string` | (empty) | Title for the tile | | `description` (optional) | `string` | (empty) | Description for the tile | | `icon` (optional) | `string` | (empty) | Icon to show in the tile. Iconss are [HeroIcons](https://heroicons.com/). [Find a list here](https://unpkg.com/browse/@heroicons/react@2.1.5/24/outline/). | | `iconColor` (optional) | `string` | `text-purple-500` | The color of the icon, using tailwind classes. | | `href` (optional) | `string` | (empty) | URL for the tile | | `openWindow` (optional) | `boolean` | (empty) | Open the URL in a new window | --- # Using IcePanel **Added in** `eventcatalog@3.2.1` EventCatalog supports embedding [IcePanel](https://icepanel.io/) diagrams in all your markdown files. IcePanel is a collaborative diagramming tool designed for visualizing software architecture using the [C4 model](https://c4model.com/). It helps teams create interactive system context, container, and component diagrams that can be shared and explored. ![Example output](/assets/images/ice-panel-5c454588818acf2d27e95d729296b296.png) ## Using IcePanel in EventCatalog[​](#using-icepanel-in-eventcatalog "Direct link to Using IcePanel in EventCatalog") To embed an IcePanel diagram, use the `` component in any markdown file. ### Getting your IcePanel share URL[​](#getting-your-icepanel-share-url "Direct link to Getting your IcePanel share URL") 1. Open your diagram in IcePanel 2. Click the **Share** button 3. Copy the share/embed URL (it should look like `https://s.icepanel.io/...`) ### Basic Example[​](#basic-example "Direct link to Basic Example") ``` --- # your frontmatter --- ``` ### Example with title and description[​](#example-with-title-and-description "Direct link to Example with title and description") ``` --- # your frontmatter --- ``` ### Full screen mode[​](#full-screen-mode "Direct link to Full screen mode") Each embedded IcePanel diagram includes a full screen button, allowing your teams to explore the diagram in detail without leaving EventCatalog. ### Props[​](#props "Direct link to Props") | Name | Type | Default | Required | Description | | ------------- | -------- | ------- | -------- | -------------------------------------------------------------------------------------------------------------- | | `url` | `string` | | Yes | The share URL of the IcePanel diagram. To get the URL, click "Share" in IcePanel and copy the embed/share URL. | | `title` | `string` | | No | The title to display above the diagram. | | `description` | `string` | | No | A description to display below the title. | | `height` | `string` | `600` | No | The height of the embedded diagram in pixels. | | `width` | `string` | `100%` | No | The width of the embedded diagram. | ### More resources[​](#more-resources "Direct link to More resources") * [IcePanel documentation](https://docs.icepanel.io/) - Learn more about IcePanel and how to use it * [C4 model](https://c4model.com/) - Learn about the C4 model for visualizing software architecture * [IcePanel component reference](/docs/development/components/components/embed-diagrams/icepanel.md) - Full component documentation --- # Using mermaid EventCatalog supports [mermaid](https://www.npmjs.com/package/mermaid) (v11.x) in all your markdown files. This let's you create [Class Diagrams](https://mermaid.js.org/syntax/classDiagram.html), [Sequence Diagrams](https://mermaid.js.org/syntax/sequenceDiagram.html), [Entity Relationship Diagrams](https://mermaid.js.org/syntax/entityRelationshipDiagram.html), [Architecture Diagrams](https://mermaid.js.org/syntax/architecture.html) and much more. ## Using mermaid in EventCatalog[​](#using-mermaid-in-eventcatalog "Direct link to Using mermaid in EventCatalog") There are two ways to use mermaid in EventCatalog. 1. [Using the `mermaid` code block in any markdown file.](#using-the-mermaid-code-block-in-any-markdown-file) 2. [Using Mermaid files `.mmd` and `.mermaid` files and loading them into your EventCatalog page.](#loading-mermaid-files-into-your-eventcatalog-page) * *Added in EventCatalog 2.56.4* Diagrams not rendering? If you have large diagrams that fail to render, increase the `maxTextSize` configuration value. [Learn more about maxTextSize configuration](/docs/api/config.md#mermaid). ### Using the `mermaid` code block in any markdown file.[​](#using-the-mermaid-code-block-in-any-markdown-file "Direct link to using-the-mermaid-code-block-in-any-markdown-file") To use mermaid you need to use the `mermaid` code block in any markdown file. #### Example[​](#example "Direct link to Example") ```` ```mermaid sequenceDiagram participant Customer participant OrdersService participant InventoryService participant NotificationService Customer->>OrdersService: Place Order OrdersService->>InventoryService: Check Inventory InventoryService-->>OrdersService: Inventory Available OrdersService->>InventoryService: Reserve Inventory OrdersService->>NotificationService: Send Order Confirmation NotificationService-->>Customer: Order Confirmation OrdersService->>Customer: Order Placed Successfully OrdersService->>InventoryService: Update Inventory ```_ ```` This example will output the following in the markdown file. ![Example output of mermaid](/assets/images/mermaid-70997a9eabab6d0e58ac29b68f100243.png) ### Loading Mermaid files into your EventCatalog page.[​](#loading-mermaid-files-into-your-eventcatalog-page "Direct link to Loading Mermaid files into your EventCatalog page.") **Added in** `eventcatalog@2.56.4` You can load Mermaid files using the [``](/docs/development/components/components/mermaid-file-loader.md) component, if you prefer to use a file instead of a code block. Add your .mmd or .mermaid file to your folder (e.g `/events/MyEvent/mermaid.mmd`) ``` --- #event frontmatter --- ``` This example will load a mermaid file (.mmd or .mermaid) into your EventCatalog page. **The file must be in the same directory as the markdown file.** *** ## Architecture diagrams with mermaid[​](#architecture-diagrams-with-mermaid "Direct link to Architecture diagrams with mermaid") **Added in** `eventcatalog@2.18.0` Mermaid 11 introduced the [ability to create architecture diagrams](https://mermaid.js.org/syntax/architecture.html). You can use these diagrams to document your architecture. #### Example[​](#example-1 "Direct link to Example") ```` ```mermaid architecture-beta group api(cloud)[API] service db(database)[Database] in api service disk1(disk)[Storage] in api service disk2(disk)[Storage] in api service server(server)[Server] in api db:L -- R:server disk1:T -- B:server disk2:T -- B:db ```_ ```` This example will output the following in the markdown file. ![Example output of mermaid](/img/mermaid/mermaid-architecture.png) ## Architecture diagrams with icons[​](#architecture-diagrams-with-icons "Direct link to Architecture diagrams with icons") **Added in** `eventcatalog@2.18.0` EventCatalog supports over **200,000 icons** from [icones.js.org](https://icones.js.org/collection/logos). To add icon support you need to add the icon pack into your `eventcatalog.config.js` file. ``` // eventcatalog.config.js mermaid: { iconPacks: ['logos'] // will load https://icones.js.org/collection/logos into eventcatalog } ``` In this example above we import the icon pack [logos](https://icones.js.org/collection/logos) from [icones.js.org](https://icones.js.org/collection/logos), but you can import any icon pack you like from [icones.js.org](https://icones.js.org/collection/logos). To use the icons in your mermaid diagrams you need to prefix the icon name with pack name. In this example we are using the `logos` pack, so we prefix the icon name with `logos:`. ```` ```mermaid architecture-beta group api(logos:aws-lambda)[API] service db(logos:aws-aurora)[Database] in api service disk1(logos:aws-glacier)[Storage] in api service disk2(logos:aws-s3)[Storage] in api service server(logos:aws-ec2)[Server] in api db:L -- R:server disk1:T -- B:server disk2:T -- B:db ```_ ```` EventCatalog will then import the icons from the icon pack and render them in the diagram. ![Example output of mermaid](/img/mermaid/mermaid-custom-icons.png) ## Mermaid with ELK (Eclipse Layout Kernel) layout algorithm[​](#mermaid-with-elk-eclipse-layout-kernel-layout-algorithm "Direct link to Mermaid with ELK (Eclipse Layout Kernel) layout algorithm") **Added in** `eventcatalog@2.61.2` EventCatalog supports the [ELK (Eclipse Layout Kernel)](https://eclipse.dev/elk/) layout algorithm for mermaid diagrams. To add support for the ELK layout algorithm you need to add the following to your `eventcatalog.config.js` file. ``` // eventcatalog.config.js mermaid: { // default value is false enableSupportForElkLayout: true } ``` After you set the value, mermaid will be configured to use the ELK layout algorithm. ## Interactive controls[​](#interactive-controls "Direct link to Interactive controls") **Added in** `eventcatalog@3.4.1` All Mermaid diagrams include interactive controls for better viewing and exploration. ![Example output of mermaid](/assets/images/interactive-56a3e958a41a6bfac8daf4b62a11d994.png) ### Zoom and pan[​](#zoom-and-pan "Direct link to Zoom and pan") Click and drag to pan around the diagram, or use the zoom controls in the bottom-left corner to zoom in and out. Double-click the diagram to zoom in quickly. ### Presentation mode[​](#presentation-mode "Direct link to Presentation mode") Click the presentation button in the top-left corner to view the diagram in fullscreen. In presentation mode, mouse wheel zooming is enabled for precise control. Press `Escape` to exit presentation mode. ### Copy diagram code[​](#copy-diagram-code "Direct link to Copy diagram code") Click the copy button in the top-right corner to copy the diagram code to your clipboard. Useful for copying diagrams into LLM prompts. ## Export NodeGraphs as Mermaid[​](#export-nodegraphs-as-mermaid "Direct link to Export NodeGraphs as Mermaid") **Added in** `eventcatalog@3.9.0` EventCatalog can export any NodeGraph visualization as Mermaid diagram code. Click the view switcher dropdown in any NodeGraph and select "Copy as Mermaid" to copy the diagram to your clipboard. The exported diagram preserves all nodes, edges, labels, and styling. You can then paste the Mermaid code into: * LLM prompts for architecture discussions * Other documentation tools * [mermaid.live](https://mermaid.live) for further editing * Mermaid code blocks in EventCatalog pages [Read more about NodeGraph controls](/docs/development/components/components/nodegraph.md#interactive-controls) ### More resources[​](#more-resources "Direct link to More resources") * [Mermaid documentation](https://mermaid.js.org) - Learn more about mermaid and how to use it * [Icon packs](https://icones.js.org/) - Explore over 200,000 icons from iconify --- # Using plantuml **Added in** `eventcatalog@2.46.0` EventCatalog supports [plantuml](https://plantuml.com/) in all your markdown files. This let's you create [Class Diagrams](https://plantuml.com/class-diagram), [Sequence Diagrams](https://plantuml.com/sequence-diagram), [Class Diagrams](https://plantuml.com/class-diagram), [State Diagrams](https://plantuml.com/state-diagram) and much more. ## Using plantuml in EventCatalog[​](#using-plantuml-in-eventcatalog "Direct link to Using plantuml in EventCatalog") To use plantuml you need to use the `plantuml` code block in any markdown file. #### Example[​](#example "Direct link to Example") ```` ```plantuml @startuml !define Table(name,desc) class name as "desc" << (T,#E5E7EB) >> !define PK(x) x !define FK(x) x ' ===== Core Tables ===== Table(Customers, "Customers") { PK(customerId): UUID firstName: VARCHAR lastName: VARCHAR email: VARCHAR phone: VARCHAR dateRegistered: TIMESTAMP } Table(Orders, "Orders") { PK(orderId): UUID FK(customerId): UUID orderDate: TIMESTAMP status: VARCHAR totalAmount: DECIMAL } Table(Products, "Products") { PK(productId): UUID name: VARCHAR description: TEXT price: DECIMAL stockQuantity: INT } Table(OrderItems, "Order Items") { PK(id): UUID FK(orderId): UUID FK(productId): UUID quantity: INT unitPrice: DECIMAL } Table(Payments, "Payments") { PK(paymentId): UUID FK(orderId): UUID amount: DECIMAL method: VARCHAR status: VARCHAR paidAt: TIMESTAMP } Table(InventoryEvents, "Inventory Events") { PK(eventId): UUID FK(productId): UUID eventType: VARCHAR quantityChange: INT eventTime: TIMESTAMP } Table(Subscription, "Subscriptions") { PK(subscriptionId): UUID FK(customerId): UUID plan: VARCHAR status: VARCHAR startDate: TIMESTAMP endDate: TIMESTAMP } ' ===== Relationships ===== Customers ||--o{ Orders : places Orders ||--o{ OrderItems : contains Products ||--o{ OrderItems : includes Orders ||--o{ Payments : paid_by Products ||--o{ InventoryEvents : logs Customers ||--o{ Subscription : subscribes @enduml ```_ ```` This example will output the following in the markdown file. ![Example output of plantuml](/assets/images/plantuml-a7b8bb52839d8d2cc8c97343ca20368a.png) ### How it works?[​](#how-it-works "Direct link to How it works?") The PlantUML implementation takes your content and converts it to a PNG image using . ![Example output of plantuml](/assets/images/interactive-56a3e958a41a6bfac8daf4b62a11d994.png) ## Interactive controls[​](#interactive-controls "Direct link to Interactive controls") **Added in** `eventcatalog@3.5.0` All PlantUML diagrams include interactive controls for better viewing and exploration. ### Zoom and pan[​](#zoom-and-pan "Direct link to Zoom and pan") Click and drag to pan around the diagram, or use the zoom controls in the bottom-left corner to zoom in and out. Double-click the diagram to zoom in quickly. ### Presentation mode[​](#presentation-mode "Direct link to Presentation mode") Click the presentation button in the top-left corner to view the diagram in fullscreen. In presentation mode, mouse wheel zooming is enabled for precise control. Press `Escape` to exit presentation mode. ### Copy diagram code[​](#copy-diagram-code "Direct link to Copy diagram code") Click the copy button in the top-right corner to copy the diagram code to your clipboard. Useful for copying diagrams into LLM prompts. ### More resources[​](#more-resources "Direct link to More resources") * [PlantUML documentation](https://plantuml.com) - Learn more about plantuml and how to use it * [Real world examples](https://real-world-plantuml.com/) - Real world examples of plantuml in use --- # Resource references **Added in** `eventcatalog@3.6.1` Create inline references to resources in your documentation using wiki-style syntax. References render as styled links with interactive tooltips showing resource details. ![Resource link example](/img/resource-link.png)[See in EventCatalog demo →](https://demo.eventcatalog.dev/docs/services/OrdersService/0.0.1) ## Basic syntax[​](#basic-syntax "Direct link to Basic syntax") Use double square brackets to create a resource reference. ``` [[type|ResourceName]] ``` The reference automatically links to the resource and displays a tooltip on hover showing key information like version, summary, and related resources. ### Example[​](#example "Direct link to Example") ``` --- id: OrdersService name: Orders Service version: 0.0.1 summary: | Handles all order processing owners: - dboyne - msmith --- The [[service|OrdersService]] handles all order processing and will publish the event [[event|OrderCreated]] when an order is created. ``` This creates a link to the OrdersService with a tooltip showing service details, published messages, API specifications, and owners. ## Supported resource types[​](#supported-resource-types "Direct link to Supported resource types") Reference any resource type in your catalog. | Type | Syntax | Links to | | ---------- | ---------------------------------- | ------------------------- | | Service | `[[service\|OrdersService]]` | Service documentation | | Event | `[[event\|OrderCreated]]` | Event documentation | | Command | `[[command\|CreateOrder]]` | Command documentation | | Query | `[[query\|GetOrderStatus]]` | Query documentation | | Domain | `[[domain\|E-Commerce]]` | Domain documentation | | Flow | `[[flow\|PaymentFlow]]` | Flow documentation | | Channel | `[[channel\|OrderChannel]]` | Channel documentation | | Entity | `[[entity\|Order]]` or `[[Order]]` | Entity documentation | | Diagram | `[[diagram\|target-architecture]]` | Diagram page | | Container | `[[container\|APIGateway]]` | Container documentation | | User | `[[user\|dboyne]]` | User profile | | Team | `[[team\|backend-team]]` | Team profile | | Custom doc | `[[doc\|guides/getting-started]]` | Custom documentation page | ### Reference custom docs[​](#reference-custom-docs "Direct link to Reference custom docs") Link to pages in your [custom documentation](/docs/development/bring-your-own-documentation/custom-pages/introduction.md) using path-based identifiers. ``` [[doc|guides/getting-started]] [[doc|operations-and-support/runbooks/payment-service-runbook]] ``` The path matches the file location inside your `docs/` directory, relative to the catalog root. Paths are case-insensitive and leading `/docs/custom/` prefixes are stripped automatically. Doc references do not support version pinning since custom documentation pages are not versioned. ### Default to entity[​](#default-to-entity "Direct link to Default to entity") Reference entities without specifying the type. ``` The [[Customer]] entity stores user information. ``` This defaults to entity type and is equivalent to `[[entity|Customer]]`. ## Version pinning[​](#version-pinning "Direct link to Version pinning") Reference a specific version of a resource. ``` [[service|OrdersService@1.0.0]] ``` Without a version, the reference uses the latest version. Pin versions when documenting specific implementations or historical states. ### Example[​](#example-1 "Direct link to Example") ``` Our legacy [[service|PaymentService@0.9.0]] is being replaced by [[service|PaymentGatewayService]]. ``` ## Interactive tooltips[​](#interactive-tooltips "Direct link to Interactive tooltips") Hover over any reference to see detailed information without leaving the page. ![Resource link example](/img/resource-link.png)[See in EventCatalog demo →](https://demo.eventcatalog.dev/docs/services/OrdersService/0.0.1) Tooltips show different information based on resource type. ### Combine with other components[​](#combine-with-other-components "Direct link to Combine with other components") Mix references with other EventCatalog components. ``` ## Architecture The [[service|OrdersService]] coordinates between inventory and payment: ``` ### Review references regularly[​](#review-references-regularly "Direct link to Review references regularly") Regularly audit references to ensure they point to current resources and remove outdated links. --- # Reusable snippets **Added in** `eventcatalog@2.48.0` Keep your documentation consistent and maintainable with reusable snippets. In EventCatalog, staying DRY (Don't Repeat Yourself) isn't just for code—it's for documentation too. If you're repeating the same content across multiple pages, consider using a snippet to centralize it. This makes your docs easier to manage and keeps everything in sync. ## Creating a Snippet[​](#creating-a-snippet "Direct link to Creating a Snippet") important Snippets must live in the `/snippets` directory to be recognized by EventCatalog. Files in this folder won’t generate standalone pages—they’re designed to be imported wherever needed. ## Basic Usage[​](#basic-usage "Direct link to Basic Usage") 1. Create your snippet snippets/my-snippet.mdx ``` Hello world! This is my content I want to reuse across pages. ``` 2. Import and use in any page: /domains/my-domain/index.mdx ``` --- id: E-Commerce name: E-Commerce version: 1.0.0 --- import MySnippet from '@eventcatalog/snippets/my-snippet.mdx'; ``` ## Passing Variables to Snippets[​](#passing-variables-to-snippets "Direct link to Passing Variables to Snippets") Snippets can accept props for dynamic content. Here's how: 1. Create a snippet with props: snippets/my-snippet.mdx ``` Hello {props.name}! This is my content I want to reuse across pages. ``` 2. Import and use with props: /domains/my-domain/index.mdx ``` --- id: E-Commerce name: E-Commerce version: 1.0.0 --- import MySnippet from '@eventcatalog/snippets/my-snippet.mdx'; ``` ## Exporting Variables[​](#exporting-variables "Direct link to Exporting Variables") You can also export constants or objects from a snippet for use elsewhere. 1. Export a variable from the snippet: snippets/my-snippet.mdx ``` export const platformName = 'EventCatalog'; export const colors = { primary: '#000000' }; ``` 2. Import the variable in your page: /domains/my-domain/index.mdx ``` --- id: E-Commerce name: E-Commerce version: 1.0.0 --- import { platformName, colors } from '/snippets/constants.mdx';

Hello {platformName}!

The primary color is {colors.primary}.

``` ## JSX-Based Snippets[​](#jsx-based-snippets "Direct link to JSX-Based Snippets") Need something more dynamic? Use a snippet as a JSX component: snippets/my-snippet.mdx ``` export default function MySnippet({ name }) { return
Hello {name}!
; } ``` Then import and use it like this: /domains/my-domain/index.mdx ``` --- id: E-Commerce name: E-Commerce version: 1.0.0 --- import MySnippet from '@eventcatalog/snippets/my-snippet.mdx'; ``` --- # Using Structurizr **Added in** `eventcatalog@2.56.4` You can embed your [Structurizr diagrams](https://structurizr.com/) into your EventCatalog pages using the [``](/docs/development/components/components/mermaid-file-loader.md) component. You will need to export your Structurizr diagrams into mermaid files and then use the [``](/docs/development/components/components/mermaid-file-loader.md) component to embed them into your EventCatalog pages. ## How to export your Structurizr diagrams into mermaid files[​](#how-to-export-your-structurizr-diagrams-into-mermaid-files "Direct link to How to export your Structurizr diagrams into mermaid files") You will need to use the Structurizr CLI to export your diagrams into mermaid files. 1. [Install the Structurizr CLI](https://docs.structurizr.com/cli/installation) 2. [Export your diagrams into mermaid files](https://docs.structurizr.com/cli/export) 3. Use the [``](/docs/development/components/components/mermaid-file-loader.md) component to embed them into your EventCatalog pages. --- # Using components EventCatalog uses [MDX](https://mdxjs.com/) under the hood. This gives you the ability to include predefined components inside your contents. You can add components to your domains, services or messages. ## Quick links[​](#quick-links "Direct link to Quick links") In addition to components, use wiki-style syntax for inline resource references with interactive tooltips: ``` The [[service|OrdersService]] processes [[event|OrderCreated]] messages. ``` See [Resource references](/docs/development/components/resource-references.md) for details. ### Example[​](#example "Direct link to Example") You can include any component inside the markdown content. This example renders an Accordion component within an event. /events/Orders/OrderAmended/index.mdx ```` --- id: OrderAmended name: Order amended version: 0.0.1 summary: | Indicates an order has been changed owners: - dboyne - msmith badges: - content: Recently updated! backgroundColor: green textColor: green - content: Channel:Apache Kafka backgroundColor: yellow textColor: yellow --- ## Overview Event is raised when an order has been changed. You can run the following command to raise this event. ```sh bin/kafka-topics.sh --create --topic OrderAmended --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1 `` ```` ![Example](/assets/images/accordian-230951118757c2deb203ccb3199d26e2.png) --- # Configuration EventCatalog is a flexible, technology agnostic, unopinionated documentation tool. EventCatalog focuses on documenting your architecture primitives, and letting you add the technical or implementation details as needed. If you have complex CI/CD requirements, or various different workflows patterns in your organization and teams, EventCatalog is flexible to your needs. You can configure EventCatalog using the `eventcatalog.config.js` file. *** ## eventcatalog.config.js[​](#eventcatalogconfigjs "Direct link to eventcatalog.config.js") The `eventcatalog.config.js` file is the heart of your application. It allows you to define overrides for EventCatalog. See the [API documentation to override defaults for EventCatalog](/docs/api/config.md). ## Configuring environment variables[​](#configuring-environment-variables "Direct link to Configuring environment variables") **Added in** `eventcatalog@2.35.4` Some features in EventCatalog require environment variables to be set. If you need to set environment variables, you can do so in your `.env` file. When EventCatalog is running or builds it will load the environment variables from your `.env` file. .env (example) ``` EVENTCATALOG_SCALE_LICENSE_KEY=your-api-key ``` ### Configuring EventCatalog Linter[​](#configuring-eventcatalog-linter "Direct link to Configuring EventCatalog Linter") EventCatalog has a linter that can be used to validate your EventCatalog documentation. You can read more about the EventCatalog Linter in the [EventCatalog Linter documentation](/docs/development/developer-tools/eventcatalog-linter.md). --- # Configure RSS feeds **Added in** `eventcatalog@2.21.1` EventCatalog supports RSS feeds for your messages, services, domains and flows. ## How to enable RSS feeds[​](#how-to-enable-rss-feeds "Direct link to How to enable RSS feeds") **RSS feeds are disabled by default.** To enable RSS feeds, you need to add the `rss` property to the `eventcatalog.config.js` file. ``` //.. rest of file rss: { // Turn rss on or off enabled: true, // The number of items to return in each feed (default 15) limit: 20 }, ``` Items returned from the RSS feed are ordered by the last updated date of the file. When you enable the RSS feed you will have RRS feeds at the following paths: ### Messages[​](#messages "Direct link to Messages") Returns the latest messages that have changed in your Catalog. * `/rss/events/rss.xml` * RSS feed for events in EventCatalog * [View events RSS feed demo](https://demo.eventcatalog.dev/rss/events/rss.xml) * `/rss/commands/rss.xml` * RSS feed for commands in EventCatalog * [View commands RSS feed demo](https://demo.eventcatalog.dev/rss/commands/rss.xml) * `/rss/queries/rss.xml` * RSS feed for queries in EventCatalog * [View queries RSS feed demo](https://demo.eventcatalog.dev/rss/queries/rss.xml) ### Services and Domains[​](#services-and-domains "Direct link to Services and Domains") Returns the latest services and domains that have changed in your Catalog. * `/rss/services/rss.xml` * RSS feed for services in EventCatalog * [View services RSS feed demo](https://demo.eventcatalog.dev/rss/services/rss.xml) * `/rss/domains/rss.xml` * RSS feed for domains in EventCatalog * [View domains RSS feed demo](https://demo.eventcatalog.dev/rss/domains/rss.xml) ### Flows[​](#flows "Direct link to Flows") Returns the latest flows that have changed in your Catalog. * `/rss/flows/rss.xml` * RSS feed for flows in EventCatalog * [View flows RSS feed demo](https://demo.eventcatalog.dev/rss/flows/rss.xml) ### Everything[​](#everything "Direct link to Everything") Returns the latest items that have changed in your Catalog. * `/rss/all/rss.xml` * Returns all items from all feeds * [View all RSS feed demo](https://demo.eventcatalog.dev/rss/all/rss.xml) --- ## [📄️ Custom landing page](/docs/development/customization/customize-landing-page.md) [Customize landing pages in EventCatalog](/docs/development/customization/customize-landing-page.md) --- # Adding components The **components** directory is where your custom components will be created and stored. Upgrading your catalog? If you don't have a `components` directory, you will need to create one in the root of your catalog (e.g `/my-catalog/components`) ## Types of components[​](#types-of-components "Direct link to Types of components") EventCatalog supports [astro components](https://docs.astro.build/en/basics/astro-components/#_top) and markdown components. 1. Astro components - Dynamic components **(recommended)** * Example `/my-catalog/components/my-component.astro` 2. Markdown components - Static markdown files * Example `/my-catalog/components/my-component.mdx` ## Astro components (.astro)[​](#astro-components-astro "Direct link to Astro components (.astro)") ### Component structure[​](#component-structure "Direct link to Component structure") Astro components are split into two parts the script and the template. ``` --- // Component Script (JavaScript) --- ``` * **Component script**: Define variables, data, import components and make API requests [(read more)](https://docs.astro.build/en/basics/astro-components/#the-component-script) * **Component template**: Determines the HTML output. Also supports style and script tags. [(read more)](https://docs.astro.build/en/basics/astro-components/#the-component-template) #### Example[​](#example "Direct link to Example") 1. First define your component. /components/my-component.astro ``` --- # Import data from your eventcatalog.config.js file import config from "@config" # Access passed-in component props, like `` const { subtitle } = Astro.props; ---
This catalog belongs to the company:{config.organizationName} Data given to this component {subtitle}
``` 2. Import your component inside your domain, service or message. /events/OrderAccepted/index.mdx ``` --- id: OrderAccepted name: Order Accepted # ... other event data --- import MyComponent from '@catalog/components/my-component.astro" # Overview This event represents when an order has been accepted on our system. ``` Read the full [astro guide here](https://docs.astro.build/en/basics/astro-components/#the-component-script). ### Define variables inside your resources[​](#define-variables-inside-your-resources "Direct link to Define variables inside your resources") EventCatalog allows you to define variables inside your domains, services and messages that can be used to pass through to your custom components. /events/OrderAccepted/index.mdx ``` --- id: OrderAccepted name: Order Accepted # ... other event data --- export const MyCustomVariable = "Hello world"; import MyComponent from '@catalog/components/my-component.astro" # Overview This event represents when an order has been accepted on our system. ``` ### Reference frontmatter data in your components[​](#reference-frontmatter-data-in-your-components "Direct link to Reference frontmatter data in your components") If you want to reference your domain, service or message data, you can reference the frontmatter information. /events/OrderAccepted/index.mdx ``` --- id: OrderAccepted name: Order Accepted # ... other event data --- import MyComponent from '@catalog/components/my-component.astro" # Overview This event represents when an order has been accepted on our system. ``` ### Reference eventcatalog.config.js data in your components[​](#reference-eventcatalogconfigjs-data-in-your-components "Direct link to Reference eventcatalog.config.js data in your components") If you want to reference your eventcatalog.config.js data you can import it within your component. /components/my-component.astro ``` --- # Import data from your eventcatalog.config.js file import config from "@config" ---
This catalog belongs to the company: {config.organizationName} This catalog title is: {config.title}
``` --- # Component styling EventCatalog uses [Tailwind](https://tailwindcss.com/). This means your custom components can be styled with tailwind. /components/my-component.astro ``` --- # Import data from your eventcatalog.config.js file import config from "@config" # Access passed-in component props, like `` const { subtitle } = Astro.props; ---
This catalog belongs to the company:{config.organizationName} Data given to this component {subtitle}
``` Read the full [astro guide here](https://docs.astro.build/en/basics/astro-components/#the-component-script). --- # Introduction EventCatalog provides the ability to add custom components to your domains, services and messages within your catalog. These features include: * Adding reuseable content across all your resources * Styling components with [Tailwind CSS](https://tailwindcss.com/) * Adding custom [JavaScript to your pages](https://docs.astro.build/en/guides/client-side-scripts/#using-script-in-astro) ### Why create components?[​](#why-create-components "Direct link to Why create components?") Components are a great way to customize your EventCatalog and write shared snippets of code or content you can reuse across your EventCatalog. Components can be either [markdown files (component.mdx) or astro files (component.astro)](/docs/development/customization/custom-components/adding-components.md#types-of-components). Astro components Custom components are powered by [Astro Components](https://docs.astro.build/en/basics/astro-components/). Read the Astro documentation to learn more about what you can include in your components. Custom components can be very powerful and allow some great customization. --- # Client side scripts EventCatalog allows you to add client side JavaScript to your components. /components/my-component.astro ``` --- # component template scripts. --- ``` Read the [astro documentation for more information](https://docs.astro.build/en/guides/client-side-scripts/#using-script-in-astro). --- # What is MDX? EventCatalog uses [MDX](https://mdxjs.com/) file format for documentation. Markdown is what powers EventCatalog, we encourage and follow a [docs-as-code approach](https://www.writethedocs.org/guide/docs-as-code/). This lets you write documentation in your favorite IDE and version control system, review changes, merge and deploy them. Using MDX gives you powerful features like: * [Writing and adding custom components to your documentation](/docs/development/customization/custom-components/introduction.md) * [Referring your frontmatter (title, description, image, etc) in your documentation](#how-to-refer-to-frontmatter-in-your-documentation) * [Using variables in your documentation](#how-to-use-variables-in-your-documentation) * And much more. ## How to refer to frontmatter in your documentation[​](#how-to-refer-to-frontmatter-in-your-documentation "Direct link to How to refer to frontmatter in your documentation") You can refer to your frontmatter in your documentation using the `frontmatter` variable. events/MyEvent/index.mdx ``` --- id: MyEvent name: My Event version: 1.0.0 summary: My Event Summary --- # {frontmatter.name} {frontmatter.summary} ``` ## How to use variables in your documentation[​](#how-to-use-variables-in-your-documentation "Direct link to How to use variables in your documentation") MDX supports using the `export` statements to add variables to your documentation. For example you can export a `title` field from an MDX page or component and use it as a heading. events/MyEvent/index.mdx ``` --- id: MyEvent name: My Event version: 1.0.0 summary: My Event Summary --- export const title = "My Event" # {title} ``` --- # Customize landing page **Added in** `eventcatalog@2.37.1` EventCatalog provides a landing page for your catalog, this is the first page that users see when they visit your catalog. See the demo [here](https://demo.eventcatalog.dev/). You can customize the landing page with your own content, HTML and EventCatalog components. info Landing page customization is only available for customers on [paid plans](https://www.eventcatalog.dev/pricing). You can get a 14 day free trial of EventCatalog Starter Plan on [EventCatalog Cloud](https://eventcatalog.cloud). ### Example of a custom landing page[​](#example-of-a-custom-landing-page "Direct link to Example of a custom landing page") You can add any HTML you want to your landing page, in this example we have added custom content using EventCatalog components, which includes the visualizer for a domains, subdomains and flows. ![EventCatalog Custom Landing Page](/img/landing-page-example.png)[View custom landing page demo](https://demo.eventcatalog.dev) ## How to customize your landing page[​](#how-to-customize-your-landing-page "Direct link to How to customize your landing page") 1. Setup and configure your [EventCatalog Starter or Scale License key](/docs/development/configuration.md#configuring-environment-variables). * You can get a 14 day free trial of EventCatalog Starter Plan on [EventCatalog Cloud](https://eventcatalog.cloud). 2. Create a new folder called `pages` and an Astro file called `homepage.astro` * Example: `/pages/homepage.astro` 3. Add the contents to your Astro file. * You can see a full example of this on our [GitHub repository](https://github.com/event-catalog/eventcatalog/blob/main/examples/default/pages/homepage.astro). 4. Run `npm run dev` or `npm run build` to see your changes. What is Astro? [Astro](https://astro.build/) is a static site builder that powers EventCatalog. You can learn more about Astro [here](https://docs.astro.build/en/getting-started/). **Example of homepage.astro** /pages/homepage.astro ``` --- # Import EventCatalog components to use in your landing page const { Tile, Tiles, Flow, NodeGraph, Admonition } = Astro.props.components; ---

Welcome to FlowMart's EventCatalog

Explore the events, services, and domains that power the FlowMart ecosystem. This catalog provides a centralized place to discover and understand our asynchronous architecture.

This is a demo of the EventCatalog and what it can do. The company is called FlowMart and they are an e-commerce company.

Using EventCatalog, we documented their systems (domains, services, events, commands, flows) and how they fit together.

E-Commerce Domain

The core domain of FlowMart, responsible for all e-commerce operations.

Orders Domain

The sub-domain responsible for all orders.

Payment Domain

The sub-domain responsible for all payments.

Subscription Domain

The sub-domain responsible for all subscriptions.

Discover Our Architecture

Navigate through our Domains to understand the different business capabilities, explore Services to see the microservices involved, and dive into Events and Commands to see how they communicate.

Use the search bar above or browse the sections in the sidebar to get started.

Cancel Subscription Flow

This flow is triggered when a user cancels their subscription.

Payment Flow

This flow documents how a payment is processed at FlowMart.

Quick Links

Learn how to get started with EventCatalog, create domains, services, events, and commands.

Join the community

Our project and community is growing fast. We have over 1000+ members in our Discord community.

``` See the example output [here](https://demo.eventcatalog.dev) ### Using components[​](#using-components "Direct link to Using components") You can use EventCatalog components in your custom landing page. These include embedding visuals, flows, and more. Example: ``` ``` You can get a list of components [here](/docs/components.md). --- # Application Sidebar The application sidebar is the sidebar that is rendered on every page in EventCatalog. ![Example](/assets/images/application-sidebar-6114b292db8f1e4e14a00c5c29a2abc2.png) ### Show/hide items in the application sidebar[​](#showhide-items-in-the-application-sidebar "Direct link to Show/hide items in the application sidebar") You can show or hide items in the application sidebar by using the `sidebar` property in your `eventcatalog.config.js` file. **By default, all items is the sidebar are shown.** eventcatalog.config.js ``` // rest of the config sidebar: [ { id: '/schemas/explorer', // This will hide the Schema Explorer visible: false, }, ] ``` Options for the `sidebar` property: * `id`: The id of the item to hide. * `visible`: Whether to show or hide the item. | ID | Description | | ------------------- | ----------------------------- | | `/` | The home page icon | | `/docs` | The documentation page icon | | `/discover` | The discover page icon | | `/directory` | The users directory page icon | | `/studio` | The EventCatalog Studio icon | | `/schemas/explorer` | The schema explorer page | --- # Documentation sidebar The documentation sidebar is a [context aware sidebar](#what-is-context-aware-sidebar) that is shown on the `/docs/` pages. Clicking on any resource in the sidebar will show you related information to that selected resource ([see demo](https://demo.eventcatalog.dev/)). ![](/assets/images/docs-sidebar-3fd7e246b919dd9efeca10719abfd753.png) ## What is a context aware sidebar?[​](#what-is-a-context-aware-sidebar "Direct link to What is a context aware sidebar?") **Many documentation tools use a flat navigation structure, which can be overwhelming and difficult to navigate.** EventCatalog's documentation sidebar is a context aware sidebar that shows you related information to the selected resource. This can help you navigate your documentation and find the information you need quickly, as you go deeper into the hierarchy of your architecture. For example, selecting a domain will show you the subdomains, related services, ubiquitous language, etc, where as selecting a message will show you the producers, consumers and schemas. ## Customizing the documentation sidebar[​](#customizing-the-documentation-sidebar "Direct link to Customizing the documentation sidebar") By default EventCatalog will show you a list of all the resources in your catalog, but you can customize the navigation bar to show any resource you want. This can be useful if you want to show a specific resource or a group of resources in the sidebar, helping your teams find the information they need quickly. ### How to customize the documentation sidebar[​](#how-to-customize-the-documentation-sidebar "Direct link to How to customize the documentation sidebar") To customize the documentation sidebar you need to set the `navigation.pages` property in your `eventcatalog.config.js` file. The example below will show you a list of the top-level domains and all resources in your catalog. eventcatalog.config.js ``` module.exports = { // ... rest of your config navigation: { // pick any key you want to show in the sidebar pages: ['list:top-level-domains', 'list:all'], }, }; ``` ![](/assets/images/custom-docs-sidebar-d40965b40dbb96474c2637ac672c80fb.png) #### Available navigation configuration[​](#available-navigation-configuration "Direct link to Available navigation configuration") You can specify the following options in the `navigation.pages` property: * [Top level options](#top-level-options) * Useful if you want to show the top-level resources in your catalog in the sidebar. For example high level domains and let your users drill down. * [List all resources (by type)](#list-all-resources-type) * Useful if you want to show all resources of a specific type in the sidebar. For example all domains, services, messages, etc. * [Pick specific resources to show](#pick-specific-resources-to-show) * Useful if you want to show a specific resource or a group of resources in the sidebar. For example a specific domain, service, message, etc. * [Custom groups and links](#custom-groups-and-links) * Useful if you want to create custom groups and links to external pages in the sidebar. For example a group of resources, or a link to an external page. #### Top level options:[​](#top-level-options "Direct link to Top level options:") | Key | Description | | ------------------------ | ------------------------------------------------------------------------------------------------------ | | `list:all` | Lists all resources types in your catalog, organized by resource type (e.g domain, services, messages) | | `list:top-level-domains` | Displays a list of the top-level domains in your catalog. (Does not include subdomains) | **Example** eventcatalog.config.js ``` module.exports = { navigation: { pages: ['list:top-level-domains'], }, }; ``` #### List all resources (by type):[​](#list-all-resources-by-type "Direct link to List all resources (by type):") | Key | Description | | ----------------- | ------------------------------------- | | `list:domains` | Lists all domains in your catalog. | | `list:services` | Lists all services in your catalog. | | `list:messages` | Lists all messages in your catalog. | | `list:channels` | Lists all channels in your catalog. | | `list:designs` | Lists all designs in your catalog. | | `list:flows` | Lists all flows in your catalog. | | `list:containers` | Lists all containers in your catalog. | **Example** eventcatalog.config.js ``` module.exports = { navigation: { pages: ['list:domains', 'list:services'], }, }; ``` #### Chose which resources to show:[​](#chose-which-resources-to-show "Direct link to Chose which resources to show:") You can specify any resource you want to show in the sidebar using the following key structure `:` or `::` *If no version is specified, the latest version will be used.* *Example:* eventcatalog.config.js ``` module.exports = { navigation: { // Show the MyDomain domain, MyService service and the 0.0.1 version of the MyEvent event pages: [ // Show the latest version of the MyDomain domain 'domain:MyDomain', // Show the latest version of the MyService service 'service:MyService', // Show the 0.0.1 version of the MyMessage message 'message:MyMessage:0.0.1', ], }, }; ``` Available resource types: | Resource Type | Description | | ------------- | ------------------------ | | `domain` | Domain resource type. | | `service` | Service resource type. | | `message` | Message resource type. | | `channel` | Channel resource type. | | `design` | Design resource type. | | `flow` | Flow resource type. | | `container` | Container resource type. | | `user` | User resource type. | | `team` | Team resource type. | | `event` | Event resource type. | | `command` | Command resource type. | | `query` | Query resource type. | ### Custom groups and links[​](#custom-groups-and-links "Direct link to Custom groups and links") You can also create custom groups and links to external pages in the sidebar. eventcatalog.config.js ``` module.exports = { navigation: { pages: [ // Custom group { type: 'group', // Custom group title title: 'My Custom Group', // Custom group icon from lucide icons icon: 'Boxes', // Custom group pages pages: [ // You can still reference resources, lists as you would normally do 'domain:E-Commerce', // Create a custom item link to an external page { type: 'item', title: 'My Custom Link', // Custom link to an external page href: 'https://eventcatalog.dev', } ], }, // Or have a custom item on the root (outside a group) { type: 'item', title: 'My Custom Item', href: 'https://eventcatalog.dev', } // You can still use EventCatalog lists or resources as you would normally do 'list:all', ] }, }; ``` --- # Customize tables **Added in** `eventcatalog@2.63.0` EventCatalog allows you to customize the columns and names on the [Explore page](https://demo.eventcatalog.dev/discover/events), [Teams](https://demo.eventcatalog.dev/directory/teams) and [Users](https://demo.eventcatalog.dev/directory/users) pages. ![EventCatalog Custom Tables](/assets/images/table-example-bed12a8b0e576a7f86dcec4156b43714.png) ### How to customize tables[​](#how-to-customize-tables "Direct link to How to customize tables") You can customize the tables in EventCatalog by configuring them in your `eventcatalog.config.js` file. Example of how to customize the tables for the events table page: eventcatalog.config.js ``` events: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, producers: { visible: true, label: 'Producers' }, consumers: { visible: true, label: 'Consumers' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } }, }, ``` ### Configuration[​](#configuration "Direct link to Configuration") List of available configuration options for the table columns: | Option | Type | Default | Description | | --------- | ------- | ------- | ------------------------------------ | | `visible` | boolean | true | Whether the column is visible. | | `label` | string | - | The label to display for the column. | Events, Queries and Commands Table The key property is either `events`, `queries`, `commands`. In this example we set the **events** table configuration. eventcatalog.config.js ``` // ... other configuration ... // change property to `events`, `queries`, `commands` events: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, producers: { visible: true, label: 'Producers' }, consumers: { visible: true, label: 'Consumers' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, }, }, } // ... other configuration ... ``` Services Table eventcatalog.config.js ``` // ... other configuration ... services: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, receives: { visible: true, label: 'Receives' }, sends: { visible: true, label: 'Sends' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } }, } // ... other configuration ... ``` Domains Table eventcatalog.config.js ``` // ... other configuration ... domains: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, services: { visible: true, label: 'Owners' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } }, } // ... other configuration ... ``` Data Table eventcatalog.config.js ``` // ... other configuration ... containers: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, summary: { visible: true, label: 'Summary' }, writes: { visible: true, label: 'Writes' }, reads: { visible: true, label: 'Reads' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } }, } // ... other configuration ... ``` Flows Table eventcatalog.config.js ``` // ... other configuration ... flows: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, version: { visible: true, label: 'Version' }, summary: { visible: true, label: 'Summary' }, badges: { visible: true, label: 'Badges' }, actions: { visible: true, label: 'Actions' }, } }, } // ... other configuration ... ``` Users Table eventcatalog.config.js ``` // ... other configuration ... users: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' }, ownedEvents: { visible: true, label: 'Owned Events' }, ownedCommands: { visible: true, label: 'Owned Commands' }, ownedQueries: { visible: true, label: 'Owned Queries' }, ownedServices: { visible: true, label: 'Owned Services' }, teams: { visible: true, label: 'Teams' }, actions: { visible: true, label: 'Actions' }, } }, } // ... other configuration ... ``` Teams Table eventcatalog.config.js ``` // ... other configuration ... teams: { tableConfiguration: { columns: { name: { visible: true, label: 'Name' },] ownedEvents: { visible: true, label: 'Owned Events' }, ownedCommands: { visible: true, label: 'Owned Commands' }, ownedQueries: { visible: true, label: 'Owned Queries' }, ownedServices: { visible: true, label: 'Owned Services' }, actions: { visible: true, label: 'Actions' }, } }, } // ... other configuration ... ``` You can read the `eventcatalog.config.js` API reference for [more information on the table configuration](/docs/api/config.md#domains). --- # Customize visualizer nodes **Added in** `eventcatalog@2.33.8` Every node in the visualizer has a color, label and icon. The example below shows the default node for a **Service** resource. ![Visualizer Node](/assets/images/customize-node-7aa3fc6b26a49d870406c7042b1d9ed9.png) By default the icon, color and label in the node is generated by EventCatalog. Helping you maintain consistency across your catalog. You can use the `styles` property to customize the icon, color and label of the node, if you want to customize the node to be more specific to your use case. /domains/MyDomain/services/MyService.md ``` --- id: NotificationService version: 0.0.2 name: Notification Service summary: | Service that handles orders styles: icon: "BellIcon" node: color: purple label: "Custom" --- ``` #### Rendered output[​](#rendered-output "Direct link to Rendered output") ![Customized Node](/assets/images/customize-node-example-5452e0a1442b5cab4277094514ae63b7.png) ### Configuration[​](#configuration "Direct link to Configuration") | ID | Required | Default | Description | | ------------------- | -------- | ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `styles.icon` | No | Depends on resource type | The icon to use for the resource. Icons are from [hero icons](https://heroicons.com/).
You can find a list of icons [here](https://unpkg.com/browse/@heroicons/react@2.1.5/24/outline/). | | `styles.node.color` | No | Depends on resource type | The color to use for the node. These are tailwind colors and you can find a list of them [here](https://tailwindcss.com/docs/colors). | | `styles.node.label` | No | Depends on resource type | The label to use for the node (side label). | --- # Themes EventCatalog comes with a selection of built-in themes and supports both light and dark modes out of the box. ## Choosing a theme[​](#choosing-a-theme "Direct link to Choosing a theme") To set a theme, add the `theme` property to your `eventcatalog.config.js` file: eventcatalog.config.js ``` export default { // ... other config theme: 'sapphire', }; ``` ### Available themes[​](#available-themes "Direct link to Available themes") EventCatalog includes the following built-in themes: | Theme | Description | | ---------- | ---------------------------------------------- | | `default` | Purple accent - the original EventCatalog look | | `ocean` | Teal accent - calm and professional | | `sapphire` | Blue accent - premium enterprise feel | | `sunset` | Orange accent - warm and energetic | | `forest` | Dark green accent - natural and grounded | ## Light and dark mode[​](#light-and-dark-mode "Direct link to Light and dark mode") EventCatalog supports both light and dark modes. Users can toggle between modes using the theme switcher in the header. ### How it works[​](#how-it-works "Direct link to How it works") * The theme toggle appears in the header navigation * **System preference by default**: New visitors see light or dark mode based on their operating system preference * **Remembers user choice**: Once a user manually toggles the theme, their preference is saved and used on future visits * **Syncs across tabs**: Theme changes sync across browser tabs * **Responds to system changes**: If no manual preference is set, the theme automatically updates when the user changes their OS dark mode setting ### Theme persistence[​](#theme-persistence "Direct link to Theme persistence") When a user manually selects light or dark mode, their preference is stored in `localStorage` under the key `eventcatalog-theme`. This ensures their choice persists across page reloads and browser sessions. If no preference is stored, EventCatalog automatically follows the user's system preference using the `prefers-color-scheme` media query. *** ## Creating custom themes[​](#creating-custom-themes "Direct link to Creating custom themes") i This feature is available on the [Scale](/pricing.md) [ plan](/pricing.md). Custom themes allow you to fully brand EventCatalog with your organization's colors. You define your theme in `eventcatalog.styles.css` using CSS variables. ### Step 1: Create your theme CSS[​](#step-1-create-your-theme-css "Direct link to Step 1: Create your theme CSS") Add your custom theme to `eventcatalog.styles.css` in your project root. Your theme needs to define CSS variables for both light and dark modes. eventcatalog.styles.css ``` /** * Custom "ruby" theme - Red accent colors */ /* Light Mode */ :root[data-catalog-theme="ruby"], :root[data-catalog-theme="ruby"][data-theme="light"] { /* Accent colors */ --ec-accent: 220 38 38; /* red-600 */ --ec-accent-hover: 185 28 28; /* red-700 */ --ec-accent-subtle: 254 226 226; /* red-100 */ --ec-accent-text: 153 27 27; /* red-800 */ /* Buttons */ --ec-button-bg: 185 28 28; /* red-700 */ --ec-button-bg-hover: 153 27 27; /* red-800 */ --ec-button-text: 255 255 255; /* Sidebar */ --ec-sidebar-active-bg: 185 28 28; --ec-sidebar-active-text: 255 255 255; --ec-sidebar-hover-bg: 185 28 28; /* You can override any CSS variable here */ } /* Dark Mode */ :root[data-catalog-theme="ruby"][data-theme="dark"] { /* Accent colors - use lighter shades for dark mode */ --ec-accent: 248 113 113; /* red-400 */ --ec-accent-hover: 239 68 68; /* red-500 */ --ec-accent-subtle: 127 29 29 / 0.3; --ec-accent-text: 252 165 165; /* red-300 */ /* Buttons */ --ec-button-bg: 220 38 38; /* red-600 */ --ec-button-bg-hover: 239 68 68; /* red-500 */ --ec-button-text: 255 255 255; /* Sidebar */ --ec-sidebar-active-bg: 220 38 38; --ec-sidebar-active-text: 255 255 255; } ``` ### Step 2: Set the theme in config[​](#step-2-set-the-theme-in-config "Direct link to Step 2: Set the theme in config") Reference your custom theme name in `eventcatalog.config.js`: eventcatalog.config.js ``` export default { // ... other config theme: 'ruby', // Matches data-catalog-theme="ruby" in your CSS }; ``` ### Step 3: Test both modes[​](#step-3-test-both-modes "Direct link to Step 3: Test both modes") Start your catalog and test both light and dark modes to ensure all colors look correct: ``` npm run dev ``` Toggle between light and dark mode using the theme switcher in the header. Tailwind Color Reference Use [Tailwind CSS colors](https://tailwindcss.com/docs/customizing-colors) as a reference for your RGB values. For example, `red-600` is `220 38 38`. RGB Format Required CSS variables must use space-separated RGB values (e.g., `220 38 38`) **without** the `rgb()` wrapper. This allows EventCatalog to apply opacity modifiers like `rgb(var(--ec-accent) / 0.5)`. *** ## Full CSS variable reference[​](#full-css-variable-reference "Direct link to Full CSS variable reference") Here are all available CSS variables you can customize: ### Core colors[​](#core-colors "Direct link to Core colors") | Variable | Description | | --------------------------- | ------------------------------------------------------------ | | `--ec-accent` | Primary accent color for highlights and interactive elements | | `--ec-accent-hover` | Accent color on hover | | `--ec-accent-subtle` | Light accent background (badges, highlights) | | `--ec-accent-text` | Text color on accent backgrounds | | `--ec-accent-gradient-from` | Gradient start color | | `--ec-accent-gradient-to` | Gradient end color | ### Header[​](#header "Direct link to Header") | Variable | Description | | -------------------- | ------------------- | | `--ec-header-bg` | Header background | | `--ec-header-text` | Header text color | | `--ec-header-border` | Header border color | ### Sidebar[​](#sidebar "Direct link to Sidebar") | Variable | Description | | -------------------------- | -------------------------- | | `--ec-sidebar-bg` | Sidebar background | | `--ec-sidebar-bg-gradient` | Sidebar gradient end color | | `--ec-sidebar-border` | Sidebar border | | `--ec-sidebar-text` | Sidebar text color | | `--ec-sidebar-active-bg` | Active item background | | `--ec-sidebar-active-text` | Active item text | | `--ec-sidebar-hover-bg` | Hover item background | ### Content area[​](#content-area "Direct link to Content area") | Variable | Description | | ----------------------------- | --------------------------------- | | `--ec-content-bg` | Nested sidebar content background | | `--ec-content-text` | Content text | | `--ec-content-text-muted` | Muted text | | `--ec-content-text-secondary` | Secondary text | | `--ec-content-border` | Content borders | | `--ec-content-hover` | Hover background | | `--ec-content-active` | Active item background | ### Page[​](#page "Direct link to Page") | Variable | Description | | ---------------------- | -------------------- | | `--ec-page-bg` | Main page background | | `--ec-page-text` | Page text color | | `--ec-page-text-muted` | Muted/secondary text | | `--ec-page-border` | Page borders | ### Buttons[​](#buttons "Direct link to Buttons") | Variable | Description | | ---------------------- | ----------------------- | | `--ec-button-bg` | Button background | | `--ec-button-bg-hover` | Button hover background | | `--ec-button-text` | Button text color | ### Form inputs[​](#form-inputs "Direct link to Form inputs") | Variable | Description | | ------------------------ | ---------------------- | | `--ec-input-bg` | Input field background | | `--ec-input-border` | Input field border | | `--ec-input-text` | Input field text | | `--ec-input-placeholder` | Placeholder text color | ### Dropdowns[​](#dropdowns "Direct link to Dropdowns") | Variable | Description | | ---------------------- | ------------------------- | | `--ec-dropdown-bg` | Dropdown background | | `--ec-dropdown-text` | Dropdown text | | `--ec-dropdown-hover` | Dropdown hover background | | `--ec-dropdown-border` | Dropdown border | ### Icons[​](#icons "Direct link to Icons") | Variable | Description | | ----------------- | ------------------ | | `--ec-icon-color` | Default icon color | | `--ec-icon-hover` | Icon hover color | ### Other[​](#other "Direct link to Other") | Variable | Description | | ---------------------- | -------------------------------- | | `--ec-card-bg` | Card/elevated surface background | | `--ec-code-bg` | Code block background | | `--ec-group-icon-bg` | Group header icon background | | `--ec-group-icon-text` | Group header icon text | *** ## Dark mode prose overrides[​](#dark-mode-prose-overrides "Direct link to Dark mode prose overrides") For custom themes, you may want to customize how markdown content (prose) appears in dark mode: eventcatalog.styles.css ``` :root[data-catalog-theme="ruby"][data-theme="dark"] .prose { --tw-prose-body: rgb(163 163 163); --tw-prose-headings: rgb(245 245 245); --tw-prose-links: rgb(248 113 113); /* Match your accent */ --tw-prose-bold: rgb(245 245 245); --tw-prose-code: rgb(245 245 245); --tw-prose-pre-bg: rgb(23 23 23); } :root[data-catalog-theme="ruby"][data-theme="dark"] .prose a { color: rgb(248 113 113); } :root[data-catalog-theme="ruby"][data-theme="dark"] .prose a:hover { color: rgb(252 165 165); } ``` *** ## Example: Complete custom theme[​](#example-complete-custom-theme "Direct link to Example: Complete custom theme") Here's a complete example of a custom "ruby" red theme you can use as a starting point: View full ruby theme CSS eventcatalog.styles.css ``` /** * Ruby Theme - Custom Red Theme */ /* Ruby Light Mode */ :root[data-catalog-theme="ruby"], :root[data-catalog-theme="ruby"][data-theme="light"] { --ec-header-bg: 255 255 255; --ec-header-text: 23 23 23; --ec-header-border: 229 229 229; --ec-primary: 220 38 38; --ec-primary-hover: 185 28 28; --ec-accent: 220 38 38; --ec-accent-hover: 185 28 28; --ec-accent-subtle: 254 226 226; --ec-accent-text: 153 27 27; --ec-accent-gradient-from: 239 68 68; --ec-accent-gradient-to: 185 28 28; --ec-button-bg: 185 28 28; --ec-button-bg-hover: 153 27 27; --ec-button-text: 255 255 255; --ec-dropdown-bg: 255 255 255; --ec-dropdown-text: 64 64 64; --ec-dropdown-hover: 254 242 242; --ec-dropdown-border: 229 229 229; --ec-icon-color: 82 82 82; --ec-icon-hover: 185 28 28; --ec-sidebar-bg: 255 255 255; --ec-sidebar-bg-gradient: 254 242 242; --ec-sidebar-border: 229 229 229; --ec-sidebar-text: 82 82 82; --ec-sidebar-active-bg: 185 28 28; --ec-sidebar-active-text: 255 255 255; --ec-sidebar-hover-bg: 185 28 28; --ec-content-bg: 255 255 255; --ec-content-text: 23 23 23; --ec-content-text-muted: 82 82 82; --ec-content-text-secondary: 115 115 115; --ec-content-border: 229 229 229; --ec-content-hover: 250 250 250; --ec-content-active: 254 226 226; --ec-input-bg: 255 255 255; --ec-input-border: 212 212 212; --ec-input-text: 23 23 23; --ec-input-placeholder: 163 163 163; --ec-group-icon-bg: 254 226 226; --ec-group-icon-text: 153 27 27; --ec-page-bg: 255 255 255; --ec-page-text: 23 23 23; --ec-page-text-muted: 82 82 82; --ec-page-border: 229 229 229; --ec-card-bg: 255 255 255; --ec-code-bg: 250 250 250; } /* Ruby Dark Mode */ :root[data-catalog-theme="ruby"][data-theme="dark"] { --ec-header-bg: 23 23 23; --ec-header-text: 245 245 245; --ec-header-border: 38 38 38; --ec-accent: 248 113 113; --ec-accent-hover: 239 68 68; --ec-accent-subtle: 127 29 29 / 0.3; --ec-accent-text: 252 165 165; --ec-accent-gradient-from: 248 113 113; --ec-accent-gradient-to: 239 68 68; --ec-button-bg: 220 38 38; --ec-button-bg-hover: 239 68 68; --ec-button-text: 255 255 255; --ec-dropdown-bg: 23 23 23; --ec-dropdown-text: 212 212 212; --ec-dropdown-hover: 38 38 38; --ec-dropdown-border: 64 64 64; --ec-icon-color: 163 163 163; --ec-icon-hover: 252 165 165; --ec-sidebar-bg: 10 10 10; --ec-sidebar-bg-gradient: 10 10 10; --ec-sidebar-border: 38 38 38; --ec-sidebar-text: 163 163 163; --ec-sidebar-active-bg: 220 38 38; --ec-sidebar-active-text: 255 255 255; --ec-sidebar-hover-bg: 38 38 38; --ec-content-bg: 10 10 10; --ec-content-text: 245 245 245; --ec-content-text-muted: 163 163 163; --ec-content-text-secondary: 163 163 163; --ec-content-border: 38 38 38; --ec-content-hover: 23 23 23; --ec-content-active: 38 38 38; --ec-input-bg: 23 23 23; --ec-input-border: 64 64 64; --ec-input-text: 245 245 245; --ec-input-placeholder: 115 115 115; --ec-group-icon-bg: 38 38 38; --ec-group-icon-text: 252 165 165; --ec-page-bg: 10 10 10; --ec-page-text: 245 245 245; --ec-page-text-muted: 163 163 163; --ec-page-border: 38 38 38; --ec-card-bg: 10 10 10; --ec-code-bg: 23 23 23; } /* Ruby theme prose overrides */ :root[data-catalog-theme="ruby"][data-theme="dark"] .prose { --tw-prose-body: rgb(163 163 163); --tw-prose-headings: rgb(245 245 245); --tw-prose-links: rgb(248 113 113); --tw-prose-bold: rgb(245 245 245); } :root[data-catalog-theme="ruby"][data-theme="dark"] .prose a { color: rgb(248 113 113); } :root[data-catalog-theme="ruby"][data-theme="dark"] .prose a:hover { color: rgb(252 165 165); } ``` --- ## [📄️ Build (Static Mode)](/docs/development/deployment/build-and-deploy.md) [This document describes step by step how to deploy EventCatalog.](/docs/development/deployment/build-and-deploy.md) --- # Building Eventcatalog By default, EventCatalog exports a static HTML site. This means you can deploy your application anywhere you want. Have large or slow deployments? Some users have large catalogs, and slow deployments. This is because the static mode builds the entire catalog into HTML files. If you have a large catalog you may want to use [SSR mode](/docs/development/deployment/build-ssr-mode.md), this will give you a server-side rendered application. This reduces build times, and renders pages on the fly. ## Building your EventCatalog (Static)[​](#building-your-eventcatalog-static "Direct link to Building your EventCatalog (Static)") To build your Catalog you will need to run: ``` npm run build ``` This will output one directory * `dist` - Your EventCatalog as Static HTML ### Passing custom options[​](#passing-custom-options "Direct link to Passing custom options") **Added in** `eventcatalog@2.16.5` EventCatalog uses [Astro](https://astro.build/) to build the application. You can pass custom options to the build command by using the `--` prefix. Passing custom options ``` npx eventcatalog dev --debug -- --env=production --port=3000 ``` ### Compression[​](#compression "Direct link to Compression") You can opt into our build step which will compress your static assets. You can enable this by setting the [compress option](/docs/api/config.md#compress) to `true` in your `eventcatalog.config.js` file. "Why is compression disabled by default?" Compression can increase your build time and the amount of memory required to build your catalog. If you want to enable this feature, you might also want to increase your build memory using the `max_old_space_size` value. ### Memory limits[​](#memory-limits "Direct link to Memory limits") If you get any `JavaScript heap out of memory` errors, you can increase the memory limit by setting the `NODE_OPTIONS` environment variable. This gives astro more memory to work with. Increasing the memory limit ``` NODE_OPTIONS=--max_old_space_size=8196 npm run build ``` If you are still experiencing issues, you can try: * Turning off HTML compression ([see documentation](/docs/api/config.md#compress)) * Turning on MDX optimization ([see documentation](/docs/api/config.md#mdxOptimize)) * Rendering EventCatalog in [SSR mode](/docs/development/deployment/build-ssr-mode.md). * This requires you to run your EventCatalog on a server. But your pages are rendered on the fly, so you don't need to build the entire catalog into HTML files. This can also save you a lot of time when deploying your catalog. --- # Building Eventcatalog You can also use EventCatalog in SSR mode, which means you can use EventCatalog as a server-side rendered application. This can be useful for large catalogs, or for users with slow deployment times. Certain features like **Authentication** and **EventCatalog Chat** require SSR mode. ### How it works[​](#how-it-works "Direct link to How it works") Rather than building the entire catalog into HTML files, EventCatalog will render the pages on the fly (using server-side rendering). This means you can use EventCatalog as a server-side rendered application. ## Building your EventCatalog (SSR)[​](#building-your-eventcatalog-ssr "Direct link to Building your EventCatalog (SSR)") First you need to update your `eventcatalog.config.js` file to use SSR mode. eventcatalog.config.js ``` export default { // defaults to static output: 'server', } ``` Next you need to build your EventCatalog ``` npm run build ``` This will output one directory * `dist` - Your EventCatalog as a SSR application ## Deployment[​](#deployment "Direct link to Deployment") You will need to deploy your EventCatalog to a server that can run Node.js. The easiest way to do this is to use [a docker container](/docs/development/deployment/hosting-options.md#hosting-static-website-with-docker). --- # Deployment Workflows Many people are deploying EventCatalog in different ways, as it's self hosted you can rebuild and redeploy your catalog as often as you want. ### Keeping EventCatalog up to date[​](#keeping-eventcatalog-up-to-date "Direct link to Keeping EventCatalog up to date") Keeping documentation up to date is a challenge, as it's easy to forget to update the documentation when you make changes to your code. One way to keep your documentation up to date, is to redeploy your catalog whenever changes are made to your code, specifications or schemas. EventCatalog has companies redeploying their catalogs hundreds of times a day.... it really depends on how often you make changes to your code, specifications or schemas, and how often you want to update your documentation. **You are in control of how often you redeploy your catalog.** Many folks using EventCatalog have information scattered across multiple repositories, schema registries and other systems. Users of EventCatalog either use [our integrations (e.g AsyncAPI, OpenAPI, Schema Registry)](/integrations.md) or have built their own automated systems using our [SDK](/docs/sdk.md). ### CI/CD workflow to keep your documentation up to date[​](#cicd-workflow-to-keep-your-documentation-up-to-date "Direct link to CI/CD workflow to keep your documentation up to date") EventCatalog is docs-as-code solution. This means you can store EventCatalog next to your code and in git repositories. You can setup your CI/CD pipeline to build and deploy your catalog whenever changes are made to your code, specifications or schemas. EventCatalog is flexible. And you can redeploy your catalog in various ways. This can let you setup automation to ensure your documentation can stay up to date with any changes to your code, specifications or schemas. --- # Hosting ### Hosting Options[​](#hosting-options "Direct link to Hosting Options") EventCatalog can be hosted in two ways: * [Hosting a static website output (default)](#hosting-a-static-website) * [Hosting EventCatalog Server](#hosting-as-a-server) ### Hosting a static website[​](#hosting-a-static-website "Direct link to Hosting a static website") By default EventCatalog will build a static website. Here are some guides and places you can host static content * [Host with Docker](#hosting-with-docker) * [Deploy to NextJS](https://nextjs.org/docs/deployment) * [Host in AWS S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html) * [Deploying EventCatalog using Helm chart](https://github.com/osodevops/helm-charts/tree/main/charts/eventcatalog) **Community posts** * [Using AWS CDK to Deploy EventCatalog](https://matt.martz.codes/using-aws-cdk-to-deploy-eventcatalog) * [Using Netlify to host Static Content](https://www.netlify.com/blog/2016/10/27/a-step-by-step-guide-deploying-a-static-site-or-single-page-app/) * [How to create an EventCatlaog with Azure](https://www.kallemarjokorpi.fi/blog/how-to-create-and-event-catalog.html) * [Autonomous EventCatalog for documenting EventBridge Events](https://medium.com/@wrennkieran/autonomous-eventcatalog-for-documenting-eventbridge-events-73e6334f2400) ### Hosting static website with Docker[​](#hosting-static-website-with-docker "Direct link to Hosting static website with Docker") EventCatalog comes with a DockerFile you can build the image and deploy the container. The container exposes ports `3000`. To build the docker container you need to run: ``` # Builds the container docker build -t eventcatalog . # Runs the container locally docker run -p 3000:80 -it eventcatalog ``` ### Hosting as a server[​](#hosting-as-a-server "Direct link to Hosting as a server") **Added in** `eventcatalog@2.35.4` First you need to update your `eventcatalog.config.js` file to use SSR mode. eventcatalog.config.js ``` export default { // defaults to static output: 'server', } ``` A server output is required if you are using any EventCatalog feature that requires a server, these include: * [EventCatalog Chat (bring your own keys)](/features/ai-assistant.md) * [EventCatalog Authentication](/docs/development/authentication/introduction.md) You can use the server Docker image to run the server, this is the recommended way to run the server. First you need to create a Dockerfile for the server (if you don't already have one). /Dockerfile.server ``` FROM node:lts AS runtime WORKDIR /app # Install dependencies COPY package.json package-lock.json ./ RUN npm install COPY . . # Fix for Astro in Docker: https://github.com/withastro/astro/issues/2596 ENV NODE_OPTIONS=--max_old_space_size=2048 RUN npm run build ENV HOST=0.0.0.0 ENV PORT=3000 EXPOSE 3000 # Start the server CMD npm run start ``` Then you can build the docker image with: ``` docker build -f Dockerfile.server -t eventcatalog-server . ``` Then you can run the server with: ``` docker run -p 3000:3000 eventcatalog-server ``` "Why do I need a server to run EventCatalog?" Some features of EventCatalog require a server to run (e.g. [EventCatalog Chat](/features/ai-assistant.md) and [EventCatalog Authentication](/docs/development/authentication/introduction.md)). If you have a large catalog, you may want to use [SSR mode](/docs/development/deployment/build-ssr-mode.md) to reduce build times. --- # EventCatalog Licenses EventCatalog is an open source project with a [community edition and a commercial edition](/pricing.md) and also supports a range of integrations (plugins) which have their own licenses. If you are using the commercial edition of EventCatalog, then you don't need to worry about licenses and can skip this page. If you are using EventCatalog Starter, EventCatalog Scale, EventCatalog Enterprise or any of the integrations (plugins) you will need to set up a license key. Want to try commercial features? All licenses have a 14 day free trial. You can get a free trial license key by going to [EventCatalog Cloud](https://eventcatalog.cloud). If you wish to continue using the commercial features after the trial period, you will need to purchase a license. You can email us at `hello@eventcatalog.dev` to enquire about a license. ### How to set up a license keys[​](#how-to-set-up-a-license-keys "Direct link to How to set up a license keys") 1. Go to [EventCatalog Cloud](https://eventcatalog.cloud) and sign up for a free trial. 2. Once you are logged in, you can select any license you want to use or integration. 3. Selecting the plan or integration will give you a license key. 4. Store the license key in your `.env` file or as an environment variable. ### How EventCatalog validates licenses keys[​](#how-eventcatalog-validates-licenses-keys "Direct link to How EventCatalog validates licenses keys") ##### Online License Validation (recommended)[​](#online-license-validation-recommended "Direct link to Online License Validation (recommended)") By default, EventCatalog will validate your license key online. Your keys are read from your `.env` file and verified against our API. ##### Offline License Validation[​](#offline-license-validation "Direct link to Offline License Validation") If you are behind a firewall or can't access the EventCatalog API, then your license keys can be validated offline. To get offline validation working you will need to: 1. Get in contact with us at `hello@eventcatalog.dev` to get a license key `(license.jwt)`. 2. Once you have you license key `(license.jwt)` you put this into the root of your catalog directory. 3. EventCatalog will then validate your license key offline. Your key will expire after a year of purchase, and you will need to get a new license key. --- # Embed Designs into EventCatalog You can embed any diagram directly into your documentation using the [``](/docs/development/components/components/design.md) component. ![Embed into EventCatalog](/assets/images/embed-ec-3ec517adda93aa41320658041048d127.png) To embed your diagrams you need to: 1. Save your diagram as a `.ecstudio` file 2. Put your `.ecstudio` file in the location of your markdown file in EventCatalog. 3. Use the [``](/docs/development/components/components/design.md) component in your markdown file to embed your diagram into your documentation Embed diagrams anywhere Our vision to to allow users to be embed diagrams anywhere, letting them embed diagrams into their tools they already use. This is currently on our roadmap, and we will be adding more support for this in the future. --- # Further Reading If you want to learn more about EventCatalog Studio you can [read our documentation here](/docs/studio/getting-started.md) or click on the links below to learn more. * [How to add nodes to your diagram](/docs/studio/diagrams/using-nodes.md) * [Adding comments to your designs](/docs/studio/diagrams/adding-comments.md) * [Import & Export your designs](/docs/studio/diagrams/import-export.md) --- # Import Resources into Studio To import your resources into EventCatalog Studio, click on the **EventCatalog Studio** button in the navigation bar, then click on the **Open EventCatalog Studio** button. ![Import Resources](/assets/images/studio-71b078858dd8a516ccf7f10131f6e693.png) Then click on **Copy resources to clipboard** to copy your architecture primitives to the clipboard, then click on **Open EventCatalog Studio** to open the drag and drop editor. ![Copy Resources](/img/studio-copy.png) Then you can paste your resources into the drag and drop editor, and click **Import resources** to import your resources into the drag and drop editor. ![Import Resources](/assets/images/paste-7c2086375827f19e3c8e66a4770d628a.png) Once you have imported your resources, you can start to use them to create new designs or workflows for your architecture. ![Import Resources](/assets/images/example-8ba551b30e0ec363ffca9ae221c304fe.png) --- # Documentation to Design When you document your architecture with EventCatalog, you can use your architecture primitives (your domains, services, messages, channels, schemas, etc) to create designs of business workflows, and explore new ideas with your teams using our drag and drop editor [(EventCatalog Studio)](http://eventcatalog.studio/). This can be useful if you want to share new ideas with your teams, or document end to end business workflows in your organization using a drag and drop interface. This means your developers, architects and business stakeholders can all work together to create workflows or designs together and embed them back into your documentation. ![Design workflows](/assets/images/studio-app-2-36a71a45f22b070dca2721ebcc48ab4f.png) ### How EventCatalog Studio works[​](#how-eventcatalog-studio-works "Direct link to How EventCatalog Studio works") EventCatalog Studio is a drag and drop editor that lets you create designs (.ecstudio files) with your architecture primitives. You can embed these designs back into your documentation using the [`` component](/docs/development/components/components/design.md). --- # EventCatalog Linter A comprehensive linter for EventCatalog that validates frontmatter schemas and resource references to ensure your architecture documentation is correct and consistent. The EventCatalog Linter helps you catch issues early in your development process, ensuring your documentation maintains high quality and accuracy across all your EventCatalog resources. ## Use cases[​](#use-cases "Direct link to Use cases") * **Quality Assurance**: Ensure your documentation is correct and consistent * **CI/CD**: Integrate the linter into your CI/CD pipeline to catch issues early * **Documentation**: Run the linter regularly as part of your development workflow * **Version Consistency**: Use consistent version patterns across your EventCatalog resources ## Features[​](#features "Direct link to Features") * **📋 Schema Validation**: Validates all resource frontmatter against defined schemas using Zod * **🔗 Reference Validation**: Ensures all referenced resources (services, events, domains, etc.) actually exist * **📦 Semver Version Support**: Supports semantic versions, ranges (`^1.0.0`, `~1.2.0`), x-patterns (`0.0.x`), and `latest` * **⚙️ Configurable Rules**: Optional `.eventcatalogrc.js` config file for customizing rule severity and behavior * **🚫 Ignore Patterns**: Skip validation for specific file patterns (archived, drafts, etc.) * **🎯 Rule Overrides**: Apply different rules to different file patterns for flexible team workflows * **🎯 Comprehensive Coverage**: Supports all EventCatalog resource types * **⚡ Fast Performance**: Efficiently scans large catalogs * **🎨 ESLint-Inspired Output**: Clean, file-grouped error reporting with severity levels * **⚠️ Warnings Support**: Distinguish between errors and warnings with `--fail-on-warning` option ### Supported Resource Types[​](#supported-resource-types "Direct link to Supported Resource Types") The linter validates all EventCatalog resource types: * 🏢 **Domains** (including subdomains) * ⚙️ **Services** * 📨 **Events** * 📤 **Commands** * ❓ **Queries** * 📡 **Channels** * 🔄 **Flows** * 📊 **Entities** * 👤 **Users** * 👥 **Teams** ## Quick Start[​](#quick-start "Direct link to Quick Start") Get started with the EventCatalog Linter in three simple steps: ### 1. Run the Linter[​](#1-run-the-linter "Direct link to 1. Run the Linter") Start linting your EventCatalog immediately with npx: ``` npx @eventcatalog/linter ``` ### 2. Configure Rules (Optional)[​](#2-configure-rules-optional "Direct link to 2. Configure Rules (Optional)") Create a `.eventcatalogrc.js` file in your EventCatalog root to customize validation: ``` module.exports = { rules: { 'best-practices/summary-required': 'warn', 'refs/owner-exists': 'error' }, ignorePatterns: ['**/drafts/**'] }; ``` ### 3. Integrate with CI/CD[​](#3-integrate-with-cicd "Direct link to 3. Integrate with CI/CD") Add to your CI/CD pipeline for automated validation: ``` # GitHub Actions - run: npx @eventcatalog/linter --fail-on-warning ``` ## Installation[​](#installation "Direct link to Installation") ### Use with npx (Recommended)[​](#use-with-npx-recommended "Direct link to Use with npx (Recommended)") * npm * pnpm ``` npx @eventcatalog/linter ``` ``` pnpm dlx @eventcatalog/linter ``` ### Global Installation[​](#global-installation "Direct link to Global Installation") * npm * pnpm ``` npm install -g @eventcatalog/linter ``` ``` pnpm install -g @eventcatalog/linter ``` ### Add to your project[​](#add-to-your-project "Direct link to Add to your project") * npm * pnpm ``` npm install --save-dev @eventcatalog/linter ``` ``` pnpm install --save-dev @eventcatalog/linter ``` ## Usage[​](#usage "Direct link to Usage") ### Basic Usage[​](#basic-usage "Direct link to Basic Usage") Run the linter in your EventCatalog directory: ``` // Lint current directory eventcatalog-linter // Lint specific directory eventcatalog-linter ./my-eventcatalog // Verbose output with detailed information eventcatalog-linter --verbose // Show help eventcatalog-linter --help ``` ### CLI Options[​](#cli-options "Direct link to CLI Options") ``` Usage: eventcatalog-linter [options] [directory] Arguments: directory EventCatalog directory to lint (default: ".") Options: -V, --version output the version number -v, --verbose Show verbose output (default: false) --fail-on-warning Exit with non-zero code on warnings (default: false) -h, --help display help for command ``` ## Configuration[​](#configuration "Direct link to Configuration") The EventCatalog Linter supports optional configuration through a `.eventcatalogrc.js` file in your catalog root directory. This allows you to: * Turn rules on/off * Configure rule severity levels (error, warn, off) * Ignore specific file patterns * Override rules for specific file patterns ### Quick Start with Configuration[​](#quick-start-with-configuration "Direct link to Quick Start with Configuration") Create a `.eventcatalogrc.js` file in your EventCatalog root directory: ``` // .eventcatalogrc.js module.exports = { rules: { // Schema validation rules 'schema/required-fields': 'error', 'schema/valid-semver': 'error', 'schema/valid-email': 'warn', // Reference validation rules 'refs/owner-exists': 'error', 'refs/valid-version-range': 'error', // Best practice rules 'best-practices/summary-required': 'warn', 'best-practices/owner-required': 'error', }, // Ignore certain paths ignorePatterns: ['**/archived/**', '**/drafts/**'], // Override rules for specific file patterns overrides: [ { files: ['**/experimental/**'], rules: { 'best-practices/owner-required': 'off' } } ] }; ``` ### Rule Severity Levels[​](#rule-severity-levels "Direct link to Rule Severity Levels") * **`'error'`** - Causes the linter to exit with error code 1 * **`'warn'`** - Shows warnings but allows the linter to pass (unless `--fail-on-warning` is used) * **`'off'`** - Disables the rule completely ### Available Rules[​](#available-rules "Direct link to Available Rules") | Rule Name | Description | Accepted Values | Default | | --------------------------------- | -------------------------------------------------------------------------- | ---------------------- | -------------- | | **Schema Validation Rules** | | | | | `schema/required-fields` | Validates that required fields are present in frontmatter | `error`, `warn`, `off` | `error` | | `schema/valid-type` | Validates that field types are correct (strings, arrays, objects) | `error`, `warn`, `off` | `error` | | `schema/valid-semver` | Validates semantic version format (1.0.0, 2.1.3-beta) | `error`, `warn`, `off` | `error` | | `schema/valid-email` | Validates email address format in user frontmatter | `error`, `warn`, `off` | `error` | | `schema/validation-error` | General schema validation errors | `error`, `warn`, `off` | `error` | | **Reference Validation Rules** | | | | | `refs/owner-exists` | Ensures referenced owners (users/teams) exist | `error`, `warn`, `off` | `error` | | `refs/valid-version-range` | Validates version references and patterns | `error`, `warn`, `off` | `error` | | `refs/resource-exists` | Ensures referenced resources exist (always enabled for critical resources) | Always enabled | Always enabled | | **Best Practice Rules** | | | | | `best-practices/summary-required` | Requires summary field for better documentation | `error`, `warn`, `off` | `error` | | `best-practices/owner-required` | Requires at least one owner for accountability | `error`, `warn`, `off` | `error` | Core Resource Validation Core resource reference validation (services, domains, entities) is always enabled and cannot be disabled, ensuring referential integrity of your EventCatalog. ### Configuration Examples[​](#configuration-examples "Direct link to Configuration Examples") #### Relaxed Configuration for Development[​](#relaxed-configuration-for-development "Direct link to Relaxed Configuration for Development") ``` module.exports = { rules: { 'best-practices/summary-required': 'warn', 'best-practices/owner-required': 'warn', 'refs/owner-exists': 'warn', }, ignorePatterns: ['**/drafts/**', '**/experimental/**'] }; ``` #### Strict Configuration for Production[​](#strict-configuration-for-production "Direct link to Strict Configuration for Production") ``` module.exports = { rules: { 'schema/required-fields': 'error', 'refs/owner-exists': 'error', 'best-practices/summary-required': 'error', 'best-practices/owner-required': 'error', } }; ``` #### Team-Specific Overrides[​](#team-specific-overrides "Direct link to Team-Specific Overrides") ``` module.exports = { rules: { 'best-practices/owner-required': 'error', 'best-practices/summary-required': 'error', }, overrides: [ { files: ['**/legacy/**'], rules: { 'best-practices/owner-required': 'warn', 'best-practices/summary-required': 'off' } }, { files: ['**/critical/**'], rules: { 'best-practices/summary-required': 'error', 'refs/owner-exists': 'error' } } ] }; ``` ### Using with CI/CD[​](#using-with-cicd "Direct link to Using with CI/CD") The configuration file allows you to have different validation rules for different environments: ``` # Development - warnings allowed npx @eventcatalog/linter # Production - fail on warnings npx @eventcatalog/linter --fail-on-warning ``` ### Default Behavior[​](#default-behavior "Direct link to Default Behavior") If no `.eventcatalogrc.js` file is found, the linter uses default rules where all validations are set to `'error'`. This ensures strict validation out of the box, making it easy to get started with quality documentation practices. ### Package.json Integration[​](#packagejson-integration "Direct link to Package.json Integration") Add to your `package.json` scripts: ``` { "scripts": { "lint:eventcatalog": "eventcatalog-linter", "lint:eventcatalog:verbose": "eventcatalog-linter --verbose" } } ``` ## What It Validates[​](#what-it-validates "Direct link to What It Validates") ### Frontmatter Schema Validation[​](#frontmatter-schema-validation "Direct link to Frontmatter Schema Validation") * ✅ Required fields are present (`id`, `name`, `version`) * ✅ Field types are correct (strings, arrays, objects) * ✅ Semantic versions follow proper format (`1.0.0`, `2.1.3-beta`) * ✅ Version patterns supported (`latest`, `^1.0.0`, `~1.2.0`, `0.0.x`) * ✅ URLs are valid format * ✅ Email addresses are valid format * ✅ Enum values are from allowed lists * ✅ Nested object structures are correct ### Reference Validation[​](#reference-validation "Direct link to Reference Validation") * ✅ Services referenced in domains exist * ✅ Events/Commands/Queries referenced in services exist * ✅ Entities referenced in domains/services exist * ✅ Users/Teams referenced as owners exist * ✅ Flow steps reference existing services/messages * ✅ Entity properties reference existing entities * ✅ Version-specific references are valid ## Example Output[​](#example-output "Direct link to Example Output") ### ✅ Success Output[​](#-success-output "Direct link to ✅ Success Output") ``` $ eventcatalog-linter ✔ No problems found! 42 files checked ``` ### ❌ Error Output[​](#-error-output "Direct link to ❌ Error Output") ``` $ eventcatalog-linter services/user-service/index.mdx ✖ error version: Invalid semantic version format [version] (schema/valid-semver) ⚠ warning Summary is required for better documentation [summary] (best-practices/summary-required) ✖ 2 problems domains/sales/index.mdx ✖ error Referenced service "order-service" does not exist [services] (refs/resource-exists) ✖ 1 problem flows/user-registration/index.mdx ✖ error Referenced service "notification-service" (version: 2.0.0) does not exist [steps[1].service] (refs/valid-version-range) ✖ 1 problem ✖ 4 problems (3 errors, 1 warning) 3 files checked ``` ## Version Pattern Support[​](#version-pattern-support "Direct link to Version Pattern Support") The linter supports flexible version patterns for resource references: ### Exact Versions[​](#exact-versions "Direct link to Exact Versions") ``` sends: - id: user-created version: 1.0.0 # Exact semantic version ``` ### Latest Version[​](#latest-version "Direct link to Latest Version") ``` sends: - id: user-created version: latest # Always use the latest available version ``` ### Semver Ranges[​](#semver-ranges "Direct link to Semver Ranges") ``` sends: - id: user-created version: ^1.0.0 # Compatible with 1.x.x (1.0.0, 1.2.3, but not 2.0.0) - id: user-updated version: ~1.2.0 # Compatible with 1.2.x (1.2.0, 1.2.5, but not 1.3.0) ``` ### X-Pattern Matching[​](#x-pattern-matching "Direct link to X-Pattern Matching") ``` sends: - id: user-created version: 0.0.x # Matches 0.0.1, 0.0.5, 0.0.12, etc. - id: order-placed version: 1.x # Matches 1.0.0, 1.5.3, 1.99.0, etc. ``` ## CI/CD Integration[​](#cicd-integration "Direct link to CI/CD Integration") ### GitHub Actions[​](#github-actions "Direct link to GitHub Actions") ``` name: EventCatalog Lint on: [push, pull_request] jobs: lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: actions/setup-node@v3 with: node-version: '18' - run: npx @eventcatalog/linter ``` ### GitLab CI[​](#gitlab-ci "Direct link to GitLab CI") ``` eventcatalog-lint: stage: test image: node:18 script: - npx @eventcatalog/linter ``` ## Rule Names and Error Codes[​](#rule-names-and-error-codes "Direct link to Rule Names and Error Codes") The linter provides descriptive rule names in parentheses to help identify and fix issues quickly. Each error shows the specific rule that was violated: ### Schema Validation Rules[​](#schema-validation-rules "Direct link to Schema Validation Rules") * `(schema/required-fields)` - Required field is missing * `(schema/valid-type)` - Field has wrong data type * `(schema/valid-semver)` - Invalid semantic version format * `(schema/valid-email)` - Invalid email address format * `(schema/validation-error)` - General schema validation error ### Reference Validation Rules[​](#reference-validation-rules "Direct link to Reference Validation Rules") * `(refs/owner-exists)` - Referenced owner (user/team) doesn't exist * `(refs/valid-version-range)` - Referenced version doesn't exist or invalid pattern * `(refs/resource-exists)` - Referenced resource doesn't exist ### Best Practice Rules[​](#best-practice-rules "Direct link to Best Practice Rules") * `(best-practices/summary-required)` - Summary field is missing * `(best-practices/owner-required)` - At least one owner is required ### Parse Errors[​](#parse-errors "Direct link to Parse Errors") * `(@eventcatalog/parse-error)` - YAML/frontmatter parsing error ## Warnings Support[​](#warnings-support "Direct link to Warnings Support") The linter distinguishes between errors (critical issues) and warnings (suggestions for improvement): * **Errors**: Critical issues that must be fixed * **Warnings**: Suggestions for better documentation Use `--fail-on-warning` to treat warnings as errors in CI/CD pipelines: ``` # Exit with error code if warnings are found eventcatalog-linter --fail-on-warning ``` ## Common Validation Examples[​](#common-validation-examples "Direct link to Common Validation Examples") ### Valid Frontmatter Examples[​](#valid-frontmatter-examples "Direct link to Valid Frontmatter Examples") #### Service[​](#service "Direct link to Service") ``` --- id: user-service name: User Service version: 2.1.0 summary: Manages user accounts and authentication owners: - platform-team - john-doe sends: - id: user-created version: 1.0.0 - id: user-updated receives: - id: create-user - id: update-user entities: - id: user repository: language: TypeScript url: https://github.com/company/user-service --- ``` #### Event[​](#event "Direct link to Event") ``` --- id: user-created name: User Created version: 1.0.0 summary: Triggered when a new user account is created owners: - platform-team sidebar: badge: POST label: User Events draft: false deprecated: false --- ``` ### Common Validation Errors[​](#common-validation-errors "Direct link to Common Validation Errors") #### ❌ Missing Required Fields[​](#-missing-required-fields "Direct link to ❌ Missing Required Fields") ``` --- # Missing 'id' field name: User Service version: 1.0.0 --- ``` #### ❌ Invalid Semantic Version[​](#-invalid-semantic-version "Direct link to ❌ Invalid Semantic Version") ``` --- id: user-service name: User Service version: v1.0 # Should be 1.0.0 --- ``` #### ❌ Invalid Reference[​](#-invalid-reference "Direct link to ❌ Invalid Reference") ``` --- id: sales-domain name: Sales Domain version: 1.0.0 services: - id: non-existent-service # Service doesn't exist --- ``` ## Best Practices[​](#best-practices "Direct link to Best Practices") 1. **Start with Configuration**: Create a `.eventcatalogrc.js` file to customize rules for your team's workflow 2. **Run in CI/CD**: Integrate the linter into your CI/CD pipeline to catch issues early 3. **Use `--fail-on-warning`**: Consider treating warnings as errors in production environments 4. **Regular Validation**: Run the linter regularly as part of your development workflow 5. **Fix Issues Promptly**: Address validation errors immediately to maintain documentation quality 6. **Version Consistency**: Use consistent version patterns across your EventCatalog resources 7. **Team Overrides**: Use file pattern overrides for different validation requirements across teams 8. **Ignore Patterns**: Use ignore patterns for draft or experimental content that shouldn't be validated yet ## Issues?[​](#issues "Direct link to Issues?") If you have any issues or feedback, please let us know by opening an issue on [GitHub](https://github.com/event-catalog/eventcatalog/issues) or joining our [Discord server](https://eventcatalog.dev/discord). --- # AI Reviewer Feature: `EventCatalog Scale Plan Feature` The [EventCatalog GitHub Action](https://github.com/event-catalog/github-action) brings AI-powered insight into your Git workflows. It uses large language models (LLMs) to automatically review changes to your EventCatalog, helping you catch issues early—before they reach production. You can pick from OpenAI, Anthropic, or Google. Think of it as a smart assistant for your pull requests. It doesn't just lint code—it understands the implications of your changes. Watch the video to see the GitHub Action in action [YouTube video player](https://www.youtube.com/embed/xAQ20eAfKsI?si=ZNQMEcAkDSjfIa3b) **What it does:** * Detect breaking changes in schemas during pull requests * Score how likely a change is to cause issues * List affected consumers so you know who’s impacted * Recommend actions to resolve problems before merging By automating the review process, this GitHub Action saves your team hours of manual effort, reduces human error, and brings consistency to your EventCatalog maintenance. You’re always in control—the final merge decision is still up to you. But now, you’ll have the insights to make it with confidence. ![EventCatalog GitHub Action](/img/github-actions.png) ### Functionality[​](#functionality "Direct link to Functionality") The GitHub action supports many different tasks, and you can use the same action for multiple tasks. Tasks: * [schema\_review](/docs/development/developer-tools/github-action.md#task-automated-schema-reviews): * Automatically review the schemas for breaking changes in your pull requests *More tasks will be added in the future* *** ### Task: Automated schema reviews[​](#task-automated-schema-reviews "Direct link to Task: Automated schema reviews") The schema review task is used to review schemas for breaking changes. This task let's you catch breaking changes in your schemas before they are deployed. The schema review supports any schema format, including (JSON, Avro, Protobuf, Thrift, etc.). ![EventCatalog GitHub Action](/img/github-actions.png) **Why use the schema review task?** * Capture breaking changes in your schemas before they are deployed * Get a score of how likely the changes are to be breaking * See a list of consumers that will be affected by the changes * Take action to fix breaking changes before they are deployed **Workflow example:** 1. Your team member makes a change to a schema in EventCatalog (inside your events, queries or commands folders) 2. The action will review the schema for breaking changes using your configured LLM (OpenAI, Anthropic, Google) 3. The action will return a summary of changes, and give you a score of how likely the changes are to be breaking 4. The action will list affected consumers so you know who’s impacted 5. Your team member is still in control of the merge decision, but now has the information to make a more informed decision #### Setup[​](#setup "Direct link to Setup") EventCatalog Scale License The GitHub action requires an EventCatalog Scale License. You can get a 14 day free trial from [EventCatalog Cloud](https://eventcatalog.dev/cloud). Set your EventCatalog Scale License key in the `license_key` parameter. We recommend storing the `license_key` value as a GitHub secret. To use the EventCatalog GitHub Action, create a new .github/workflows/eventcatalog-ci.yaml file in your repository with the following content: .github/workflows/eventcatalog-ci.yaml ``` name: EventCatalog CI on: push: pull_request: types: [opened, synchronize, reopened, labeled, unlabeled] delete: permissions: contents: read pull-requests: write jobs: schema_review: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: event-catalog/github-action@main with: # The task to run, currently only schema_review is supported task: schema_review # The AI LLM provider to use (openai, anthropic, google) provider: openai # The model to use for the task, defaults to o4-mini # Find the models in the documentation below model: o4-mini # Your API KEY for the LLM provider api_key: ${{ secrets.OPENAI_API_KEY }} # Your EventCatalog Scale License key license_key: ${{ secrets.EVENT_CATALOG_LICENSE_KEY }} # Your GitHub token github_token: ${{ secrets.GITHUB_TOKEN }} ``` #### Configuration options[​](#configuration-options "Direct link to Configuration options") | Parameter | Description | Required | Default | | ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------- | | `task` | The task to run, currently only `schema_review` is supported | Yes | N/A | | `catalog_directory` | The directory where the EventCatalog files are located. Useful for monorepos. By default, the action will review all files in the repository. If you have EventCatalog in a subdirectory, you can specify the directory here. | No | `./` | | `failure_threshold` | The score below which the action will fail. The score is a number between 0 and 100. The default is 25. The LLM will return a score between 0 and 100, based on the likelihood of the changes being breaking. | No | 25 | | `provider` | The AI LLM provider to use (openai, anthropic, google) | Yes | openai | | `model` | The model to use for the task, defaults to `o4-mini`. See the list of supported models: [OpenAI models](https://github.com/event-catalog/github-action/blob/bf92166b4e4c9414caf63e88bc7a315467b506b6/src/ai-models/openai.ts#L4), [Anthropic models](https://github.com/event-catalog/github-action/blob/bf92166b4e4c9414caf63e88bc7a315467b506b6/src/ai-models/anthropic.ts#L4), [Google models](https://github.com/event-catalog/github-action/blob/bf92166b4e4c9414caf63e88bc7a315467b506b6/src/ai-models/google.ts#L4) | Yes | o4-mini | | `api_key` | Your API KEY for the LLM provider | Yes | N/A | | `license_key` | Your EventCatalog Scale License key | Yes | N/A | #### Got an issue?[​](#got-an-issue "Direct link to Got an issue?") If you have any issues with the GitHub action, please [open an issue](https://github.com/event-catalog/github-action) on the GitHub action repository. --- # LLMS.txt **Added in** `eventcatalog@2.20.0` Enable tools like Claude, ChatGPT, GitHub Copilot, and Cursor to quickly understand your EventCatalog. ### What is LLMS.txt?[​](#what-is-llmstxt "Direct link to What is LLMS.txt?") [LLMS.txt](https://llmstxt.org/) is a proposed standard that helps AI-powered development tools better understand and interact with your documentation. Similar to how robots.txt guides web crawlers, LLMS.txt provides structured information that makes it easier for AI assistants like Claude, ChatGPT, and GitHub Copilot to process your EventCatalog documentation. The file is automatically generated and maintained as part of your documentation pipeline, requiring no manual configuration. It organizes your documentation's key concepts, structures, and relationships in a format optimized for machine reading. ### llms.txt and llms-full.txt[​](#llmstxt-and-llms-fulltxt "Direct link to llms.txt and llms-full.txt") The `llms.txt` file includes your EventCatalog resources in a simple format. Lists your resources with a summary for each of them. The `llms-full.txt` file includes your EventCatalog resources in a more detailed format. All the contents of your Catalog resources are included in the file. ### Enable in EventCatalog[​](#enable-in-eventcatalog "Direct link to Enable in EventCatalog") **`llms.txt` is enabled by default in EventCatalog.** You can disable it by turning it off in your `eventcatalog.config.js` file. eventcatalog.config.js ``` llmsTxt: { enabled: false, }, ``` Once you enable llms.txt you can query both the urls: * `https:///docs/llm/llms.txt` * Demo: * `https:///docs/llm/llms-full.txt` * Demo: ### How to use LLMS.txt?[​](#how-to-use-llmstxt "Direct link to How to use LLMS.txt?") Once you deploy your EventCatalog you can use your tools to ask questions about your Catalog. ![LLMS.txt](/assets/images/ai-example-60f5eaa1af9515ec316c638a3d615e6f.png) --- ## [📄️ Introduction](/docs/development/ask-your-architecture/mcp-server/introduction.md) [Connect AI tools to your architecture catalog](/docs/development/ask-your-architecture/mcp-server/introduction.md) --- # schemas.txt **Added in** `eventcatalog@2.64.0` Enable tools like Claude, ChatGPT, GitHub Copilot, and Cursor to quickly fetch and understand your EventCatalog schemas. Message schemas and service specifications can be fetched from your EventCatalog and used in your own applications. ### What is schemas.txt?[​](#what-is-schemastxt "Direct link to What is schemas.txt?") Schemas.txt is very similar to [LLMS.txt](/docs/development/developer-tools/llms.txt.md), but it is specifically for schemas in your EventCatalog. Schemas.txt supports any schema format for your messages (e.g Avro, Protobuf, JSON Schema etc) and any specification for your services (e.g OpenAPI, AsyncAPI, GraphQL etc). The schemas.txt file is automatically generated and maintained as part of your documentation pipeline, requiring no manual configuration. It organizes your schemas in a format optimized for machine reading. ### schemas.txt and schemas-full.txt[​](#schemastxt-and-schemas-fulltxt "Direct link to schemas.txt and schemas-full.txt") The `schemas.txt` file includes your EventCatalog schemas in a simple format. Lists your schemas with a summary for each of them. ### How to use schemas.txt?[​](#how-to-use-schemastxt "Direct link to How to use schemas.txt?") The [EventCatalog MCP](/docs/development/ask-your-architecture/mcp-server/introduction.md) already uses the schemas.txt file to provide access to your schemas in your MCP clients (e.g Cursor, Windsurf, Claude Desktop etc). If you want to use schemas.txt in your own application, you can query the urls: * `https:///docs/llm/schemas.txt` * Demo: --- ## [📄️ Why EventCatalog?](/docs/development/getting-started/introduction.md) [EventCatalog is an open source project to help you bring discoverability to your event-driven architecture.](/docs/development/getting-started/introduction.md) --- # Development and build ## Edit your project[​](#edit-your-project "Direct link to Edit your project") To make changes to your project, open your project folder in your code editor. Working in development mode with the dev server running allows you to see updates to your site as you edit the code. ## Starting the development server[​](#starting-the-development-server "Direct link to Starting the development server") EventCatalog comes with a built-in development server that has everything you need for project development. The `eventcatalog dev` CLI command will start the local development server so that you can see your new website in action for the very first time. Every starter template comes with a pre-configured script that will run `eventcatalog dev` for you. After navigating into your project directory, run this command and start the EventCatalog development server: ``` npm run dev ``` If all goes well, EventCatalog will now be serving your project on . Visit that link in your browser and see your new site! ## Build and preview your catalog[​](#build-and-preview-your-catalog "Direct link to Build and preview your catalog") To check the version of your site that will be created at build time, quit the dev server (Ctrl + C) and run the appropriate build command in your terminal: ``` npm run build ``` EventCatalog will build a deploy-ready version of your site in a separate folder (dist/ by default) and you can watch its progress in the terminal. This will alert you to any build errors in your project before you deploy to production. When the build is finished, run the appropriate preview command (e.g. npm run preview) in your terminal and you can view the built version of your site locally in the same browser preview window. Note that this previews your code as it existed when the build command was last run. This is meant to give you a preview of how your site will look when it is deployed to the web. Any later changes you make to your code after building will not be reflected while you preview your site until you run the build command again. Use (Ctrl + C) to quit the preview and run another terminal command, such as restarting the dev server to go back to working in development mode which does update as you edit to show a live preview of your code changes. ## EventCatalog static vs server output[​](#eventcatalog-static-vs-server-output "Direct link to EventCatalog static vs server output") By default, EventCatalog will build a static website. This means you can [host this website](/docs/development/deployment/hosting-options.md) anywhere you like. Some features of EventCatalog (e.g SSO) require a to run EventCatalog as a server. You can opt into which build mode you want to use by setting the [`output` property in your `eventcatalog.config.js` file](/docs/api/config.md#output). ## Next Steps[​](#next-steps "Direct link to Next Steps") Success! You are now ready to start building with EventCatalog! 🥳 Here are a few things that we recommend exploring next. You can read them in any order. You can even leave our documentation for a bit and go play in your new EventCatalog project codebase, coming back here whenever you run into trouble or have a question. * [Create your first domain](/docs/development/guides/domains/creating-domains/adding-domains.md) * [Create your first service](/docs/development/guides/services/adding-services.md) * [Create your first message](/docs/messages.md) --- # Fundamentals EventCatalog allows you to document your [domains](/docs/development/guides/domains/introduction.md), [services](/docs/development/guides/services/introduction.md), [messages](/docs/development/guides/messages/overview.md) ([events](/docs/development/guides/messages/events/introduction.md), [commands](/docs/development/guides/messages/commands/introduction.md), [queries](/docs/development/guides/messages/queries/introduction.md)), [data products](/docs/development/guides/data-products/introduction.md), [data stores](/docs/development/guides/data/introduction.md), [diagrams](/docs/development/guides/diagrams/introduction.md), [schemas](/docs/development/guides/schemas/introduction.md), [specifications](/docs/development/guides/services/adding-to-services/openapi.md) and more. You can manually document these resources or you can automate the documentation process using EventCatalog integrations (e.g. [OpenAPI](/integrations/openapi.md), [AsyncAPI](/integrations/asyncapi.md), [GraphQL](/integrations/graphql.md) or schema registries), it's up to you. EventCatalog is flexible and can fit any workflow you have. Deploy it once a day, or 100 times a day. Connect it to external systems like schema registries, API management platforms, or your own custom integrations. EventCatalog is powered by [markdown files (MDX)](https://mdxjs.com/) and can be used in any markdown editor or IDE. ### Docs-as-code[​](#docs-as-code "Direct link to Docs-as-code") EventCatalog is a [docs-as-code](https://www.writethedocs.org/guide/docs-as-code/) tool. This means you can store your documentation in your existing Git repository, version it, and use your existing workflows to review and merge changes. | Pattern | Description | | --------------------- | ------------------------------------------------------- | | **Standalone repo** | Keep documentation separate from code | | **Next to your code** | Docs live alongside the services they describe | | **Monorepo** | Documentation as part of your existing monorepo | | **Federated** | Multiple EventCatalog instances connected into one view | EventCatalog does not force you to use a specific broker, schema format, or stack. You can use it with any broker, schema format, or stack and can fit into any workflow you have. EventCatalog fits your workflow, not the other way around. ## Ready to build?[​](#ready-to-build "Direct link to Ready to build?") Now that you understand the fundamentals, [get started with EventCatalog](/docs/development/getting-started/installation.md). --- # Installation ### System Requirements[​](#system-requirements "Direct link to System Requirements") * [Node.js](https://nodejs.org/en/download/) v22 or higher (check with `node -v`) ## Installation[​](#installation "Direct link to Installation") To get started you can use the CLI or our Skill to create your new project. * [Create a new EventCatalog and run it locally with the CLI](#option-1--create-with-the-cli) * [Initialise from an existing codebase (with our AI Skill)](#option-2-initialise-from-an-existing-codebase) ### Option 1 : Create with the CLI[​](#option-1--create-with-the-cli "Direct link to Option 1 : Create with the CLI") The quickest way to create a new EventCatalog is using create-eventcatalog, which sets up everything automatically for you. To create a project, run: ``` npx @eventcatalog/create-eventcatalog@latest my-catalog ``` This creates a `my-catalog` directory with everything you need. #### Start the dev server[​](#start-the-dev-server "Direct link to Start the dev server") Once the project is created, navigate to the project directory and start the development server. ``` cd my-catalog npm run dev ``` Open to see your catalog. *** ### Option 2: Initialise from an existing codebase[​](#option-2-initialise-from-an-existing-codebase "Direct link to Option 2: Initialise from an existing codebase") Already have a codebase and want to generate a catalog from it? Use the [Catalog Documentation Creator](https://github.com/event-catalog/skills) AI skill to scan your project and generate EventCatalog documentation automatically. 1. Add the EventCatalog skill to your project ``` npx skills add event-catalog/skills --skill catalog-documentation-creator ``` 2. Ask your AI agent to scan your codebase: ``` Look at my directory and generate EventCatalog documentation from information you find. ``` Learn more about [AI skills](/docs/development/ask-your-architecture/skills/introduction.md). ## Next steps[​](#next-steps "Direct link to Next steps") * [Add your first service](/docs/services.md) * [Document an event](/docs/events.md) * [Connect to your schema registry](/integrations.md) --- # Why EventCatalog? Many companies adopting event-driven architectures end up in a **distributed big ball of mud**. There can be many reasons for this...but one overlooked reason is that teams are not documenting their architectures, they lack standards, governance and discoverability. Your teams start to ask questions like: * *"What messages do we have?"* * *"How are consumers and producers using these messages?"* * *"What common fields are across our schemas? What is the drift?"* * *"What's the business context behind this architecture?"* * *"Where can I find the schemas of these messages?"* * *"What services or domains do we have in our architecture?"* * *"How can I make changes?"* * *"Who is consuming these messages?"* * *And the list goes on...* Time is lost hunting through multiple tools to find the answers to these questions. **What if you could answer these questions in minutes?** EventCatalog is designed to help you avoid the chaos, by providing a way to document your architecture, visualize it, and provide tools to help your teams and AI tools to save time and get answers to the questions when they need them. *** ## What is EventCatalog?[​](#what-is-eventcatalog "Direct link to What is EventCatalog?") [EventCatalog is a self-hosted open source project](https://github.com/event-catalog/eventcatalog) to help you bring discoverability to your architecture through documentation, visualization, and design for both humans and AI. EventCatalog models your architecture as structured, versioned knowledge — not just pages of documentation — so it can be searched, visualized, and queried reliably over time. **EventCatalog is technology agnostic**, you can use it and integrate with any broker, schema format, or stack. #### What can EventCatalog do for you?[​](#what-can-eventcatalog-do-for-you "Direct link to What can EventCatalog do for you?") * **Save time and help your teams find answers fast** * Search your entire architecture — domains, services, events, data products, schemas, owners — in seconds * Stop asking "who owns this?" or "what consumes this event?" * **Keep documentation and specifications in sync** * Auto-generate docs from your OpenAPI, AsyncAPI, or schema registries * Documentation that updates when your specs update * Write custom integrations with the [EventCatalog SDK](/docs/sdk.md) * **Query your architecture with AI** * Connect AI tools to your architecture using [EventCatalog's MCP server](/docs/development/ask-your-architecture/mcp-server/introduction.md) * Ask architectural questions grounded in your documented domains, services, events, data products, and schemas * **See the bigger picture** * Visualize your architecture, domains, services, and message flows * Document business workflows and draft new ideas * Understand how everything connects — without digging through code * **Design what's next** * Capture business workflows and plan changes visually * Use your real architecture as building blocks **EventCatalog is self-hosted. You own your data and host it wherever you want.** *** ## Why we built this[​](#why-we-built-this "Direct link to Why we built this") Event-driven architectures start simple but grow complex fast. More services, more events, more teams — and suddenly nobody knows how anything connects. EventCatalog brings discoverability, documentation, and visualization to your architecture — so teams can reason about change before it happens, not after. 🎥 Watch: "Complexity is the Gotcha of Event-driven Architecture" [YouTube video player](https://www.youtube.com/embed/VLUvfIm9wnQ?si=XEEkOqHyZBynqZHo) *** ## Join the community[​](#join-the-community "Direct link to Join the community") * [GitHub](https://github.com/event-catalog/eventcatalog) — Star, contribute, report issues * [Discord](https://eventcatalog.dev/discord) — Ask questions, share feedback ## Something missing?[​](#something-missing "Direct link to Something missing?") If you find issues with the documentation or have suggestions on how to improve the documentation or the project in general, please [file an issue](https://github.com/event-catalog/eventcatalog) for us. --- # Project structure Your new EventCatalog project generated from the create eventcatalog CLI wizard already includes some files and folders. Others, you will create yourself and add to EventCatalog’s existing file structure. ## Directories and Files[​](#directories-and-files "Direct link to Directories and Files") * `domains/*` - Your domains in your architecture (e.g. Orders, Payment, etc.) * `domains/domains/*` - Any subdomains in your architecture (e.g. Orders/Subdomain1, Payment/Subdomain2, etc.) * `domains/services/*` - Your services in your architecture (e.g. OrdersService, PaymentService, etc.) * `domains/services/*/events/*` - Your events in your architecture (e.g. OrderPlaced, PaymentReceived, etc.) * `domains/services/*/commands/*` - Your commands in your architecture (e.g. AddOrder, UpdatePayment, etc.) * `domains/services/*/queries/*` - Your queries in your architecture (e.g. GetOrder, GetPayment, etc.) * `diagrams/*` - Your architecture diagrams (can also be nested in domains/services) * `channels/*` - Your channels in your architecture (e.g. Kafka, RabbitMQ, etc.) * `teams/*` - Your teams in your organization, you can use these to assign ownership to resources in your catalog * `users/*` - Users in your organization, you can use these to assign ownership to resources in your catalog * `components/*` - Any custom components you want to create for your catalog * `public/*` - Your non-code, unprocessed assets (fonts, icons, etc.) * `package.json` - A project manifest. * `eventcatalog.config.js` - An EventCatalog configuration file. (recommended) ## Project structure options[​](#project-structure-options "Direct link to Project structure options") * **Nested folder structures (default)** * You can group domains, services and messages together using folders (recommended) * This can help you manage large catalogs with folders. * **Flat folder structures** * You can have all your resources (domains, services and messages) in the root of your project. * This can be useful for simple catalogs. Nested folder structure example (recommended) * `/domains/` * Root folder called `domains` this folder contains information about your domain and the services that belong to that domain. * Example `/domains/Orders` * More details can be found in the [domains guide](/docs/domains.md) * `/domains/{Domain Name}/services/` * Put your services inside your domain folder * Example `/domains/Orders/services/OrdersService` * More details can be found in the [services guide](/docs/services.md) * `/domains/{Domain Name}/services/{Service Name}/events` * Put events inside your service * Example `/domains/Orders/services/OrdersService/events` * More details can be found in the [events guide](/docs/events.md) * `/domains/{Domain Name}/services/{Service Name}/commands` * Put commands inside your service * Example `/domains/Orders/services/OrdersService/commands` * More details can be found in the [commands guide](/docs/commands.md) * `/domains/{Domain Name}/services/{Service Name}/queries` * Put queries inside your service * Example `/domains/Orders/services/OrdersService/queries` * More details can be found in the [queries guide](/docs/queries.md) * `/diagrams/` * Document architecture diagrams in EventCatalog (can be at root or nested in domains/services) * Example `/diagrams/system-overview` * Example `/domains/Orders/diagrams/order-flow` * More details can be found in the [diagrams guide](/docs/development/guides/diagrams/introduction.md) * `/teams` * Document teams in EventCatalog * Example `/teams/myteam.mdx` * More details can be found in the [teams guide](/docs/teams.md) * `/users` * Document users in EventCatalog * Example `/users/dboyne.mdx` * More details can be found in the [users guide](/docs/users.md) * `/eventcatalog.config.js` - A config file containing the site configuration. Read the [API docs](/docs/api/config.md) * `/package.json` - File required for your application to work. Flat folder structure example * `/domains/` * Document domains in EventCatalog * Example `/domains/Orders` * More details can be found in the [domains guide](/docs/domains.md) * `/services/` * Document services in EventCatalog * Example `/services/OrdersService` * More details can be found in the [services guide](/docs/services.md) * `/events` * Document events in EventCatalog * Example `/events/InventoryPlaced` * More details can be found in the [events guide](/docs/events.md) * `/commands` * Document commands in EventCatalog * Example `/commands/UpdateInventory` * More details can be found in the [commands guide](/docs/commands.md) * `/queries` * Document queries in EventCatalog * Example `/queries/GetInventory` * More details can be found in the [queries guide](/docs/queries.md) * `/diagrams` * Document architecture diagrams in EventCatalog * Example `/diagrams/system-overview` * More details can be found in the [diagrams guide](/docs/development/guides/diagrams/introduction.md) * `/teams` * Document teams in EventCatalog * Example `/teams/myteam.mdx` * More details can be found in the [teams guide](/docs/teams.md) * `/users` * Document users in EventCatalog * Example `/users/dboyne.mdx` * More details can be found in the [users guide](/docs/users.md) * `/eventcatalog.config.js` - A config file containing the site configuration. Read the [API docs](/docs/api/config.md) * `/package.json` - File required for your application to work. --- # CLI & CI/CD ## Run the check[​](#run-the-check "Direct link to Run the check") Run the check from inside your catalog directory. By default it compares the current working directory against the `main` branch. ``` eventcatalog governance check ``` #### Testing locally[​](#testing-locally "Direct link to Testing locally") To test locally, make changes to your catalog locally and then run the governance check command. ``` eventcatalog governance check --target main ``` This will compare the current working directory against the specified branch. ## CLI options[​](#cli-options "Direct link to CLI options") | Option | Description | Default | | ------------------- | ----------------------------------------------------------------------- | ----------------- | | `--base ` | Base branch to compare against | `main` | | `--target ` | Target branch to compare (instead of working directory) | working directory | | `--format json` | Output results as JSON | text | | `--status