Skip to content

Lodestar package structure

Lodestar monorepo dependency graph

This is a diagram of the various lodestar-* packages in the Lodestar monorepo and how they fit together:


note: this dependency graph only applies to dependencies as they are used in the src/ folders of each package, not in test/

graph TD lodestar["lodestar"]:::nodemodule cli["lodestar-cli"]:::nodemodule config["lodestar-config"]:::nodemodule db["lodestar-db"]:::nodemodule fork-choice["lodestar-fork-choice"]:::nodemodule params["lodestar-params"]:::nodemodule types["lodestar-types"]:::nodemodule utils["lodestar-utils"]:::nodemodule validator["lodestar-validator"]:::nodemodule state-trans["lodestar-state-transition"]:::nodemodule params-->config params-->types types-->lodestar types-->cli types-->config types-->validator types-->fork-choice config-->lodestar config-->cli config-->validator config-->fork-choice config-->state-trans config-->db utils-->lodestar utils-->db utils-->cli utils-->validator utils-->fork-choice utils-->state-trans state-trans-->lodestar state-trans-->validator state-trans-->fork-choice db-->lodestar db-->validator fork-choice-->lodestar lodestar-->cli validator-->cli click cli "" click lodestar "" click validator "" click db "" click params "" click state-trans "" click fork-choice "" click types "" click utils "" click config "" classDef nodemodule fill:grey,stroke-width:2px,stroke:black,color:white; linkStyle default stroke:grey, fill:none,stroke-width:1.5px;

For a list of all the packages in the monorepo and a description for each, click here.

Let's talk about how each package fits together in finer detail, from top to bottom, following the chart.


@lodestar/params contains the parameters for configuring an Ethereum Consensus network. For example, the mainnet params


@lodestar/types contains Eth Consensus ssz types and data structures.


@lodestar/config combines lodestar-params and lodestar-types together to be used as a single config object across the other Lodestar packages.


@lodestar/utils contains various utilities that are common among the various Lodestar monorepo packages.


@lodestar/state-transition contains the Lodestar implementation of the beacon state transition function, which is used by @lodestar/beacon-node to perform the actual beacon state transition. This package also contains various functions used to calculate info about the beacon chain (such as computeEpochAtSlot) which are used by @lodestar/fork-choice and @lodestar/validator


@lodestar/db is where all persistent data about the beacon node is stored. Any package that needs to read or write persistent beacon node data depends on lodestar-db.


@lodestar/fork-choice holds the methods for reading/writing the fork choice DAG. The @lodestar/beacon-node package is the sole consumer of this package because the beacon node itself is what controls when the fork choice DAG is updated. For a good explainer on how the fork choice itself works, see the annotated fork choice spec. This is an annotated version of the Eth Consensus fork choice spec which lodestar-fork-choice is based on.


@lodestar/validator contains the validator client. The sole consumer of this package is @chainsafe/lodestar, which provides CLI access to run and configure the validator client. However, the validator client communicates to a REST API that is contained in @lodestar/beacon-node (specifically in the api module) to perform the validator duties.


@lodestar/beacon-node contains the actual beacon node process itself, which is the aggregate of all the above packages and the "brain" of the Lodestar beacon chain implementation. All of the node modules live in this package as well.


@chainsafe/lodestar combines everything together for CLI usage and configuration of the beacon node and validator.