- diff view gains a Packages tab with added/removed/changed/unchanged package tables and purl-derived type/license/upstream links - captain records verified against the DID's atcr_hold service before caching (processor + batch backfill), preventing forged holds - fix empty-handle updates clobbering cached handles and colliding on the UNIQUE constraint - move fillPrevCIDs into repo.go; DirectRepoOperator is now canonical, repomgr kept as a test oracle - surface read-only crew status in hold selector - reconcile docs
4.0 KiB
Known ATProto Relays
Reference list of known public ATProto relays and their capabilities, relevant to ATCR hold discovery and appview backfill.
There is no relay discovery protocol in ATProto — this list is manually maintained.
Last verified: 2026-02-08
Relay List
Bluesky (Official)
| Relay | URL | requestCrawl | listReposByCollection | Notes |
|---|---|---|---|---|
| Bluesky (load balancer) | https://bsky.network |
Yes | No (400 — not proxied) | Load balancer, proxies to regional relays |
| Bluesky US-East | https://relay1.us-east.bsky.network |
Yes | Yes | Regional relay with full collection directory |
| Bluesky US-West | https://relay1.us-west.bsky.network |
Yes | Yes | Regional relay with full collection directory |
Community
| Relay | URL | requestCrawl | listReposByCollection | Notes |
|---|---|---|---|---|
| Firehose NA | https://northamerica.firehose.network |
Yes | No (404) | 72h replay buffer |
| Firehose EU | https://europe.firehose.network |
Yes | No (404) | 72h replay buffer |
| Firehose Asia | https://asia.firehose.network |
Yes | No (404) | 72h replay buffer |
| Microcosm Montreal | https://relay.fire.hose.cam |
Yes | No (404) | |
| Microcosm France | https://relay3.fr.hose.cam |
Yes | No (404) | |
| Upcloud | https://relay.upcloud.world |
Yes | No (404) | |
| Blacksky | https://atproto.africa |
Down (502) | Down (502) | Was offline as of 2026-02-08 |
| Hayes | https://relay.hayescmd.net |
|||
| Xero | https://relay.xero.systems |
|||
| Feeds Blue | https://relay.feeds.blue |
|||
| Waow | https://relay.waow.tech |
|||
| Bassh | https://relay.bas.sh |
ATCR Usage
Hold service (requestCrawl)
The hold announces its embedded PDS to relays on startup via com.atproto.sync.requestCrawl. On startup, requestCrawls() fans out to every relay in KnownRelays (all 15 entries hardcoded in pkg/atproto/relays.go) plus any additional entries in server.relay_endpoints (a list; defaults to relay1.us-east.bsky.network and relay1.us-west.bsky.network). Per-relay failures are logged but never block startup. All healthy relays above accept requestCrawl.
Appview backfill (listReposByCollection)
The appview uses com.atproto.sync.listReposByCollection to discover DIDs with io.atcr.* records during backfill. Only Bluesky's regional relays support this endpoint. The appview's jetstream.relay_endpoints defaults to both relay1.us-east.bsky.network and relay1.us-west.bsky.network with failover between them.
Why most relays lack listReposByCollection
The listReposByCollection endpoint is not part of the relay core. It's served by a separate microservice called collectiondir that maintains an index of (collection, timestamp, DID) tuples.
Community relays running the Rainbow relay can optionally proxy to a collectiondir instance via --collectiondir-host, but most don't deploy one — likely because maintaining that index across the full network is expensive relative to just fan-out relaying.
Other useful relay endpoints
These are standard XRPC endpoints that relays may implement:
com.atproto.sync.listRepos— paginated list of all known repos (all tested relays support this)com.atproto.sync.getRepo— all tested relays 302 redirect to the source PDScom.atproto.sync.getRepoStatus— check if a relay knows about a specific DIDcom.atproto.sync.subscribeRepos— WebSocket firehose subscription