neondatabase/neon
Lore
This is the timeline of the Neon repository — what was added, what was rewritten, and roughly when. Dates are derived from git commit timestamps. Where the "why" is not obvious from history, the wording hedges accordingly.
Eras
Era 1: From "Zenith" to a working pageserver (Mar 2021 – Sep 2021)
The repository was opened in March 2021 (Initial commit, Initial repo structure on 2021-03-26 and 2021-03-27) under the working name Zenith. By April 2021 the codebase already had a clear split between the page server and the WAL service (then called "walkeeper"), see commit Separate walkeeper and pageserver sources into different directories. (2021-04-06).
The first rough version of timelines (the durable, branch-able WAL history that defines a Neon database) was added in this era — see the early commit Implement "timelines" in page server. By the end of 2021 the project had ~1,150 commits and a working pageserver, walkeeper, and a local control plane (control_plane/ first appeared 2021-04-10).
Era 2: Multi-version Postgres support and the safekeeper rename (Apr 2022 – Sep 2022)
Throughout 2022 the project picked up a Rust workspace and shared library structure. The libs/ directory first appeared in April 2022 as crates were carved out of inlined modules. A few specific milestones:
- Apr 2022 —
safekeeper/directory appears under that name (the rename from "walkeeper" to "safekeeper" was already in flight); the term safekeeper is now the canonical project word. - Jun 2021 — first appearance of the
proxy/directory; the proxy was originally a thin TLS terminator and grew into the multi-protocol service it is today. - Aug 2022 —
pgxn/arrives, gathering the per-Postgres extension code and thewalproposerC library. - Sep 2022 — first commit on the
postgres-v15vendored fork (Prepare pg 15 support, 2022-09-05), establishing the multi-version build system that survives today.
Era 3: The "Zenith → Neon" finalization and storage broker (Late 2022 – 2023)
The storage broker (storage_broker/) landed in November 2022 as a small gRPC pub/sub layer so pageservers and safekeepers could discover each other without ad-hoc shared state. This made multi-tenant deployments much easier to operate.
The user-facing "Zenith" name had been gone for a while, but residual code references took longer to retire. The cleanup commit NEON: Finish Zenith->Neon rename (#12566) only landed in early 2026, four years after the rebrand began — a reminder that names are sticky.
In September 2023 the vendor/postgres-v16/ fork was added (Feat/postgres 16 (#4761)), bringing supported Postgres versions to three.
The full year of 2023 saw ~1,700 commits with most activity centered on the pageserver: layer storage (pageserver/src/tenant/storage_layer.rs), compaction, and the page service all stabilized into the shape they have today.
Era 4: Sharding and the storage controller (Apr 2024 – 2025)
The storage controller (storage_controller/) appeared in April 2024, replacing what had been called the "attachment service" — see Clean up 'attachment service' names to storage controller (#7326). This component is the cluster-level brain: it owns shard placement, fencing generation numbers, and reconciliation.
The same period brought:
- Jun 2024 —
storage_scrubber/lands as a dedicated tool to garbage-collect orphaned objects in cloud storage. - Sep 2024 —
vendor/postgres-v17/fork (feature: PostgreSQL 17 (#8573)), bringing supported Postgres versions to four.
2024 was the busiest year by commit volume (≈2,500 commits), reflecting the parallel work on storage controller, sharding, and the migration toward gRPC for some pageserver APIs.
Era 5: gRPC, GCS, and HCC (2025 – early 2026)
2025 introduced the gRPC-based page API alongside the older libpq-based page service. See pageserver/page_api/ and the client crate pageserver/client_grpc/. Routing pageserver requests to child shards via gRPC landed in pageserver: route gRPC requests to child shards (#12702) in early 2026.
In April 2025 the endpoint_storage/ service was added (endpoint_storage/ first commit on 2025-04-23), giving each compute endpoint a per-endpoint object store, useful for things like uploaded extension files.
The most recent visible commits (March 2026, on main at 6a35a3e9f) work on:
- GCS as a remote storage backend —
Initial implementation of GCS provider (#11666)and follow-up bug fixes;libs/remote_storage/src/gcs_bucket.rsis the most actively edited file in the trailing 90 days. - HCC (a hot-content cache style improvement to the pageserver) — see
HCC, resolved GCS upload permit deadlock, SK generation delete bug-fix (#12873), the tip ofmain. - Safekeeper generation deletion bugs and
last_log_termsemantics in membership configuration.
Longest-standing components
These directories have been in the repo essentially since the beginning and have been continuously edited but never replaced:
| Component | First appeared | Notes |
|---|---|---|
pageserver/ |
2021-03 (as pageserver) |
Renamed once from "page server"; never rewritten wholesale. |
control_plane/ |
2021-04 | The neon_local CLI is one of the oldest user-facing surfaces still in active use. |
proxy/ |
2021-06 | Started as a thin TLS terminator; today supports four wire surfaces (libpq, websockets, SQL/HTTP, REST broker). |
pgxn/neon (extension) |
2022-08 | The smgr replacement that makes stateless compute possible; cohabits with the upstream Postgres fork in vendor/. |
Major rewrites and reorganizations
- Walkeeper → safekeeper (2022). The WAL service was renamed and refactored from
/walkeeperintosafekeeper/. The Paxos-style consensus was preserved; what changed was packaging and the public terminology used in code, docs, and config. - Attachment service → storage controller (2024). The cluster manager was renamed and its responsibilities expanded.
Clean up 'attachment service' names to storage controller (#7326)is the canonical reference. - Sharding rollout (2024–2025). Tenants were originally one-pageserver-per-tenant. Sharding required pervasive changes: a new shard identifier in
pageserver_api, sharding-aware compute clients inpageserver/client/andpageserver/client_grpc/, and shard-aware reconciliation in the storage controller (storage_controller/src/tenant_shard.rs, ~3,200 lines). - gRPC page API (2025–2026). The libpq-based page service has not been removed, but a parallel gRPC interface was added and is in active development. See
pageserver/page_api/andpageserver/client_grpc/.
Deprecated or retired things
walkeeper— replaced bysafekeeper/in 2022. References were systematically renamed.zenith— the original product name. Thecargo zenithcommand-line was renamed tocargo neon; the final cleanup commit landed in early 2026.
Growth trajectory
| Year | Commits | Notable additions |
|---|---|---|
| 2021 | 1,146 | Pageserver, control_plane, proxy take initial shape |
| 2022 | 1,429 | safekeeper rename, libs/, pgxn/, Postgres 15 fork, storage_broker |
| 2023 | 1,709 | Postgres 16 fork; pageserver storage layer hardening |
| 2024 | 2,539 | storage_controller, storage_scrubber, Postgres 17 fork; sharding |
| 2025 | 1,647 | gRPC page API, endpoint_storage, GCS backend |
| 2026 (Jan–Mar partial) | 3 (in clone) | HCC, GCS bugfixes, generation-deletion fixes |
Distinct authors over the full history: 175. In the trailing 365 days roughly 55 distinct accounts (excluding bots).
Why this page exists
Knowing when something arrived helps with two everyday tasks: reading old code (it tells you which design constraints were live at the time) and triaging bugs (it tells you whether the suspect line is from the era of a now-retired pattern). For the technical "why" behind major decisions, see background.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.