What is atproto?

atproto is two things:

  1. A protocol for creating open social networks
  2. An open social network

atproto, the open social network

Today the atproto network has 36+ million users and powers Bluesky and a handful of other apps.

Almost all atproto data is public. Content like posts, likes, follows, and photos/videos are publicly accessible to any network participant in a permissionless way.

As an example of how open the network is, here’s how easy it is to stream all public data on the network using a public atproto Relay like bsky.network:

The bsky.network relay offers a websocket endpoint that streams CBOR (essentially binary encoded JSON).

jake@desktop:~/$ gosky read-stream --json wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos | head --lines 10 | jq --compact-output 
dialing:  wss://bsky.network/xrpc/com.atproto.sync.subscribeRepos
Stream Started 2025-06-28T10:44:09-07:00

The gosky program is simply decoding the binary stream into JSON objects, which show app.bsky.feed.like and app.bsky.post and other Bluesky social app records being published and rebroadcast on the network.

{"blobs":null,"blocks":"[4647 bytes]","commit":{"$link":"bafyreibis6p7bf4teb4soyc74jdiblwp2udgymovycoqytfeaxcurybiam"},"ops":[{"action":"create","cid":{"$link":"bafyreieuhfwqnh24hwbxn5m4vjldhtbmbpyjmc6otoum6tfnqxvuo72qqm"},"path":"app.bsky.feed.like/3lsopfrzoww25"}],"prev":null,"rebase":false,"repo":"did:plc:erdz4vva4jn4wy5t5v56hy73","rev":"3lsopfrzxq625","seq":10793270158,"since":"3lsopfme3rl2g","time":"2025-06-28T17:44:09.098Z","tooBig":false}
{"blobs":null,"blocks":"[4871 bytes]","commit":{"$link":"bafyreiesl2muiovl54hftbcocxq34rsjuslcjowhi6vxoipfyzlparpxwy"},"ops":[{"action":"create","cid":{"$link":"bafyreidrrp6quj6nnt6potdx3olytymjnm3doijfoowxyfgikfpn6tgfuu"},"path":"app.bsky.feed.like/3lsopfs3il62s"}],"prev":null,"rebase":false,"repo":"did:plc:vgqhirjtivvdvq242cx7wkqm","rev":"3lsopfs453g2s","seq":10793270159,"since":"3lsopfqiwyq22","time":"2025-06-28T17:44:09.099Z","tooBig":false}
{"blobs":null,"blocks":"[5152 bytes]","commit":{"$link":"bafyreictbqqln3u4u3oucyoclylnniz3a54ynq2vm4szjg56rg7rtxm2ea"},"ops":[{"action":"create","cid":{"$link":"bafyreia5bdhgyg2emydh4oantlg3uc2blaumicqs5mth6d5ya6umtnat3q"},"path":"app.bsky.feed.post/3lsopfrcnes2o"}],"prev":null,"rebase":false,"repo":"did:plc:ghfdje2pgzxjnkknie67po6q","rev":"3lsopfryrb32v","seq":10793270160,"since":"3lsopfar2fs25","time":"2025-06-28T17:44:09.108Z","tooBig":false}
{"blobs":null,"blocks":"[5644 bytes]","commit":{"$link":"bafyreihi6l74222voalczubb4lv7aomwkvb2mpojzwbeh5kc3iorbrfpwm"},"ops":[{"action":"create","cid":{"$link":"bafyreigafa6cr4k6y7ufn5erkewxldpxjj3yel7i6vbvs7rrx3jrxwhunm"},"path":"app.bsky.feed.like/3lsopfrzx6h2g"}],"prev":null,"rebase":false,"repo":"did:plc:4e4ydxvhtpfgzeaanqadntos","rev":"3lsopfs2gsh2g","seq":10793270161,"since":"3lsopfkyeab2i","time":"2025-06-28T17:44:09.109Z","tooBig":false}
{"blobs":null,"blocks":"[4611 bytes]","commit":{"$link":"bafyreicwmbgdqo6kxo37zc7gimtcf6uwusoj3hf46edysbnrxbeslfypam"},"ops":[{"action":"create","cid":{"$link":"bafyreiaykbwmks5wvehubiunp3zurfvfopxhkcqybh42rd3777qwxo6uum"},"path":"app.bsky.feed.like/3lsopfrrgkc2g"}],"prev":null,"rebase":false,"repo":"did:plc:fgeyl5r6oc4dp35d4lwj62yy","rev":"3lsopfrrtak2g","seq":10793270162,"since":"3lsopfnfrwl2q","time":"2025-06-28T17:44:09.117Z","tooBig":false}
{"blobs":null,"blocks":"[4013 bytes]","commit":{"$link":"bafyreiafhstnpgszayons4rz3qvw6lnqnbdr6d6dhzddcogebzv3odv67a"},"ops":[{"action":"create","cid":{"$link":"bafyreihjrqpk3ct4tuuzjs6erm4wy7lficsuumqwka2wfjex2s7fmxhcju"},"path":"app.bsky.feed.like/3lsopfruja322"}],"prev":null,"rebase":false,"repo":"did:plc:3isntqb2rgfddeten6vjzaor","rev":"3lsopfruvwd22","seq":10793270163,"since":"3lsopfq3kqj26","time":"2025-06-28T17:44:09.117Z","tooBig":false}
{"blobs":null,"blocks":"[7685 bytes]","commit":{"$link":"bafyreibdmci4s27pmi2ilzdyvrblynk7svafttnmn3ejcyycfrxwla5zeu"},"ops":[{"action":"create","cid":{"$link":"bafyreiebchkihjrqxpiidehaborx6wt35snocwytj7sg5tiw26gsfgqbri"},"path":"app.bsky.feed.like/3lsopfs35dp2w"}],"prev":null,"rebase":false,"repo":"did:plc:lrkvtfoqzvfhkq3yi7iijsf4","rev":"3lsopfs3vqx2w","seq":10793270164,"since":"3lsopf7we342i","time":"2025-06-28T17:44:09.118Z","tooBig":false}
{"blobs":null,"blocks":"[3508 bytes]","commit":{"$link":"bafyreibkbhbz4z3arhbap5n7lg5q432qwpg7gx5nmib5tksrqqeiog4iyy"},"ops":[{"action":"create","cid":{"$link":"bafyreic4dbtdzs7ioa7mnyaz4xqvlcd33bnm6dm5nnw52nlqzlfcy7fum4"},"path":"app.bsky.feed.like/3lsopfrypjd2a"}],"prev":null,"rebase":false,"repo":"did:plc:5umtgdflpe2n33cessbhpur5","rev":"3lsopfrz75d2a","seq":10793270165,"since":"3lsol5ci3bc2p","time":"2025-06-28T17:44:09.119Z","tooBig":false}
{"blobs":null,"blocks":"[3817 bytes]","commit":{"$link":"bafyreidpmq7pfv2ynj7hnhh3tlwkiv46k2l5h4ny5wro2s53k2vwczsmhu"},"ops":[{"action":"create","cid":{"$link":"bafyreigkkywlukrx2swphzgzlsmsau5rdovuhsicd34sh3zxgzwknzvlt4"},"path":"app.bsky.feed.repost/3lsopfs3bd223"}],"prev":null,"rebase":false,"repo":"did:plc:2xhdsatidtbokpmgfoiozoyn","rev":"3lsopfs3k4c23","seq":10793270166,"since":"3lsopepv5np2j","time":"2025-06-28T17:44:09.119Z","tooBig":false}
{"blobs":null,"blocks":"[4301 bytes]","commit":{"$link":"bafyreie7t4w4w6alxewqaa2qjuqeepytwrhp2wpht2ax2jjximajv2hwhe"},"ops":[{"action":"create","cid":{"$link":"bafyreibsw7shkiuj7n5xxbnrpb4lu4uii42q267qry5fa2a7kwrir34bua"},"path":"app.bsky.feed.like/3lsopfs4ab62j"}],"prev":null,"rebase":false,"repo":"did:plc:efcnpxqtsvclqqlrvwunfzey","rev":"3lsopfs4h3w2j","seq":10793270167,"since":"3lsopcu3ucs2j","time":"2025-06-28T17:44:09.120Z","tooBig":false}

atproto, the protocol

The atproto protocol is a well-defined way of exchanging JSON (sometimes binary encoded) over HTTP for the purpose of creating an open social network.

It’s designed to be useful for creating social apps with entirely public app data. So social apps like Twitter or YouTube. But not Tinder, where data is mostly private.

It employs techniques like content-based addressing to gaurantee integrity, cryptographic signing/hashing to authenticate, and DNS to verify identities.

Briefly, it works like this:

  1. Users publish records (posts, likes, photos, etc) to their Personal Data Server (PDS)
  2. Relays monitor PDS hosts and receive all new records
  3. Appviews subscribe to Relays and aggregate records into useful APIs

User control over identity

Users of apps based on atproto have control over their identity, which is based on open standards and is not tied to any single provider.

User control over data

Users of apps based on atproto have control over their data, which lives in their Personal Data Server (PDS) and remains under their control at all times.

Level playing field

Emulating the web, atproto does not privilege any party. Network participants are free to operate and cooperate as they wish. All public data is designed to be accessible to all parties.

Apps are free to surface as little or as much of the data available on the network as they wish.

Read the protocol docs for the details.