README.md

ForgeFed - Federation Protocol for Forge Services

https://codeberg.org/ForgeFed/ForgeFed"> Get it on Codeberghttps://codeberg.org/Codeberg/GetItOnCodeberg/media/branch/main/get-it-on-neon-blue.png" height="60">


ForgeFed is a federation protocol for software forges and other web services dealing with version control repositories, project tracking and other aspects of the software development lifecycle and ecosystem. This includes repository hosting websites, issue trackers, code review management applications and more.

Federation means that these websites can interact, allowing the humans using them to interact too, despite being registered on different websites. For example, imagine you could host your Git repos anywhere you want, perhaps even your own personal website, but still be able to open issues and submit pull requests against other people's repos hosted elsewhere, without having to create accounts on those other websites!

Without federation, we end up having to choose between:

  • Centralizing into huge profit-oriented websites, where we're powerless
  • Hosting our code on a small website where we're in control and freedom but isolated from the community

With federation, all the websites now communicate with each other to form a network and community of collaboration in which we're all both free and connected. It puts the power back into our hands to create tools and collaborate in ways that are aligned with human needs, powerful and safe ways that allow us to include everyone and that don't depend on some big company's policies or some website suddenly shutting down. Let's create the future together!

How does it work?

ForgeFed is an ActivityPub extension. ActivityPub is an actor-model based protocol for federation of web services and applications.

It's a bit like e-mail, except the data sent is JSON objects (i.e. structured computer-readable data), and not only humans have inboxes where they can be contacted, but also repositories and issue trackers have inboxes through which they can be remotely and safely interacted with.

On top of ActivityPub's vocabulary (common language for websites to use for communicating) and protocol, ForgeFed defines new vocabulary terms related to repositories, commits, patches, issues, etc. and the protocol for creating and interacting with such objects across servers.

So how do I use it?

ForgeFed is a protocol, i.e. instructions for how websites can communicate with each other. For forge federation to really happen, we need to code it into forge software. This is still in progress, but there are demos and prototypes you can play with if you're curious :-) See below for ways to get updates on the latest work on this.

What's the status? Where do I talk with you and ask questions?

The ForgeFed protocol specification is on the website. The website is generated from the Markdown sources found in this repository. There are links there to Matrix and IRC chat, our forum, issue tracker, list of ForgeFed implementations and their status, and more. You can also follow our progress on the fediverse.

Come talk with us :-)

How can I contribute?

There's so much variety of tasks to do! Come talk with us on the chat/forum.

More eyes going over the spec are always welcome! And feel free to open issue if you notice missing details or unclear text or have improvement suggestions or requests!

However, to maintain a manageable working environment, we do reserve the issue tracker for practical, actionable work items. If you want to talk first to achieve more clarity, we prefer you write to us on the forum or chat, and opening an issue may come later.

If you wish to join the work on the ForgeFed specification, here are some technical but important details:

  • We don't push commits to the master branch, we always open a pull request
  • Pull requests making changes to the specification content must have at least 2 reviews and then they wait for a cooldown period of 2 weeks during which more people can provide feedback, raise challenges and conflicts, improve the proposed changes etc.
  • So if you wish to continuously participate in shaping the specification, it would be useful to go over the open PRs once a week or so, to make sure you have a chance to communicate your needs, ideas and thoughts before changes get merged into the spec

Important files in this repo to know about:

  • The file resources.md lists which team members have access to which project resources, openness and transparency are important to us!
  • The actual specification source texts are in the spec/ directory
  • JSON-LD context files are in the rdf/ directory

Repo mirrors

This repo is mirrored at:

Website build instructions

./build.sh

License

All artifacts produced by the ForgeFed work-group are freely available under the CC0 1.0 Universal (CC0 1.0) Public Domain Dedication. All contributions to the wiki must also be offered freely as such.

The ForgeFed logo was created by iko.

Historical resources

ForgeFed started its life on a mailing list, here's the archive.

The ForgeFed forum, now at a new location, used to be at talk.feneas.org, the old forum and posts can be viewed via the Internet Archive's wayback machine.