Files
2025-07-18 22:22:32 +02:00

18 KiB

 
 
 
!Awesome (https://awesome.re/badge.svg) (https://awesome.re)
 
 
Awesome ATProto
 
AT Protocol (https://atproto.com/) is a federated protocol for building social applications on an open, decentralized network
 
Contents
 
AT Protocol (#at-protocol)
* **References** (#references)
* **Articles** (#articles)
Browsers (#browsers)
Platforms (#platforms)
* **Bluesky** (#bluesky)
Tools (#tools)
Lexicons (#lexicons)
 
AT Protocol
 
References
 
Glossary (https://atproto.com/guides/glossary) - Quick reference to AT Protocol terms.
Lexicons, Pinned Posts, and Interoperability (https://docs.bsky.app/blog/pinned-posts) - Post-mortem about the evolution of lexicons and lessons learned.
Quick start guide to building applications on AT Protocol (https://atproto.com/guides/applications) - Guide to create a basic ATProto application.
 
Articles
 
First impressions of Bluesky's AT Protocol (https://educatedguesswork.org/posts/atproto-firstlook/) - In-depth analysis of Bluesky's ATProto, highlighting its aim to create a decentralized social media architecture.
Nostr and ATProto (https://shreyanjain.net/2024/07/05/nostr-and-atproto.html) - Comparison of Nostr and ATProto, two decentralized social media protocols, exploring their origins, similarities, and differences.
How decentralized is Bluesky really? (https://dustycloud.org/blog/how-decentralized-is-bluesky/) - Critical examination of Bluesky's decentralization claims and its architectural challenges compared to established protocols.
Reply on Bluesky and Decentralization (https://whtwnd.com/bnewbold.net/3lbvbtqrg5t2t) - Reply to Christine Lemmer-Webber's thoughtful (and widely read) "How decentralized is Bluesky really?" blog post.
What is atproto.com good for? (https://bnewbold.net/2022/atproto_thoughts/) - Technical exploration of ATProto's design principles, architectural challenges, and potential limitations as a decentralized social media protocol.
The AT Protocol Architecture (https://hackernoon.com/the-at-protocol-architecture) - Analysis of the ATProto's architecture.
Notes on Running a Full-Network atproto Relay (July 2024) (https://whtwnd.com/bnewbold.net/entries/Notes%20on%20Running%20a%20Full-Network%20atproto%20Relay%20(July%202024)) - Experience about running an ATProto relay.
 
Browsers
 
PDSls (https://pdsls.dev/) - ATProto repositories browser.
ATProto Browser (https://atproto-browser.vercel.app/) - ATProto URIs browser.
 
Platforms
 
Bluesky (https://bsky.social) - The beloved social network and main ATProto platform.
Blue Place (https://place.blue/) - Massive real-time collaborative canvas.
Bookhive (https://bookhive.buzz/) - Goodreads alternative.
Frontpage (https://frontpage.fyi/) - Federated link aggregator.
GrayHaze (https://grayhaze.live/about) - Live streaming service (alpha).
Linkat (https://linkat.blue/) - Link in bio for Bluesky.
Pastesphere (https://pastesphere.link/) - Pastebin alternative.
Picosky (https://psky.social/) - ATProto chatting appview.
PinkSea (https://pinksea.art/) - Oekaki BBS.
recipe.exchange (https://recipe.exchange/) - Cooking recipes sharing.
Skylights (https://skylights.my/) - Book reviews.
Smoke Signal (https://smokesignal.events/) - Event creation and managing.
Sparta Social (https://github.com/dblock/sparta-social) - Exercise activity tracker (wip).
Whitewind (https://whtwnd.com/) - Markdown blog service using ATProto with no registration required.
 
Bluesky
 
ClearSky (https://clearsky.app/) - Tool to explore Bluesky accounts.
cleanfollow (https://cleanfollow-bsky.pages.dev/) - Select inactive or blocked accounts to unfollow.
Handles directory (https://blue.mackuba.eu/directory/) - Handles ranking by TLDs.
Labellers (https://blue.mackuba.eu/labellers/) - List of known labellers.
BluSki account history
(https://mocku.me/nt/#%23+BluSki+account+history//%23%23+Whose+history%3F//Let's+pick+a+rando+hot+poster+from+Discovery+feed+--//%60%60%60JavaScript/%2F%2F+downloading+Discovery+feed+posts/let+discoveryFeedPosts+=+(await+fetch(/++'https:%2F%2Fa
pi.bsky.app%2Fxrpc%2Fapp.bsky.feed.getFeed%3Ffeed=at:%2F%2Fdid:plc:z72i7hdynmk6r22z27h6tvur%2Fapp.bsky.feed.generator%2Fwhats-hot%26limit=100',/++%7B+headers:+%7B+'accept-language':+'en'+%7D+%7D).then(x+=%3E+x.json())).feed;//%2F%2F+sort+by+lik
es/let+topTextPost+=+discoveryFeedPosts/++.filter(p+=%3E+p.post.record.text+%26%26+!p.post.record.embed)/++.sort((p1,+p2)+=%3E+p2.post.likeCount+-+p1.post.likeCount)%5B0%5D;//%2F%2F+let's+see+all+the+info+now/let+hotAuthor+=+%7B/++...topTextPos
t.post.author,/++post:+%7B+...topTextPost.post,+...topTextPost.post.record,+post:+undefined,+record:+undefined,+author:+undefined+%7D/%7D;/%60%60%60//If+you're+after+specifc+handle,+specify+it+now.//%60%60%60JavaScript/let+bskyHandle+=+%2F%2F+'
oyin.bo';+++++++%2F%2F++%3C--+like+this/++hotAuthor.handle;+//let+resolvedAccount+=++await+fetch(/++'https:%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%3Factor='+%2B+bskyHandle).then(x=%3Ex.json())/%60%60%60//%23%23+Finding+PDS+
for+that+account//PDS,+personal+data+server+physically+stores+account's+data.+Usually+it's+one+of+a+couple+dozens+BluSki+servers+in+the+cloud.//By+tradition+they+get+Latin+mushroom+names.//Accounts+sometimes+shift+from+one+mushroom+to+another,+
so+we+find+the+latest+most+actual+PDS.//%60%60%60JavaScript/let+plcEntries+=+await+fetch(%60https:%2F%2Fplc.directory%2F$%7BresolvedAccount.did%7D%2Flog%2Faudit%60).then(x+=%3E+x.json());+%2F%2F+full+account+registry/let+lastKnownPds+=+plcEntri
es.slice().reverse().map(x=%3Ex.operation%3F.services%3F.atproto_pds%3F.endpoint).filter(Boolean)%5B0%5D;+%2F%2F+last+PDS+operation+record/%60%60%60//%23%23+Downloading+the+history+in+CAR%2FCBOR+format//Account+history+is+a+public+service,+beca
use+it's+used+in+distributing+BluSki+data+across+the+network.+The+file+can+be+anything+between+1-50Mb+depending+on+shitposting+power.//The+binary+CAR%2FCBOR+format+saves+storage+and+bandwith,+and+has+extra+funky+cryptographic+signatures+(of+whi
ch+no+normal+person+cares).//%60%60%60JavaScript/let+binarySnapshot+=+await+fetch(lastKnownPds+%2B+'%2Fxrpc%2Fcom.atproto.sync.getRepo%3Fdid='+%2B+resolvedAccount.did).then(x+=%3E+x.arrayBuffer());/binarySnapshot.byteLength.toLocaleString()/%60
%60%60//%23%23+Extracting+useful+data+from+CAR%2FCBOR//There+are+libraries+for+that+in+every+programming+language.+Just+invoke+and+it'll+come.//%60%60%60JavaScript/import+%7B+readCAR+%7D+from+'https:%2F%2Funpkg.com%2Fcoldsky';/let+parsedRecords
+=+await+readCAR(resolvedAccount.did,+binarySnapshot,+%7B+sleep:+600+%7D)/%60%60%60//%23+Finally,+useful+info!//Having+this+rich+history+of+shitposts,+replies,+likes+and+more,+we+are+ready+to+look+at+actual+stats.//%23%23+What+kind+of+activity+
dominates%3F//%60%60%60SQL/SELECT+%5B$type%5D,+COUNT()/FROM+$4+GROUP+BY+%5B$type%5D/ORDER+BY+COUNT()+DESC/%60%60%60//%23%23+5+days+of+heaviest+shitpost//%60%60%60SQL/SELECT+TOP+5+createdAt-%3Esplit('T')-%3E%5B0%5D+as+date,+COUNT(
)/FROM+$4/++WHERE+%5B$type%5D+=+%22app.bsky.feed.post%22/++GROUP+BY+createdAt-%3Esplit('T')-%3E%5B0%5D/ORDER+BY+COUNT(
)+DESC/%60%60%60//%23%23+5+days+of+love:+more+likes+gifted+to+others//%60%60%60SQL/SELECT+TOP+5+createdAt-%3Esplit('T')-%3E%5B0%5D+as+date,+COUNT(
)/FROM+$4/++WHERE+%5B$type%5D+=+%22app.bsky.feed.like%22/++GROUP+BY+createdAt-%3Esplit('T')-%3E%5B0%5D/ORDER+BY+COUNT(
)+DESC/%60%60%60//%23%23+10+favourite+accounts//%60%60%60SQL/SELECT+TOP+10+subject-%3Euri-%3Esplit('at:%2F%2F')-%3E%5B1%5D-%3Esplit('%2F')-%3E%5B0%5D+as+did,+COUNT(
)+AS+likes/FROM+$4/++WHERE+%5B$type%5D+=+%22app.bsky.feed.like%22/++GROUP+BY+subject-%3Euri-%3Esplit('at:%2F%2F')-%3E%5B1%5D-%3Esplit('%2F')-%3E%5B0%5D/ORDER+BY+COUNT(
)+DESC/%60%60%60//%23%23+Who+are+these+people%3F//Account+history+file+refers+to+other+accounts+with+hexadecimal+DID,+which+as+you+see+above+isn't+that+readable.//No+sweat,+BluSki+has+a+service+to+resolve+DID+to+account+name%2Fhandle%2Finfo.+He
re+you+go.//%60%60%60JavaScript/Promise.all($8.map(async+entry+=%3E+%7B/++const+profile+=+await+fetch('https:%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%3Factor='+%2B+entry.did).then(x+=%3E+x.json());/++return+%7B/++++did:+prof
ile.did,+handle:+profile.handle,+displayName:+profile.displayName,/++++likesCount:+entry.likes,/++++postsCount:+profile.postsCount,/++++...profile/++%7D;/%7D))/%60%60%60//%23%23+10+accounts+getting+most+reply+traffic//%60%60%60SQL/SELECT+TOP+10
+reply-%3Eparent-%3Euri-%3Esplit('at:%2F%2F')-%3E%5B1%5D-%3Esplit('%2F')-%3E%5B0%5D+as+did,+COUNT(
)+AS+replies/FROM+$4/++WHERE+%5B$type%5D+=+%22app.bsky.feed.post%22+AND+reply+AND+reply-%3Eparent-%3Euri/++GROUP+BY+reply-%3Eparent-%3Euri-%3Esplit('at:%2F%2F')-%3E%5B1%5D-%3Esplit('%2F')-%3E%5B0%5D/ORDER+BY+COUNT(
)+DESC+/%60%60%60//And+again,+with+names+and+extra.//%60%60%60JavaScript/Promise.all($10.map(async+entry+=%3E+%7B/++const+profile+=+await+fetch('https:%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%3Factor='+%2B+entry.did).then(x+
=%3E+x.json());/++return+%7B/++++did:+profile.did,+handle:+profile.handle,+displayName:+profile.displayName,/++++repliesCount:+entry.replies,/++++postsCount:+profile.postsCount,/++++...profile/++%7D;/%7D))/%60%60%60//) - Editable notebook to
analyze a Bluesky account.
Starter Packs (https://www.starterpacks.net/) - Search Bluesky starter packs and profiles.
PDS self-hosting (https://atproto.com/guides/self-hosting) - Self-hosting a Bluesky PDS means running your own Personal Data Server that is capable of federating with the wider ATProto network.
Bluesky-powered comments for any website (https://github.com/czue/bluesky-comments) - Embed Bluesky comments on your website easily (announcement (https://www.coryzue.com/writing/bluesky-comments/)).
 
For more Bluesky tools, check Awesome Bluesky (https://github.com/notjuliet/awesome-bluesky), a more exhaustive list of tools and clients available for Bluesky.
 
Tools
 
ATFile (https://github.com/ziodotsh/atfile) - Store and retrieve files on the ATmosphere.
 
Lexicons
 
Lexicon is a schema definition language used to describe atproto records, HTTP endpoints (XRPC), and event stream messages.
 
Find below each platform's lexicons:
 
ATFile (https://github.com/ziodotsh/lexicons/tree/main/blue/zio/atfile)
Bluemoji (https://github.com/aendra-rininsland/bluemoji/tree/main/schema/blue.moji)
Bluesky (https://github.com/bluesky-social/atproto/tree/main/lexicons/app/bsky)
Bookhive (https://github.com/nperez0111/bookhive/tree/main/lexicons)
Frontage (https://github.com/likeandscribe/frontpage/tree/main/lexicons/fyi/unravel/frontpage)
GrayHaze (https://github.com/hugeblank/grayhaze.live/tree/main/lexicons/live/grayhaze)
Linkat (https://github.com/mkizka/linkat/tree/main/lexicons/blue/linkat)
Pastesphere (https://github.com/echo8/pastesphere/tree/main/lexicons)
Picosky (https://github.com/psky-atp/appview/tree/main/lexicons/social/psky)
PinkSea (https://github.com/shinolabs/PinkSea/tree/master/PinkSea.Lexicons/com/shinolabs/pinksea)
place.blue (https://github.com/QuietImCoding/place.blue/tree/main/atproto/lexicons)
recipe.exchange (https://recipe.exchange/lexicons/)
Skylights (https://github.com/Gregoor/skylights/tree/main/web/lexicons)
Skymdb (https://github.com/safwanyp/skymdb/tree/main/domain/lexicons)
Smoke Signal (https://github.com/SmokeSignal-Events/lexicon)
Sparta Social (https://github.com/dblock/sparta-social/tree/main/lexicons)
Whitewind (https://github.com/whtwnd/whitewind-blog/tree/main/lexicons/com/whtwnd/blog)
 
Contributing
 
Contributions welcome! Read the contribution guidelines (contributing.md) first.
 
atproto Github: https://github.com/atblueprints/awesome-atproto