elastic/elasticsearch
Lore
The story of how Elasticsearch evolved from a single developer's commit in February 2010 to one of the most-deployed search engines in the world. Dates are derived from git history, release tags, and directory creation dates.
Eras
Genesis: a single developer (Feb 2010 – Mar 2011)
The first commit is dated 2010-02-08: first commit followed within hours by initial commit and bump to version 0.4.0. Shay Banon (the original author) had previously written Compass on top of Lucene; Elasticsearch was the rewrite as a distributed-first engine. Within the first week the codebase had a terms filter (Support terms filter, closes #1, 2010-02-09), a transport layer, and the bones of a cluster state.
Apache 2.0 / Elasticsearch BV (Mar 2012 – mid-2018)
The company Elasticsearch BV is founded in 2012 and renamed to Elastic in 2015. Through the 1.x and 2.x series the codebase grows from a few hundred Java files to thousands. Major architectural milestones in this era include:
- Aggregations replace facets (1.0, Feb 2014).
- Doc values become the default columnar store (2.0, Oct 2015).
- Mapping types are deprecated in 5.x (Oct 2016) and ultimately removed in 7.0 (Apr 2019).
- Pipeline aggregations and scripted metrics appear as part of the analytics push.
- Painless is introduced in 5.0 as a sandboxed scripting language replacing Groovy.
X-Pack consolidation (Aug 2018 – early 2021)
Around 6.3 (June 2018) the previously-separate X-Pack plugins were folded into the main repository under x-pack/. The codebase doubled almost overnight: ML, security, watcher, monitoring, graph, SQL, Logstash bridge, transforms, and ILM all moved into x-pack/plugin/. The 7.0 release (Apr 2019) was the cleanup: typeless mappings, the removal of _default_ mappings, and a hard cut for transport BWC.
License change to SSPL/Elastic License (Jan 2021)
In January 2021 the project re-licensed from Apache 2.0 to a dual SSPL / Elastic License model. The headers that appear at the top of every file today are a record of that change. AGPL v3 was added as a third option in 2024 to accommodate downstream redistributors who cannot take SSPL.
8.x: secure-by-default and vector search (Feb 2022 – mid-2024)
Major shifts in 8.x:
- Security on by default — first-time bring-up auto-generates the
elasticpassword and a self-signed CA. Setup wizard prints enrollment tokens. - Vector search and ANN —
dense_vectorfield type with HNSW index (server/src/main/java/org/elasticsearch/index/codec/vectors). - Stateful → stateless seeds — the first commits for
statelessappear inx-pack/plugin/stateless. - JDK upgrades — 8.0 jumped to JDK 17; subsequent minor versions tracked LTS releases.
- Modular project — adoption of JPMS in
libs/.
9.x: ESQL, statelessness, and serverless (mid-2024 – present)
The 9.x series is dominated by:
- ES|QL (
x-pack/plugin/esql/) — a piped query language modelled after KQL/PRQL/Splunk SPL. Now the most-changed subsystem in the repo. - Statelessness (
x-pack/plugin/stateless,stateless-*) — the project topology behind Elastic Cloud Serverless. - Native acceleration —
libs/simdvec(Java Vector API),libs/parquet-rs(Rust Parquet reader pulled in via JNI),libs/gpu-codec(optional GPU vector codec). - OpenTelemetry (
modules/apm,modules/ingest-otel,x-pack/plugin/otel-data). - JDK 25 — the current build target.
Longest-standing features
These subsystems have existed since the early years and are still actively maintained:
- Transport service (
server/src/main/java/org/elasticsearch/transport) — the core RPC layer, present since 0.4. - Cluster state coordination (
cluster/coordination) — the consensus algorithm has been rewritten (Zen → Zen2 → Coordinator) but the role has not changed. - Aggregations (
search/aggregations) — the bucket/metric framework has accreted many sub-aggregations but the pipeline is intact since 1.0. - Painless (
modules/lang-painless) — replaced Groovy in 5.0 and has been the scripting default ever since. - Repository plugins — the FS / S3 / GCS / Azure / HDFS / URL / SMB family, gradually expanded but consistent in shape.
Deprecated and removed features
| Feature | Introduced | Removed / Deprecated | Replaced by |
|---|---|---|---|
| Mapping types | Pre-1.0 | Removed 8.0 | Single-type indices |
| Groovy scripts | 1.x | Removed 5.0 | Painless |
_default_ mappings |
Pre-1.0 | Removed 7.x | Index templates |
| Site plugins | 1.x | Removed 5.0 | Kibana plugins |
The tribe node |
1.x | Removed 7.0 | Cross-cluster search |
| Realtime GET shard checksum | 5.x | Removed 8.x | Document-level versioning |
| Transport client | Pre-1.0 | Removed 8.0 | REST client |
| Zen Discovery | Pre-1.0 | Removed 7.x | Coordinator (Zen2) |
x-pack/plugin/old-lucene-versions exists specifically to read indices written by ancient versions and migrate them forward.
Major rewrites
- Zen2 → Coordinator (Apr 2019, 7.0). The pre-7.0 Zen Discovery used a simpler quorum protocol prone to split-brain in adversarial network conditions. The Coordinator (
cluster/coordination/Coordinator.java) replaced it with a Raft-inspired protocol. - Allocator → Desired Balance (8.x). The shard allocator was rewritten from a greedy decider chain to a desired-balance approach (
cluster/routing/allocation/allocator/DesiredBalanceShardsAllocator.java). - Engine v2 (sequence numbers + primary terms) (6.0, Nov 2017). Introduced sequence numbers for safe replica resync and lossless rolling restarts.
- Mapping refactor (typeless) (7.0, Apr 2019). Single-type indices and the removal of the
_typefield. - ES|QL (8.11+). Built from scratch under
x-pack/plugin/esql/and now the front door for many analytics use cases. - Stateless (8.x → 9.x). New shard recovery, indexing, and search paths that read/write directly to object storage.
Growth trajectory
- 2010: ~1 contributor, hundreds of files.
- 2014 (1.0): ~50 contributors, thousands of files.
- 2018 (X-Pack merge): codebase roughly doubles in file count overnight.
- 2026: 341 unique authors in the last year, 99k commits, 28k Java files. The most-changed subsystems are ES|QL and stateless — the codebase's center of gravity has shifted from "search-engine" to "query-language and serverless platform".
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.