About this project
Go Ethereum (geth) is the Go execution-layer implementation of the Ethereum protocol. It provides a command-line client, library packages, and developer tools for running nodes and building applications on Ethereum mainnet, test networks, or private chains.
## Building
The project requires Go 1.23 or later and a C compiler. `make geth` builds the main client, while `make all` builds the full suite of utilities. Prebuilt binary archives are published at geth.ethereum.org/downloads.
## Executables
The repository includes several commands in the `cmd` directory:
- `geth` – the primary Ethereum CLI client. It can run as a full node or archive node, connects to mainnet, testnets, or private networks, and exposes JSON-RPC endpoints over HTTP, WebSocket, and IPC.
- `devp2p` – utilities for interacting with the networking layer without running a full blockchain.
- `abigen` – a source-code generator that turns Ethereum contract ABIs (and optionally Solidity sources) into compile-time type-safe Go packages.
- `evm` – a developer version of the Ethereum Virtual Machine for running bytecode snippets in a configurable environment, useful for opcode-level debugging.
- `rlpdump` – a tool that converts binary RLP dumps into a readable hierarchical representation.
## Running geth
Typical usage is `geth console`, which starts a snap-synced full node and provides an interactive JavaScript console. The `--sepolia` flag connects to the Sepolia test network using separate bootnodes, network ID, genesis state, and data directories. Configuration can also be supplied via a TOML file with `geth --config`, and existing settings can be exported with `dumpconfig`.
Minimal hardware recommendations are 4+ CPU cores, 8GB RAM, a high-performance SSD with at least 2TB free space, and 8 Mbit/s download bandwidth; recommended specs are higher for long-term growth.
A Docker quick start is provided: `docker run -d --name ethereum-node -v /Users/alice/ethereum:/root -p 8545:8545 -p 30303:30303 ethereum/client-go`. Note that RPC access from other hosts requires explicitly setting `--http.addr 0.0.0.0`.
## Programmatic access
geth supports JSON-RPC APIs over HTTP, WebSocket, and IPC. The IPC interface is enabled by default and exposes all APIs, while HTTP and WS must be explicitly enabled and expose a security-conscious subset. Common flags include `--http`, `--http.addr`, `--http.port`, `--http.api`, `--http.corsdomain`, `--ws`, `--ws.origins`, `--ipcdisable`, and `--ipcpath`. The README warns that exposing HTTP/WS APIs publicly has security risks, as malicious actors actively probe exposed Ethereum nodes.
## Private networks
Since the Merge, running a private network of geth nodes requires also setting up a corresponding beacon chain. Three alternatives are documented:
- Simulated Backend – for testing smart contracts in Go CI.
- Dev Mode – a convenient single-node environment for testing.
- Kurtosis – for setting up a multi-node test network.
## Contribution
Contributions are accepted via pull requests against the `master` branch. Code must follow official Go formatting and commentary guidelines, and commit messages should be prefixed with the package(s) modified. More complex changes should be discussed with core developers on Discord. Website contributions target the `website` branch.
## License
The go-ethereum library (code outside `cmd`) is licensed under LGPL v3.0; the binaries (code inside `cmd`) are licensed under GPL v3.0.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.