What if... you had one Fedi account on a generic headless #ActivityPub server that simply hosts and federates your data... and had C2S UIs for microblogging, long form writing, media editing and sharing, link aggregation, games, fitness tracking, and so on, that all used that same Fedi account. Technically, it's a similar concept as ATProto (but no relay and app view) and Solid Pods (but no RDF).

It seems possible... if we can improve the AP C2S API/protocol sufficiently.

@steve If by "sufficiently improve" you mean throwing it away and replacing with a better protocol, then yes it's possible.

@silverpill @steve

I can't wait to see what you build! Good luck.

@evan @silverpill @steve

Maybe I am way over my head, but this seems like *exactly* what I am building right now and I'm not really building anything outside of ActivityPub C2S?

I mean... Yes, my current client assumes some specific profile for OAuth and the client will need a proxy to get some data remote servers (to bypass authorized fetch, or to resolve documents from transient activities), but doesn't seem to me that anything I am doing is outside of AP's scope?

@raphael @silverpill @steve I also think that Steve's vision is realisable with ActivityPub API, although I think adding optional features like search, server push and so on makes it easier.

@raphael @silverpill @steve

Silverpill does not agree with us. I am wishing Silverpill well in their plan to rebuild with a completely different ground-up API. Silverpill is skilled and smart and very familiar with ActivityPub in great detail, so I'm sure they will come up with some interesting API architecture.

@raphael @silverpill @steve I don't intend to stop working on the ActivityPub API.

There are a lot of us collaborating through the SocialCG ActivityPub API Task Force, and I expect that collaboration to continue:

https://github.com/swicg/activitypub-api

GitHub - swicg/activitypub-api: ActivityPub API Task Force repository.

ActivityPub API Task Force repository. Contribute to swicg/activitypub-api development by creating an account on GitHub.

GitHub

@evan @raphael @steve I think a generic ActivityPub server can't be built without major changes to ActivityPub. For example, it might be necessary to make all side-effects of activities explicit.

And there is a bigger problem. A generic server without FEP-ef61 is like ATProto PDS or Nostr relay but all data is tied to a single server. This means that it is obsolete before the work has even begun.

@silverpill @evan @raphael Several generic AP server implementations have been built, so I don't know what you mean by the side-effect comment. Note that my mental model of a generic server doesn't implement any domain-specific behaviors in the server, but only side-effects specified by AP (and extended generic C2S support). There are also simpler ways to design servers so that content isn't tied to a specific server (with different tradeoffs than FEP-ef61). That's a long discussion...

@steve @evan @raphael A server can't properly process an arbitrary activity without knowing its side effects. A server that only supports a small number of activities mentioned in the ActivityPub spec is obviously not generic.

I can point to other challenges because I've been working on this problem for years, but...

Several generic AP server implementations have been built
There are also simpler ways to design servers so that content isn't tied to a specific server

Wow, for real? I suppose it's time for me to retire then.

@silverpill I think you're getting confused about ActivityPub side-effects and application logic side-effects.

I call my project FedBOX a "Generic ActivityPub server" because outside of storing ActivityPub objects and activities to a local storage and dispatching said activities to their recipients it doesn't do anything else.

However there's nothing preventing someone from forking the project and adding some other type of logic to it for specific combinations of Activities/Objects. That's the thing I'm trying to do with my GoActivityPub library: take care of the ActivityPub stuff, so you can then do your own stuff alongside it.

@steve @evan @raphael

@mariusor @steve @evan @raphael

I don't see any reason to call this a generic server if it doesn't support extensions. Just a headless server that implements AP C2S

@silverpill what are extensions exactly? Are you talking about FEPs that proscribe behaviour alongside structure, or ActivityPub extensions as allowed by JSON-LD.

The FEPs that proscribe behaviour can't ever be done in a "generic" way, and I'm betting you already know that and you're just being facetious.

However the JSON-LD dynamic structure can be reasoned about generically from an ActivityPub point of view using the points I made above: storage to disk, dispatch to recipients.

If you plug smart clients on top of that that have the specific logic you want, you're all the way there to what Steve was talking about.

@steve @evan @raphael

@mariusor @steve @evan @raphael An extension is a protocol extension. Specifically, I talked about activity types that are not mentioned in ActivityPub.

Here is a side effect of a Like activity:

The side effect of receiving this in an outbox is that the server SHOULD add the object to the actor's liked Collection.

Now imagine that you have an EmojiReact activity which server should add to object's emojiReactions collection as a side-effect.

A generic server should be able to do that.

@silverpill @mariusor @evan @raphael "you have an EmojiReact activity which server should add to object's emojiReactions collection as a side-effect."

It's a direct rather than side effect, but how is that different from Add(object=EmojiReact, target=object_emojiReactions)? A generic server could support that.

@steve By side effect I mean anything that is not directly expressed in the activity, and EmojiReact usually doesn't specify that emojiReactions collection should be updated.

Add(object=EmojiReact, target=object_emojiReactions)? A generic server could support that.

Yes, this is what I said in the beginning of this sub-thread. All side-effects should be made explicit (at least for non-standard activities).

@mariusor @evan @raphael