1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
|
'def title GitLab killed itself
'def desc Why I switched away from GitLab and the current state of forges
# {title}
{pagenav 9 min;14 Nov 2026;15 Nov 2026}
:contents
:numbered
1. {uhref Why I switched to GitLab in the first place}
2. {uhref Moving to...}
.numbered
1. {uhref GitHub}
2. {uhref Self-hosting and cgit}
3. {uhref SourceHut}
4. {uhref Codeberg}
3. {uhref All in all}
On September 17, GitLab announced that {url they're changing gitlab.com's rate limits;https://about.gitlab.com/blog/rate-limit-change-2026}.
This wouldn't have been a big deal, save for one change:
> A request that arrives with no credentials gets 60 requests per hour per IP address.
{i Are you kidding me?!}
To make it clear, we're {b not} talking about 60 {i pages}, these are {b requests}!
Since everything is loaded dynamically, a single page makes {i multiple} requests to load, which obviously scales with the complexity of a page.
The result?
This limit can be reached in {b 5 minutes of browsing}...
Blocking your {b entire IP} address from unauthenticated access.....
What's even funnier, loading the landing GitLab page {i also counted to that restriction}.......
In all fairness, they did eventually fix the main webpage and you could still log in (if you had saved the link to the page).
This did not affect git operations, those have a reasonable rate limit.
However, this whole fiasco has left me with a bitter taste in the mouth.
I have since moved the overwhelming majority of repositories to other platforms.
To think I used to like GitLab...
## Why I switched to GitLab in the first place
{url I made my account on 02 November 2020;https://gitlab.com/Syndamia}, about 1 year and 9 months after {url my GitHub account;https://github.com/Syndamia?tab=overview&from=2019-01-01&to=2019-01-31}.
The event which moved me to create it has long since been forgotten, because I started using it seriously about a year later.
For reference, I was still in my early developer stages, having written code non-professionally for about 3 years.
However, it wasn't the growing appreciation for open-source, the availability of GitLab's source code, or the hate towards Microsoft{fn {url Microsoft bought GitLab in 2018;https://news.microsoft.com/source/2018/06/04/microsoft-to-acquire-github-for-7-5-billion/}} of an emerging Linux user which decided the switch (though those did contribute).
It was the interface.
At the end of the day, the primary difference between different code hosting websites is their UI, features are more or less the same between them and push/pull operations are all the same.
I'm a desktop computer user, small screens are way too uncomfortable to use for anything serious.
Given that virtually all modern computer monitors are 16:9, sidebars present a much more optimal and convenient way to navigate.
That and the warmer gruvbox-style colors of GitLab at the time swayed me to move the few repositories I had on GitHub.
The years since have shown me some other cool features, like the ability to turn off a vast majority of features in the sidebar, reducing its size, and project-level snippets.
In 2022/2023 I also dabbled in CI/CD and found GitLab's YML-based system to be simpler and more convenient than GitHub's.
Up until now everything was great, with exception to the {url 2022 redesign;https://gitlab.com/gitlab-org/gitlab/-/commit/a4ec234db9eb72466dba55caaac79fbca1763163}, which made the colors all cold{fn As a matter of fact, I disliked this so much, I published a {url rough userscript to bring them back;https://greasyfork.org/en/scripts/455131-gitlab-old-dark-colors}. Recent-ish updates broke it, but for a while it worked well.}.
This even prompted me to consider self-hosting an instance, though {url the 8 CPU and 8 GB RAM requirements dissuaded me;https://docs.gitlab.com/install/requirements/}{fn They were probably lower at the time, but not by much (I'm too lazy to look it up)}.
This request limit makes it impractical to share code anymore.
Do remember, for many projects the repository is the primary website and sometimes just cloning the repository is not good enough.
Even excluding issues, project-specific snippets or releases, the web interface also shows a rendered README, which is supposed to be the entrypoint for a project.
Looking back now, it seems that GitLab never left GitHub's shadow, and given the way things are going, it never will.
The rate limit change is so fundamental to the entire user experience, I've lost all hope for the future of the platform.
It is time to move.
## Moving to...
After a bit of work I narrowed down my search to a few websites and technologies.
This is by no means an extensive list, these are just the options I settled down on.
### GitHub
Everything written so far shouldn't make you think I've abandoned GitHub.
It's just that I used it when there was a reason to.
Many university projects were written there, since that's what lecturers and students used, I didn't want to introduce friction.
Forks of, and contributions to, other GitHub projects were obviously done in the same place.
Nevertheless, I'm not making it my main software hub.
As already hinted at, I despise Microsoft and their products.
I mean, I wrote a {url blogpost about how they could practically erase the idea of opensource;../microsoft-and-foss-extinguish} back in 2024.
Since then it has been brought to my attention{fn {url https://github.com/AndrewRadev/}} that in 2023 it was officially stated how GitHub was {url to become an AI-powered developer platform;https://github.blog/news-insights/product-news/universe-2023-copilot-transforms-github-into-the-ai-powered-developer-platform/}:
> Just as GitHub was founded on Git, today we are re-founded on Copilot.
Furthermore, as it turns out, their AI assistant Copilot {url is trained on GitHub's repositories;https://nogithub.codeberg.page/}:
> GitHub Copilot is trained on billions of lines of public code.
The suggestions it makes to you are adapted to your code, but the processing behind it is ultimately informed by code written by others.
On the topic of AI, I'm not about to go on a 7-minute long description on why I do not support it.
Thankfully, someone else did this for me: {url I Am An AI Hater;https://anthonymoser.github.io/writing/ai/haterdom/2025/08/26/i-am-an-ai-hater.html}.
Consider my thoughts to be accurately materialised in their words.
### Self-hosting and cgit
Of course, the possibilities of self-hosting something are endless.
And that is precisely what put me off of the idea for years.
The server on which this website is hosted is quite underpowered, having only 2 EPYC CPU cores and 2 GB of RAM.
At the same time, I'll be the only person using it, so in reality, I need push/pull support and a very basic interface to browse files and commits {i (without logging in)}.
This is where I found {url this YouTube video by tsoding;https://www.youtube.com/watch?v=iuIdBfjL62s}.
In short:
.bulleted
- git has built-in support for synchronising with a remote via ssh
- you can directly clone/push/pull/... from/to any {url bare repository;https://git-scm.com/book/en/v2/Git-on-the-Server-Getting-Git-on-a-Server}
Pretty quickly I setup a chroot jail with {url some convenience scripts;https://git.syndamia.com/conf/git.syndamia.com/cli/} and started moving repositories over.
Still, my webui problems weren't fixed until I found {url cgit;https://git.zx2c4.com/cgit/about/}.
The entire service is written in C, saving me hassle with the wide variety of bloated nodejs alternatives, the implementation is very lightweight and easy to modify.
As a bonus, it's trusted by some very large projects, like {url The Linux Kernel;https://git.kernel.org/}, {url Qt;https://code.qt.io/cgit/}, {url FreeBSD;https://cgit.freebsd.org/} and {url Gentoo;https://gitweb.gentoo.org/} to name a few.
It has been in use on {url https://git.syndamia.com} since around 15 March 2026 and I started developing {url my own fork;https://git.syndamia.com/fork/cgit/} since 27 September 2026.
I'm incredibly happy with cgit, nonetheless, it is {b not} the complete solution.
For starters, it only provides the means to browse repositories from the web.
Issues, pull requests, CI/CD, ... are all obviously not supported.
As it stands, I've delegated {url https://git.syndamia.com} to personal projects, which shouldn't see any outside collaboration or require deployments.
For the few others which do not fall into this criteria, something else must be used.
### SourceHut
An interesting choice out of the more niche source {url forges;https://en.wikipedia.org/wiki/Forge_(software)} is {url SourceHut;https://sr.ht}.
For starters, the URLs themselves are intriguing, the top-level domain is only five characters, "sr.ht".
Moreover, usernames are prepended with a tilde "~"{fn Probably inspired by Apache's antique {url per-user web directories;https://httpd.apache.org/docs/2.4/howto/public_html.html} feature, which as far as I know, once used to be extremely popular, especially in university systems}.
{url sourcehut.org;https://sourcehut.org}, their "marketing website", showcases a fairly impressive set of features, alongside the standard git web interface:
.bulleted
- {url Mercurial;https://en.wikipedia.org/wiki/Mercurial} support (an alternative version-control system to git)
- Built-in mailing list support, allowing web patchset management
- IRC client and {url bouncer;https://en.wikipedia.org/wiki/IRC_bouncer} with chat log management
- {url CLI tool;https://sr.ht/~xenrox/hut/} with full feature support like account exports and migrations
Services are plentiful and you can pick & match what you want.
{url The pricing page;https://sourcehut.org/pricing/#service-availability} splits the platform into 9 different services.
Oh, did I not mention, SourceHut is paid for.
Not for everything, a free account allows you to contribute and browse without hassle.
And yeah, as a measure against AI crawlers, source code and commits are not publicly available without an account.
These restrictions kind of defeat my use case: browsing without an account is not really possible.
Pricing is not very high, 4€/month without VAT{fn Because {url VAT is different between union-members;https://europa.eu/youreurope/business/finance-and-tax/vat/vat-rules-rates/index_en.htm#functional-toggle-3}} at their cheapest tier.
I'm not against paying that, though at the same time I'm already paying for my self-hosted repositories, do I really want to pay more?
Another issue I have is with the UI itself, I find it somewhat clumsy.
Something about the color scheme makes it hard for my eyes to lock into different layout components{fn Different themes are not available in the platform itself. I'm primarily focused on what the service provides, you could always cobble together a userscript/extension which changes the colors.}.
Likewise, the way navigation is done feels sluggish.
A project/hub contains source repositories, mailing lists and tickets across all repos.
Below that you'll find the particular repository's file listing, commit log and refs.
Beneath both are shown the file(s), log and blame.
For markdown documents, a fourth level is shown with which to switch between rendered and source view.
This multilayered approach feels to me like I have to navigate an unnecessary amount of menus and sub-menus to see what I want.
Perhaps I'm just too used to how things are done in other forges.
One of the primary changes in my cgit fork is about simplifying the repository summary page: adding a file listing and README rendering right below a few commits and refs (highly reminiscent of how GitHub/GitLab does it), instead of only{fn Evidently I'm skipping over some elements\; you get the point.} showing commits and refs.
All of these dullnesses have swayed me away from using the forge or self-hosting it.
It should probably also be addressed who runs the show.
We already know GitHub is owned by Microsoft.
GitLab is {url publically-traded;https://finance.yahoo.com/quote/GTLB/} so I would argue it is ran more by the shareholders and tech trends than someone with a particular vision.
SourceHut is founded and maintained by {url Drew DeVault;https://drewdevault.com/}.
He is a fairly controversial figure, especially for his editorial work on the {url Stallman report;https://stallman-report.org/}.
At the same time, {url the sway window manager;https://swaywm.org/} and {url wlroots;https://gitlab.freedesktop.org/wlroots/wlroots} (the library behind {url Hyprland;https://hypr.land/}) were originally made by DeVault.
Likewise, in August {url use of LLMs was entirely prohibited on SourceHut;https://sourcehut.org/blog/2026-08-27-tos-changes-and-llms/#changes}, which is a plus.
Personally, I trust his technical skills and don't really hold any qualms against him; I wouldn't consider myself tapped in enough to judge his character.
Even so, his involvement might drive others away, I found it relevant to mention.
### Codeberg
Funnily enough, I made a Codeberg account {url on 8 Jun 2022;https://codeberg.org/Syndamia}.
Obviously the exact reason has faded from my memory, though I'm pretty sure it was because I wanted to add another star to the {url SpywareWatchdog repository;https://codeberg.org/shadow/SpywareWatchdog}, whose badge is prominently featured on the front page of {url this website;/}.
Codeberg is powered by ({url a fork of;https://codeberg.org/Codeberg-Infrastructure/forgejo}) {url Forgejo;https://forgejo.org/}{fn Should be noted that the Forgejo project itself is {url in the custody of the Codeberg non-profit;https://forgejo.org/faq/#who-owns-the-forgejo-domains-and-trademarks}}, itself an open-source fork of the now disgraced {url Gitea;https://forgejo.org/2022-12-15-hello-forgejo/}.
Per contra to SourceHut, it's UI mimics the older GitHub interface and the free tier is much more permissive.
Even though their colors are cold and dark too, I find them much more pleasant.
Evidently, you can self-host it and on a fairly weak machine: 1-2 cores with 1-2 GB RAM (still a tad too much for me, though marginally more enticing).
Moreover, this is the first forge thus far which is operated by a non-profit: {url Codeberg e.V.;https://docs.codeberg.org/getting-started/what-is-codeberg/#what-is-codeberg-e.v.%3F}.
Their budgeting is {url public;https://codeberg.org/Codeberg-e.V./Documents-Public/src/branch/main/2026/01-01-Financial-Plan-Budgets.pdf} and it's direction is governed by {url the vote of active members;https://codeberg.org/Codeberg-e.V.#repositories} (anyone can {url subscribe for membership;https://join.codeberg.org/?lang=en}).
Oh, and one more thing, SourceHut's ban on LLMs was influenced by the earlier {url Codeberg ban on LLMs;https://blog.codeberg.org/protecting-our-floss-commons-from-llms.html}.
That doesn't eliminate the ability for there to be problems though.
In {url July 2026, a ToS change was committed, following member vote, to "Disallow cryptocurrency projects";https://codeberg.org/Codeberg/org/pulls/1254}.
Unfortunately, the way in which this change was implement has been vague.
The "final" verdict as of writing has been that ({url confirmed by a member of the Codeberg presidentium;https://codeberg.org/Codeberg/org/pulls/1254#issuecomment-19924861}):
> If a project does not harm the reputation of Codeberg (e.g. by scamming people or doing other shady stuff) it does not fall under this specific rule.
And if it did, it would be a TOS violation even before the change.
Cryptocurrency (the scammy kind) was just added as an example here.
At the same time, on the website {url a banner with the following message was introduced;https://codeberg.org/Codeberg-Infrastructure/forgejo/commit/8a75226bbb940a7689a5f07ac4916161bcc14a11}:
> Cryptocurrency projects are no longer allowed
All in all, I would say this ToS change should've been handled better.
Nevertheless, I like the idea of having my code under the control of a non-profit, instead of for-profits which thus far have shown to eventually ruin their entire platform.
Forgejo doesn't have the few things I really liked about older GitLab, yet it feels the best of all modern FOSS systems.
For those reasons, I've decided to host all larger/collaborative projects to Codeberg for the foreseeable future.
In reality, none of my work is popular enough for any of this to matter.
Even so, I hope one day it will gain some traction and maybe even persuade more interest in Codeberg itself.
Only time will tell.
## All in all
{url I Am An AI Hater;https://anthonymoser.github.io/writing/ai/haterdom/2025/08/26/i-am-an-ai-hater.html}
GitLab's future is bleak, GitHub's bleaker.
SourceHut is interesting but too obtuse for me.
Codeberg is maintained by a non-profit and its system looks great.
cgit is fantastic for self-hosted repository navigation and extensibility.
{footnotes}
|