My first steps exploring ATproto

Exploring what's beyond Bluesky

After Twitter has gone down the hill very quickly, I decided to try Mastodon and also signed up for an invite to Bluesky.

Mastodon felt a bit shaky and clunky and it was hard to rebuild my network and have conversations or discover interesting things. This is likely because I wasn't very good at it, but it just didn't quite feel homely. At the time, I chalked it up to all of us still figuring out where to go and how to reconnect with each other - I also used lists and the tools to find those who've moved from old Twitter to Mastodon but still - it didn't feel like "my new place". On top of that, sometimes I couldn't figure out how things worked. I also tried peertube and pixelfed and found them to feel quite slow and deserted, compared to the traditional, centralised platforms. Again, that's just my personal feeling and I guess other people have different experiences and that's great - but this didn't (and still doesn't) feel like it was for me.

When I got my Bluesky invite, this was different. I quickly found people I used to follow in the past, I also found lots of new interesting people and accounts and the timeline felt lively, conversations and chats happened quite frequently and it all just seems to work like in the olden days. I liked it here.

To be honest: I didn't really think about how its technology was different from Mastodon; I didn't really think about its decentralisation at all. I somewhat accepted that this is where I'd now go for social networking, seeing what peers are up to and what interesting and funny things happened in the world and it might not be as federated or distributed as advertised and if it all goes the way of the blue bird site, that's a risk I'll have to take. Why? Because this connected me with people. It felt human here, there was life here.

But at some point I started wondering...

What exactly is the ATproto ecosystem?

As I wondered, how this stuff actually worked behind the scenes, I started to dig into ATProto. Being an impatient dude, I hit their website and clicked on "Quickstart" which, frighteningly, threw me into a "Hello World" development guide to building an application that uses ATproto. Not what I was here for. As a developer I could be interested, yeah, sure, maybe in the future, who knows...

At this point, however, I wanted to know what the heck this all was. I wanted to understand the ecosystem, not just the technical details.

I can't remember how or who exactly made me aware of cred.blue but I do remember getting an alt-text score for my image posts and that was nice. But it also gives you more - like this sentence that stuck with me:

"When it comes to the broader ATProto ecosystem, this identity has not yet explored what's out there."

Huh! So, what is out there?

I googled for "ATproto ecosystem" and found a deprecated Github repository listing a bunch of projects and a link to the community projects showcase that superseded it. But again, the first thing I saw where SDKs to build things with ATproto in a bunch of different programming languages. Sigh.

A few days later I came across a project on my Bluesky feed: at-me. It lets you explore your data storage on ATproto. Not very exciting as I only had stuff in bluesky, but I started to get a feeling for how things were organised and stored in the ATmosphere. I like ATmosphere as a more human-friendly way to describe things that use ATproto as their basis. "Doing things in the ATmosphere" somehow sounds right.

The website also listed a few accounts to try and take a look what they had going on in the ATmosphere - and there I found interesting things!

Among others, people had data for Pinksky, something akin to Instagram. Tangled, something like a Github on ATproto, Leaflet (where you're reading these words on now) and some others...

And then it clicked. I finally understood what this whole ATproto things was about.

Entering my self-hosted era

It clicked, because suddenly I connected this with a tech I encountered years earlier: unhosted and its remoteStorage approach.

I've liked the idea, but found implementations to be a bit clunky, unfortunately.

The general idea to have a flexible way to host my data somwhere and have applications get access to said data to act upon my behalf (say, showing all my photos to people who follow me) as long as I'm granting them this access.

Taking twitter and bluesky as an example: I created an account with Twitter and all my tweets, follows, lists, messages, replies, etc. are on their servers. They can kick me out at any time. Yes, sure, I can download my data but then what? Put it on my web server as static HTML or JSON? And then what?

In contrast, I created an account on Bluesky, which also hosts all my data - but here's the twist: I can move my data to another server and others on Bluesky wouldn't even know.

If Bluesky kicks me out, my data still is there and people who want to continue to interact with it, still can. Maybe not on Bluesky, but the data isn't gone and hasn't changed, so another app that uses this data can still work with it.

For that, you need a PDS (personal data store) that holds your data and serves as your central identity. This can be Bluesky's PDS, some other provider or your own server.

That's the route I took. I set up my own PDS and created an experimental account to see how that's all going.

I'm happy to report: It's going great!

I'm now using leaflet to put posts and stuff into my PDS where you're reading it right now. I'm using Pinksky to see image posts on Bluesky from people I follow. I'm planning to track books I read on bookhive, who knows, maybe I will livestream a bit on stream.place in the near future, too!

Now it all made sense to me: I'm storing data somewhere I trust and I can migrate my data somewhat seamlessly between these places while my identity is kept under a global identifier, called my DID.

In my data store I can have records and blobs (like images, videos, etc.) and various services and apps (AppViews in ATproto lingo) can use my storage to store and interact with my data. There might be Relays, intermediate servers, that aggregate data from multiple PDSes for better scaling when used with AppViews, but they're basically optional.

It just makes sense - in a world where I don't want to trust random corporations with holding power over my data and my connections, I want to balance ease of use and interoperability with freedom as to where my data sits. ATproto gives me this.

My first idea for the ATmosphere

Remember when I was whining about how developer-centric the ATproto quickstart was? Well, turns out I have an idea what data I want on my PDS and I haven't seen a service that does that yet...

My photos and photo albums.

Sure, Bluesky / Pinksky has posts containing images, but I want to give each image a title and maybe a bit of a description, who knows, maybe even EXIF metadata? And I wanna organise them into albums to share with others.

What's next?

Well, I'm setting sails to a new adventure - I'm planning on building exactly that: A service where you can upload and group photos into albums and share them with others. Maybe even discover albums from other photographers on the same service. And all your albums and photos will be living in your own PDS, so if you don't like this service anymore, you can just move to somewhere else.

I'll report from this journey and I've got the first stepping stones fleshed out already, so stay tuned for more!