Skip to content

Piero Bosio Social Web Site Personale Logo Fediverso

Social Forum federato con il resto del mondo. Non contano le istanze, contano le persone

Recently, there was a discussion about generic #ActivityPub servers.

Moved Technical Discussion
5 3 0
  • Recently, there was a discussion about generic #ActivityPub servers. Several people claimed that they were working on one, but it turned out that their "generic" servers only support activities defined in the ActivityPub specification. Such a server shouldn't be called generic. It is not difficult to build, neither it is an interesting concept because competing protocols (e.g. Nostr) already offer much more.

    I've been writing a #FEP that describes how to build a real generic server. It is not finished yet, but I feel like now is a good time to publish it:

    FEP-fc48: Generic ActivityPub server

    This kind of server:

    - Can process any object type, and can process non-standard activities like EmojiReact.
    - Compatible with FEP-ae97 clients.
    - Does not require JSON-LD.

    I attempted to implement it when I was researching security properties of FEP-ae97 API: https://codeberg.org/silverpill/fep-ae97-server. Back then I didn't know what to do with side effects, but now I think that we can simply force clients to specify them.

    Special thanks to @mariusor and @trwnh for their input.

    #C2S

  • Recently, there was a discussion about generic #ActivityPub servers. Several people claimed that they were working on one, but it turned out that their "generic" servers only support activities defined in the ActivityPub specification. Such a server shouldn't be called generic. It is not difficult to build, neither it is an interesting concept because competing protocols (e.g. Nostr) already offer much more.

    I've been writing a #FEP that describes how to build a real generic server. It is not finished yet, but I feel like now is a good time to publish it:

    FEP-fc48: Generic ActivityPub server

    This kind of server:

    - Can process any object type, and can process non-standard activities like EmojiReact.
    - Compatible with FEP-ae97 clients.
    - Does not require JSON-LD.

    I attempted to implement it when I was researching security properties of FEP-ae97 API: https://codeberg.org/silverpill/fep-ae97-server. Back then I didn't know what to do with side effects, but now I think that we can simply force clients to specify them.

    Special thanks to @mariusor and @trwnh for their input.

    #C2S

    @silverpill lol, based on the "claims" at the begining, why do I feel like the "thanks" at the end should be in quotations?

    Also I take umbrage with calling what I've been doing for the past 8 years as "being not difficult to build nor an interesting concept". I feel like you, and other developers having the benefit of dynamically typed programming languages, underestimate how that can be worked into robust APIs when you're limited by less versatile stacks.

  • Recently, there was a discussion about generic #ActivityPub servers. Several people claimed that they were working on one, but it turned out that their "generic" servers only support activities defined in the ActivityPub specification. Such a server shouldn't be called generic. It is not difficult to build, neither it is an interesting concept because competing protocols (e.g. Nostr) already offer much more.

    I've been writing a #FEP that describes how to build a real generic server. It is not finished yet, but I feel like now is a good time to publish it:

    FEP-fc48: Generic ActivityPub server

    This kind of server:

    - Can process any object type, and can process non-standard activities like EmojiReact.
    - Compatible with FEP-ae97 clients.
    - Does not require JSON-LD.

    I attempted to implement it when I was researching security properties of FEP-ae97 API: https://codeberg.org/silverpill/fep-ae97-server. Back then I didn't know what to do with side effects, but now I think that we can simply force clients to specify them.

    Special thanks to @mariusor and @trwnh for their input.

    #C2S

    @silverpill@mitra.social I find it curious that this needs to be spelled out in an FEP.

    Isn't a generic AP server one that ingests anything and shoves it into the outbox... like a mail transfer agent?

    ... then delivers it dutifully?

    I mean, sure, you can do stuff in between, like spam detection, blocklists, etc etc etc...

    My quick read through of the FEP (and it was quick, because it was a short FEP :stuck_out_tongue:) seems to confirm this.

  • System moved this topic from General Discussion
  • @julian It looks simple on the surface, but in reality it is much more complicated than a non-generic server. In addition to activity transfer, generic server needs to maintain collections. First of all, a followers collection, which is often used as a delivery target. Then likes, shares etc. It needs to enforce permissions, to prevent actors on the same server from deleting each other posts.

    This is doable if you only care about activities defined in ActivityPub. But then you want to introduce context collection. And then 50 other extensions. How to do that without special-casing every one of them?

    This is where duck typing (FEP-2277) and unified security model (FEP-fe34) become really handy. No matter what the client sends, you can figure out what it is (an object, an actor, or a collection), and enforce permissions.

  • > The thanks was for your input with regards to collection management.

    @silverpill of course, sorry for the misunderstanding. Doubly so, for forgetting Mitra is Rust, I remembered it to be Python. :D

    And yes, the difficulty is indeed in massaging JSON-LD documents into strongly typed data that are meaningful for library consumers. However I've not despaired yet... there's light at the end of that boring tunnel. :P


Gli ultimi otto messaggi ricevuti dalla Federazione
  • > The thanks was for your input with regards to collection management.

    @silverpill of course, sorry for the misunderstanding. Doubly so, for forgetting Mitra is Rust, I remembered it to be Python. :D

    And yes, the difficulty is indeed in massaging JSON-LD documents into strongly typed data that are meaningful for library consumers. However I've not despaired yet... there's light at the end of that boring tunnel. :P

    read more

  • @julian It looks simple on the surface, but in reality it is much more complicated than a non-generic server. In addition to activity transfer, generic server needs to maintain collections. First of all, a followers collection, which is often used as a delivery target. Then likes, shares etc. It needs to enforce permissions, to prevent actors on the same server from deleting each other posts.

    This is doable if you only care about activities defined in ActivityPub. But then you want to introduce context collection. And then 50 other extensions. How to do that without special-casing every one of them?

    This is where duck typing (FEP-2277) and unified security model (FEP-fe34) become really handy. No matter what the client sends, you can figure out what it is (an object, an actor, or a collection), and enforce permissions.

    read more

  • @silverpill@mitra.social I find it curious that this needs to be spelled out in an FEP.

    Isn't a generic AP server one that ingests anything and shoves it into the outbox... like a mail transfer agent?

    ... then delivers it dutifully?

    I mean, sure, you can do stuff in between, like spam detection, blocklists, etc etc etc...

    My quick read through of the FEP (and it was quick, because it was a short FEP :stuck_out_tongue:) seems to confirm this.

    read more

  • @silverpill lol, based on the "claims" at the begining, why do I feel like the "thanks" at the end should be in quotations?

    Also I take umbrage with calling what I've been doing for the past 8 years as "being not difficult to build nor an interesting concept". I feel like you, and other developers having the benefit of dynamically typed programming languages, underestimate how that can be worked into robust APIs when you're limited by less versatile stacks.

    read more

  • Recently, there was a discussion about generic #ActivityPub servers. Several people claimed that they were working on one, but it turned out that their "generic" servers only support activities defined in the ActivityPub specification. Such a server shouldn't be called generic. It is not difficult to build, neither it is an interesting concept because competing protocols (e.g. Nostr) already offer much more.

    I've been writing a #FEP that describes how to build a real generic server. It is not finished yet, but I feel like now is a good time to publish it:

    FEP-fc48: Generic ActivityPub server

    This kind of server:

    - Can process any object type, and can process non-standard activities like EmojiReact.
    - Compatible with FEP-ae97 clients.
    - Does not require JSON-LD.

    I attempted to implement it when I was researching security properties of FEP-ae97 API: https://codeberg.org/silverpill/fep-ae97-server. Back then I didn't know what to do with side effects, but now I think that we can simply force clients to specify them.

    Special thanks to @mariusor and @trwnh for their input.

    #C2S

    read more

  • @evan that makes sense. I've just updated NodeBB to allow for the use of a manual override marker. The limit and even the marker is now customizable per-instance, and I do use the ellipsis when truncating text.

    Hopefully that resolves the engagement issue while still preserving the intent of b2b8 :smile:

    As for the use of an LLM to generate a summary, I think I will defer on that, since that might be a source of surprise for those not expecting the invocation of a LLM :sweat_smile:

    read more

  • @julian So, there are a few ways to handle this.

    First, the b2b8 recommendation on the summary is just a guideline, not a strict requirement (thus the 'about').

    A common practice in news-style text is that the first paragraph is a lede that summarizes the article's main points.

    For example, in this article, Lawrence Summers Will Resign From Harvard After Epstein Revelations, the first paragraph is:

    > Lawrence H. Summers, a Harvard University economist and the school’s former president, will resign from teaching at the end of the academic year, according to a Harvard spokesman.

    Some bloggers follow a similar practice, especially since blogging software often uses the first paragraph as the summary in RSS and Atom feeds.

    I think if I were generating a summary for long-form text, I'd use these techniques in roughly descending order:

    Manual override; an optional way for the user to define a summary manually - either with a marker in the text, or with a separate input element (I think WordPress does this). Use the whole text if it meets the rough guidelines (~1 paragraph, a few sentences, about 500 chars) in b2b8. Use the first paragraph if it meets the rough guidelines (a few sentences, about 500 chars) in b2b8. Truncate the first paragraph and include an ellipsis ().

    This is also something that LLMs are pretty good at. So, maybe rather than truncating (last option), consider using an LLM to generate a summary that meets the boundary requirements.

    read more

  • Hey @evan@cosocial.ca, I'm watching your lightning talk at FOSDEM! I'm simultaneously glad it's less than 10 minutes, but sad it's not longer too :stuck_out_tongue_closed_eyes:

    (Everyone else, want to watch it? Here it is)

    Some questions I'm jotting down while I'm watching it

    I can see the user on ActivityPub.Space, which is how it's supposed to work. Would I be able to follow this user from a non-Person? If integrating into NodeBB, I'd maybe want the Application actor itself to follow it.

    Love how you head off concerns about consent issues with a slide about how it's not scraping, mass-following, etc. So it uses relays, such as the ones on relaylist.com?

    Let's talk about how we can get NodeBB sharing data to tags.pub by default (or by admin opt-out switch.

    read more
Post suggeriti
  • Hey #wordpress folks.

    Uncategorized wordpress activitypub
    2
    0 Votes
    2 Posts
    9 Views
    @peach there’s no built-in AI. The idea is to build the APIs/adapters so you can use AI if you want, but nothing requires it.https://make.wordpress.org/core/2025/12/04/ai-as-a-wordpress-fundamental/#comment-48213
  • 6 Votes
    1 Posts
    13 Views
    I've seen hints of backfill working really well, but hadn't seen good examples until recently. As more and more instances upgrade to the newer versions of Mastodon that support context, backfill from Mastodon instances will improve across the board. Today one of the most popular topics on my NodeBB instance was an update from the admin of The Forkiverse, a brand new up-and-coming instance. Despite following only one person from that instance, I was able to see every single reply from that instance, even from users I don't follow. Super stoked to see resolvable contexts and backfill working in the wild. Who says the Fediverse is quiet? Not me, anymore 😅
  • 0 Votes
    7 Posts
    16 Views
    @jansenspott @mthie ich will mich nicht aus der AffĂ€re ziehen, aber alles was wir mit dem Plugin machen ist: wir schicken eine Überschrift, eine summary, den content mit inline images und die Images nochmal als attachment. Dadurch kann jedes empfangende Netzwerk entscheiden was es am besten anzeigen. Ich schau mir das aber gerne im neuen Jahr nochmal an. Vielleicht finden wir ja mit den gotosocial devs eine schöne Lösung!
  • 0 Votes
    1 Posts
    12 Views
    7.6.0 — Command, Sync & Go. #activityPub #wordPresshttps://activitypub.blog/2025/11/12/7-6-0-command-sync-go/?utm_source=flipboard&utm_medium=activitypub Posted into THE FEDIVERSE VS. CORPORATE SOCIAL MEDIA @the-fediverse-vs-corporate-social-media-mobileatom