I've started putting together a list of #fediverse apps, focused on implementations of #ActivityPub, documenting their status and what tech stack they're (being) built with: ethercalc.org/fediverse-stacks

This is a publicly editable doc, so would appreciate corrections/additions, and feedback especially from fediverse devs, but also from instance admins and users:

- What app/implementation/stack did you try?
- Pros/cons you encountered
- What stack & libraries would you choose if starting today?

PS. We've been talking with @bhaugen and others about the need for a generic agent-centric #ActivityPub server, so that instead of signing up to a bunch of different servers, a user could have their indentity and data all in one place, and all the apps they use (clients, but if necessary server-side "plugins" as well) would interact with the activity/objects types that they support.

What do you think?

cc @cwebber @aaronpk @deadsuperhero @aral

@mayel The fastest path to build a performant server is using the scaffolding already available:
github.com/go-fed/activity

See here progress about feature set, what's implemented already and what's still missing:
github.com/go-fed/activity/iss

@h That's definitely what I'd rather do. Have you played around with that library? Opinions?

@mayel You've probably talked to @cj before of the go-fed project.
I think the code is promising and it contains some scaffolding that makes the prospect of writing a proper server far less challenging than it would be the case if you started from scratch with say... C++.

@h @mayel I'm happy to answer any specific questions, including discussing limitations of the current library. I've tried to be honestly thorough in the GitHub issues, although please ignore the GitHub milestones, I need to redo those.

A basic tutorial and the library's documentation are also available at go-fed.org

@cj @h

I am very interested if/how the library supports extensions, as that's a key requirement for a couple projects for which I'm looking for the best implementation approach, and your docs say that "ActivityStreams vocabulary supports extensions beyond the Core and Extended types. However, this will be outside the scope of this tutorial"

@mayel @h Gotcha. go-fed could do it, but involves a few hours of time to make 2 code changes.

1) In the tool used to auto-generate the ActivityStreams implementation.

2) The go-fed/activity/pub library also would need to pass-through any new Activities defined in this way.

I'm gonna go ahead and capture both in github issues.

What kinds of extensions are you looking at, specifically?

@mayel OK, I've given it some serious thought and have created two issues to track this work:

github.com/go-fed/activity/iss

and

github.com/go-fed/activity/iss

In all honesty the work is larger than my gut feel (isn't it always?!) so I've scheduled it as part of the next major version release. I don't have a great sense as to when that will be (on order of months given my current life schedule) so I understand if you eliminate go-fed as a choice because of that.

@cj

It always is! Thanks a lot for giving it thought and documentating the issues :)

This still will require hardcoding the extensions pre-compilation, right? That's fine for most use cases but wouldn't work for a "generic #ActivityPub server" that can support any activities/objects as in: social.coop/@mayel/10046952506

@mayel You're right. Creating a generic Go server would mean either: raw map[string]interface{} handling (no static typing, still having to code, compile, deploy) or plugging in a scripting engine (no static typing, still having to code and deploy). I decided to do static typing + code + compile + deploy. I haven't seen another compelling way for "generic" handling of ActivityPub data in a statically-typed language. The core problem is that while the data is generic, behavior isn't.

Follow

@mayel (Unless of course it is generic behavior desired: proxy-ing, etc. Then some partial deserialization into an ActivityStreams type could occur, if any deserialization is required at all. Go-fed currently does some form of partial deserialization by preserving unrecognized properties, but it's not exactly the same use case).

ยท Tusky ยท 0 ยท 0 ยท 1
Sign in to participate in the conversation
Mastodon for Tech Folks

This Mastodon instance is for people interested in technology. Discussions aren't limited to technology, because tech folks shouldn't be limited to technology either!

We adhere to an adapted version of the TootCat Code of Conduct and follow the Toot Cafรฉ list of blocked instances. Ash is the admin and is supported by Fuzzface as a moderator.

Hosting costs are largely covered by our generous supporters on Patreon โ€“ thanks for all the help!