Does generic ActivityPub node software exist?

Does there exist node software that implements only the ActivityPub protocol?

In some decentralized networks, protocol stuff is taken care of by one piece of software which then exposes an interface for application specific code to use. I’m only some days into an in-depth exploration of AP, but wondering if any such domain-agnostic software exists here.

I created and co-maintain the ActivityPub Developer Resources watchlist, together with @light and @strypey. This watchlist is a companion to the ActivityPub Application Watchlist and both of these wiki pages are staging areas for the Fediverse Party website, designed and maintained by @light. It has a list of AP libraries, among others. I think these watchlists are currently the most complete directories of what’s out there (and greatly appreciate anyone point out more resources that are missing).

1 Like

Very good question. I would calling it “building blocks”.
Pretty much of this exist in the node-land and I don’t know where to start.
Let us please only investigate in terms of the protocol and not care about monolithic applications …

First, I would like to highlight that ActivityPub is JSON-LD based, so we can use any generic JSON-LD library and use it for expanding or normalizing.
This might not be how reality is
Guide for new ActivityPub implementers - #3 by lanodan ff.
but let’s just be conformant … The above post is about a huge guide which nedjo wrote for new AP-implementors and you will find a ton of helpful stuff there.

General LD projects: SkoHub or OpenEngiadina

However, if you do not use generic JSON-LD stuff, it is worth to highlight that in AP

  • most properties (all which are not “functional”) can have multiple values.
    So you might want to treat them always as Array …
  • many properties can be multi-language.
    So you might want to treat them always as an Object with BCP47 keys …

Personally, I use GitHub - digitalbazaar/jsonld.js: A JSON-LD Processor and API implementation in JavaScript in node and also normalise on the server but for C2S, a small AP only normaliser for node and the browser might be nice. I am doing anything in TypeScript / node and wrote this one


Let’s break it down for building blocks:

ActivityPub comes in two portions

  • Client to Server
  • Server to Server

and you wrote

node software that implements only the ActivityPub protocol

Most obvious is probably the server, have fun with

This is probably the node flagship of Will Murphy of immers.space …

And there are several others depending on the complexity:
Darius Kazemi, Keynote speaker of AP Conf wrote

and personally I took some venture capital (after 3 years seeking for public funding), so our statically typed AP node server with ORM etc. will be closed-source :frowning:
However, I am also building an Open Source TypeScript server based on nestjs which will become

Other servers for node are e.g. dolphin (single-user), misskey (multi-user) or even smaller pieces like


About Client To Server
There seem to be some really nice generic JS clients but I don’t speak japanese - if anyone speaks japanese+english, please reach out :slight_smile:

What I am doing is a set of 138 themable widgets / webcomponents (TypeScript, dojo.io) but this is all Work In Progress:

Nice, but written in elixir is


Some other node things come to my mind but depend on the use case.

4 Likes

Hello @weex
If by “node”, you mean “NodeJS”, SemApps is a toolbox to create applications which support web semantic standards, including ActivityPub. It is based on the microservice-based Moleculer.js framework.
Since the data are really semantic (stored in Jena Fuseki triple store), it is easy to extend ActivityStreams vocabulary for all other needs.
We have a small guide to create an ActivityPub server in 5 minutes, and exchange messages with a Mastodon instance.
If you have questions, problems or just want to chat, don’t hesitate to write me :wink:

4 Likes

Hey @srosset81
this is super awesome.
Will use it to test the redaktor widgets/client against and ensure compatibility.

Have just read the server guides.
In the redaktor setup, I would just have one (1) problem: The docker “dependency”…
Many shared hosts do not support docker. Is there a workaround?

1 Like

Hi @Sebastian

We use Docker mainly to install the Jena Fuseki triple store, where all the semantic data are stored. Since Fuseki is written in Java, it is the easiest way to launch it. But it’s also possible to set it up without Docker.

SemApps itself is written in Javascript, so all you need is NodeJS installed :slight_smile:

1 Like

I was using it in the general sense of one instance running in a network with the idea in mind that I’d start up an AP daemon and write calls against its REST API to build my app with whatever language/framework I like. Such a daemon could handle network/protocol level details and let the consumer speak in application-specific terms.

This is basically the entire design behind the idea of “ActivityPub servers” as described in the activitypub spec, except that instead of a REST api they use the JSON-LD based AP C2S api. Most people have not implemented fully general AP servers yet—preferring to customize them for their specific use-cases—but some fully-general AP servers do exist.

1 Like

Ah, I see.
Yes, that is exactly the idea of the Client To Server part of ActivityPub.
You have a standardized REST API so that a variety of diverse clients can use 1 server.
It is the chapter 6 in the spec.
Please note:
The acronym community often refers to this as C2S :slight_smile:

This is misleading to many new developers because some big players invented their own REST API …
We had a session at ActivityPub Conf before pleroma added C2S :

and there is a category


btw: A list of all supporting servers might be useful …

I don’t know how I missed your “building blocks” post above. Just spent a little time looking at the projects you shared and I can see why many consumers would implement just what they need rather than pull in all features of the protocol.