2026-07-09 21:51 UTC
Let's talk for a moment about what an actual actor model could look like in a protocol _like_ #ActivityPub. I've done variations on this thought experiment before, but I find it useful to revisit.
alice@servera wants to send a message to bob@serverb. So Alice (A) accesses her profile and pulls a reference to an outbox actor (Ref{O}). She send the message (M) to this outbox:
A -M-> O
With me so far?
The Outbox actor does Something™, it doesn't matter what, but the server that hosts the outbox actor now may do one of two things, depending on whether servera (Sa) already has a reference to an inbox actor (Ref{I}) for bob on serverb (Sb).
The first scenario is a derivation of the second, so let's go through the second.
For this scenario Sa reaches out to webfinger (or some other lookup mechanism, but let's use webfinger) and says to it "gimme the user profile for bob@serverb." Sb returns the user profile Profile{bob@serverb}.
Within Profile{bob@serverb} is a list of actor references with names. One of which is named inbox. So now Sa has Ref{I} and can execute:
Sa -M-> I
In a way, we could end here and be content.
We're not done.
This is basically identical to the current ActivityPub flow with a few notable exceptions:
1. Note that I am not talking about the _user_ as an _actor_. The user is a user. The actor is an actor. Profile{bob@serverb} is not an actor, it's a Profile of a User.
2. I formalized the addition of webfinger. I don't need to do this, and there are alternatives.
3. It could _very_ well be that the inbox reference you are handed is identical between multiple actors.
4. I am treating "The Inbox" as a singular thing, but it _doesn't have to be_. I could have a different reference for where to send Events or calendar entries, I could have a different reference for where to send direct messages versus general posts, etc. All of this could be laid out pretty easily in a single map.
5. Most critically: The "inbox" is not a dereferencable collection. It's an _actor reference_. What gets exposed to the user might be completely different than what gets sent there.
The details don't matter as much as this: the foundational unit by which we reason about the system is different.
Replies (0)
No replies.