Frequently Asked Questions about the Authenticated Transfer Protocol (ATP).
No. ATP is a federated protocol. It's not a blockchain nor does it use a blockchain.
ActivityPub is a federated social networking technology popularized by Mastodon.
Account portability is the 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.
Other smaller differences include: a different viewpoint about how schemas should be handled, a preference for domain usernames over AP’s [email protected] email usernames, and the goal of having large scale search and discovery (rather than the hashtag style of discovery that ActivityPub favors).
ATP exchanges data and RPC commands across organizations. For the data and RPC to be useful, the software needs to correctly handle schemas created by separate teams. This is the purpose of Lexicon.
We want engineers to feel comfortable using and creating new schemas, and we want developers to enjoy the DX of the system. Lexicon helps us produce strongly typed APIs which are extremely familiar to developers and which provides a variety of runtime correctness checks (which are vital in distributed systems).
RDF is intended for extremely general cases in which the systems share very little infrastructure. It’s conceptually elegant but difficult to use, often adding a lot of syntax which devs don't understand. JSON-LD simplifies the task of consuming RDF vocabularies, but it does so by hiding the underlying concepts, not by making RDF more legible.
We looked very closely at using RDF but just didn't love the DX or the tooling it offered.
XRPC is HTTP with some added conventions.
XRPC uses Lexicon to describe HTTP calls and maps them to /xrpc/{methodId}
. For example, this API call:
await api.com.atproto.repo.listRecords({
user: 'alice.com',
collection: 'app.bsky.feed.post'
})
Maps to
GET /xrpc/com.atproto.repo.listRecords
?user=alice.com
&collection=app.bsky.feed.post
Lexicon establishes a shared method id (com.atproto.repo.listRecords
) and the expected query params, input body, and output body. By using Lexicon we get runtime checks on the inputs and outputs of the call, and can generate typed code like the API call example above.
The AT Protocol will launch soon.
Join the waitlist to try the beta before it's publicly available.