

not much beyond “look at what other apps you’re trying to interoperate with output and try to reverse engineer your way through”. reading through the sources of other apps may be a good idea.
some links that may get you started, picked from https://socialhub.activitypub.rocks/t/guide-for-new-activitypub-implementers/479 :
- https://flak.tedunangst.com/post/ActivityPub-as-it-has-been-understood
- https://www.w3.org/community/reports/socialcg/CG-FINAL-apwf-20240608/
- https://swicg.github.io/activitypub-http-signature/
- https://seb.jambor.dev/posts/understanding-activitypub/
- https://tinysubversions.com/notes/reading-activitypub/
and depending on which ecosystem you’re targeting:
- https://docs.joinmastodon.org/spec/activitypub/
- https://join-lemmy.org/docs/contributors/05-federation.html
counter intuitively, avoid reading the specs if you’re looking to federate with existing software. the official specs are… extremely lacking beyond giving you the bullets to shoot yourself in the foot with (half of what little it defines goes unused in the real world, important things like “how do i know this activity is sent by the person it claims to be” is completely undefined (hint: everyone has more or less settled on http signatures).
once you get something federating, you can then look in the specs in an attempt to learn the concepts in depth, but writing code following the specs will result in code that simply won’t federate.
yeah no i seriously don’t see how that one actually helps anything. maybe for the odd self hoster it could make sense but realistically it’s way too under-defined (but then that’s the norm for ap, sadly)
let’s say lemmy implemented it. ok. what now? my current account is still under lemmy.blahaj.zone. i still can’t move to some other instance without changing my account’s id and breaking all the existing object ids. i can move my posts between instances (or perhaps connect multiple instance software to the same actor, though a generic C2S server can in theory accomplish something of that sort without needing to alter other instances communicating with mine) but my identity is not any more portable than without it.
actor relative ids requires everyone to anticipate being portable and set their account up with it from the very start. maybe the existing account migrations can be used to one-time migrate a non-portable account to a portable one, but you’re still required to host your own account on your own “identity instance” yourself, and you are more or less stuck on that identity instance if it ever goes down without you sending the same account move activity we already have out. it’s not as simple as taking an account from one instance and moving it to another.
https://codeberg.org/fediverse/fep/src/branch/main/fep/ef61/fep-ef61.md is imo better at accomplishing the goal, and unlike relative URLs it has real existing implementations proving it’s viable in the first place. but it has it’s own downsides as well (severly limiting domain block effectiveness for authorized fetch enabled instances, no key rotation afaict, …)
as a side note, don’t get too hyped up by feps. they have no power over anything and an existence of one does not mean anything for the future of the protocol. implementations are still the only ones making the final call on how the protocol actually functions (because real governance and “spec compliance” is anywhere between doesn’t exist and being actively hijacked by threads via swf), and the only implementation that actually matters in terms of protocol improvements is mastodon.