envoyproxy/envoy
By the numbers
Data collected on 2026-04-30 from main at commit ff9e47a3ad.
Repo-wide size
| Area | Files | Lines |
|---|---|---|
source/ (core C++) |
2,966 (.cc + .h) | 60,885 |
test/ (unit, integration, benchmark, fuzz) |
~5,500 (.cc + .h) | 931,549 |
api/ (xDS protobufs) |
679 .proto | 69,136 |
contrib/ (contrib extensions) |
~1,400 (.cc + .h) | 96,365 |
mobile/ (Envoy Mobile) |
~600 (.kt + .swift + .cc + .h) | 49,917 |
tools/ (Python tooling) |
114 .py | (varies) |
The number that surprises people most is the size of test/ relative to source/. Envoy ships ~15× more lines of test code than core data-plane code because almost every behaviour has both unit and integration coverage.
Languages on the wire
xychart-beta horizontal
title "Lines of code by area"
x-axis ["test/", "contrib/", "api/.proto", "source/", "mobile/"]
y-axis "Lines" 0 --> 1000000
bar [931549, 96365, 69136, 60885, 49917]The breakdown by language across the whole repo:
- C++ dominates:
source/,test/,contrib/, parts ofmobile/. - Protocol Buffers (
api/) define the entire xDS surface and most extension configuration. - Python powers the developer tooling in
tools/(code formatting, dependency management, proto plugins). - Starlark drives the Bazel build system in
bazel/and the variousBUILDfiles. - Kotlin + Swift + Objective-C++ in
mobile/for Android and iOS bindings.
Extension fan-out
Envoy's extensibility shows up as directory counts:
| Extension category | Count |
|---|---|
HTTP filters (source/extensions/filters/http/) |
71 |
Network filters (source/extensions/filters/network/) |
28 |
Listener filters (source/extensions/filters/listener/) |
9 |
Transport sockets (source/extensions/transport_sockets/) |
10 |
Cluster types (source/extensions/clusters/) |
15 |
Load balancing policies (source/extensions/load_balancing_policies/) |
12 |
Access loggers (source/extensions/access_loggers/) |
11 |
Tracers (source/extensions/tracers/) |
8 |
Stat sinks (source/extensions/stat_sinks/) |
9 |
Contrib extensions (contrib/) |
32 |
Adding the wasm runtimes (4), resource monitors (5), formatters (6), watchdog (1), and the assorted matching/scoring/key-value/early-data extensions, Envoy ships well over 200 in-tree extension implementations.
Activity
Envoy is one of the most actively-maintained CNCF projects.
- Total commits on
main: 27,205. - Project age: about 9 years 8 months — first commit
a714b9c2b0"Initial commit" on 2016-08-08. - Last 90 days of commits: 821 (about 9 commits/day average).
Recent monthly cadence:
| Month | Commits |
|---|---|
| 2025-05 | 212 |
| 2025-06 | 214 |
| 2025-07 | 178 |
| 2025-08 | 177 |
| 2025-09 | 202 |
| 2025-10 | 234 |
| 2025-11 | 293 |
| 2025-12 | 301 |
| 2026-01 | 261 |
| 2026-02 | 271 |
| 2026-03 | 256 |
| 2026-04 | 277 |
The cadence is remarkably steady. There is a small dip mid-year (US summer) and a bump at year end, but Envoy ships ~200–300 commits a month every month.
Bot-attributed commits
A non-trivial slice of the commit log is automation. Counts are lower bounds (inline AI-assisted work without explicit attribution is invisible):
| Source | Commits |
|---|---|
dependabot[bot] (author or message) |
~2,242 |
All [bot] co-author / message hits |
~2,669 |
| Total commits | 27,205 |
Roughly 10% of merged commits are dependency updates from dependabot[bot], which makes sense for a project that pins ~150 third-party C++ libraries via Bazel.
Authors
Envoy has a long tail of contributors:
- Unique committer email addresses: 1,643.
- Unique committer names: 1,456.
The bulk of commits come from a few hundred maintainers and corporate contributors (Google, Lyft, Tetrate, Aspen Mesh, IBM, Bloomberg, Apple, Microsoft, …); the rest is one-off PRs from the wider community.
Hottest directories
In the last 90 days the most-modified subtrees (by commit count) are roughly:
source/extensions/filters/http/— new and evolving HTTP filterssource/common/quic/andsource/extensions/quic/— ongoing HTTP/3 worksource/extensions/filters/http/ext_proc/— the external-processor filtermobile/— Envoy Mobile churnbazel/andtools/dependency/— dependency bumps
These are the parts of the codebase a contributor is most likely to find conflicts in.
Where to use these numbers
- The size split (
sourcevstestvsapivscontrib) is the headline reason this wiki has separate sections for systems, features, and API. - The extension counts justify treating each extension category as its own page in features rather than enumerating every individual filter.
- The activity numbers explain why the repo is so strict about formatting, pre-commit checks, and CI gating (development workflow) — without them, 200+ commits/month would be unreviewable.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.