Gitea and Forgejo do the same job: a self-hosted forge with repositories, pull requests, issues, a package registry, and GitHub-compatible CI, from one small binary. If you’ve read the Gitea page, you already know the shape of this one.

What’s different is who owns it and where it’s going. Forgejo is published by Codeberg e.V., a German non-profit, under GPL — so the project can’t be relicensed by a company, and improvements have to come back. It started as a soft fork of Gitea in late 2022 over Gitea’s move to a company structure, and became a hard fork in 2024.

Run one

  docker run -d --name forgejo -p 3000:3000 -p 222:22 \
  -v forgejo-data:/data \
  -e FORGEJO__database__DB_TYPE=sqlite3 \
  codeberg.org/forgejo/forgejo:latest
  

Same install screen, same app.ini, same FORGEJO__section__KEY environment variables. Releases are quarterly with an LTS line and monthly security patches, which is a friendlier cadence than it sounds — you can stay on LTS and upgrade deliberately.

CI is Forgejo Actions, the same GitHub Actions-compatible runner:

  # .forgejo/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
  test:
    runs-on: docker
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test
  

Federation, the part nobody else is building

The ambition that makes Forgejo more than a licence decision: forge federation over ActivityPub, using the ForgeFed vocabulary. The idea is that an account on one instance can open an issue or a pull request on another — the fediverse model applied to code hosting, so self-hosting stops meaning your project is invisible.

Recent releases ship working pieces of this, and it’s the right thing to be excited about and the wrong thing to depend on today. Treat it as opt-in and experimental; run your instance as if it were standalone, and enjoy federation when it matures.

Codeberg, if you’d rather not host anything

Codeberg is the non-profit’s own public instance: free hosting for free and open-source projects, no ads, no tracking, funded by membership. It runs Forgejo, so it’s also the easiest way to try the software before installing it — and for a small FOSS project it’s a legitimate alternative to GitHub rather than a compromise.

The trade is honest: a smaller audience than GitHub, and none of the network effects that come with it. Mirroring to GitHub for discovery while developing on Codeberg is a common arrangement.

Choosing between the two forks

ForgejoGitea
LicenceGPL from v9MIT, plus a commercial edition
StewardCodeberg e.V., a non-profitGitea Ltd and the community
CIForgejo ActionsGitea Actions
Distinctive workActivityPub federationEnterprise features, commercial support
Hosted optionCodeberg, free for FOSSGitea Cloud

Day to day they feel nearly identical, so pick on the two things that actually differ: governance and licence. Copyleft and a non-profit steward point to Forgejo; the MIT licence — which matters if you want to build a closed product on top — or a support contract point to Gitea.

Migration runs one way. Gitea → Forgejo is documented and supported, often little more than swapping the image and letting migrations run. Going back is not a supported path, and after the 2024 hard fork the two are no longer drop-in interchangeable. Take a backup, test the swap on a copy, and treat the decision as a decision.

Running it in earnest

The operational advice is the same as its sibling’s, and worth repeating because it’s what people get wrong: back up /data and the database together so issues and pull request discussions survive; put TLS in front and set ROOT_URL correctly or clone URLs come out wrong; and read the upgrade notes before a major version, because migrations run on start.

Next

The forge at the other end of the scale → GitLab

Last updated 25 Aug 2026, 00:00 UTC. history