# open-metadata/openmetadata architecture

> Architecture diagram of the GitHub repository open-metadata/openmetadata, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-04). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/open-metadata/openmetadata
- Repository: https://github.com/open-metadata/openmetadata
- Video tour (about a minute): https://gitdiagram.com/open-metadata/openmetadata/video

## Overview

OpenMetadata is an enterprise metadata catalog and context platform. A typical workflow collects metadata through connectors and ingestion, normalizes it into governed entities, and connects assets with lineage, quality, ownership, semantics, and organizational memory. Users and AI systems then access that context through APIs, SDKs, search, MCP, and the UI. The graph highlights documented product stages and sampled implementation areas; several subsystem links reflect README-level architecture rather than inspected calls.

Main entry points: [`openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplicationConfig.java`](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplicationConfig.java) (Metadata Service), [`ingestion/src/metadata/cli/ingest.py`](https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/cli/ingest.py) (Ingestion CLI), [`ingestion/src/metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py`](https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py) (Ingestion API Client), [`openmetadata-service/src/main/java/org/openmetadata/service/rdf/OntologySparqlQueryService.java`](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/rdf/OntologySparqlQueryService.java) (Ontology SPARQL)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingestion["Collection"]
  node_connectors["Data Connectors"]
  node_ingestion_cli["Ingestion CLI<br/>[ingest.py]"]
  node_ingestion_api["Ingestion API Client"]
  node_entity_resolution["Entity Resolution<br/>[engine.py]"]
  node_quality["Data Quality<br/>[core.py]"]
  node_lineage["Lineage<br/>[sql_lineage.py]"]
end

subgraph group_service["Metadata Platform"]
  node_metadata_service["Metadata Service"]
  node_entity_repository[("Entity Repository")]
  node_entity_schema["Entity Schema"]
end

subgraph group_knowledge["Context and Memory"]
  node_ontology_query["Ontology SPARQL"]
  node_saved_queries["Saved SPARQL"]
  node_inference["Inference Explanations"]
  node_embeddings["Semantic Embeddings"]
end

subgraph group_activation["Access and Activation"]
  node_sdk["Java SDK<br/>[QueryService.java]"]
  node_pipeline_sdk["Pipeline SDK"]
  node_mcp["MCP Server"]
end

subgraph group_integrations["User Interfaces"]
  node_ui["Web UI"]
  node_incident_ui["Incident Manager"]
  node_airflow["Airflow Provider<br/>[backend.py]"]
end

node_user(("Data User"))
node_ai_agent(("AI Agent"))

node_connectors -->|"collects metadata"| node_ingestion_cli
node_ingestion_cli -->|"submits metadata"| node_metadata_service
node_ingestion_api -->|"calls API"| node_metadata_service
node_entity_resolution -->|"uses client"| node_ingestion_api
node_metadata_service -.->|"persists entities"| node_entity_repository
node_entity_schema -->|"normalizes context"| node_metadata_service
node_quality -->|"adds trust signals"| node_metadata_service
node_lineage -->|"adds lineage"| node_metadata_service
node_metadata_service -->|"exposes graph queries"| node_ontology_query
node_ontology_query -.->|"uses saved queries"| node_saved_queries
node_metadata_service -.->|"explains relationships"| node_inference
node_metadata_service -->|"supports semantic search"| node_embeddings
node_user -->|"browses context"| node_ui
node_ui -->|"uses APIs"| node_metadata_service
node_incident_ui -.->|"accesses trust signals"| node_metadata_service
node_sdk -->|"uses APIs"| node_metadata_service
node_pipeline_sdk -->|"uses APIs"| node_metadata_service
node_airflow -->|"integrates lineage"| node_metadata_service
node_ai_agent -->|"requests context"| node_mcp
node_mcp -->|"activates context"| node_metadata_service
node_metadata_service -->|"provides governed context"| node_ai_agent

click node_connectors "https://github.com/open-metadata/openmetadata/tree/main/ingestion/src/metadata/ingestion/source"
click node_ingestion_cli "https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/cli/ingest.py"
click node_ingestion_api "https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py"
click node_entity_resolution "https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/entity_resolution/engine.py"
click node_quality "https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/data_quality/runner/core.py"
click node_lineage "https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/ingestion/lineage/sql_lineage.py"
click node_metadata_service "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplicationConfig.java"
click node_entity_repository "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java"
click node_entity_schema "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-spec/src/main/java/org/openmetadata/schema/EntityInterface.java"
click node_ontology_query "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/rdf/OntologySparqlQueryService.java"
click node_saved_queries "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/rdf/SavedSparqlQueryService.java"
click node_inference "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/rdf/inference/InferenceExplanationService.java"
click node_embeddings "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/rdf/semantic/EmbeddingService.java"
click node_sdk "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-sdk/src/main/java/org/openmetadata/sdk/services/dataassets/QueryService.java"
click node_pipeline_sdk "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-sdk/src/main/java/org/openmetadata/sdk/services/ingestion/IngestionPipelineService.java"
click node_mcp "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-mcp/src/main/java/org/openmetadata/mcp/server/auth/handlers/AuthorizationHandler.java"
click node_ui "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionPipelineList/IngestionPipelineList.component.tsx"
click node_incident_ui "https://github.com/open-metadata/openmetadata/blob/main/openmetadata-ui/src/main/resources/ui/src/components/IncidentManager/useIncidentManagerListPage.ts"
click node_airflow "https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/airflow_provider_openmetadata/lineage/backend.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_connectors,node_ingestion_cli,node_ingestion_api,node_entity_resolution,node_quality,node_lineage,node_user toneBlue
class node_metadata_service,node_entity_repository,node_entity_schema toneAmber
class node_ontology_query,node_saved_queries,node_inference,node_embeddings toneMint
class node_sdk,node_pipeline_sdk,node_mcp toneRose
class node_ui,node_incident_ui,node_airflow,node_ai_agent toneIndigo
```

## Components

### Collection

- [Data Connectors](https://github.com/open-metadata/openmetadata/tree/main/ingestion/src/metadata/ingestion/source): `ingestion/src/metadata/ingestion/source`
- [Ingestion CLI](https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/cli/ingest.py): `ingestion/src/metadata/cli/ingest.py`
- [Ingestion API Client](https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py): `ingestion/src/metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py`
- [Entity Resolution](https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/entity_resolution/engine.py): `ingestion/src/metadata/entity_resolution/engine.py`
- [Data Quality](https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/data_quality/runner/core.py): `ingestion/src/metadata/data_quality/runner/core.py`
- [Lineage](https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/metadata/ingestion/lineage/sql_lineage.py): `ingestion/src/metadata/ingestion/lineage/sql_lineage.py`

### Metadata Platform

- [Metadata Service](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplicationConfig.java): `openmetadata-service/src/main/java/org/openmetadata/service/OpenMetadataApplicationConfig.java`
- [Entity Repository](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java): `openmetadata-service/src/main/java/org/openmetadata/service/jdbi3/EntityRepository.java`
- [Entity Schema](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-spec/src/main/java/org/openmetadata/schema/EntityInterface.java): `openmetadata-spec/src/main/java/org/openmetadata/schema/EntityInterface.java`

### Context and Memory

- [Ontology SPARQL](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/rdf/OntologySparqlQueryService.java): `openmetadata-service/src/main/java/org/openmetadata/service/rdf/OntologySparqlQueryService.java`
- [Saved SPARQL](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/rdf/SavedSparqlQueryService.java): `openmetadata-service/src/main/java/org/openmetadata/service/rdf/SavedSparqlQueryService.java`
- [Inference Explanations](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/rdf/inference/InferenceExplanationService.java): `openmetadata-service/src/main/java/org/openmetadata/service/rdf/inference/InferenceExplanationService.java`
- [Semantic Embeddings](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-service/src/main/java/org/openmetadata/service/rdf/semantic/EmbeddingService.java): `openmetadata-service/src/main/java/org/openmetadata/service/rdf/semantic/EmbeddingService.java`

### Access and Activation

- [Java SDK](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-sdk/src/main/java/org/openmetadata/sdk/services/dataassets/QueryService.java): `openmetadata-sdk/src/main/java/org/openmetadata/sdk/services/dataassets/QueryService.java`
- [Pipeline SDK](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-sdk/src/main/java/org/openmetadata/sdk/services/ingestion/IngestionPipelineService.java): `openmetadata-sdk/src/main/java/org/openmetadata/sdk/services/ingestion/IngestionPipelineService.java`
- [MCP Server](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-mcp/src/main/java/org/openmetadata/mcp/server/auth/handlers/AuthorizationHandler.java): `openmetadata-mcp/src/main/java/org/openmetadata/mcp/server/auth/handlers/AuthorizationHandler.java`

### User Interfaces

- [Web UI](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionPipelineList/IngestionPipelineList.component.tsx): `openmetadata-ui/src/main/resources/ui/src/components/Settings/Services/Ingestion/IngestionPipelineList/IngestionPipelineList.component.tsx`
- [Incident Manager](https://github.com/open-metadata/openmetadata/blob/main/openmetadata-ui/src/main/resources/ui/src/components/IncidentManager/useIncidentManagerListPage.ts): `openmetadata-ui/src/main/resources/ui/src/components/IncidentManager/useIncidentManagerListPage.ts`
- [Airflow Provider](https://github.com/open-metadata/openmetadata/blob/main/ingestion/src/airflow_provider_openmetadata/lineage/backend.py): `ingestion/src/airflow_provider_openmetadata/lineage/backend.py`

### Other components

- **Data User**
- **AI Agent**

## Connections

- Data Connectors → Ingestion CLI: collects metadata
- Ingestion CLI → Metadata Service: submits metadata
- Ingestion API Client → Metadata Service: calls API (evidence: `ingestion/src/metadata/ingestion/ometa/mixins/ingestion_pipeline_mixin.py`)
- Entity Resolution → Ingestion API Client: uses client (evidence: `ingestion/src/metadata/entity_resolution/engine.py`)
- Metadata Service → Entity Repository: persists entities
- Entity Schema → Metadata Service: normalizes context
- Data Quality → Metadata Service: adds trust signals
- Lineage → Metadata Service: adds lineage
- Metadata Service → Ontology SPARQL: exposes graph queries
- Ontology SPARQL → Saved SPARQL: uses saved queries
- Metadata Service → Inference Explanations: explains relationships
- Metadata Service → Semantic Embeddings: supports semantic search (evidence: `openmetadata-service/src/main/java/org/openmetadata/service/rdf/semantic/EmbeddingService.java`)
- Data User → Web UI: browses context
- Web UI → Metadata Service: uses APIs
- Incident Manager → Metadata Service: accesses trust signals
- Java SDK → Metadata Service: uses APIs
- Pipeline SDK → Metadata Service: uses APIs
- Airflow Provider → Metadata Service: integrates lineage
- AI Agent → MCP Server: requests context
- MCP Server → Metadata Service: activates context
- Metadata Service → AI Agent: provides governed context
