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.
Another general LD project is SkoHub
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 …
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
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
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.