cadence’s website.

Some changes will be applied after reloading.
Some changes will be applied after reloading.

Git forge opinions: GitHub, GitLab, Gitea, Sourcehut

This isn't a technical comparison. It is a biased rant with hopefully some insight inside. Reader beware.

You're welcome to not read this if the language is harmful for you, or if you just don't find it interesting or helpful. I love you!


The people read my blog almost certainly are not GitHub's biggest fans and are aware that alternatives exist, so I won't dwell on this much.


  • God fucking damn it Microsoft
  • Literally not even open source itself
  • Does not respect you
  • Will take down your personal data if it feels like it
  • Social features


  • Everybody has an account anyway so you may as well use it
  • The UI is familiar and mostly well designed.



  • The user interface is horrible to navigate, relies on icons without labels way too much, eschews conventions
  • Loads unbelievably slowly for me. It's SO slow. If you think it loads quickly then move to Australia and tell me again.
  • Keeps asking me to log back in every week or so. Sends an email every time you log into your own account. Both of these remain true if you turn on 2FA, so I had to turn off 2FA to not go insane.
  • Does not respect you
  • Will take down your personal data if it feels like it
  • Social features


  • It has a billion features, if you, um, really want them.


GitLab really is the worst thing ever. It doesn't offer any advantages for anything I want to do on a git forge, and using the straightforward features has so many bad parts.

Gitea (hosted by somebody else, like Codeberg)


  • It's really fast.
  • You can probably contact the person/group that runs it, and they possibly even respect you


  • Most likely to go offline in the future, and while you can ask your friends to download your data, you'll still have to move house, and external links to your stuff will be broken.
  • If people want to contact you or contribute to your repository in any form they have to sign up on yet another Gitea instance. "oh blah blah federated identity and decentralised repos will solve this" NO IT WON'T, IT'S NEVER HAPPENING, SHUT UP.

Gitea (selfhosted)


  • You own your data!
  • You are not Microsoft!


  • You gotta run that shit and keep it online forever
  • You won't do that. It's going to disappear in the future and external links to your stuff will be broken.
  • If people want to contact you or or contribute to your respository in any form, they have to sign up on yet another Gitea instance.


Disclaimer: I pay to use Sourcehut and it is by far the forge that I have used most within the last two years.


I'm going to organise this as written text since it's really different from the options above, and harder to group into positive or negative things. Most of them are mixed, coming with upsides and downsides.


It's really incredibly fast to load, particularly on bad networks like the entirety of Australia.

Check out the totally* unbiased* speed comparison website.


It's run by a real person that you can contact if you have problems and he replies to your emails! That's cool. He respects you (a little bit) and won't take down your data unless he really has to. And he'll let you know and be apologetic about it. (Unless you're being an asshat.)

He also has a LOT of opinions and will probably not like your feature request because you just don't understand his amazing grand vision. And none of your users understand his amazing grand vision either. If you're asking for help, he'll be helpful, but if you're asking "[this sourcehut feature] should probably work [this different way]", he'll probably reject your suggestion.

The repos/lists/todos split

On the forges mentioned above, the repository and the issues page and the contributions are all part of the same section. All repositories come with an issues page and a contributions page whether you like it or not. Due to this design, they allow for easy navigation and searching across all the different sections relating to the project.

Sourcehut has three kinds of pages: repos, lists, and todos. However, rather than being combined with a navigation to go between them, they are completely different web pages that aren't linked together. You also create them on an ad-hoc basis, meaning that for personal projects that you'd like to share with the world but not allow contributions on, you don't have to have a list or a todo.

Sounds good? It is, and it isn't. I mentioned that all of the different pages you create are not linked together, and this fucking sucks it sucks so bad. Pause a moment to think about it. You're looking at some GitHub repo or whatever, and it's a public project that welcomes contributions, but, when you go to find the issues page to report that bug, the "issues" link is not there, and there's no way to get to it unless you figure out the URL. It's dreadful.

Sourcehut does offer the "project hub" feature, which has outgoing links to the different sub-pages of your project, but once you're there you can't get back to the project hub again. This makes it basically useless for navigation. In addition, the project hub page and the repo page are virtually indistinguishable, leading you to ask multiple times, "wait, where did the button go to get to the mailing list? I swear I saw it in the top bar a minute ago." And you did see it a minute ago, but it's not there now because you've navigated to the sub-page for the repo, and you're never making it back up to the hub page ever again.

To ameliorate this, you can edit the README of every single page you create to include outgoing links to get to the other sections of your project, finally allowing people to navigate around freely to the places they need to get to, which fucking sucks it sucks so bad. Take a look.

Being able to create mailing lists separately, though, does mean that you can make a list for whatever you want, rather than it having to be strictly related to some repo. (I think I heard somewhere that He doesn't like you doing this, but it's not against the terms of service, and you're paying, so can He really be too mad about it?)

There is an extra setting for repositories, which is "unlisted", and can only be accessed if you know the URL (so, it's not linked from your user profile). I find myself using this a lot. It's great!


Rather than requiring one-time contributors to create an entire account and fork the entire repo, they can email small code patches into your project. These are displayed on the mailing lists page which also doubles as a code review. You can use git commands to apply their commits directly to your own repository, and then you can edit them if you want to before pushing them back to the main repo. Patches are sent using a tool called git send-email. Awesome!

People have to learn how to use send-email, and the workflow will be very unfamiliar the first time somebody tries. Sourcehut tries to educate people of how to do this, but does not do it adequately, so on all of your projects that you expect to receive contributions on you need to link out to documentation and tutorials.

The first time somebody has to do this, due to their unfamiliarity with the workflow, it will be more mentally taxing and time consuming for them to figure it out compared to signing up on your Gitea instance and using the Gitea workflow. Unless your expected contributors are all Linux kernel developers. If that's the case, Sourcehut is for you.

Using lists/todos

Lists and todos appear at first glance to be analoguous to GitHub's pull requests and issues, but this is actually not the case. Sourcehut's model is a bit more flexible, as long as all of the other people who are going to be submitting things to your project also understand the nuance and use them appropriately. Hahahaha.

Lists are for discussions, announcements, code patches, code review, and preliminary bug reports. People should write everything to lists if they can. This is easier for them, too, since they literally just have to write an email and the body of their email appears on the page.

Todos are for actionable tasks. They look a lot like GitHub's issue page, and there are similarities for sure, but you don't want this to act as the first line for submitted issues. This is because, if you're anything like me, the vast majority of the issues you get are not actionable tasks - either requests for help or issues that are impossible to solve. Somebody will complain about a feature that doesn't work, and you have to say "this just isn't how my code works" or "I don't have enough information to act on this". And you could keep asking them and gather the information you need, but at that point, the whole conversation is in shambles and the info you need is scattered all through the thread.

The correct way to do it is to use lists for bug report submissions, discuss with the person further until you know what's going on and what to do about it, and then, if you need to do anything about it, create your own actionable task on the todos page with all the information you found out in the top post. And if the problem they emailed in was something that you can't solve, you can tell them "I can't solve this" and you don't have to worry about the (1) indicator on the issues tab, because the conversation will be lost to time. This is good.

Social media features

There aren't any stars or other gamified metrics. This is a good thing!

However, it also means that you can't show off to a future employer about how many people love your code and rely on it in order to convince them to hire and pay you.


Sourcehut is a paid service.

This means you have to pay, and it's another subscription coming out of your bank account and where did all my money just go again?

This also means the platform won't do things that are bad for its users, which is not a guarantee you get with GitHub or GitLab, because they are owned by investors. Sourcehut can pay its employees and it can plan to add features that will help its paying users and it should be around for the forseeable future.


No JavaScript. This is a good thing! Gitea mostly works with JavaScript disabled, GitLab doesn't work at all. Sourcehut doesn't have any JavaScript on the site. For basically everybody this doesn't matter in the slightest.


i haven't used it but it looks pretty cool and it looks like it could avoid some of my current frustrations regarding CI.

Conclusion and recommendations

Sourcehut is really great for personal projects that you occasionally want to show to other people because it loads quickly and you can create lists and todo on an ad-hoc basis rather than them being linked to some repo.

The contribution process is where it falls apart. It seems like it would be pretty great to contribute to because you don't need an account to discuss, report bugs, or send code patches (once you've learned how to do that). And it is pretty great, but only under the condition that you already know the URLs for the repo page and the mailing list, because you can't get from one to the other without guessing the URL.

As such, if you want to invite contributions from novice users, or don't want to manually write navigation links into literally all of your READMEs, then you should probably stick with one of the forges that uses the classic interface and contribution process, like GitHub or Gitea. Gitea does have the signup process as a barrier. Make your choice depending on how much you and your users hate Microsoft.

GitLab isn't good for anything. Fuck GitLab.

— Cadence

A seal on a cushion spinning a globe on its nose.
Another seal. They are friends!