Today @kopper shared a post on the fediverse titled how to not regret c2s, and I found it genuinely interesting to read, even if I'm not sure its proposed architecture actually solves what it sets out to solve.

The author's frustration with naïve #C2S implementations is well-founded. Slapping an #ActivityPub facade onto an existing Mastodon-like server and calling it C2S doesn't buy you much—you end up with the rigidity of a bespoke API without any of the interoperability C2S is supposed to offer. The “JSON-LD flavored Mastodon API” framing is apt.

The proposed solution is to split responsibility more aggressively: the C2S server should be nearly stateless and dumb, storing ActivityPub objects without interpreting them, while a separate “client” layer handles indexing, timelines, moderation, and exposes its own API to the frontend running on the user's device. It's a clean separation of concerns on paper.

But here's what bothers me. When you map this architecture onto familiar terms, it looks roughly like this:

  • C2S server ≈ a database (PostgreSQL, say)
  • “Client” ≈ an application server (Mastodon, Misskey)
  • “Frontend” ≈ the actual client app on your phone

That's not a new architecture. That's just the current architecture with the labels shifted. The interesting question is which interface gets standardized, and the author's answer is the one between the C2S server and the “client” layer—the bottom boundary.

The problem is that what people actually want from C2S is to connect any frontend to any server. The portability they're after lives at the top boundary, between the frontend and whatever is behind it. But the author explicitly argues against standardizing that layer: “we don't really need a standardized api,” they write, leaving each client free to expose whatever API it likes.

Which means frontends remain locked to specific clients, just as Mastodon apps are locked to the Mastodon API today. The interoperability promise of C2S—log in to any server with any app—isn't actually delivered. It's been pushed one layer down, out of reach of the end user.

There's real value in the post's thinking about data hosting vs. interpretation, and about the security implications of servers that understand too much. But as an answer to the question C2S is supposed to answer, I'm not convinced.

#fedidev #fediverse

@hongminhee > Slapping an #ActivityPub facade onto an existing Mastodon-like server and calling it C2S doesn't buy you much ...

The benefit of having a C2S adapter for Mastodon is that it provides a large user pool that could motivate developers to create C2S UIs rather than only supporting the Mastodon API. Having more server-independent client implementations may motivate devs to build general C2S servers with advanced features and eventually disrupt the Mastodon dominance in the Fedi.

@hongminhee A general-purpose C2S API doesn't mean the user interfaces themselves are general-purpose. One could still build a microblogging UI, a geosocial app, a image sharing app, a chess game app, or whatever, but these would be able to interact with the same AP C2S server for account management, data storage and federation. And they could all use the same account rather than the account-per-service/app model we have now.

@steve @hongminhee

I mentioned this thread in the #ActivityPub #C2S tracking issue. I think there's a fundamental risk that C2S is going sideways because of misconceptions between devs on where things are / should be headed.

https://codeberg.org/fediverse/delightful-fediverse-experience/issues/130#issuecomment-11737818

Which ActivityPub applications support Client-to-Server (C2S)?

In preparation of updating and reorganising of this list I would like to collect current FOSS projects that offer an implementation of ActivityPub C2S. In this [current fedi discussion](https://ausglam.space/@hugh/1144176911799110820) a bunch of projects were already named: - [ActivityPods](http...

Codeberg.org