<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Today @kopper@not-brain.d.on-t.work [shared a post][1] on the fediverse titled [*how to not regret c2s*][2], 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.]]></title><description><![CDATA[<p dir="auto">Today <a class="plugin-mentions-user plugin-mentions-a" href="/user/kopper%40not-brain.d.on-t.work" aria-label="Profile: kopper@not-brain.d.on-t.work">@<bdi>kopper@not-brain.d.on-t.work</bdi></a> <a href="https://not-brain.d.on-t.work/notes/aiw6tzexc4f0svjp" rel="nofollow ugc">shared a post</a> on the fediverse titled <a href="https://w.on-t.work/activitypub/c2s" rel="nofollow ugc"><em>how to not regret c2s</em></a>, 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.</p>
<p dir="auto">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.</p>
<p dir="auto">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.</p>
<p dir="auto">But here's what bothers me. When you map this architecture onto familiar terms, it looks roughly like this:</p>
<ul>
<li>C2S server ≈ a database (PostgreSQL, say)</li>
<li>“Client” ≈ an application server (Mastodon, Misskey)</li>
<li>“Frontend” ≈ the actual client app on your phone</li>
</ul>
<p dir="auto">That's not a new architecture. That's just the current architecture with the labels shifted. The interesting question is <em>which interface</em> gets standardized, and the author's answer is the one between the C2S server and the “client” layer—the bottom boundary.</p>
<p dir="auto">The problem is that what people actually want from C2S is to connect <em>any frontend</em> to <em>any server</em>. The portability they're after lives at the <em>top</em> 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.</p>
<p dir="auto">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.</p>
<p dir="auto">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.</p>
<p dir="auto">#fedidev #fediverse</p>
]]></description><link>https://bb.devnull.land/topic/65f79cbd-964f-4985-84f3-4c889a2a4a1c/today-@kopper@not-brain.d.on-t.work-shared-a-post-1-on-the-fediverse-titled-how-to-not-regret-c2s-2-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.</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 06:32:33 GMT</lastBuildDate><atom:link href="https://bb.devnull.land/topic/65f79cbd-964f-4985-84f3-4c889a2a4a1c.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 28 Feb 2026 09:33:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Today @kopper@not-brain.d.on-t.work [shared a post][1] on the fediverse titled [*how to not regret c2s*][2], 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. on Tue, 17 Mar 2026 08:34:07 GMT]]></title><description><![CDATA[<p><span><a href="/user/hongminhee%40hollo.social">@<span>hongminhee</span></a></span> <span><a href="/user/kopper%40not-brain.d.on-t.work">@<span>kopper</span></a></span> I'm too stupid to understand AP specifically (but I have a deep CS background).. I've always wondered why this wasn't the model by default? Using UUIDv7 you could mark every in order of timetime.</p><p>I think you could push the separation of intents further. Make a "AP post" hold all of the metadata, but make the actual text an attachment like an image, video, audio etc.. then you could just store all of the text in blobs in storage to be easily replicated/mirrored and deleted on bulk... "even as ciphertext" requiring the original toot to fetch and decrypt.</p><p>also. I think the idea of attaching a user to an instance (domain) was always a mistake. A user should be whoever owns the key material on a frontend (endpoint), and it should be able to ask any "client in your meaning" to be it's new primary location (they can be AP broadcast... user with public key X is now defaulting to client Y)... </p><p>BUT all of this is fan fiction, nobody has even solved the storage problem. We're still defaulting to 10,000 S3 buckets.</p><p>Turning media URIs from dedicated single URLS to magnet:&lt;hashes&gt;  that can be pulled down from multiple locations incase the original dies feels like REALLLLLY low hanging fruit that nobody has touched (and It kind of annoys me nobody has).</p>]]></description><link>https://bb.devnull.land/post/https://aus.social/users/shlee/statuses/116243591811938613</link><guid isPermaLink="true">https://bb.devnull.land/post/https://aus.social/users/shlee/statuses/116243591811938613</guid><dc:creator><![CDATA[shlee@aus.social]]></dc:creator><pubDate>Tue, 17 Mar 2026 08:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to Today @kopper@not-brain.d.on-t.work [shared a post][1] on the fediverse titled [*how to not regret c2s*][2], 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. on Tue, 10 Mar 2026 18:35:46 GMT]]></title><description><![CDATA[<p dir="auto">yes, this should just be a cursor with a pagination direction. However, the Mastodon API is proprietary and specific to their needs so they can do whatever they want and whatever makes sense for their application.</p>
<p dir="auto">I believe ActivityPub API just gives you URLs to follow for prev/next/first/last.</p>
]]></description><link>https://bb.devnull.land/post/https://activitypub.space/post/1513</link><guid isPermaLink="true">https://bb.devnull.land/post/https://activitypub.space/post/1513</guid><dc:creator><![CDATA[thisismissem@activitypub.space]]></dc:creator><pubDate>Tue, 10 Mar 2026 18:35:46 GMT</pubDate></item><item><title><![CDATA[Reply to Today @kopper@not-brain.d.on-t.work [shared a post][1] on the fediverse titled [*how to not regret c2s*][2], 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. on Tue, 10 Mar 2026 02:11:13 GMT]]></title><description><![CDATA[<p dir="auto">&gt; <a href="https://activitypub.space/user/kopper%40not-brain.d.on-t.work" rel="nofollow ugc">@kopper@not-brain.d.on-t.work</a> said:<br />
&gt;<br />
&gt; (e.g. it requires all IDs to be sortable lexicographically, despite having next/prev cursors),</p>
<p dir="auto">That's actually kinda a database performance thing: by having the IDs sortable by time, you can efficiently shard the database and maintain indexes. Same reason to prefer UUID v7 over v4, as v4 in databases can lead to hotspots</p>
]]></description><link>https://bb.devnull.land/post/https://activitypub.space/post/1497</link><guid isPermaLink="true">https://bb.devnull.land/post/https://activitypub.space/post/1497</guid><dc:creator><![CDATA[thisismissem@activitypub.space]]></dc:creator><pubDate>Tue, 10 Mar 2026 02:11:13 GMT</pubDate></item><item><title><![CDATA[Reply to Today @kopper@not-brain.d.on-t.work [shared a post][1] on the fediverse titled [*how to not regret c2s*][2], 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. on Tue, 10 Mar 2026 02:09:11 GMT]]></title><description><![CDATA[<p dir="auto">&gt; <a href="https://activitypub.space/user/hongminhee%40hollo.social" rel="nofollow ugc">@hongminhee@hollo.social</a> said<br />
&gt;<br />
&gt; 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.</p>
<p dir="auto">This is exactly what I say in the talk that I still need to record, and why I was working on that ActivityPDS concept last september.</p>
]]></description><link>https://bb.devnull.land/post/https://activitypub.space/post/1496</link><guid isPermaLink="true">https://bb.devnull.land/post/https://activitypub.space/post/1496</guid><dc:creator><![CDATA[thisismissem@activitypub.space]]></dc:creator><pubDate>Tue, 10 Mar 2026 02:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to Today @kopper@not-brain.d.on-t.work [shared a post][1] on the fediverse titled [*how to not regret c2s*][2], 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. on Sat, 28 Feb 2026 10:12:02 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/kopper%40not-brain.d.on-t.work" aria-label="Profile: kopper@not-brain.d.on-t.work">@<bdi>kopper@not-brain.d.on-t.work</bdi></a> The composability angle is something I hadn't fully appreciated before—a standalone reply tree indexer that any client can query via <code>proxyUrl</code> is a genuinely interesting pattern, and it's not something you'd get from just standardizing a monolithic client API.</p>
<p dir="auto">On <code>did:key</code>, you're right that handing over a private key for autonomous server actions is a real problem, and the non-rotatability makes it worse. Though I'd frame that as a limitation of <code>did:key</code> specifically rather than portable identity as a concept—FEP-ef61 mentions other DID methods as candidates, and the broader space of approaches to server-independent identity isn't exhausted by any single proposal.</p>
<p dir="auto">But agreed that they're orthogonal and can coexist.</p>
]]></description><link>https://bb.devnull.land/post/https://hollo.social/@hongminhee/019ca3bb-d6dc-7b2c-b2b1-bee4bf055103</link><guid isPermaLink="true">https://bb.devnull.land/post/https://hollo.social/@hongminhee/019ca3bb-d6dc-7b2c-b2b1-bee4bf055103</guid><dc:creator><![CDATA[hongminhee@hollo.social]]></dc:creator><pubDate>Sat, 28 Feb 2026 10:12:02 GMT</pubDate></item><item><title><![CDATA[Reply to Today @kopper@not-brain.d.on-t.work [shared a post][1] on the fediverse titled [*how to not regret c2s*][2], 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. on Sat, 28 Feb 2026 10:02:23 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/kopper%40not-brain.d.on-t.work" aria-label="Profile: kopper@not-brain.d.on-t.work">@<bdi>kopper@not-brain.d.on-t.work</bdi></a> That's a fair point about the Mastodon API—the lexicographic ID requirement and the pagination assumptions are good concrete examples of how standardization quietly closes off design space in ways nobody intended.</p>
<p dir="auto">I think this exchange has been useful for me in clarifying that we're probably starting from different premises about what C2S is for. If frontend portability isn't the goal, then the case against standardizing the client API makes a lot of sense. I just can't quite let go of the feeling that portability at that layer is what most people imagine when they hear “C2S”—though I'll admit the spec itself is ambiguous enough that neither of us is obviously wrong.</p>
<p dir="auto">Anyway, thanks for taking the time to respond. Lots to think about.</p>
]]></description><link>https://bb.devnull.land/post/https://hollo.social/@hongminhee/019ca3b3-00ba-7111-825e-1a0be7ad1bd7</link><guid isPermaLink="true">https://bb.devnull.land/post/https://hollo.social/@hongminhee/019ca3b3-00ba-7111-825e-1a0be7ad1bd7</guid><dc:creator><![CDATA[hongminhee@hollo.social]]></dc:creator><pubDate>Sat, 28 Feb 2026 10:02:23 GMT</pubDate></item><item><title><![CDATA[Reply to Today @kopper@not-brain.d.on-t.work [shared a post][1] on the fediverse titled [*how to not regret c2s*][2], 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. on Sat, 28 Feb 2026 09:58:16 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/kopper%40not-brain.d.on-t.work" aria-label="Profile: kopper@not-brain.d.on-t.work">@<bdi>kopper@not-brain.d.on-t.work</bdi></a> Thanks for engaging with this—it helps me think it through more carefully.</p>
<p dir="auto">Your point about making the split explicit at the protocol level is well taken. I can see how that matters especially for extensions: a lot of FEPs end up adding actor-global state for things that are really client concerns, and having a clearer boundary in the protocol might discourage that drift. That's a concrete benefit I hadn't fully appreciated.</p>
<p dir="auto">On the interoperability question, I think I see where we differ. You're reframing the core promise of C2S as “reuse the same account across different interfaces,” whereas I'd been reading it as “connect any frontend to any server.” Those lead to quite different designs. I'm not sure which framing is more faithful to what C2S originally intended—maybe neither of us is wrong, and the spec was simply underspecified on this point.</p>
<p dir="auto">That said, if account portability is the goal, I wonder whether C2S is really the right tool for it. <a href="https://w3id.org/fep/ef61" rel="nofollow ugc">FEP-ef61</a> and the Nomadic Identity approach both tackle that problem more directly, by making identifiers server-independent at the identity layer rather than standardizing the client–server protocol. It feels like a different layer of the problem altogether, and I'm not sure C2S can carry that weight on its own even with your proposed architecture.</p>
<p dir="auto">The point about AP objects remaining AP objects through hydration is interesting though. I can see how that keeps the pieces composable even without a standardized client API. I'll have to think about that more.</p>
]]></description><link>https://bb.devnull.land/post/https://hollo.social/@hongminhee/019ca3af-335b-734c-9e07-dc8197bb2e0e</link><guid isPermaLink="true">https://bb.devnull.land/post/https://hollo.social/@hongminhee/019ca3af-335b-734c-9e07-dc8197bb2e0e</guid><dc:creator><![CDATA[hongminhee@hollo.social]]></dc:creator><pubDate>Sat, 28 Feb 2026 09:58:16 GMT</pubDate></item></channel></rss>