data directory that you download and extract. A state sync snapshot is produced inside the node ([state-sync] in app.toml) and fetched over peer-to-peer (P2P) by state sync. This page covers data snapshots. The last section covers producing state sync snapshots for others.
Pick a snapshot that matches your backend
The snapshot’s database format must match theapp-db-backend in app.toml and the db_backend in config.toml of the node that restores it. A PebbleDB node cannot open goleveldb files, and a goleveldb node cannot open PebbleDB files. Provider pages do not always state the backend. When they do not, assume goleveldb or ask. Backend choice and migration are explained on Database and pruning.
- PebbleDB
- goleveldb
Providers that state PebbleDB for cosmoshub-4, checked 2026-10-15:Then set the same backend in
Set the backend before extracting:
~/.gaia/config/config.toml:Restore a data snapshot
A restore is a stop, a reset that keeps the validator state file, an extract intodata/, and a start. The validator state file is the step that matters. The commands use ~/.gaia. On a node set up with Run gaiad as a service, use /var/lib/gaia/.gaia and run them as the gaia user. The systemctl and journalctl lines name the plain gaiad unit. If the node runs under the Cosmovisor unit from Run gaiad as a service, use cosmovisor instead. Do not touch data/ until systemctl is-active prints inactive.
- Stop the node and back up the validator state file. On a validator this file is what stops the node from double signing after a restore.
- Reset the data directory, keeping the address book so the node reconnects quickly:
- Download the archive and its checksum, and compare them before extracting. The file names and checksum formats are on the provider’s page.
- Extract into the home directory. Most archives contain
data/, and some also containwasm/. A PebbleDB provider that shipswasmas a separate archive needs both extracted.
- Put the validator state back and start:
Make snapshots for others
A snapshot node is a pruned full node that is stopped on a schedule, tarred, and started again. A common pruning setting ispruning = "custom", pruning-keep-recent = "100", pruning-interval = "10". Stop the node first, because archiving a live database produces a corrupt snapshot. Read the height before stopping, because gaiad status needs the running node. Use cosmovisor in place of gaiad in the systemctl lines if the node runs under that unit. The archive step only runs once the unit reports inactive.
pebbledb or goleveldb), the pruning settings, whether wasm is included, and a SHA-256 checksum. Strip data/priv_validator_state.json from the archive, or document that it is included.
Serve state sync snapshots
State sync snapshots are made by the running node and need no stop. Enable them inapp.toml:
snapshot-interval value is in heights. The default that gaiad init writes is 1000, with 10 kept. Snapshots are only taken at heights that are a multiple of the interval. Pruning does not block them. The node keeps the state at a snapshot height until that snapshot is written, whatever the pruning settings. List what the node holds:
height, format, and chunks. The command gaiad snapshots export --height <h> takes one on demand. Then gaiad snapshots dump <height> <format> writes it to an archive file. Other nodes consume these snapshots through state sync. They need two RPC endpoints serving them to configure [statesync]. See State sync. Do not start a new node with gaiad snapshots load <archive-file> and gaiad snapshots restore <height> <format>. On v28.3.1 they fill only the application store, and the node then panics on start with state.AppHash does not match AppHash after replay because CometBFT has no state yet.
Verify
After a restore, the node should report the snapshot height and then advance:latest_block_height value starts at the snapshot height. The catching_up value turns false once the node is within a few blocks of the network. If the node logs panic: ... pebble or leveldb read errors at start, the archive did not match the configured backend.
Next
- Sync options to compare state sync and snapshots.
- Database and pruning for PebbleDB migration and pruning settings.
- Run public endpoints if the snapshot node also serves RPC.