Continuously updated Monad peer sets, harvested off-node by monad-sonar. Plain JSON over HTTPS, CORS open, refreshed every 30 minutes.
Live mainnet peer name records from periodic discovery passes.
Live testnet peer name records from periodic discovery passes.
Mainnet union feed: a continuously running daemon merges every pass, keeping the freshest record per peer — the highest-coverage view of the mainnet set.
Same union mechanism for the testnet set.
Machine-readable catalog: peer counts and per-feed refresh timestamps. Poll this first.
| field | meaning |
|---|---|
| secp | compressed secp256k1 consensus public key (peer identity) |
| ip | advertised IPv4 endpoint |
| port | TCP port of the node's peering endpoint |
| authPort | authenticated-UDP discovery port |
| seq | name-record sequence number (higher = fresher record) |
These are the exact name records Monad's discovery protocol defines — no derived or enriched fields.
# shell: count mainnet peers curl -s https://prooflines.org/monad/sonar/mainnet-peers.json | jq length # shell: freshest-known endpoints, newest records first curl -s https://prooflines.org/monad/sonar/testnet-peers-union.json | jq 'sort_by(-.seq) | .[:5]'
// browser / node: CORS is open, fetch directly
const peers = await (await fetch("https://prooflines.org/monad/sonar/mainnet-peers.json")).json();
console.log(peers.length, "mainnet peers");
Feeds regenerate every 30 minutes from an off-node server (never a validator). If a pass fails, the previous good file is kept — check index.json timestamps for actual age. An independent watchdog alerts the operator if any feed goes stale.