A Software Forge is a web based collaborative software platform for both developing and sharing applications. It is centred around a Version Control System (VCS) that allows controlling, organizing, and tracking different versions in history of computer files, primarily source code text files. This simplifies collaboration between multiple developers, allows accessing new and old versions of the code easily, and enable development efforts to be split between multiple branches.
A Software Forge can also include many other tools, such as automatic testing environments for Continuous Integration (CI), package repositories for publishing purposes, bug trackers, communication channels and much more depending on the software.
The most well known example of a forge is GitHub, which uses Git as VCS. Other examples of online forges include GitLab.com, Codeberg or SourceForge (that's where the name comes from).

What am I looking for?

Anyone can run a VCS such as git locally on their computer, so what extra features am I looking for from a Forge? I want to be able to:

  • Have access to my code, no matter which device I am currently using
  • Allow other people to contribute to my own projects
  • Make some of my projects available publicly

All this can be achieved through existing online solutions, such as GitHub, GitLab.com, Codeberg and plenty others, but if I have my own server, then I might as well keep full control of my code, especially for projects I do not wish to publish. It also allows me to centralize all my contributions to various projects in one place: as not all projects are hosted on the same platform, I need to have accounts everywhere, and my contributions are split between platforms. With my own instance, I can create mirrors of my work on other platforms, allowing me to have everything in one place!

Version Control System (VCS)

Git is by far the most well known VCS, you would be forgiven for not knowing any others. But alternatives do exist! And even if they do not have any meaningful market share, and probably won't in the foreseeable future, I find it interesting to at least mention a few of them!

  • Apache Subversion (SVN): A centralized version control system emphasizing atomic commits and strong binary file support.
  • Mercurial: A distributed VCS known for its simplicity, scalability, and user-friendly command-line interface.
  • Bazaar: A decentralized VCS initially create by Canonical as a concurrent to Git, now deprecated (see Breezy for a somewhat active fork)
  • Jujutsu: A modern, Git-compatible distributed VCS that improves conflict handling and aims to improve the git UX
  • Darcs: A patch-based distributed VCS emphasizing flexibility, allowing commits to be reordered or cherry-picked easily.
  • Fossil: A lightweight, all-in-one VCS with built-in bug tracking, wiki, and web interface, ideal for small to medium projects.
  • ...

I will not attempt to explain them in any more detail, as I do not have the necessary experience to offer any meaningful insights. I have only ever tried Fossil for a few days and have no experience with the others. I am definitely going to try Jujutsu at some point though, the fact that it is compatible with Git makes it significantly easier to try without compromising my ability to collaborate with others.

Forges

There are multiple forge software that can be self-hosted, let's explore some of the options.

Does a Git Frontend count as a Forge?

My first solution to access my code from any device was simply to expose git through SSH, and to use Gitweb for a simple Read-Only web interface. It worked for a time, but it was not ideal at all: Connecting from a new device meant first adding its public key to the server, which could only be done with a device that could already log on there. Allowing other peoples to contribute encountered the same issue. Overall it wasn't very convenient, so I decided to move to a more complete solution, even before testing alternatives to Gitweb like CGit.

GitLab

GitLab is a software I am deeply familiar with, as I use it daily at work. It is the most widely used Forge outside of GitHub, with many small and large companies using a dedicated instance of the software. GitLab offers a very large set of features, including advanced CI/CD tools, multiple kinds of package repositories, vulnerability analysers, planning tools and much more. GitLab is not entirely open source, it is an open core project, and as a result, some of the more advanced features are kept for paying customers. Those features include AI integration, code quality reports, auditing tools, and many dashboards tailored to large organization/projects. Overall, GitLab is often considered the most powerful forge available, and can be considered the reference for self-managed instances.
All those features come at a cost though: GitLab requires significant server resources to run. Note that with some tweaking and sacrifices, GitLab can be made to run on a Raspberry PI 4[1], so it isn't that bad.

Gogs, Gitea and Forgejo

Forgejo is a recent (2022) fork of Gitea, while Gitea was itself forked from Gogs in 2016. While Gitea and Forgejo are both developed by a team, Gogs almost entirely relies on one developer. As a result Gogs lags well behind in terms of functionalities, only focussing on the basics of a Forge: A good user interface with permissions management, online document editor, repository issues, pull requests and wiki, etc. Gitea and Forgejo add to this feature set with CI/CD tools compatible with GitHub actions, better activity tracking, package repositories, localization tool, and more advanced features overall. Gogs includes supports for various plugins to add extra functionalities, Gitea and Forgejo have kept that feature.
All three platforms are known for how lightweight they are, especially Gogs thanks to its smaller feature set. On a more personal note, those projects are written in Go, which is one of my favourite languages to work with. It opens the path for me to contribute to those projects.

GitBucket

GitBucket is a lightweight Forge, that is in many ways comparable to Gogs: it offers all the basic features such as issue management, pull requests, an online document editor, and wiki, all in a simple and intuitive UI. GitBucket focuses on providing API compatibility with GitHub, which allows for great integration. For advanced features, it relies on community plugins.

OneDev

OneDev presents itself as a direct concurrent to GitLab, offering an all-in-one package that can handle both the basics of a Forge software, and the more advanced parts like package repositories, CI/CD, issue boards, third party AI integration and much more. Just like GitLab, OneDev is an Open Core project, meaning some of its features are only available to paying customers. Most notable among those are the time keeping features and the vulnerability analyser.
OneDev stands out by its UI, offering a new and different take on what a Git Frontend looks like. OneDev also offers a slightly more advanced online document editors than the alternatives. The project is not quite as mature as GitLab yet, but it already offers most of its features, and looks very promising.

In the end, OneDev is the solution I chose to use, not because I need every single one of its functionalities, GitBucket or Gogs would have already been more than enough, but because OneDev is the only option that doesn't feel like a GitHub clone. I was actually excited to try it!
My experience with OneDev is very positive, it runs reliably, does all I ask from it, and I had a lot of fun trying all the features I have access to, even those I don't actually need! Everything works fine! The documentation sucks though.

References

  1. GitLab documentation, accessed on 04/06/2026

Credits

All vectors illustrations found in this page are provides by Vector Juice on Magnific.com