Why I feel disappointed by Forgejo

Forgejo is a code forge. It was forked from Gitea. One of Forgejos primary goal is federation1. Today (23-04-2024) it released a new major version with many new features; federation not being one of them.

This post is about why I am currently disappointed by the Forgejo project.

Note to the reader: The Forgejo Project is maintained and worked on by people with feelings. Criticism may hurt these feelings. I want to voice my criticism while also not hurting feelings. To do this I want to explicitly note that I am not blaming anyone. The current situation is how it is and I'd guess most of the maintainers and contributors are excellent and passionate people. Further, this is just the voice of one dude on the internet. I don't donate or contribute to Forgejo. I'm just interested in federated forges.

TL;DR

Despite quite a bit of prior work, none of the federation features are present in this major release. To me, it feels like a broken promise. Also some suggestions.

Context

In October 2022, Gitea introduced organizational changes which were, to put it mildly, not well received by many contributors. Out of that disaster, Forgejo arose.

Forgejos stated goals are:

  1. The community is in control, and ensures we develop to address community needs.
  2. We will help liberate software development from the shackles of proprietary tools.

They expand more on these goals in the announcement blog.

On goal 1 I can't comment extensively, as I'm just an outside observer. But as it appears, Codeberg e.V. is a stable custodian with a good reputation. As far as I can tell, they are on a good track with respect to goal 1.

An essential part of goal 2 is federation. The progress on that is ... it's complicated.

Why the wait is infuriating

Yes, there is progress. However, if you're a current user of Forgejo, you won't notice any of that. As far as I can tell, no federation feature is implemented in the official releases.

Now, sure, Rome wasn't built in a day. And I have no problem waiting even more than a year on this awesome feature. However, there are two points that make the wait infuriating:

Forgejo didn't start from zero

I don't remember when I started tracking federation support in Gitea, but it was before Forgejo was forked away. Apparently the main issue for this request is #14186. It was created in December 2020, almost two years before Forgejos inception.

And this was not a “pls add federation” issue. It was a full document of what should be done and how, even with a suggestion on how to use go-fed for that (which Forgejo now actually plans to do). But there's more: Gitea maintainers received a grant for working on this!

So even before Forgejo started, there was significant groundwork done. Sure, the path to completeness is long, but we weren't years away from the first federation features.

A major release

Today, Forgejo version 7.0 was released. This may sound bigger than it is, however. Forgejo changed to a new versioning scheme. If I understand the announcement correctly, you can think of it less as Dall-E 2 –> 3, but more as Blender 2.90 –> 3.0.

Still, this represents the release of a major and stable (even LTS) version.

Without. Achieving. Its. Primary. Goals.

Usually when starting a new project, you start by creating a minimum viable product (MVP) where the basic functions are present, but not fully fleshed out and in a rough state. I was expecting something similar for Forgejos federation. Not complete, not hassle-free, but existent.

I do acknowledge that Forgejos situation is unique, in that the project saw value in providing stability for serious forges that were trying to move away from Gitea (case-in-point: Codeberg is pretty big and uses Forgejo now).

Despite this, as a fan of the mission of Forgejo, especially part 2, I feel disappointed by this release. And because it is a major one, this disappointment reflects on the project as a whole. I am starting to think that Federation is a goal but not one of the main goals of the project.

Alternatives

Enough ranting. The state of the project is how it is, and the release is out now in this state. Can't change the past.

For the future, I would change this: Give us that sweet federation stuff! We've been craving it for years. Perfect is the enemy of good. I don't want to wait on stars being federated, before being able to create an issue or submit a PR or fork a repo from a remote host. Any of these features would be useful and a game-changer now already.

The writer of the issue on Gitea (linked above) wrote it poignantly:

I would propose just aiming for one [feature] initially. Even aiming for none of these, but [just federating without sending content], is a large enough feat worth celebrating: Getting to the point where the followers flow works is a celebratory moment [...].2

Closing comments

There is a cost to waiting. While Forgejos federation is not running in the wild, other standards will pop up. There are projects like radicle already using different standards. These projects are fantastic and have their own slightly different focus. But if ActivityPub-based federation was already present (even in a crude state), the engineering effort might have been spent on improving the existing standard instead of creating a new one.

Releasing might attract contributions. Federation has the chicken-and-egg problem. A protocol becomes useful when it has applications implementing it. But applications only implement the protocol when it is useful. So best let the chicken run free as early as possible. Imagine all the awesome projects that could be built on ActivityPub. With those awesome projects come interested devs, which might help smooth out federation even more.

This is just my opinion. I want to reiterate what I disclosed at the start: I am but a fan of federated code forges. Take this piece of opinion and either acknowledge it or discard it.

Have Fun!