How Geth synchronizes with the Ethereum network, covering snap sync, full sync, and archive mode.
Geth supports two sync modes controlled by the --syncmode flag, plus an archive option controlled by --gcmode. Each makes a different tradeoff between initial sync speed, ongoing disk usage, and the historical data it can serve.
Snap sync is the default and fastest way to get a node up to date. Instead of re-executing every transaction since genesis, Geth downloads a recent snapshot of the Ethereum state and then fills in block headers and bodies around it.
geth --syncmode snap
Because snap sync skips transaction re-execution for the bulk of the chain, it requires far less CPU than full sync. Once the state snapshot is downloaded and verified, the node switches to following the chain tip normally.
snap is the default sync mode. Running geth without any --syncmode flag is equivalent to geth --syncmode snap.
The snap protocol (defined in eth/protocols/snap) transfers a compact representation of the current state trie directly between peers. Geth also retrieves at least the last 64 blocks in full so that it can validate the recent chain and handle small re-organisations.
A high-performance NVMe SSD makes a significant difference. Snap sync writes large amounts of data during the initial state download, so disk I/O throughput matters more than raw disk size.
Full sync downloads every block from genesis and re-executes all transactions to rebuild the chain state from scratch. It is the most thorough validation method but is significantly slower than snap sync.
geth --syncmode full
With full sync, Geth still prunes old trie state by default (--gcmode=full). Only the current state is kept on disk; historical states are discarded after they are no longer needed for re-organisations.
Full sync has the same disk footprint as snap sync once complete (both prune old state by default), but takes considerably longer — plan for multiple days on mainnet.
Archive mode retains all historical state — every account balance, contract storage slot, and code at every block height since genesis. It is enabled via --gcmode=archive and can be combined with either sync mode.
# Archive node using snap sync (fastest initial sync)geth --syncmode snap --gcmode archive# Archive node using full sync (maximum verification)geth --syncmode full --gcmode archive
Archive nodes require substantially more disk space than pruned nodes. Mainnet archive storage grows continuously and currently exceeds several terabytes. Plan accordingly and use an expandable storage setup.
Archive mode is required when you need to query historical state — for example, calling eth_getBalance for an address at a block number far in the past, or running debug_traceTransaction on old transactions. Block explorers, analytics platforms, and some dApp backends depend on archive data.
Light sync (--syncmode light) has been removed from Geth. The light client protocol depended on servers that were willing to serve light clients, and that infrastructure is no longer actively supported. If you need a lightweight Ethereum client, consider a dedicated light-client project or use the Ethereum JSON-RPC API provided by a trusted full node.