Two parallel rods merging into one, with a cyan ring where they join.

Self-hosted Git server: which GitHub alternative to pick

Three forges let you host your repositories away from GitHub, and all of them come from the same line of forks. Gitea installs as a single binary and ships CI in the GitHub Actions format plus a package registry; a company, Gitea Ltd, shares control of the project and keeps SAML for a paid edition. Gogs, the forge Gitea was forked from, sticks to repositories, issues and pull requests, with no CI and no package registry, and most of its development comes from one maintainer. Codeberg is nothing to install: a Berlin non-profit runs Forgejo, a fork of Gitea, free of charge, but only for projects under a free licence.

Gogs, Gitea, Forgejo: the line of forks and who runs each one

Gogs is the original forge, MIT-licensed since 2014. Its development leans heavily on one person: over the past twelve months, the unknwon account authored 157 of the 225 commits on the main branch.

Gitea started as a fork of Gogs and kept the MIT licence, and its docs say almost all of the code has changed since. On 24 October 2022, a project blog post announced Gitea Limited, to which Lunny Xiao, one of the owners, had transferred the domains and the trademark. Since early 2023 a six-seat Technical Oversight Committee has run the project: three members elected for a year from maintainers with no tie to the company, three appointed by the company, and the elected seats count "slightly more" in a vote. Development happens on GitHub, in the go-gitea/gitea repository.

Forgejo came out of that transfer, in October 2022. Its website says the domains and trademark went to a for-profit company without the community's knowledge or approval, and the fork became a hard fork in early 2024. Codeberg e.V., the non-profit behind Codeberg, has custody of Forgejo's domains, while Forgejo keeps a governance of its own. Forgejo changed licence along the way, too: MIT up to v8.0, GPL v3 or later from v9.0.

CI, package registries and code review in each forge

Gitea Actions, on by default since Gitea 1.21, reads GitHub Actions workflow syntax. Jobs run on Gitea Runner, a separate binary you install and register with the instance, and the docs recommend Docker to isolate them. Gogs has no CI; its README points to a Jenkins plugin. Codeberg gives you two routes. Woodpecker CI is granted on request after a volunteer reviews it, builds for linux/amd64 only, and its docs warn that it "might break at any time and for an undefined period". Forgejo Actions runs on your own runners, or on runners Codeberg hosts in a limited open alpha.

Package registries split the same way. Gitea handles 23 formats, including npm, PyPI, Maven, Cargo, Go, Helm, Debian, RPM and container images. Gogs has none. Codeberg has one, counted against a quota: past 1.5 GiB of packages, LFS files and attachments, you have to ask for more.

Code review is where Gogs falls behind. The comparison table in Gitea's docs credits it with inline comments and approvals on pull requests. Forgejo, and therefore Codeberg, puts a comment button next to each changed line and a Review button to approve or request changes, and can request reviewers from a CODEOWNERS file. On Gogs, the request for line comments on pull requests has been open since September 2015.

Sign-in differs as well. Gitea can act as an OAuth 2.0 provider for other apps, pulls accounts from LDAP or Active Directory and supports OpenID Connect, but its free version has no SAML. Gogs accepts LDAP, SMTP, PAM, a reverse-proxy header and GitHub accounts; neither its README nor its authentication page mentions OpenID Connect. The comparison of self-hosted SSO tools covers the OpenID Connect providers Gitea can hand sign-in over to.

What each forge needs to run

Read from the repositories and documentation on 7 October 2026.

ForgeLicenceWhat you runCIPackagesLatest release
GiteaMIT; paid Enterprise edition on the sidea Go binary or Docker image, Git 2.25 or later; SQLite, PostgreSQL, MySQL, MariaDB or SQL Server; 2 cores and 1 GB for a small teamGitea Actions, separate runner23 formats28.1.0, 6 Oct 2026
GogsMITa Go binary, Git 1.8.3 or later; SQLite, MySQL, MariaDB or PostgreSQL; 2 cores and 512 MB for a teamnone, Jenkins pluginnone0.14.3, 7 Jun 2026
CodebergGPL-3.0-or-later (Forgejo)nothing: hosted service, free accountWoodpecker on request, Forgejo Actions1.5 GiB with LFS and attachments, more on requestForgejo v16.0 (codeberg-16 branch), patches from 17 Sep 2026

SQLite is built into Gitea, but the docs warn that it does not scale: an instance expected to grow needs PostgreSQL 12, MySQL 8.0, MariaDB 10.4 or SQL Server 2012 SP4 at minimum. Gogs makes do with less: its README says a Raspberry Pi or a $5 DigitalOcean droplet is enough to get started. Gogs upgrades go one minor version at a time, so a 0.12 instance has to pass through 0.13 before 0.14. Its main branch, which is heading for 0.15, removes the /install web installer and makes a working custom/conf/app.ini mandatory.

On releases, Gitea shipped eighteen stable versions in twelve months, up to 28.1.0 on 6 October 2026. Its 28.0.0 would have been 1.28.0: the project dropped the "1." prefix, and that release turns off open registration by default and deletes finished Actions runs after 400 days. Gogs went from 0.13.0 in February 2023 to 0.13.1 almost two years later, in December 2024, then put out five releases between January and June 2026; the latest, 0.14.3, fixes 22 vulnerabilities, one of them remote command execution through a crafted branch name. Forgejo released v15.0 in April 2026 and v16.0 in July, and maintains both branches: v16.0.5 and v15.0.9 shipped on the same day, 17 September 2026. Codeberg doesn't deploy those releases as they are: production runs on its own Forgejo branch, with commits specific to Codeberg.

Running your own forge or handing your repositories to Codeberg

Codeberg takes the operations work off your hands: the association runs Forgejo on its own hardware in a rented facility in Berlin and applies upgrades itself. In return it sets terms that a forge on your own server never would. Every public repository needs a free licence, approved by the FSF or the OSI, or a Creative Commons licence without the NC and ND variants. Private space is a stopgap: up to 100 MB for free software contributors, and no personal cloud or media storage. The terms also ban projects that mostly consist of code written by generative AI tools, along with cryptocurrency projects. The FAQ puts it plainly: if you don't contribute to any free software project, "Codeberg is unfortunately not the right place for you."

Money doesn't buy an exception to those rules. Going past 750 MiB of Git storage takes a request, and the FAQ states: "We do not accept any payments for exceptions to our rules." The terms make no promise about the availability of hosted content and leave backups to the user.

A forge on your own server follows whatever rules you set: private code, a proprietary licence or AI-written code all have a place there. The flip side is that upgrades and backups are your job. Gitea offers a middle ground, Gitea Cloud, which gives each customer a dedicated instance in the region they pick, with no published price; gitea.com is free, with a limited number of repositories.

Leaving GitHub: repositories, issues and workflows

Gitea imports a GitHub repository through a built-in migration form; to bring the issues and pull requests along too, it needs at least the username of the source account. It can also keep mirrors in either direction: pull a repository that stays on GitHub at regular intervals, or push its own copy there. Gitea workflows use GitHub Actions syntax, and an action referenced without a host, such as actions/checkout@v4, is downloaded from GitHub unless configured otherwise. The docs list where it departs from GitHub: environment and annotations are ignored, and the job token has narrower permissions.

Gogs imports or mirrors a repository and its wiki from another code host; its README mentions neither issues nor pull requests.

Codeberg's migration tool brings over the issues, labels, wiki, releases and milestones of a GitHub repository, as long as you give it an access token created on GitHub. Pull mirrors from other forges are disabled there, and the FAQ suggests pushing with git push --mirror instead. A migrated copy with no unique contributions that sits inactive for more than a month can be removed, after a notice that leaves 90 days to ask for it to be kept. On CI, Forgejo's docs state that its Actions are designed to be familiar to GitHub Actions users, not to be compatible with them.

Licences and paid plans

Gogs and Gitea are both MIT. Gogs has no paid plan and no hosted service; its README points to third-party hosting such as Cloudron, YunoHost and alwaysdata. Gitea keeps part of its features for Gitea Enterprise, a self-hosted edition billed per user per month: SAML, branch protection rules inherited across an organisation, dependency scanning, an IP allowlist, mandatory two-factor authentication and autoscaling runners on Kubernetes. The edition's page still lists the audit log, which reached the free version in 28.0.0. Forgejo's website calls Gitea "open core".

Forgejo, the software behind Codeberg, has been under GPL v3 or later since v9.0, a copyleft licence: a modified version you redistribute stays under the GPL. Codeberg sells nothing. The association lives on donations and on the fees of more than 1,700 members, who elect its presidium and board, and you don't have to join to use the service.