About Protoverse

Protoverse is a public health observatory for the AT Proto network. We list every PDS host the Bluesky relays know about, check each one from the outside, and show what we saw. We observe; we don't judge. Nothing here is a ranking.

Protoverse is not affiliated with Bluesky PBC.

What we check

Discovery. Every five minutes we ask both Bluesky relays (relay1.us-west and relay1.us-east) for their host list via com.atproto.sync.listHosts. Account counts are the relays' numbers, not verified people.

Checks. Hosts the relays see as live are checked every five minutes; hosts the relays report offline are checked hourly. Each check calls com.atproto.server.describeServer and, if that answers, com.atproto.sync.getLatestCommit for one repo the host lists. Once a day we read the TLS certificate's expiry.

Feed generators. We check each feed generator service, not each feed. Every five minutes (hourly once a service has gone three days without answering, or has never answered) we call app.bsky.feed.getFeedSkeleton for one of its feeds, then app.bsky.feed.describeFeedGenerator. A 401 counts as answering: the server replied correctly, but the feed needs a signed-in viewer. If describeFeedGenerator isn't implemented, we skip it. When a sample feed fails we try a different one next time.

Labelers. Every five minutes (hourly once a labeler has gone three days without answering, or has never answered) we call com.atproto.label.queryLabels and check that it answers with a list. A 401 counts as answering here too.

Relay sync. Every five minutes we note whether each Bluesky relay's event count for a busy host has moved. If it has, the relay is Receiving. If it hasn't moved for 15 minutes, we find the newest commit among up to 3,000 of the host's accounts and ask the relay for its copy of that account. A miss is checked again on the next run before we call it Behind, and the number is "at least": it runs on our clock from when we first saw the relay missing that commit. Because we compare a sample of accounts, a quiet host can't show lag. Relay sync never changes a host's status.

Feed freshness. About once a week we ask each feed for its first 10 entries and date the newest post from its id (post ids carry their creation time; we checked they match Bluesky's to within seconds). Fresh means that newest sampled post is under a day old, Stale a day to a week, Asleep a week or more. Ranked feeds usually count as fresh. We check at most one feed per server per minute, so a server with many thousands of feeds takes longer to get round. Personalised feeds often answer Needs sign-in.

Labeler activity. About once a day we search the label stream of each labeler we can reach for its newest event, using short connections, and read the creation time of the labels in it. Active means that newest event is under a day old, Quiet a day to 30 days, Asleep 30 days or more. A labeler that re-sends an old label last can look older than it is until it labels again. Labelers with nothing in their stream show No labels yet.

Status. Up means the last three checks passed. Degraded means some passed, or the certificate expires within a third of its lifetime (at most 14 days). Unreachable means the last three main checks (describeServer for PDS hosts, getFeedSkeleton for feed generators, queryLabels for labelers) failed from our probe. Idle is a host that answers but the relay sees no recent activity. Latency alone never changes a status. The sky report counts Up and Idle hosts as passing.

Where from. One probe, in sfo3. A host that is unreachable from here may be fine from elsewhere.

History. Raw results are kept 7 days; hourly rollups 60 days. The "30-day check success" figure is the share of checks that passed, not time-weighted availability. Pages are cached for up to a minute.

Identification. Every request carries the User-Agent Protoverse/1.0 (+https://protoverse.app/about).

Opting out

If you'd rather not be observed, email [email protected] with your hostname. We stop probing and list the hostname and nothing else. Changes take effect within a minute.

"Independent"

A host is Bluesky-hosted when its hostname ends in .host.bsky.network. Everything else is listed as independent. This is a hostname rule, not a verified statement about who operates the server.

Hosts the relays have banned

When any relay reports a host as banned, we don't list it and we don't probe it. Right now that is 70 hosts. The relay's judgement isn't ours to publish.

Who runs this

Protoverse is built and run by the team at Honeybadger, who have been watching production systems since 2012. It's just a thing we wanted to exist. ๐Ÿ™‚