top | item 44965233

Introduction to AT Protocol

197 points| psionides | 6 months ago |mackuba.eu

113 comments

order

sedatk|6 months ago

Here is an excerpt from the offical docs for the curious:

"Why not use ActivityPub?

ActivityPub is a federated social networking technology popularized by Mastodon.

Account portability is a major reason why we chose to build a separate protocol. We consider portability to be crucial because it protects users from sudden bans, server shutdowns, and policy disagreements. Our solution for portability requires both signed data repositories and DIDs, neither of which are easy to retrofit into ActivityPub. The migration tools for ActivityPub are comparatively limited; they require the original server to provide a redirect and cannot migrate the user's previous data.

Another major reason is scalability. ActivityPub depends heavily on delivering messages between a wide network of small-to-medium sized nodes, which can cause individual nodes to be flooded with traffic and generally struggles to provide global views of activity. The AT Protocol uses aggregating applications to merge activity from the users' hosts, reducing the overall traffic and dramatically reducing the load on individual hosts.

Other smaller differences include: a different viewpoint about how schemas should be handled, a preference for domain usernames over AP's double-@ email usernames, and the goal of having large scale search and algorithmic feeds."

verdverm|6 months ago

If you are interested in building on ATProtocol, one of the best places to start is the Discord (until we have an atproto native alt @blebbit.app)

https://discord.atprotocol.dev/

Of course the spec is good too, very easy read

https://atproto.com

https://docs.bsky.app

namrog84|6 months ago

When discord alternative?

tomrod|6 months ago

What sorts of things can be built on the protocol?

beepbooptheory|6 months ago

Thats such a bummer, I was on the matrix dev chat for a while and it was good and helpful. I wonder why they changed it from that?

xphos|6 months ago

Here I was thinking I'd see old AT commands for controlling radios. Learned something new

sitzkrieg|6 months ago

theyre not old and still used in many many cell modems :-)

dunham|6 months ago

I believe that's still used in phones for communication between the computer and the cell phone hardware.

thesuperbigfrog|6 months ago

ATDT <My Favorite BBS>

. . .

ATH

slyrus|6 months ago

Same. ATS11=43 was magic back in the day.

dom96|6 months ago

ATProto is a lot of fun to work with, but of course by no means perfect. The biggest challenge right now is dealing with private data, I hope they can figure out a way to support it soon.

verdverm|6 months ago

see my comment in another thread, things are happening!

chrismorgan|6 months ago

> unicode scalars, which most languages index strings in

Very few do. Of moderately popular languages, Python is the only one I can think of. Well, Python strings are actually sequences of code points rather than scalars, which is a huge mistake, but provided your strings came from valid Unicode that doesn’t matter.

Languages like Rust and Swift make it fairly easy to access your string by UTF-8 or by scalar.

Languages like Java and JavaScript index by UTF-16 code unit and make anything else at least moderately painful.

> This is somewhat of an unfortunate tech debt thing as I understand, and it was made this way mostly because of JavaScript, which doesn’t work with UTF-8 natively. But this means you need to be extra careful with the indexes in most languages.

I’m confused here. You established indexing is by UTF-8 code unit, then said it’s because of JavaScript which… doesn’t do UTF-8 so well? If it were indexed by UTF-16 code unit, I’d agree, that’s bad tech debt; but that’s not the case here.

Bluesky made the decision to go all in on UTF-8 here <https://docs.bsky.app/docs/advanced-guides/post-richtext#tex...>—after all, the strings are being stored and transferred in UTF-8, and UTF-8 is increasingly the tool of choice, and UTF-16 is increasingly reviled, almost nothing new has chosen it for twenty years, and nothing major has chosen it for ten years, it’s all strictly legacy. Hugely popular legacy, sure, but legacy.

psionides|6 months ago

Hmm… Yeah, I guess each language does it kinda differently. At least Ruby also does it similarly like Python.

> I’m confused here. You established indexing is by UTF-8 code unit, then said it’s because of JavaScript which… doesn’t do UTF-8 so well?

It's not that UTF-8 is because of JavaScript, it's that indexing by bytes instead of UTF-8 code units is because of JavaScript. To use UTF-8 in JavaScript, you can use TextEncoder/TextDecoder, which return the string as a Uint8Array, which is indexed by bytes.

So if you have a string "Cześć, #Bluesky!" and you want to mark the "#Bluesky" part with a hashtag link facet, the index range is 9...17 (bytes), and not 7...15 (scalars).

trollied|6 months ago

+++ATH0

Those old enough will know :)

dd_xplore|6 months ago

I bought a 5G modem made by waveshare, I had lot of fun tinkering that device with AT commands.

esseph|6 months ago

Thinking about changing my ring tone now... ;)

tetrisgm|6 months ago

Been pondering for my team to use it for our product’s timeline. I don’t particularly want our user base to be Bluesky, but it’d be good to have support for the protocol, and control over the system.

Have there been any products go embraced this? Or is it like ActivityPub where basically the whole thing is Mastodon.

gargron|6 months ago

ActivityPub is embraced by:

  - Threads  
  - Flipboard  
  - WordPress  
  - micro.blog  
  - NodeBB  
  - PeerTube  
  - Pixelfed  
  - GoToSocial  
  - Akkoma  
  - ...and countless smaller projects
It is by no means just Mastodon.

ethan_smith|6 months ago

Beyond Bluesky, there's a growing ecosystem including Pebble (a self-hosted PDS), Skychat (messaging), Skeet (app framework), Graysky (mobile client), and several specialized feeds/algorithms - unlike ActivityPub, ATProto's architecture allows for more diverse application types while maintaining interoperability.

psionides|6 months ago

For now mostly just small things that the Bluesky dev/user community is playing with, but check out e.g. Tangled which is meant to be a GitHub alternative on ATProto: https://tangled.sh

troyvit|6 months ago

Similarly our news site is considering a live-blog feature and I'm wondering if AT Proto would be a fun way to do it.

sitzkrieg|6 months ago

activitypub is mostly used in the fediverse. mastodon is one of many clients and servers, and one of the worst.

grishka|6 months ago

One nitpick about ActivityPub actor identity — the username doesn't have to be part of your ID (the URL that points to the JSON object representing your actor). It is in Mastodon, but some other software (Smithereen that I work on, and also Misskey) uses opaque identifiers derived from database row IDs. This allows for cleanly changeable usernames since you can just update your `preferredUsername` and `url` fields.

fsmv|6 months ago

It still doesn't solve the account migration issue though right? If you move to a different instance your old instance still has to redirect.

How do people find you on mastodon if your instance isn't in your username anyway?

tomgag|6 months ago

I didn't write this for the HN crowd, but here we go anyway: https://gagliardoni.net/#20250818_battle_of_socials

Happy to correct any factual inaccuracies.

ltjbukem|6 months ago

I think that your description of ATproto relays is a conflation of the role of an AppView (or backend) in ATproto and a Nostr relay. Relays (by default) are not designed to be a permanent archive of content, and are really meant as content streams for backends to ingest and index appropriately. The storage cost is also overestimated, as people have begun to host third-party variants of the Bluesky AppView (which is partially open-source due to its dependence on internal code for some non-essential to microblogging functionality): https://whtwnd.com/futur.blue/3ls7sbvpsqc2w

The note at the end about Bluesky being able to censor, verify and ban users from the protocol is also largely incorrect, with some asterisks as is for a complex system. The Turkish accounts that were censored were hidden from the platform in Turkey via the app's labeler system, which allows for "composable moderation". You can use this system to implement geoblocking in Bluesky clients based on your IP address when you open the app, which is what they did to ban those accounts from being seen in Turkey. The application of labelers (outside of Bluesky's main moderation service which the Bluesky-hosted AppView follows) is client-side, and any client that doesn't want to respect the default geoblocking behaviour (or implement mod labels at all) can just ignore it.

The Politico columnist that was banned from Bluesky has their account taken down from the whole network because their account was hosted on a Bluesky PDS, which could be (somewhat because, again, the default AppView follows a default labeler for displaying content through the AppView's API) bypassed by moving their account to another PDS that isn't operated by Bluesky. If your account was banned from Bluesky while also being on a non-Bluesky PDS, you would still have access to the ecosystem (and a half-working version of Bluesky that is basically a shadowban due to the default client and AppView conflicting with the labeler's takedown action).

Speaking of PDSes, they also do quite a bit more than just store user data. As an user's identity is dependent on a PDS to exist as a proper account, most user actions have to be routed through it to allow applications to store their data on-protocol and to authenticate the user.

The verification system is implemented through a record type (or "Lexicon") that is stored on an account that basically confirms that the record owner has verified the target. The system is also odd in that there are two types of verified accounts, "trusted verifiers" (think Twitter's business verification system) and regular verified accounts. Trusted verifiers are chosen by the client and can verify their own set of accounts, giving them the regular checkmark. Clients that haven't implemented support for the checkmarks or allow users to choose their own trusted verifiers can basically see whatever checkmarks they want, or just disable the system altogether (which is possible in the default client).

How Bluesky uses DIDs are... complicated. ATproto supports two DID methods for accounts, did:web and did:plc. Web DIDs are used mainly for services on the network, but can also be used for regular accounts. PLC is a more complicated system, which becomes quite obvious when you find out the original acronym meaning was "placeholder". PLC is (in regards to the general protocol) not a decentralized system, as its current iteration is a DID document pastebin with authentication and version history. I do think that the method's current centralized status can be mitigated somewhat (synchronization between various directories, then having a consensus system for establishing the validity of the documents' current states), but the system could always be replaced at any point to either incorporate new features or to choose a new model for how documents are publicized.

Sorry for the long read but as you see I've wasted way too much time into reading through developer posts and documentation, had to unload it somehow.

nate_nowack|6 months ago

would love fb marketplace disruptor on atproto

omni_rizzler|6 months ago

there is a marketplace in nostr if u interested

mdaniel|6 months ago

Isn't the problem the network effect, and not the protocol whatsoever?

Cyberdog|6 months ago

Retvrn to Craigslist.

don_searchcraft|6 months ago

Would love for more platforms to embrace the AT protocol.

verdverm|6 months ago

I'm working with some people on permissioned spaces for atproto (spec and pds changes). This will unlock a ton of use-cases not possible today

Working Group is forming this fall, we'll be at IETF, Montreal in Nov

Also building one such platform that needs permissioned spaces, if you want to follow along

https://github.com/blebbit/atproto

https://bsky.app/profile/blebbit.app

Off the top of my head, there are also WGs for E2EE messaging, web monetization, and geo.

Lot's of infra getting built this year

acheron|6 months ago

In this house, we believe “AT protocol” refers to Hayes modem commands.

ATDT2024561414

imoverclocked|6 months ago

A slightly more modern usage for cell modems that still implement AT commands in 2025:

AT+QSINR?

AT+QRSRQ

AT+QRSRP

AT+QNWINFO

-- getting current status/band of a link

JdeBP|6 months ago

I see the error of forgetting the long distance prefix and dialling some poor innocent to squeal tones in xyr ear during Zone Mail Hour is alive and well. (-:

Angostura|6 months ago

+++ ATH0

mrheosuper|6 months ago

I was expecting the old AT protocol i use to communicate with Radio module

avidphantasm|6 months ago

Was hoping that BlueSky somehow used the AT command set.

koolala|6 months ago

Would be great to have a new modern alternative to the E-mail standard that is usable for both public and private messaging.

gargron|6 months ago

ActivityPub can be used for both public and private messaging, though I don't think the e-mail standard needs to be retired anytime soon.

verdverm|6 months ago

We might be able to do this with permissioned spaces. There are instances or use-cases where you want an outside entity to make changes to a user's repo

- email / inbox [or @mail since it is @atproto :]

- unsubscribe from email

- notifications / rsvp

The cool thing is that we could use the stackable moderation infra for dealing with bad actors

https://bsky.social/about/blog/03-12-2024-stackable-moderati...

riffic|6 months ago

there shouldn't be a rush to replace the things that have stood the test of time. Lindy's law would suggest a protocol that's been around 40+ years is fundamental and won't be going anywhere anytime soon.

jazzyjackson|6 months ago

email has come a long way with SPF, DKIM, and DMARC, and its cool that anyone can purchase a slice of the global namespace that is transferable between providers, but AFAIK the biggest road block to using email in a distributed self sovereign way is reputation and getting your messages delivered to google and outlook users partially because of the nonstop spam.

Do we have any new tools to prevent spam in a post-email world? Or can we just use the current email structure with some better GUI around PGP and Hashcash and force anyone who wants to send a message to burn 10 cents worth of electricity ?

I'm curious what you're looking for in an email standard ?