Skip to main content
The public testnet runs the gaia release candidate that reaches mainnet next, so it is where you rehearse installs, upgrades, and validator operations with nothing at stake. You need a machine that meets the system requirements at the sentry tier or better. At the end you have a synced testnet node and, if you want one, a testnet validator. The source of truth for the testnet is the provider README in cosmos/testnets. It lists the current version, the next scheduled upgrade, endpoints, and join scripts. It changes with every release candidate. Values below were checked on 2026-10-15.

Testnet facts

Confirm the version before installing anything:
On 2026-10-15 these printed v29.0.0-rc0 and provider. The testnet upgrades one or two weeks ahead of mainnet, so the answer changes often.

Install the release candidate

Release candidates ship as bare signed binaries (gaiad-v29.0.0-rc0-linux-amd64 with an .asc signature and SHA256SUMS-v29.0.0-rc0.txt) and as the container tag ghcr.io/cosmos/gaia:v29.0.0-rc0. There is no tarball. Verification is the same as on Install gaiad: import the release key, run gpg --verify, then run sha256sum --check. For a source build, run git checkout v29.0.0-rc0 and make install with the Go version from that tag’s go.mod. Install the testnet binary to a separate path, for example /usr/local/bin/gaiad-testnet, if the machine also runs mainnet.
This must print v29.0.0-rc0 (or whatever the README names today) before you go on.
1

Initialize and install the genesis

A separate home keeps testnet and mainnet apart on one machine. Every command below includes --home ~/.gaia-testnet. The checksum must be 91870bfb8671f5d60c303f9da8e44b620a5403f913359cc6b212150bfc3e631d.
2

Configure gas price, seeds, and client defaults

These write client.toml, minimum-gas-prices in app.toml, and [p2p] seeds in config.toml. The seeds are the ones in the testnet README on 2026-10-15. The -s flag is required for config.toml keys on this gaia version.
3

State sync

The testnet publishes two state sync remote procedure call (RPC) servers. Fetch a trust height and hash. Then write the [statesync] keys exactly as on Sync a node, with these servers:
A snapshot archive from snapshots.polypore.xyz is the alternative. Restore it as on Sync a node.
4

Start the node

Watch for the state sync snapshot to apply and blocks to execute. Then move the node under systemd as on Run gaiad as a service, with the testnet home and binary in the unit. Use Cosmovisor here too. The testnet is where you learn what an upgrade looks like before mainnet does it for real.
The testnets repository also ships join-provider.sh (plain systemd) and join-provider-cv.sh (Cosmovisor) under provider/, which do the steps above on a fresh Ubuntu machine. Read a script before running it. The Cosmovisor variant enables binary auto download, which this site does not recommend for mainnet.

Get test ATOM

A validator needs a self delegation. Every transaction needs fees. Create a key in the test keyring and fund it:
This prints the new cosmos1... address and a mnemonic. The test keyring stores the key unencrypted on disk, which is fine for test ATOM and never for mainnet. Paste the address into faucet.polypore.xyz or post it in the Discord faucet channel. Then confirm the balance once the node is synced:

Create a testnet validator

The transaction is the same as on mainnet. Write validator.json with the consensus public key from your node. Then submit it:
The testnet validator guide uses --gas auto --gas-adjustment 3. The simulation under estimates this transaction. After it is included, gaiad query staking validator $(gaiad keys show testnet-operator --bech val -a --keyring-backend test --home ~/.gaia-testnet) --home ~/.gaia-testnet shows the new validator. Whether it enters the active set depends on the stake of the current set. The testnet validator guide has the current advice. The key facts from Validator setup apply here too. The cosmosvaloper operator address you just created can never be changed, and the consensus key in priv_validator_key.json has no rotation path on this gaia version.

Rehearse an upgrade

Testnet upgrades are announced in the README and in the testnet channel on Discord. They follow the same two patterns as mainnet: a governance proposal with a plan height, or a coordinated halt height. The Upgrade a node runbook applies unchanged. Running gaiad query upgrade plan --home ~/.gaia-testnet shows the pending plan once a proposal has passed.

Verify

The network field is provider. The catching_up field becomes false when the node reaches the height the explorer shows.

Next

Join mainnet with what you learned, or Upgrade a node to prepare for the next testnet upgrade.