The bmannconsulting.com website
1---
2link:
3published: 2025-08-01
4author:
5 - Boris Mann
6tags:
7 - presentation
8 - ATProtocol
9 - Fedicon
10title: "Beyond Microblogging: AT Protocol for Building Unique Social Apps"
11---
12I gave this presentation at [[Fedicon]] 2025 in Vancouver.
13
14My goal was not to do a protocol deep dive, but rather showcase all of the beyond microblogging applications that developers are building in the [[ATProtocol]] ecosystem, aka the [[ATmosphere]].
15
16Along the way we detoured into some explanations of pieces of how ATProto works.
17
18The bottom line is joy: making apps should be fun, they should bring joy to users -- including the confidence that the data is in their own account -- and we should have a large variety of apps, from small, silly to big, serious. And beyond microblogging is where all the good stuff is.
19
20## Slide 5: Let's have fun in the ATmosphere.
21
22* My goal with this talk is to tell you about the **ATmosphere** — the connected accounts, data, and apps that are all running on the AT Protocol
23- One of the things that lets people play is that <mark>every account has portable, user owned storage included</mark> in a Personal Data Server ([[PDS]])
24- With accounts separate from apps, <mark>people can make apps just for themselves or small groups of people and the barrier to entry is very low</mark>.
25- There isn’t a server or an app to go away: <mark>data is written to a users’ account</mark>
26
27## Resources
28
29### Microblogging
30
31I started by listing clients/apps that use the [[Bluesky]] microblog lexicon
32
33* [Ouranos](https://useouranos.app) - a client that supports rich-text links and out-of-band tags
34* [Flashes](https://www.flashes.blue) - an iOS, iPad, and soon Android app that is an Instagram looking interface focused on images and videos
35* [Skylight](https://skylight.social) - an iOS "TikTok clone" video app
36* [Pinksky](https://pinksky.app) - a cross-platform web, Android, and iOS app that is Instagram looking
37* [[Gander]] - a fork of the Bluesky React Native client codebase that will initially launch as mobile only, be more Instagram shaped, and add other Canadian specific defaults and features over time (I'm an advisor)
38
39### Beyond Microblogging
40
41Moved on to the "real" beyond microblogging apps here:
42
43* [Flushes](https://flushes.app) - an app to post your toilet status
44* [Recipe Exchange](https://recipe.exchange) - an app to post recipes too, including images. Based on the [Schema.org Recipe Type](https://schema.org/Recipe)
45* [Tangled](https://tangled.sh) - a social coding app / Github clone. Has its own follow graph, so you login with your ATProto account but don't re-use the Bluesky following graph
46* [[Smoke Signal]] - events & RSVPs, also includes the [[Lexicon Community]] community lexicon for venues / geo locations. Aiming to be event infrastructure where different products will be built on top. Regional "instances" are in progress of self hosting.
47* [Grain](https://grain.social) - photo posting that you can gather into galleries. Uses the regular "blob" type that all images and other non-text file types on ATProto are stored as, content addressed.
48* [Streamplace](https://stream.place) - decentralized video streaming platform aiming to be a Twitch alternative. Going to be plugged into other video apps over time.
49* [[WhiteWind]] - the first custom Lexicon, made by a Japanese developer. Long form post type using Markdown.
50* [Leaflet](https://leaflet.pub) - another long form post type that uses a block-based Lexicon and editor, so it's an array of different types. Can make publications that automatically post to a custom feed that users can subscribe to.
51* [[Roomy]] - a chat platform that uses ATProto logins but is also tied to local first p2p tech like [[Automerge]], [[Jazz]], [[Keyhive]]
52* [2048 Blue](https://2048.blue) - 2048 game written in Rust, scores are stored in your account
53* [Discover Toronto Inc](https://discover.toronto.inc) - custom Lexicon to power a directory of Toronto-linked people. An example of a single serving app that uses ATproto as a backend-as-a-service
54
55For others wanting to experiment with building apps, the [[Statusphere]] example app is a good starting point.
56
57And, join the [[ATProto Touchers Discord]], the community-run developer Discord.
58
59## Questions
60
61A couple of notes on questions afterwards that I remember:
62
63### How hard is it for devs to make ATProto apps?
64
65Evan asked about how hard or easy it is for developers to make apps, or if there were things that developers needed to learn.
66
67<blockquote class="bluesky-embed" data-bluesky-uri="at://did:plc:ics2en32qho7u5vttyvmanvb/app.bsky.feed.post/3lvemq7irgw32" data-bluesky-cid="bafyreiffmzap6l543g5ggvbwfomq7zva4cpo3uyttgq5ljtl2zdgqxqv5y" data-bluesky-embed-color-mode="system"><p lang="en">"Monkey-punching toilets is actually a sign of success." <a href="https://cosocial.ca/@boris">@boris@cosocial.ca</a> #fedicon</p>— Evan Prodromou (<a href="https://bsky.app/profile/did:plc:ics2en32qho7u5vttyvmanvb?ref_src=embed">@evan@cosocial.ca</a>) <a href="https://bsky.app/profile/did:plc:ics2en32qho7u5vttyvmanvb/post/3lvemq7irgw32?ref_src=embed">August 1, 2025 at 2:45 PM</a></blockquote><script async src="https://embed.bsky.app/static/embed.js" charset="utf-8"></script>
68
69I explained[^monkeypunching] that there were libraries and SDKs for many programming languages, and that the new version of OAuth used by ATProto was tricky. The main challenge is understanding the network as a distributed system -- "your" Lexicon type can be posted by anyone on the network, not just your app, or the users that sign up with you.
70
71### How do accounts and storage for ATProto apps work?
72
73Johanna had a question about how accounts and storage and apps interrelate.
74
75My simplest example conceptually is that an ATProto account functions like an Apple account: you have an identity for logging in, and it has storage included, and apps can store data in your account if you give them permission. As a developer, you know every account has storage attached.
76
77The simplified answer for how ATProto actually works is that your unique identifier in ATProto is a [[DID]], specifically a [[DID PLC]][^didweb] that is created when you create an account.
78
79
80_Here's the [DID doc for my @bmann.ca account, via atproto-browser](https://atproto-browser.vercel.app/at/bmann.ca)_
81
82It has an associated DID Doc that lists things like your human readable name aka handle -- e.g. `@yourname.bsky.social`, or my own domain like `@bmann.ca` -- and what server you have delegated hosting to. Bluesky runs a bunch of [[PDS]] that are named after mushrooms, and this account is on `morel.us-east.host.bsky.network`.[^selfhostedpds]
83
84In summary - your identifier is a unique `did:plc`, you have a human-readable domain name pointing at it, and you delegate actual account hosting for app records and file storage to a PDS of your choice.
85
86Any app prompts for your handle, it looks up your PDS, redirects there for you to authenticate via OAuth, and then the app has permission to write records and upload files to your account.
87
88## Presentation
89
90
91<iframe src="/assets/2025/atprotobeyondmicroblogging/" width="100%" height="650px">
92</iframe>
93* [Full screen presentation](/assets/2025/atprotobeyondmicroblogging/)
94* [PDF](/assets/2025/fedicon-atproto-beyond-microblogging.pdf)
95
96## Video
97
98<div style="position: relative; padding-top: 56.25%;"><iframe title="AT Protocol for Building Unique Social Apps — Boris Mann — FediCon 2025" width="100%" height="100%" src="https://spectra.video/videos/embed/1FRNBf5MZ23NGFh5knt1fh?warningTitle=0&peertubeLink=0" frameborder="0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups allow-forms" style="position: absolute; inset: 0px;"></iframe></div>
99
100[^selfhostedpds]: My [@bmannconsulting.com](https://bsky.app/profile/bmannconsulting.com) is an account on my self-hosted PDS [[BringYourOwn.Computer]] where I uploaded my Twitter archive to. Looking at the [DID Doc for the account](https://atproto-browser.vercel.app/at/bmannconsulting.com), you can see that `bringyourown.computer` is the service endpoint for atproto_pds.
101
102[^didweb]: yes, [[did web]] exists and has use cases, but I'm focusing on the common, widely used case
103
104[^monkeypunching]: Evan's talk covered the growth of Facebook apps on the social graph that grew virally and had all sorts of zombie bit monkey punch types of activity. Since I mentioned Flushes app, I was trying to make the point that these sorts of apps being built is what success looks like - you want to make it easy enough to make silly, fun things.