ActivityPods: adding intelligence to Solid PODs with ActivityPub

I’m glad to announce the release of ActivityPods, a new kind of architecture for web applications which aims to reconcile the ActivityPub and Solid standards.

You can see the initial proposal here:

It can be summarized in one image:

The ActivityPods implementation is based on the SemApps toolbox, which aims to provide all you need to develop semantic applications. I’m also a core developer of SemApps since 2019.

I know there have been many discussions on this forum and on Solid forum about this topic (in particular here and here). I don’t pretend to have the only solution, but I’m glad to have something working well and that could, I think, fit the needs of many projects.

I will open source a working frontend soon. It allows to create private events and invite friends, with the boilerplate of ActivityPods as the only backend.

All feedbacks are very much welcome ! :slight_smile: Please be patient as some things are not perfect yet and I plan to improve a few things in the coming weeks. But I thought it would be interesting to post this before the holidays.

I’ve cross-posted this message on the Solid forum as well.

5 Likes

Very cool to see this combination of technologies coming together. I created additional cross-refs between communities in the AP +Solid threads, and also added your project to the ActivityPub Developer Resources watchlist. Note that there’s no license yet, so it is technically proprietary software.

(PS. The developer watchlist and application watchlist may move location soon, as Feneas may be shutting down).

1 Like

Thanks @aschrijver !

Ah the licenses were on the packages. I’ve added a license on the main repo (it is Apache 2.0)

2 Likes

Cool project

A bit of history. I came up with the term “social linked data” in about 2013, which went on to become Solid. I also around 2011 had the concept of a “Semantic Inbox”, basically an inbox working over HTTP, rather than, SMTP

In the Social Web Working Group both these concepts matured quite a bit, and took on a life of their own, becoming what we see as the solid project today, and inboxes used to power the fediverse

In my head initially I thought that this would all be one thing. So I’m glad someone is working on bringing the two systems together

I see some differences. Solid does identity differently to AP. ie WebID vs Activity Streams Actors. The primary serializations are different. e.g. Turtle vs JSON(-LD). Discovery is different, e.g. webfinger vs follow-your-nose

If I were able to start over, I would have made Solid completely based on JSON-LD, since that is what has gained traction. And have a separate branch of the project for those wanting to use turtle, full rdf, rdf-star, sparql etc. I do like turtle alot, but it’s just that JSON has won that race

What I originally had in mind for Semintic Inbox was a catch all type area for any kind of message. It then was processed and after that, had side effects and notifications. So, if an activity was posted to an inbox, it goes onto a separate timeline area (like in facebook). If a friend request was posted, the user gets a notification and is able to friend back, a payment would have yet another work flow etc. So this was much more an alternative to facebook, whereas alot of the work in the SWWG was to create an alternative to Twitter

The idea of Pods came quite a bit later. We started out with just profiles and authentication. Then we thought it would be nice to store data and apps, creating an organic read-write web. Pods kind of came together with Linked Data Platform which is a way of putting a wrapper around the file system. Files on a file system and http web files were supposed to be parts of an interchangable web space, so you could have a gallery folder on your laptop (or phone), use a desktop app to view it, or use a web type app to view it also. Changes to one space would be reflected in the other (at least in theory)

ActivityPods seems like a cool project. I can imagine a system that enables single-sign-on (eg with PKI) to a number of apps, one of which is web space in the form of a Pod, and where you can interact with other user Pods. I can imagine a useful system where users are able to store photos, videos, html pages, and some JSON data in their own area, and have apps interact with that. Looking forward to seeing what you make!

6 Likes

Thanks @melvincarvalho , it’s very nice to share these background information on the history of Solid and ActivityPub ! :slight_smile:

In ActivityPods the WebID is the AS Actor. The resource is both a foaf:Person and a as:Person. And this URI is used for all WAC permissions.

(Side note: The WebID/ActivityPub actor is viewable by everyone, because that’s needed for ActivityPub to work correctly. However the contacts app creates the user’s profile on another ressource (with the class as:Profile and vcard:Individual), so that the user can choose with whom he wants to share private data like his real name, his picture, his address, etc.)

I agree both formats have advantages. Turtle is more readable by humans, but JSON-LD is way easier to process by machines (I’ve never used anything but JSON-LD on the frontend !). ActivityPods (and SemApps) handles both formats, except for ActivityPub collections which are currently only in JSON-LD. We can do that because we store the data in a triplestore (Jena Fuseki).

That’s exactly what the first frontend (to be released soon) does. When signing up or logging in, you choose your POD provider in a list. You can then:

  • View and modify your own POD’s data (events, contacts, etc)
  • View the data shared by other users (which have been cached on your own POD or that you can GET through a proxy)
  • Communicate with other users by sending messages through your ActivityPub outbox

In the end, the frontend only exchange with the user’s POD provider.
This first frontend handles only private events, but it’s indeed easy to imagine other frontends which could handle classifieds, photos sharing, all in a private-by-default perspective.

4 Likes

Sounds very cool! I think I first built a FOAF profile with single-sign-on back in 2007!

Getting the profile right, I think lays a strong foundation for the rest of the system, and provides a means of orchestration. In fact, I wanted to make microfed to get this right, based on what I’ve learnt over 15 years.

If you have a link to a live profile I could review it

2 Likes

I’m glad to announce I open-sourced the first working frontend for ActivityPods:

It has been deployed here: https://welcometomyplace.org

This application is about events which are private by default: you only see those you have been invited to. Anyone is free to create an event and share it with its network. After an event, all participants can add the contact of all other participants. But at the beginning, you must know the contact link (or the ID of type @bob@podprovider.com) to start your personnal network. If you want to try this out, here’s my contact link: Welcome to my place.

Another application for classifieds will be coming out this spring.

1 Like

Nice, I added this to delightful-fediverse-clients. The Fediverse-related delightful lists follow the policy we used when the lists were at Feneas, i.e. add anything fedi-related in as early stage as it still is (as soon as we know about it). This to allow anyone to be inspired and maybe offer their help.

If I may give a bit of feedback, it is hard to know what Welcome to my place is about, and I’d strongly advise to add some blurbs of text to the website, even if it is in very early stage. This especially for your next app, because if “classifieds” means Ads then you are entering ultra-hot waters and walking on eggshells. Just saying :wink:

2 Likes

Hello,

I’ve made a presentation of ActivityPods at the latest Solid World, here’s the recording:

https://vimeo.com/691410463

It starts on the 19th minute…

Thanks for the feedback @aschrijver and for the inclusion in your list, I will soon add more informations about the plateform. Regarding classifieds, it’s not about ads but about exchange of material or services.

2 Likes