Code size

Code lines exclude blank lines and comments; comment lines are counted separately. Each month is the state of main at the end of that month (UTC); the last point is today.

Activity & contributors

From the first-parent history of main. Besu squash-merges pull requests, so one commit is roughly one merged PR. The current month is still in progress.

Releases

Feature releases are X.Y.0 tags; patch releases are X.Y.Z with Z > 0, usually cut from a release branch.

Hardforks

Code lines added to main for each Ethereum hardfork until it went live on mainnet, matched by the fork's names, EIPs and features in commit titles. This is an estimate. Frontier to Byzantium were implemented before this history starts.

Pull requests & issues

From the GitHub API: besu-eth/besu plus the archived predecessor PegaSysEng/pantheon (Oct 2018 to Sep 2019). Only PRs into main or master count. Issues are tracked on GitHub since March 2020.

How these numbers are made

Lines of code

Each snapshot is extracted with git archive and counted with scc . Every tracked file is counted, ignore files are not applied.

A month's snapshot is the last first-parent commit on main committed before 00:00 UTC on the first day of the next month.

Production, tests and other

  • Tests: acceptance-tests, testutil, testfuzz, container-tests, ethereum/referencetests, ethereum/retesteth and ethereum/mock-p2p, plus the test, integration-test, test-support, reference-test and acceptanceTest source sets everywhere.
  • Production: src/main of every other module (including the shipped evmtool).
  • Other: JMH benchmarks (src/jmh), buildSrc and errorprone-checks.

Modules

A module is the top-level directory; ethereum is split into its subprojects. Renamed directories are merged: pantheon and besu are app, orion is enclave, ethereum/jsonrpc and ethereum/graphql are ethereum/api. All plugin-api* subprojects count as plugin-api.

Contributors

Commit authors only (co-authors in Co-authored-by trailers are not counted). Identities are merged when they share an email, a GitHub noreply ID or a name. Automation accounts (the Gradle release plugin, bots) are excluded.

Churn

Lines added and deleted in code files (Java, Gradle, Solidity, shell, …), with rename detection. Excluded: .

Releases

Tags matching X.Y.Z, dated by the tag. The work in a feature release is the commits merged to main between its fork point and the previous feature release's fork point.

Hardforks

A commit belongs to a hardfork when its title names the fork or an alias (Glamsterdam and Gloas are Amsterdam, Pectra and Electra are Prague), one of its EIPs, one of its features (blobs, withdrawals, block access lists, …) or an Engine API method version it introduced. Broad terms such as blob or Engine API only count when nothing more specific matches. A fork stops counting when it goes live on mainnet, so later fixes and maintenance are not included. A title that names several forks splits its lines evenly between those that are not live yet. A commit without a match counts when at least half of its changed lines are in files named after a fork, one of its EIPs or features. EOF is shown separately: it was planned for four forks in turn and removed in December 2025. The lines are added code lines, as for churn.

Pull requests & issues

Time to merge runs from PR creation to merge. Open counts are taken at the end of each month. Pantheon PRs still open when the project moved to besu-eth/besu count as closed on 17 Sep 2019.