# elastic/elasticsearch architecture

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

- Interactive diagram: https://gitdiagram.com/elastic/elasticsearch
- Repository: https://github.com/elastic/elasticsearch

## Overview

Elasticsearch is a distributed search, analytics, and data platform. The README’s principal workflow is sending documents through REST APIs, indexing them into an index or data stream, then searching them near real time. The graph also captures ingest-pipeline management and simulation, plus representative search and data-platform capabilities. Source excerpts are limited, so most internal runtime connections are left out; documented README relationships are cited, and the ingest simulation link is supported by the source index.

Main entry points: [`server/src/main/java`](https://github.com/elastic/elasticsearch/tree/main/server/src/main/java) (REST APIs), [`server/src/main/java/org/elasticsearch/ingest/SimulateIngestService.java`](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/ingest/SimulateIngestService.java) (Pipeline simulation), [`server/src/main/java/org/elasticsearch/ingest/IngestService.java`](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/ingest/IngestService.java) (Ingest pipelines), [`modules/data-streams/src/main/java`](https://github.com/elastic/elasticsearch/tree/main/modules/data-streams/src/main/java) (Data streams)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_api["API and ingest"]
  node_rest["REST APIs"]
  node_ingest["Ingest pipelines<br/>[IngestService.java]"]
  node_simulate["Pipeline simulation"]
end

subgraph group_data["Data and search"]
  node_indices[("Indices")]
  node_streams[("Data streams")]
  node_search["Search<br/>[SearchService.java]"]
end

subgraph group_capabilities["Platform capabilities"]
  node_vectors["Vector search"]
  node_analytics["Logs and analytics"]
  node_apm["APM telemetry"]
end

subgraph group_foundation["Core foundations"]
  node_coretime["Time values<br/>[TimeValue.java]"]
  node_content["Content encoding"]
  node_exceptions["Exception handling"]
  node_actionlistener["Async listeners"]
  node_clusterchange["Cluster changes"]
  node_clusterstate["Cluster state<br/>[ClusterState.java]"]
  node_indexmetadata["Index metadata<br/>[IndexMetadata.java]"]
  node_projectmetadata["Project metadata"]
  node_discovery["Node discovery<br/>[DiscoveryNode.java]"]
  node_strings["String utilities<br/>[Strings.java]"]
  node_streaminput["Stream input<br/>[StreamInput.java]"]
  node_streamoutput["Stream output<br/>[StreamOutput.java]"]
  node_clustersettings["Cluster settings"]
  node_setting["Setting definitions<br/>[Setting.java]"]
  node_settings["Settings values<br/>[Settings.java]"]
end

node_clients(("Clients"))

node_clients -->|"send requests"| node_rest
node_rest -->|"index documents"| node_indices
node_rest -->|"index timestamped data"| node_streams
node_indices -->|"search near real time"| node_search
node_simulate -->|"uses pipelines"| node_ingest

click node_rest "https://github.com/elastic/elasticsearch/tree/main/server/src/main/java"
click node_ingest "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/ingest/IngestService.java"
click node_simulate "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/ingest/SimulateIngestService.java"
click node_indices "https://github.com/elastic/elasticsearch/tree/main/server/src/main/java"
click node_streams "https://github.com/elastic/elasticsearch/tree/main/modules/data-streams/src/main/java"
click node_search "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/search/SearchService.java"
click node_vectors "https://github.com/elastic/elasticsearch/tree/main/server/src/main/java"
click node_analytics "https://github.com/elastic/elasticsearch/tree/main/server/src/main/java"
click node_apm "https://github.com/elastic/elasticsearch/blob/main/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMMeterService.java"
click node_coretime "https://github.com/elastic/elasticsearch/blob/main/libs/core/src/main/java/org/elasticsearch/core/TimeValue.java"
click node_content "https://github.com/elastic/elasticsearch/blob/main/libs/x-content/src/main/java/org/elasticsearch/xcontent/XContentBuilder.java"
click node_exceptions "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/ElasticsearchException.java"
click node_actionlistener "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/action/ActionListener.java"
click node_clusterchange "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/cluster/ClusterChangedEvent.java"
click node_clusterstate "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/cluster/ClusterState.java"
click node_indexmetadata "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java"
click node_projectmetadata "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/cluster/metadata/ProjectMetadata.java"
click node_discovery "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNode.java"
click node_strings "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/Strings.java"
click node_streaminput "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/io/stream/StreamInput.java"
click node_streamoutput "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/io/stream/StreamOutput.java"
click node_clustersettings "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java"
click node_setting "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/settings/Setting.java"
click node_settings "https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/settings/Settings.java"

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_rest,node_ingest,node_simulate,node_clients toneBlue
class node_indices,node_streams,node_search toneAmber
class node_vectors,node_analytics,node_apm toneMint
class node_coretime,node_content,node_exceptions,node_actionlistener,node_clusterchange,node_clusterstate,node_indexmetadata,node_projectmetadata,node_discovery,node_strings,node_streaminput,node_streamoutput,node_clustersettings,node_setting,node_settings toneRose
```

## Components

### API and ingest

- [REST APIs](https://github.com/elastic/elasticsearch/tree/main/server/src/main/java): `server/src/main/java`
- [Ingest pipelines](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/ingest/IngestService.java): `server/src/main/java/org/elasticsearch/ingest/IngestService.java`
- [Pipeline simulation](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/ingest/SimulateIngestService.java): `server/src/main/java/org/elasticsearch/ingest/SimulateIngestService.java`

### Data and search

- [Indices](https://github.com/elastic/elasticsearch/tree/main/server/src/main/java): `server/src/main/java`
- [Data streams](https://github.com/elastic/elasticsearch/tree/main/modules/data-streams/src/main/java): `modules/data-streams/src/main/java`
- [Search](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/search/SearchService.java): `server/src/main/java/org/elasticsearch/search/SearchService.java`

### Platform capabilities

- [Vector search](https://github.com/elastic/elasticsearch/tree/main/server/src/main/java): `server/src/main/java`
- [Logs and analytics](https://github.com/elastic/elasticsearch/tree/main/server/src/main/java): `server/src/main/java`
- [APM telemetry](https://github.com/elastic/elasticsearch/blob/main/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMMeterService.java): `modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/APMMeterService.java`

### Core foundations

- [Time values](https://github.com/elastic/elasticsearch/blob/main/libs/core/src/main/java/org/elasticsearch/core/TimeValue.java): `libs/core/src/main/java/org/elasticsearch/core/TimeValue.java`
- [Content encoding](https://github.com/elastic/elasticsearch/blob/main/libs/x-content/src/main/java/org/elasticsearch/xcontent/XContentBuilder.java): `libs/x-content/src/main/java/org/elasticsearch/xcontent/XContentBuilder.java`
- [Exception handling](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/ElasticsearchException.java): `server/src/main/java/org/elasticsearch/ElasticsearchException.java`
- [Async listeners](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/action/ActionListener.java): `server/src/main/java/org/elasticsearch/action/ActionListener.java`
- [Cluster changes](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/cluster/ClusterChangedEvent.java): `server/src/main/java/org/elasticsearch/cluster/ClusterChangedEvent.java`
- [Cluster state](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/cluster/ClusterState.java): `server/src/main/java/org/elasticsearch/cluster/ClusterState.java`
- [Index metadata](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java): `server/src/main/java/org/elasticsearch/cluster/metadata/IndexMetadata.java`
- [Project metadata](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/cluster/metadata/ProjectMetadata.java): `server/src/main/java/org/elasticsearch/cluster/metadata/ProjectMetadata.java`
- [Node discovery](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNode.java): `server/src/main/java/org/elasticsearch/cluster/node/DiscoveryNode.java`
- [String utilities](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/Strings.java): `server/src/main/java/org/elasticsearch/common/Strings.java`
- [Stream input](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/io/stream/StreamInput.java): `server/src/main/java/org/elasticsearch/common/io/stream/StreamInput.java`
- [Stream output](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/io/stream/StreamOutput.java): `server/src/main/java/org/elasticsearch/common/io/stream/StreamOutput.java`
- [Cluster settings](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java): `server/src/main/java/org/elasticsearch/common/settings/ClusterSettings.java`
- [Setting definitions](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/settings/Setting.java): `server/src/main/java/org/elasticsearch/common/settings/Setting.java`
- [Settings values](https://github.com/elastic/elasticsearch/blob/main/server/src/main/java/org/elasticsearch/common/settings/Settings.java): `server/src/main/java/org/elasticsearch/common/settings/Settings.java`

### Other components

- **Clients**

## Connections

- Clients → REST APIs: send requests
- REST APIs → Indices: index documents
- REST APIs → Data streams: index timestamped data (evidence: `modules/data-streams/src/main/java/org/elasticsearch/datastreams/lifecycle/DataStreamLifecycleService.java`)
- Indices → Search: search near real time (evidence: `server/src/main/java/org/elasticsearch/search/SearchService.java`)
- Pipeline simulation → Ingest pipelines: uses pipelines (evidence: `server/src/main/java/org/elasticsearch/ingest/SimulateIngestService.java`)
