This is the canonical setup guide. Use it when you need the full install flow, not just the short checklist.Documentation Index
Fetch the complete documentation index at: https://docs.superform.xyz/llms.txt
Use this file to discover all available pages before exploring further.
Before you install
Make sure you already have:- approval to join the permissioned validator program
- the bootstrap peer entries supplied by Superform
- the chain-specific contract addresses and current config version for your deployment
- reliable HTTPS and WSS RPC endpoints for each assigned chain
- PostgreSQL 15+
System requirements
| Requirement | Baseline |
|---|---|
| OS | Linux or macOS |
| CPU | 2 vCPU minimum |
| RAM | 2 GB minimum, 4 GB recommended |
| Disk | 20 GB minimum |
| Database | PostgreSQL 15+ |
| Network | Stable outbound connectivity, direct TCP 6690, and reliable uptime |
Choose a deployment method
Published Image
Recommended for most operators. No Go toolchain required.
Build from Source
Use this if you need direct source control over the runtime.
Docker (build locally)
Useful when validating local code changes before deployment.
- Published Image (recommended)
- Build from Source
- Docker (build locally)
Published Image
Images are published to GitHub Container Registry:1. Authenticate to GHCR
read:packages.2. Pull the image
3. Prepare local config files
4. Fill in the required values
Inconfig.toml, set:[keys]offchain private key for direct-hex or KMS-backed setups, orkey_file_pathif you are loading from./keystore/ocr2_<id>.json[keys.onchain_private_key]dev private key or productionkms_key_id[database].url[p2p].bootstrap_peers- optional
announce_addressesif you are behind NAT chain_config_path
chains.yaml, every assigned chain needs both a reliable HTTPS RPC endpoint for reads/tx submission and a WSS endpoint for event subscriptions. Do not treat WSS as optional.In chains.yaml, set the RPC endpoints and the contract addresses provided by Superform.5. Run the container
config.toml uses key_file_path = "./keystore/ocr2_<id>.json", the ./keystore mount is mandatory because the node also expects ./keystore/p2p_<peerID>.json beside it. Direct-hex configs do not need the mount. KMS only replaces the onchain signer, so you still need either direct offchain hex or the local keystore/P2P files.6. Verify basic health
Key management rules that matter during setup
- Generate keys once per validator identity.
- Back up the keystore before first production use.
- Never commit
keystore/,.env, orconfig.toml. - Use AWS KMS for the onchain signing key in production if supported by your environment.
- KMS only covers the onchain signer; the OCR2/offchain key and P2P identity remain independently managed.
- If you use key files, keep
ocr2_<id>.jsonandp2p_<peerID>.jsonat0600permissions.
Bootstrap peers
Both Superform bootstrap peers must be configured in[p2p].bootstrap_peers. Your node uses them to join the mesh and discover the rest of the validator set.
Those peer endpoints must resolve directly to the validator hosts. Cloudflare proxying or any other HTTP proxy on the P2P port will break ragep2p connectivity.
The peer IDs are expected to remain stable across normal infrastructure replacements. If Superform ever rotates one, treat that as a real config update and replace the entry before your next restart.
Networking rule that matters in production:
- outbound TCP
6690is mandatory so your node can reach the Superform bootstrap peers and the wider mesh - inbound TCP
6690is required when other validators must dial the endpoint you advertise directly - outbound-only can work in some NATed topologies if your announced endpoint is still reachable through another path, but do not treat that as the default production assumption
announce_addresses so other validators can dial you back correctly.
Verify connectivity before startup:
Healthy startup sequence
On a clean boot you should see a progression close to:What success looks like before registration
Before Superform registers your node, you should already have:- a healthy process
- successful database connectivity
- working
/healthzand/metricsendpoints - no local config parse errors
- clean outbound connectivity to the bootstrap peers and your RPC providers