Skip to main content
Geth (go-ethereum) is the most widely used Ethereum execution layer client. Written in Go, it is the entry point into the Ethereum network — capable of running as a full node, archive node, or in developer mode for local testing. Geth exposes a JSON-RPC API over HTTP, WebSocket, and IPC, and ships a rich Go library for building Ethereum applications programmatically.

Installation

Install Geth on Linux, macOS, or Windows using package managers, pre-built binaries, or from source.

Quickstart

Spin up a node and connect to the Ethereum mainnet or a testnet in minutes.

JSON-RPC API

Interact with your node over HTTP, WebSocket, or IPC using the standard Ethereum JSON-RPC API.

Go Library

Use the go-ethereum Go packages to build Ethereum-native applications, query the chain, and send transactions.

Key capabilities

Sync modes

Choose between snap sync, full sync, and archive mode depending on your use case.

Configuration

Configure Geth with command-line flags or a TOML config file.

Accounts & Clef

Manage keys securely with the built-in keystore or the standalone Clef signing tool.

Developer tools

Use dev mode, abigen, and the EVM tool to build and test smart contracts locally.

Getting started

1

Install Geth

Download a pre-built binary or build from source. See Installation for all options.
# macOS via Homebrew
brew tap ethereum/ethereum
brew install ethereum

# Ubuntu/Debian via PPA
sudo add-apt-repository -y ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install ethereum
2

Start your node

Connect to the Ethereum mainnet with snap sync (the default):
geth
Or connect to the Holesky testnet:
geth --holesky
3

Attach a console

Once the node is running, attach the interactive JavaScript console:
geth attach
Then query the network:
eth.blockNumber
eth.getBalance("0xYourAddress")
4

Enable JSON-RPC

Expose the HTTP JSON-RPC API for programmatic access:
geth --http --http.api eth,net,web3
Then call the API:
curl http://localhost:8545 \
  -X POST \
  -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}'
Geth is the execution layer client only. Since The Merge, Geth must be paired with a consensus layer client (such as Prysm, Lighthouse, or Teku) to participate in block validation on mainnet.

Build docs developers (and LLMs) love