Files
2025-07-18 23:13:11 +02:00

134 lines
18 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
!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