Prysm: the Go implementation of Ethereum proof of stake
Go implementation of Ethereum proof of stake
At a glance
- What is it?
- Prysm is a Go client for the Ethereum consensus layer, maintained by Offchain Labs under GPL-3.0. It is built for people who run beacon nodes and validators, not for anyone looking for a desktop app.
- Who is it for?
- Adopt Prysm if you run Ethereum consensus infrastructure and want a Go codebase you can read, build and patch, with a stable branch for production and a develop branch for work in progress. Do not adopt it if you arrived here looking for the Prysm Systems workspace product, a health device or a nightclub; the name collides with several unrelated businesses and none of them are this repository.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Go, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Prysm actually is, and the name collision around it
Prysm is the core repository for a Golang implementation of the Ethereum consensus specification, developed by Offchain Labs. That sentence is the whole scope. It is consensus-layer software: the client that follows the beacon chain, tracks attestations and finality, and talks to an execution client over the engine API. It is not a wallet, not a staking dashboard and not a general Ethereum toolkit.
The naming is a real problem for anyone searching for it. The repository topics list only ethereum, and the README does not address the collision, but a search for the project name returns Prysm Systems, Prysm health, Prysm device, Prysm screen, Prysm Inc, PRYSM Nightclub and a scattering of prysm.io results. None of those are this project. The only reliable anchors are the repository path OffchainLabs/prysm, the module path github.com/OffchainLabs/prysm/v7 in go.mod, and the documentation portal the README points at. If you land on a page about a workspace product or a score scanner, you are on the wrong subject.
Who it is for: engineers and operators running Ethereum proof-of-stake infrastructure who want a consensus client written in Go, with a codebase they can build from source. The README is explicit that the launchpad is the only recommended way to become a validator on mainnet, which tells you the project expects its users to already be in that pipeline.
How the repository is laid out and how the pieces fit
The top-level entries describe the architecture more honestly than any prose summary. beacon-chain/ holds the consensus client itself. validator/ is the separate validator client process. api/ carries the gRPC and HTTP surface. proto/ holds the protobuf definitions those APIs are generated from. network/ is the peer-to-peer layer. consensus-types/ holds the spec data structures. crypto/ holds the BLS and signature primitives. slasher/ sits alongside as the slashing-detection service. monitoring/ and runtime/ cover observability and process plumbing.
That split matters because it mirrors the deployment shape. A beacon node and a validator client are distinct binaries that talk over gRPC, and the repository is organised so each can be built and reasoned about on its own. The api/ and proto/ directories being first-class also means the client is designed to be driven programmatically, not only through its own CLI.
The dependency list in go.mod reinforces how much of the heavy lifting is delegated. github.com/ethereum/go-ethereum supplies execution-layer types. github.com/herumi/bls-eth-go-binary and github.com/consensys/gnark-crypto supply BLS and curve arithmetic. github.com/ethereum/c-kzg-4844/v2 and github.com/crate-crypto/go-kzg-4844 handle KZG commitments for blob-carrying data. github.com/OffchainLabs/methodical-ssz and github.com/OffchainLabs/hashtree are Offchain Labs' own hashing and SSZ libraries. If you are auditing the client, those are the places the cryptographic assumptions live, and they are outside this repository.
Installing Prysm and running a first beacon node
The README does not give installation steps. It states that a detailed set of installation and usage instructions, plus breakdowns of each individual component, is available in the official documentation portal at prysm.offchainlabs.com/docs. That is where the project says to get it, and the README's Getting Started section contains nothing else.
What the repository does give you is the build and run contract. The Makefile derives its binary targets from cmd/*/main.go, so every directory under cmd/ with a main.go becomes a buildable binary. The Makefile also enforces a whitelist of variables: GO, DIST, TAGS, flags, mode and bls. Passing anything else on the command line is a hard error rather than a silent ignore, which is unusual and worth knowing before you script it.
make buildThat target compiles the binaries listed in the repository's cmd/ tree into the dist directory by default, since DIST ?= dist. If you need a different output location, DIST is one of the allowed variables, so DIST=/opt/prysm make build is accepted while an unlisted variable is not.
make test minimalThe test targets are split into mainnet, mainnet-spectest, minimal and minimal-spectest, and the mode variable selects between no-race and race. The bls variable selects between real and fake BLS implementations for tests. Building and testing locally before you point anything at a network is the only workflow the repository itself supports; the README offers no quickstart beyond the documentation portal.
Branches, releases and what the maintenance signal actually says
The README describes two permanent branches. master points to the latest stable release and is described as ideal for most users. develop is used for development and contains the latest pull requests, and developers are told to base their PRs on it. The repository's default branch is develop, which means a fresh clone lands on the branch the README tells you not to run in production. Set your checkout to master explicitly.
On maintenance: the last push was on 2026-09-23, and the repository is not archived. The most recent release listed is v7.1.8 from 2026-07-29, preceded by v7.1.7 on 2026-07-13 and v7.1.6 on 2026-07-01. Those are close together, roughly two to three weeks apart, which is the cadence a consensus client needs given how often the specification changes. The README points at the Changelog for details of the latest releases and upcoming breaking changes, and that word breaking is the one to take seriously.
The upgrade cost is therefore not optional. A consensus client that falls behind the specification stops following the chain, and the module path github.com/OffchainLabs/prysm/v7 in go.mod means major versions arrive as import-path changes. If you have written anything that imports Prysm packages directly, a v8 would be a compile-time break, not a dependency bump.
Where Prysm is the wrong choice
The README is clear that the launchpad is the only recommended way to become a validator on mainnet. That is a boundary, not a suggestion. If your plan is to generate keys and start attesting without going through that flow, the project's own documentation is telling you not to.
The harder limitation is that Prysm is one client among several in a network that penalises correlated failure. Running the same consensus client as most of the network is a risk you carry, not one the software removes. The repository gives you no tooling to reason about client diversity; that is a decision you make before you install anything.
The third case is anyone who wants a library rather than a node. The GPL-3.0 licence applies to the whole repository, including the packages in crypto/, consensus-types/ and api/. If you were hoping to lift the SSZ or BLS code into a closed-source product, the licence is the obstacle, not the API design. The README states the project is licensed under the GNU General Public License v3.0 and links the full text; it does not offer alternative terms.
Finally, the documentation gap is real. The README covers what the project is, where the docs live, which branches to use and how to contribute. It does not document rollback, downgrade paths or what happens if you run a mismatched beacon node and validator client. For a client that participates in consensus, that silence is worth noting before an upgrade window.
Prysm compared with other Ethereum consensus clients
The meaningful alternative is a consensus client written in a different language with a different operational model. The Ethereum consensus specification is shared, so the protocol behaviour converges; what differs is the implementation language, the build system and the failure modes you inherit.
Prysm's distinguishing choice is Go, plus Bazel. The repository carries BUILD.bazel, MODULE.bazel, MODULE.bazel.lock, WORKSPACE, .bazelrc and .bazelversion at the top level, alongside a Makefile that wraps the common paths. That is a heavier build toolchain than a plain go build, and it is the reason the Makefile exists as a front end. It also means the consensus spec version is pinned in WORKSPACE and surfaced as a badge in the README, so you can check which specification revision a given checkout tracks without reading release notes.
A Rust client, by contrast, gives you a different memory-safety story and a Cargo-based build, at the cost of a different set of dependencies and a different debugging experience. Neither is universally better. What you are choosing with Prysm is a Go runtime, an Offchain Labs-maintained dependency set including methodical-ssz and hashtree, and a build that expects Bazel underneath.
One practical difference the repository makes visible: Prysm ships a slasher component in its own top-level directory and exposes it as a build target in the Makefile's E2E scenario list. If you want slashing detection from the same codebase and the same maintainer as your beacon node, that consolidation is an argument for Prysm. If you would rather not have your slasher share a failure domain with your beacon node, it is an argument against.
Editorial conclusion
Adopt Prysm if you run Ethereum consensus infrastructure and want a Go codebase you can read, build and patch, with a stable branch for production and a develop branch for work in progress. Do not adopt it if you arrived here looking for the Prysm Systems workspace product, a health device or a nightclub; the name collides with several unrelated businesses and none of them are this repository. Before committing, verify the consensus spec version pinned in WORKSPACE against the network you intend to join, confirm your Go toolchain satisfies the go 1.26.5 directive in go.mod, and read the GPL-3.0 obligations against how you plan to distribute anything you build.
Frequently asked questions
What is Prysm (OffchainLabs/prysm)?
It is the core repository for a Golang implementation of the Ethereum consensus specification, developed by Offchain Labs. The README describes it as an Ethereum consensus implementation written in Go.
How do I install Prysm?
The README does not contain installation steps. It states that a detailed set of installation and usage instructions, plus breakdowns of each component, is available in the official documentation portal at prysm.offchainlabs.com/docs.
Which branch of Prysm should I run?
The README says master points to the latest stable release and is ideal for most users, while develop is used for development and contains the latest pull requests. The repository's default branch is develop, so a fresh clone does not land on the stable branch.
What licence does Prysm use?
The README states the project is licensed under the GNU General Public License v3.0 and links the full licence text. It does not mention any alternative licensing terms.
How much does Prysm cost?
The repository does not state a price. The README points to the official Ethereum launchpad as the only recommended way to become a validator on mainnet, and that is a separate service from this codebase.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/offchainlabs-prysm)