Federation libraries for each programing language


#1

I’m not a developer, but from the discussions I’ve had on the fediverse with various developers, it makes sense to me to work towards a situation where we have standard federation libraries for each programming language. This would allow existing projects to add federation support just by integrating the library for their language, and new projects to focus on building the features they’re excited about, instead of trying to work through the spec from scratch and spending hours debugging inter-operation with this or that other project.

It would also allow devs who want to work on protocol support to pool their resources and create one really polished implementation for their language of choice. This could be done as a single multi-protocol library, or set of libraries, one for each protocol to be supported. Obviously, anyone who wanted to build their own implementation from scratch would be free to do so, but it would make sense to encourage them to do it in a language that doesn’t have a federation library yet.

I guess a first step towards figuring all this out would be to assess what federation libraries already exist, and what other languages fediverse projects are using.

Existing libraries

  • Python: @jaywink developed a federation library for SocialHome that currently supports Diaspora. AFAIK he is currently working on AP support, and also intends to support Zot. Little boxes has pure AP library for Python, used by pubgate and microblog.pub. Anfora, reel2bits, GetTogether, calendar-social, and fedevent also use Python.
  • Go: @_cj has developed Go-Fed to support AP and possibly other protocols? This is already being used by Anancus, WriteWreely, Read.as, and also I believe GangGo? SnapFreely, Marmota, and peerpx are other federated projects started in Go.
  • PHP: @jdormit from Pterotype is planning out an AP library for PHP. Other fediverse projects that use PHP include GNU social, postActiv, Friendica, Hubzilla, PixelFed, Zap, NextCloud, FediBlog, Known, Minds, NextCloud Social, and Nautilus, although only some of those support AP at this time or still intend to.

Anyone know of any others?

Other languages:

  • Ruby: Mastodon, Diaspora, Prismo, NoteIn
  • Elixir: Pleroma, commonspub, MoodleNet, Mobilizon
  • Rust: Rustodon, Plume, Aardwolf, Kibou, Lemmy
  • Typescript: MissKey, PeerTube
  • node.js: MissKey, pump.io, Lemmy
  • pure Javascript (AFAICT): Dokieli
  • Racket: Spritely
  • Clojure: Kitsune
  • Lisp: picopub
  • GNU Guile: pubstrate

#2

You could link the different repositories so that people can directly look into the code. For Friendica the AP related stuff is mostly in these files:


#3

Thanks for this. Since you all know your code inside and out and I don’t know it at all, it would be great if all the projects could provide a similar list of links to the specific parts of their code that handle federation.

EDIT: for clarity