{
"$type": "site.standard.document",
"bskyPostRef": {
"cid": "bafyreie4ie6skrlcmaejc746666e7x6iqzjz4zfkwmndbdqgmd74b27b7y",
"commit": {
"cid": "bafyreif6p5mnizq4oy5smxblkpbhhycryv3sks67urdt2ua7sa6cktcjrq",
"rev": "3mloni2j7hu2c"
},
"uri": "at://did:plc:7gm5ejhut7kia2kzglqfew5b/app.bsky.feed.post/3mloni2fld22o",
"validationStatus": "valid"
},
"content": {
"$type": "pub.leaflet.content",
"pages": [
{
"$type": "pub.leaflet.pages.linearDocument",
"blocks": [
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"aspectRatio": {
"height": 1260,
"width": 2240
},
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreifvasuffi36lldxkrhar3bjwhlzbieusrp6iq5bysnlvfip6o5au4"
},
"mimeType": "image/webp",
"size": 102512
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": "atproto has a bit of a discovery problem."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://atproto.com/guides/self-hosting#pds"
}
],
"index": {
"byteEnd": 17,
"byteStart": 14
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#highlight"
},
{
"$type": "pub.leaflet.richtext.facet#bold"
}
],
"index": {
"byteEnd": 89,
"byteStart": 77
}
}
],
"plaintext": "By default, a PDS (Personal Data Server) announces itself to only one relay: bsky.network. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
},
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://firehose.network"
}
],
"index": {
"byteEnd": 66,
"byteStart": 50
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://pds.directory/"
}
],
"index": {
"byteEnd": 212,
"byteStart": 195
}
}
],
"plaintext": "Every other relay in the ecosystem, including the firehose.network relays, has to discover new PDSes on its own, either by polling the Bluesky relay on a cadence, relying on scrapers, or running separate services. "
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://tangled.org/besaid.zone/scatter"
}
],
"index": {
"byteEnd": 26,
"byteStart": 19
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#highlight"
},
{
"$type": "pub.leaflet.richtext.facet#bold"
},
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://vsky.network"
}
],
"index": {
"byteEnd": 40,
"byteStart": 28
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
},
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://tangled.org/firehose.club/3ml2fpb5s6w22"
}
],
"index": {
"byteEnd": 184,
"byteStart": 171
}
}
],
"plaintext": "Inspired by Dane's scatter, vsky.network is a small service that fixes this. Send a crawl request to the service, and it fans the request out to every community relay in firehose.club."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.header",
"level": 1,
"plaintext": "vsky.network"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
},
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://github.com/bluesky-social/pds?tab=readme-ov-file#environment-variables:~:text=did%3Aplc%3Aar7c4by46qjdydhdevvrndac-,PDS_CRAWLERS,-https%3A//bsky.network"
}
],
"index": {
"byteEnd": 26,
"byteStart": 14
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://bsky.network"
}
],
"index": {
"byteEnd": 49,
"byteStart": 37
}
}
],
"plaintext": "Add it to the PDS_CRAWLERS alongside bsky.network:"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.code",
"plaintext": "PDS_CRAWLERS=https://bsky.network,https://vsky.network",
"syntaxHighlightingTheme": "github-dark-dimmed"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
],
"index": {
"byteEnd": 31,
"byteStart": 9
}
}
],
"plaintext": "Then run pdsadmin request-crawl"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
],
"index": {
"byteEnd": 147,
"byteStart": 123
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
],
"index": {
"byteEnd": 179,
"byteStart": 172
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
],
"index": {
"byteEnd": 200,
"byteStart": 194
}
}
],
"plaintext": "Crawl requests return instantly. The actual fan-out happens in the background. Per-relay results are logged and exposed at /fanouts?hostname=<host>, with the relay list at /relays, and stats at /stats."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.image",
"aspectRatio": {
"height": 1258,
"width": 1146
},
"image": {
"$type": "blob",
"ref": {
"$link": "bafkreiagelxbdeso5pgkzm5iy57kwzblo6yuwwyt46dsvpnuarg2duig3e"
},
"mimeType": "image/webp",
"size": 63162
}
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"alignment": "lex:pub.leaflet.pages.linearDocument#textAlignCenter",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
],
"index": {
"byteEnd": 101,
"byteStart": 0
}
}
],
"plaintext": "Form submission result on vsky.network, showing each relay and whether it accepted the crawl request.",
"textSize": "small"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"alignment": "lex:pub.leaflet.pages.linearDocument#textAlignCenter",
"block": {
"$type": "pub.leaflet.blocks.text",
"plaintext": ""
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"alignment": "lex:pub.leaflet.pages.linearDocument#textAlignLeft",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#didMention",
"did": "did:plc:a2rdzfdxkjwerrfrpbwcipb2"
}
],
"index": {
"byteEnd": 33,
"byteStart": 24
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://www.val.town/x/username/vsky-network"
}
],
"index": {
"byteEnd": 52,
"byteStart": 35
}
}
],
"plaintext": "The whole thing runs on @val.town. Check it out here."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://vsky.val.run/"
}
],
"index": {
"byteEnd": 27,
"byteStart": 15
}
}
],
"plaintext": "Alternate url: vsky.val.run"
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
],
"index": {
"byteEnd": 17,
"byteStart": 1
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
],
"index": {
"byteEnd": 50,
"byteStart": 38
}
}
],
"plaintext": "\nPDS distributors: consider including vsky.network as a default crawler in your distribution."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
}
],
"index": {
"byteEnd": 15,
"byteStart": 0
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#bold"
},
{
"$type": "pub.leaflet.richtext.facet#link",
"uri": "https://tangled.org/firehose.club/community-firehose-list"
}
],
"index": {
"byteEnd": 52,
"byteStart": 34
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#code"
}
],
"index": {
"byteEnd": 84,
"byteStart": 58
}
}
],
"plaintext": "Relay operators: open a PR in the firehose.club repo with opt_ins = [\"vsky.network\"] to be included in the fan-out."
}
},
{
"$type": "pub.leaflet.pages.linearDocument#block",
"block": {
"$type": "pub.leaflet.blocks.text",
"facets": [
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
],
"index": {
"byteEnd": 17,
"byteStart": 2
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#didMention",
"did": "did:plc:hdhoaan3xa3jiuq4fg4mefid"
}
],
"index": {
"byteEnd": 33,
"byteStart": 17
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
],
"index": {
"byteEnd": 38,
"byteStart": 33
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#didMention",
"did": "did:plc:qttsv4e7pu2jl3ilanfgc3zn"
}
],
"index": {
"byteEnd": 50,
"byteStart": 38
}
},
{
"features": [
{
"$type": "pub.leaflet.richtext.facet#italic"
}
],
"index": {
"byteEnd": 84,
"byteStart": 50
}
}
],
"plaintext": "\n\nHuge thanks to @bad-example.com and @besaid.zone for the feedback and inspiration."
}
}
],
"id": "019dd685-e8b3-7bbe-91ee-6296342238f8"
}
]
},
"coverImage": {
"$type": "blob",
"ref": {
"$link": "bafkreifvasuffi36lldxkrhar3bjwhlzbieusrp6iq5bysnlvfip6o5au4"
},
"mimeType": "image/webp",
"size": 102512
},
"description": "Introducing vsky.network, a fan-out service for crawl requests across community atproto relays.",
"path": "/3mlonhvou3c2o",
"publishedAt": "2026-05-12T20:39:19.887Z",
"site": "at://did:plc:7gm5ejhut7kia2kzglqfew5b/site.standard.publication/3ls34ezbet22y",
"tags": [
"atproto",
"firehose",
"relay",
"pds",
"vsky"
],
"title": "Crawl me maybe"
}